《红外遥控六足爬虫机器人设计(单片机).pdf》由会员分享,可在线阅读,更多相关《红外遥控六足爬虫机器人设计(单片机).pdf(23页珍藏版)》请在三一文库上搜索。
1、六足爬虫机器人设计 设计人:李海鹰 日期: 2004年 9 月 30 日 目录 前言 . 3 (一) 、机器人的大脑. . 3 (二) 、机器人的眼睛耳朵. . 3 (三) 、机器人的腿驱动器与驱动轮 4 (四) 、机器人的手臂机械传动专制 5 (五) 、机器人的心脏电池. . 5 一、 AT89S51单片机简介. . 6 (一) 、AT89S51主要功能列举如下: 6 (二) 、AT89S51各引脚功能介绍: 6 二、控制系统电路图. 9 三、微型伺服马达原理与控制. . 10 (一) 、微型伺服马达内部结构. 10 (二) 、微行伺服马达的工作原理. 10 (三) 、伺服马达的控制. 11
2、 (四) 、选用的伺服马达. 11 四、红外遥控. . 12 (一) 、 红外遥控系统. . 12 (二) 、 遥控发射器及其编码. . 12 (三) 、红外接收模块. 13 (四) 、红外解码程序设计. 13 五、控制程序. . 14 六、六足爬虫机器人结构设计图. . 21 前言 今年年初,学校为参加中央电视台举办的第三届全国大学生机器人电视大 赛,组建了机器人制作小组。我积极参加,有幸成为了其中的一员。因为我们以 前没有参加过类似的比赛, 也没有制作机器人的经验。 可以说我们什么都是从零 开始,边学习边制作。 通过这半年多的制作过程, 我从中学到了很多书本上学不 到的东西,也得到了很好的
3、学习与锻炼的机会。 最初,我们组建了机器人制作实验室。 到五金机电市场购买了必要的工具和 一些制作材料。然后开始制作实验机器人的身体框架。 实验机器人的框架我们是使用轻型万能角钢制作的,这种角钢的两侧都有间 隔均匀的孔槽, 可以很方便的用螺栓进行连接。用不同长度的角钢组合后, 就可 以得到不同大小的立方体和长方体及多边形。机器人身体的框架就搭建好了。 在 它的上面将装上: 机器人的大脑可编程控制器、机器人的眼睛耳朵传感 器、机器人的腿驱动轮、 机器人的手臂机械传动专制、机器人的心脏 电池之所以使用轻型万能角钢,主要是因为是在制作试验机型, 而轻型万 能角钢安装拆卸方便和便于修改长度,调整设计。
4、 实验机器人定型后, 就照其尺寸用不锈钢方管焊接制作机器人的身体。再在 上面进行打孔等工作, 后就可以将机器人的其它部分安装上去。这样一个机器人 就制作好了。 下面我介绍一下机器人的基本组成部分: (一) 、机器人的大脑 它可以有很多叫法,可以叫做:可编程控制器、微控制器,微处理器,处理 器或者计算器等, 不过这都不要紧, 通常微处理器是指一块芯片,而其它的是一 整套控制器, 包括微处理器和一些别的元件。 任何一个机器人大脑就必须要有这 块芯片,不然就称不上机器人了。在选择微控制器的时候,主要要考虑:处理器 的速度,要实现的功能,ROM 和 RAM 的大小, I/O 端口类型和数量,编程语言以
5、 及功耗等。 其主要类型有:单片机、 PLC 、工控机、 PC机等。 单有这些硬件是不够的,机器人的大脑还无法运行。只有在程序的控制下, 它才能按我们的要求去工作。 可以说程序就是机器人的灵魂了。而程序是由编程 语言所编写的。 编程语言是一个控制器能够接受的语言类型,一般有 C语言,汇编语言或者 basic 语言等,这些通常能被高级一点的控制器直接执行,因为在高级控制器里 面内置了编译器能够直接把一些高级语言翻译成机器码。微处理器将执行这些机 器码,并对机器人进行控制。 (二) 、机器人的眼睛耳朵 传感器,是机器人的感觉器官, 是机器人和现实世界之间的纽带,使机器人 能感知周围的环境情况。其主
6、要有:光电传感器、红外传感器、力传感器、超声 波传感器、位置和姿态传感器等等。下面我将就几种常用传感器进行介绍: 1、光电传感器:光电传感器的原理是光电效应。 其主要用途是颜色识别 (机 器人就可以沿着地上的线条行进了)和光电编码等。 2、红外传感器:红外传感器是用来测量距离和感知周围情况的。因为发射 出去的红外信号在一定距离内遇到物体就会反射回来。通过发送红外线信号, 并 接收反射回来的信号, 机器人就可以感知前方或身体周围的情况,做出相应的调 整(如:倒退或绕行等) 。 3、力传感器:力传感器是用来检测碰撞或者接触信号的,比如机械手的应 用,当你放一个东西到机械手的时候,机械手自动抓住它,
7、 它就需要力传感器检 测东西抓的紧不紧。 典型的力传感器是微动开关和压敏传感器。微动开关其实就 是一个小开关, 通过调节开关上的杠杆长短,能够调节触动开关的力的大小。用 来做碰撞检测这是最好不过了。 但是这种传感器必须事先确定好力的阀值,也就 是说只能实现硬件控制(开还控制) 。而压敏传感器是能根据受力大小,自动调 节输出电压或者电流,从而可以实现软件控制(闭环控制)。 4、超声波传感器:超声波传感器是从蝙蝠那里学来的,通过把发射出的信 号与接收到的信号进行对比,就可以测定周围是否有障碍物,及障碍物的距离, 也属于距离探测传感器, 能提供交远的探测范围, 而且还能提供在一个范围内的 探测而不是
8、一条线的探测。 5、位置和姿态传感器:机器人在移动或者动作的时候必须时时刻刻知道自 己的姿态动作, 否则就会产生控制中的一个开环问题,没有反馈, 无法获知运动 是否正确。位置传感器和姿态传感器就是用来解决这个问题的。常用的有光电 编码器,由于机器人的执行机构一般是电机驱动,通过计算电机转的圈数, 可以 得出电机带动部件的大致位置, 编码器就是这样一种传感器, 它一般和电机轴或 者转动部件直接连接, 电机或者转动部件转了多少圈或者角度能够通过编码器读 出,控制软件再根据读出数据进行位置估计计算。还有一种是陀螺仪, 这是利用 陀螺原理制作的传感器, 主要可以测得移动机器人的移动加速度,转过的角度等
9、 信息。 (三) 、机器人的腿驱动器与驱动轮 驱动器就是驱动机器人的动的部件。最常用的是电机了。 当然还有液压, 气 动等别的驱动方式。 一个机器人最主要的控制量就是控制机器人的移动,无论是 自身的移动还是手臂等关节的移动, 所以机器人驱动器中最根本和本质的问题就 是控制电机, 控制电机转的圈数, 就可以控制机器人移动的距离和方向,机械手 臂的弯曲的程度或者移动的距离等。所以,第一个要解决的问题就是如何让电机 能根据自己的意图转动。一般来说,有专门的控制卡和控制芯片来进行控制的。 有了这些控制卡和芯片, 我们所要做的就是把微控制器和这些连接起来,然后就 可以用程序来控制电机了。 第二个问题是控
10、制电机的速度, 在机器人上的实际表 现就是机器人或者手臂的实际运动速度了,机器人走的快慢全靠电机的转速,这 样,我们就要求控制卡对电机有速度控制。电机目前常用的有两种, 步进电机和 直流电机。下面我将就这两种电机进行介绍: 1、直流电机:这是最最普通的电机了。直流电机最大的问题是你没法精确 控制电机转的圈数, 也就前面所说的位置控制。 你必须加上一个编码盘, 来进行 反馈,来获得实际转的圈数。 但是直流电机的速度控制相对就比较简单,用一种 叫 PWM(脉宽调速)的调速方法可以很轻松的调节电机速度。现在也有很多控制 芯片带调速功能的。 选购时要考虑的参数是电机的输出力矩,电机的功率, 电机 的最
11、高转速。 2、步进电机:看名字就知道了,它是一步一步前进的。也就是说,它可以 一个角度一个角度旋转, 不象直流电机, 你可以很轻松的调节步进电机的转角位 置,如果你发一个转 10 圈的指令, 步进电机就不会转11 圈,但是如果是直流电 机,由于惯性作用,它可能转11 圈半。步进电机的调速是通过控制电机的频率 来获得的。一般控制信号频率越高,电机转的越快,频率越低,转的越慢。选购 时要考虑的参数是电机的输出力矩,电机的功率,每个脉冲电机的最小转角。 还有就是关于输出的动力, 要说明一下: 一般情况下, 电机都没法直接带动 轮子或者手臂, 因为速度过高力矩不够大, 所以我们需要加上一个减速箱来增加
12、 电机的输出力矩,但是代价是电机速度的减小,比如一个1:250 的齿轮箱,会 让你电机的输出力矩增大250 倍,但是速度只有原来的1/250 了。首先计算出机 器人所需要的速度与力矩大小,然后根据速度与力矩去选择电机与减速器。 (四) 、机器人的手臂机械传动专制 机械传动专制就是,由电机驱动的一些杆件和机构(如:凸轮机构、螺杆机 构等) ,用以实现机械手臂的上升、下降、伸缩、弯曲等动作。通常运用的机构 有四杆机构、凸轮机构、螺杆机构、摇臂等。 (五) 、机器人的心脏电池 电池为机器人的控制系统与驱动系统提供能源供应。主要有:电瓶及可充电 电池、电池。 前面介绍了机器人的一些基本知识,但这是远远
13、不够的。 机器人学科, 是在 多学科基础上发展起来的综合性技术。机器人技术涉及机械、电子、计算机、语 言学和人工智能等许多学科。现在机器人已经应用在人类社会生活的各个领域, 发挥着越来越重要的影响。 我利用暑假的时间设计了一个六足爬虫机器人,用日立(HITACHI )的录像 机遥控器来对它进行控制。 基本原理是: 遥控器发出红外学号, 机器人通过红外 接收器接收倒红外信号后, 对信号进行解码, 并以存储的代码进行比较, 确定指 令的含义,后可以实现前进、后退、左转、右转及发声等功能。控制系统我使用 的是 AT89S51单片机,编程语言使用的是汇编语言, 动力系统使用的是微型伺服 马达,能源系统
14、使用的是9V电池。下面我将就具体设计进行介绍。 一、 AT89S51单片机简介 AT89S51 为 ATMEL 所生产的可电气烧录清洗的 8051 相容单芯片,其内部 程序代码容量为 4KB (一) 、AT89S51主要功能列举如下: 1、为一般控制应用的 8 位单芯片 2、晶片内部具时钟振荡器(传统最高工作频率可至 12MHz ) 3、内部程式存储器( ROM )为 4KB 4、内部数据存储器( RAM )为 128B 5、外部程序存储器可扩充至 64KB 6、外部数据存储器可扩充至 64KB 7、32 条双向输入输出线,且每条均可以单独做 I/O 的控制 8、5 个中断向量源 9、2 组独
15、立的 16 位定时器 10、1 个全多工串行通信端口 11、8751 及 8752 单芯片具有数据保密的功能 12、单芯片提供位逻辑运算指令 (二) 、AT89S51各引脚功能介绍: VCC : AT89S51 电源正端输入,接 +5V。 VSS : 电源地端。 XTAL1 : 单芯片系统时钟的反相放大器输入 端。 XTAL2 : 系统时钟的反相放大器输出端,一 般在设计上只要在 XTAL1 和 XTAL2 上 接上一只石英振荡晶体系统就可以动作 了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避 免噪声干扰而死机。 RESET : AT89S51的重置引脚,高电平动
16、作, 当要对晶片重置时,只要对此引脚电平 提升至高电平并保持两个机器周期以上 的时间,AT89S51便能完成系统重置的各 项动作,使得内部特殊功能寄存器之内 容均被设成已知状态, 并且至地址 0000H AT89S51 处开始读入程序代码而执行程序。 EA/Vpp: “EA“为英文 “External Access“的缩写,表示存取外部程序代码之意,低电 平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码 (存于外部 EPROM 中)来执行程序。因此在8031及 8032 中,EA引脚必须接低电平,因为其 内部无程序存储器空间。 如果是使用 8751 内部程序空间时, 此引脚要接成高
17、电 平。此外,在将程序代码烧录至8751 内部 EPROM 时,可以利用此引脚来输入21V 的烧录高压( Vpp) 。 ALE/PROG : ALE 是英文 “Address Latch Enable“的缩写,表示地址锁存器启用信号。 AT89S51可以利用这支引脚来触发外部的8 位锁存器(如74LS373 ) ,将端口 0 的地址总线 (A0A7)锁进锁存器中, 因为 AT89S51是以多工的方式送出地址及 数据。平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6 ,因此可 以用来驱动其他周边晶片的时基输入。此外在烧录8751 程序代码时,此引脚会 被当成程序规划的特殊功能来使用。
18、 PSEN : 此为“Program Store Enable“的缩写,其意为程序储存启用,当8051 被设 成为读取外部程序代码工作模式时(EA=0 ) ,会送出此信号以便取得程序代码, 通常这支脚是接到EPROM 的 OE脚。AT89S51可以利用 PSEN 及 RD引脚分别启用 存在外部的 RAM 与 EPROM,使得数据存储器与程序存储器可以合并在一起而共用 64K的定址范围。 PORT0 (P0.0P0.7) : 端口 0 是一个 8 位宽的开路汲极( Open Drain )双向输出入端口,共有8 个位, P0.0 表示位 0,P0.1 表示位 1,依此类推。其他三个I/O 端口(
19、 P1、P2、 P3)则不具有此电路组态,而是内部有一提升电路,P0 在当做 I/O 用时可以推 动 8 个 LS的 TTL负载。如果当 EA引脚为低电平时 (即取用外部程序代码或数据 存储器) ,P0 就以多工方式提供地址总线(A0A7)及数据总线( D0D7 ) 。设 计者必须外加一锁存器将端口0 送出的地址栓锁住成为A0A7,再配合端口2 所送出的 A8A15合成一完整的 16 位地址总线,而定址到64K的外部存储器空 间。 PORT2 (P2.0P2.7) : 端口 2 是具有内部提升电路的双向I/O 端口,每一个引脚可以推动4 个 LS 的 TTL负载, 若将端口 2 的输出设为高电
20、平时, 此端口便能当成输入端口来使用。 P2除了当做一般 I/O 端口使用外,若是在AT89S51扩充外接程序存储器或数据 存储器时,也提供地址总线的高字节A8A15,这个时候 P2 便不能当做 I/O 来 使用了。 PORT1 (P1.0P1.7) : 端口 1 也是具有内部提升电路的双向I/O 端口,其输出缓冲器可以推动4 个 LS TTL 负载,同样地若将端口1 的输出设为高电平,便是由此端口来输入数 据。如果是使用 8052或是 8032的话,P1.0 又当做定时器 2 的外部脉冲输入脚, 而 P1.1 可以有 T2EX功能,可以做外部中断输入的触发脚位。 PORT3 (P3.0P3.
21、7) : 端口 3 也具有内部提升电路的双向I/O 端口,其输出缓冲器可以推动4 个 TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、 外部中断控制、 计时计数控制及外部数据存储器内容的读取或写入控制等功能。 其引脚分配如下: P3.0:RXD ,串行通信输入。 P3.1:TXD ,串行通信输出。 P3.2:INT0,外部中断 0 输入。 P3.3:INT1,外部中断 1 输入。 P3.4:T0,计时计数器 0 输入。 P3.5:T1,计时计数器 1 输入。 P3.6:WR :外部数据存储器的写入信号。 P3.7:RD ,外部数据存储器的读取信号。 二、控制系统电路图 控制系统电路
22、图 三、微型伺服马达原理与控制 (一) 、微型伺服马达内部结构 一个微型伺服马达内部包括了一个小型直流马达;一组变速齿轮组; 一个反 馈可调电位器;及一块电子控制板。 其中,高速转动的直流马达提供了原始动力, 带动变速(减速)齿轮组,使之产生高扭力的输出,齿轮组的变速比愈大,伺服 马达的输出扭力也愈大,也就是说越能承受更大的重量,但转动的速度也愈低。 (二) 、微行伺服马达的工作原理 一个微型伺服马达是一个典型闭环反馈系统,其原理可由下图表示: 减速齿轮组由马达驱动, 其终端(输出端) 带动一个线性的比例电位器作位 置检测,该电位器把转角坐标转换为一比例电压反馈给控制线路板,控制线路板 将其与
23、输入的控制脉冲信号比较, 产生纠正脉冲,并驱动马达正向或反向地转动, 使齿轮组的输出位置与期望值相符,令纠正脉冲趋于为0,从而达到使伺服马达 精确定位的目的。 微型伺服马达内部结构图 微行伺服马达工作原理图 (三) 、伺服马达的控制 标准的微型伺服马达有三条控制线,分别为:电源、地及控制。电源线与地 线用于提供内部的直流马达及控制线路所需的能源,电压通常介于 4V6V之间, 该电源应尽可能与处理系统的电源隔离(因为伺服马达会产生噪音)。甚至小伺 服马达在重负载时也会拉低放大器的电压,所以整个系统的电源供应的比例必须 合理。 输入一个周期性的正向脉冲信号, 这个周期性脉冲信号的高电平时间通常在
24、1ms 2ms之间,而低电平时间应在5ms到 20ms之间,并不很严格,下表表示出 一个典型的20ms 周期性脉冲的正脉冲宽度与微型伺服马达的输出臂位置的关 系: (四) 、选用的伺服马达 我选用的伺服马达为TowPro的,型号为 SG303 。其主要技术参数如下: 转速: 0.23 秒60度。 力矩: 3.2kg cm 。 尺寸: 40.4mm 19.8mm 36mm 。 重量: 37.2g。 5V电源供电。 控制周期脉冲宽度为20ms 。送出不同的正脉冲宽度是,就可以得到不同的 控制效果。控制正脉冲宽度如下: 正脉冲宽度为 0.3ms 时,伺服马达反转。 正脉冲宽度为 2.5ms 时,伺服
25、马达正转。 正脉冲宽度为 1.4ms 时,伺服马达回到中点。 四、红外遥控 家中许多的电器产品都有遥控的功能,例如电视机、录像机、VCD 、空调等 家电产品,它们都是以红外遥控的方式进行遥控。 (一) 、 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/ 解码专用集成电路 芯片来进行控制操作,如图1 所示。发射部分包括键盘矩阵、编码调制、LED红 外发送器;接收部分包括光、电转换放大器、解调、解码电路。 (二) 、 遥控发射器及其编码 遥控发射器专用芯片很多,根 据编码格式可以分成两大类,这里 我们以运用比较广泛,解码比较容 易的一类来加以说明,现以日本 NEC 的 uPD61
26、21G 组成发射电路为例说 明编码原理。当发射器按键按下后, 即有遥控码发出,所按的键不同遥 控编码也不同。这种遥控码具有以 下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔 0.56ms、周期为 1.125ms 的组合表示二进制的“ 0”;以脉宽为 0.565ms、间隔 1.685ms、周期为 2.25ms 的组合表示二进制的“ 1”,其波形如图2 所示。 上述“0”和“1”组成的 32位二进制码经 38kHz的载频进行二次调制以提 高发射效率, 达到降低电源功耗的目的。 然后再通过红外发射二极管产生红外线 向空间发射。 遥控编码是连续的32位二进制码组, 其中前 16 位为用户
27、识别码, 能区别不 同的电器设备, 防止不同机种遥控码互相干扰。 该芯片的用户识别码固定为十六 进制 01H ;后 16 位为 8 位操作码(功能码)及其反码。UPD6121G 最多额 128 种 不同组合的编码,如图3 所示。 遥控器在按键按下后,周期性地发出同一种32 位二进制码,周期约为 108ms 。 一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同, 大约 在 4563ms之间,图 4 为发射波形图。 (三)、红外接收模块 左图为一常用的红外接收模 块。其内部含有高频的滤波电路, 专门用来滤除红外线合成信号的载 波信号(38KH ) ,并送出接收到的信 号。当红外线
28、合成信号进入红外接 收模块,在其输出端便可以得到原 先发射器发出的数字编码,只要经 过单片机解码程序进行解码,便可 以得知按下了哪一个按键,而做出 相应的控制处理,完成红外遥控的 动作。 (四) 、红外解码程序设计 红外解码程序主要工作为等待红外线信号出现,并跳过引导信号, 开始收集 连续 32 位的表面数据,存入内存的连续空间。位信号解码的原则是:以判断各 个位的波宽信号来决定高低信号。位解码原理如下: 解码为 0:低电平的宽度 0.56ms+高电平的宽度 0.56ms。 解码为 1:低电平的宽度 1.68ms+高电平的宽度 0.56ms。 程序中必须设计一精确的0.1ms 延时时间作为基础
29、时间, 以计数实际的波形 宽度,若读值为 5 表示波形宽度为 0.5ms,若读值为 16 表示波形宽度为1.6ms, 以此类推。高电平的宽度1.12ms 为固定,因此可以直接判断低电平的宽度的计 数值 5 或时 16,来确定编码为 0 或是 1。程序中可以减法指令SUBB 来完成判断, 指令“ SUBB A,R2 ”中若 R2为计数值, A寄存器设为 8,就可如下: 当“8R2 ”有产生借位,借位标志C=1 ,表示编码为 1。 当“8R2 ”无产生借位,借位标志C=0 ,表示编码为 0。 将借位标志 C经过右移指令“ RRC A”转入 A寄存器中,再经由R0寄存器 间接寻址存入内存中。 详细解
30、码程序请参看 “红外遥控爬虫机器人ASM 程序”中的“红外解码子程 序” 。 红外接收模块 五、控制程序 ; 红外遥控爬虫机器人ASM程序 ;- - HOME EQU 14 ;伺服马达回到中点时间常数 BACK EQU 3 ;伺服马达反转时间常数 FOR EQU 25 ;伺服马达正转时间常数 ; - - ;遥控器按键16 比较码 CODE_K1 EQU 19H ;机器人前进比较码 CODE_K2 EQU 18H ;机器人后退比较码 CODE_K3 EQU 0AH ;机器人左转比较码 CODE_K4 EQU 09H ;机器人右转比较码 CODE_K5 EQU 0BH ;机器人回到中点比较码 CO
31、DE_K6 EQU 14H ;机器人行走启动进比较码 ; - - IRCOM EQU 30H ;红外线信号解码数据放置变量起始地址 COM EQU 32H ;比较第 3 字节变量 ; - - IRIN EQU P3.2 ;红外线 IR 信号输入位引脚定义 WLED EQU P3.7 ;发光二极管引脚定义 SPK EQU P3.4 ;压电喇叭引脚定义 DJZ EQU P1.0 ;中间伺服马达引脚定义 DJL EQU P1.1 ;左侧伺服马达引脚定义 DJR EQU P1.2 ;右侧伺服马达引脚定义 ; - - ORG 0H ;程序代码由地址0 开始执行 JMP BEGIN ;进入主程序 ; -
32、- BEGIN: CLR DJZ ;关闭中间伺服马达 CLR DJL ;关闭左侧伺服马达 CLR DJR ;关闭右侧伺服马达 CLR SPK ;关闭压电喇叭 CALL LED_BL ;发光二极管闪烁,表示程序开始执行 CALL BZ ;压电喇叭发出嘀的一声 CALL GO_HOME ;全部伺服马达回到中点 CALL LED_BL ;发光二极管闪烁,表示机器人准备完毕 CALL BZ ;压电喇叭发出嘀的一声 CALL QD ;运行行走启动子程序,摆好行走姿态 SETB IRIN ;红外线信号IR 输入位设为高电平,准备接收红外信号 LOOP: MOV R0,#IRCOM ;设置 IR 解码起始地
33、址 CALL IR_IN ;进行 IR 解码 CALL OP ;进行解码比较,并控制机器人动作 JMP LOOP ;继续循环执行 ; - - DELAY:MOV R6,#50 ;10ms延时子程序 D1: MOV R7,#99 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET ; - - LED_BL: MOV R1,#4 ;发光二极管闪烁子程序 LE1: CPL WLED ;发光二极管反向 MOV R5,#10 CALL DELAY ;进行 100ms延时 DJNZ R1,LE1 RET ; - - BZ: MOV R6,#0 ;压电喇叭发声子程序 B1: SET
34、B SPK ;压电喇叭得电,开始发声 DJNZ R6,B1 MOV R5,#5 CALL DELAY ;进行 50ms延时 CLR SPK ;关闭压电喇叭 RET ; - - DEL: ;0.1ms 延时子程序 MOV R5,#1 DELAY1: MOV R6,#2 E1: MOV R7,#22 E2: DJNZ R7,E2 DJNZ R6,E1 DJNZ R5,DELAY1 RET ; - - IR_IN: ;红外解码子程序 I1: JNB IRIN,I2 ;等待红外IR 信号出现 JMP I1 I2: MOV R4,#20 ;发现红外IR 信号,延时一下 I20: CALL DEL DJN
35、Z R4,I20 JB IRIN,I1 ;确认红外 IR 信号出现 I21: JB IRIN,I3 ;等待 IR 变为高电平 CALL DEL JMP I21 I3: MOV R3,#0 ;8 位数清 0 LL: JNB IRIN,I4 ;等待 IR 变为低电平 CALL DEL JMP LL I4: JB IRIN,I5 ;等待 IR 变为高电平 CALL DEL JMP I4 I5: MOV R2,#0 ;0.1ms 计数 L1: CALL DEL JB IRIN,N1 ;等待 IR 变为高电平 MOV A,#8 ;设置减数为8 CLR C ;清除借位标志C SUBB A,R2 ;判断高低
36、位 MOV A,R0 ;取出内存中原先数据 RRC A ;右移指令,将借位标志C右移进入 A 寄存器中 MOV R0, A ;将数据写入内存中 INC R3 ;处理完成一位,R3+1(R3计数) CJNE R3,#8, LL ;循环处理8 位 MOV R3,#0 ;R3清 0 INC R0 ;处理完成1 个字节, R0+1(R0计数) CJNE R0,#34H, LL ;循环收集到4 个字节 JMP OK ;至完成返回 N1: INC R2 ;R2+1(R2计数) CJNE R2,#30, L1 ;0.1ms 计数过长,时间到自动离开 OK: RET ;完成返回 ; - - OP: 执行解码动
37、作子程序 MOV A,COM CJNE A,#CODE_K5, A1 ;对解码进行比较,看是否是回到中点指令,否就转至下一项比较 CALL LED_BL ;发光二极管闪烁 CALL BZ ;压电喇叭发出嘀的一声 CALL GO_HOME ;执行回到中点 CALL LED_BL ;发光二极管闪烁 CALL BZ ;压电喇叭发出嘀的一声 RET A1: MOV A,COM CJNE A,#CODE_K1, A2 ;对解码进行比较,看是否是前进指令,否就转至下一项比较 CALL BZ ;压电喇叭发出嘀的一声 CALL GO_FOR ;执行前进 RET A2: MOV A,COM CJNE A,#CO
38、DE_K2, A3 ;对解码进行比较,看是否是后退指令,否就转至下一项比较 CALL BZ ;压电喇叭发出嘀的一声 CALL GO_BACK ;执行后退 RET A3: ;L MOV A,COM CJNE A,#CODE_K3, A4 ;对解码进行比较,看是否是左转指令,否就转至下一项比较 CALL BZ ;压电喇叭发出嘀的一声 CALL GO_L ;执行左转 RET A4: ;R MOV A,COM CJNE A,#CODE_K4, A5 ;对解码进行比较,看是否是右转指令,否就转至下一项比较 CALL BZ ;压电喇叭发出嘀的一声 CALL GO_R ;执行右转 RET A5: MOV A
39、,COM CJNE A,#CODE_K6, A6 ;对解码进行比较,看是否是行走启动指令,否就转至下一项 CALL LED_BL ;发光二极管闪烁 CALL BZ ;压电喇叭发出嘀的一声 CALL QD ;执行行走启动 CALL LED_BL ;发光二极管闪烁 CALL BZ ;压电喇叭发出嘀的一声 RET A6: RET ;返回 ; - - HOME1: SETB DJZ ;各伺服电机回中点控制子程序 SETB DJL SETB DJR MOV R4,#HOME G1: CALL DEL DJNZ R4,G1 CLR DJZ CLR DJL CLR DJR MOV R4,#(200-HOME) G2: CALL DEL DJNZ R4,G2 RET ; - - GO_HOME: MOV R3,#15 ;机器人回中点子程序 H1: CALL HOME1 DJNZ R3,H1 RET ; - - DJZ_FOR: SETB DJZ ;中间电机正转子程序 MOV R4,#FOR FZ1: CALL DEL DJNZ R4,FZ1 CLR DJZ MOV R4,#(200-FOR) FZ2: CALL DEL DJNZ R4,FZ2 RET ; - -
链接地址:https://www.31doc.com/p-5229581.html