51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
采用AT89C2051遥控接收解码
作者:佚名  发布时间:2009/11/14  阅读次数:1562  字体大小: 【】 【】【

;                                 *************************************
;                                 *                                                                     *
;                                 *             遥 控 接 收 解 码                     *
;                                 *             采用AT89C2051                           *
;                                 *                                                                     *
;                                 *************************************
;
;   P1.0-P1.1为电机前后驱动,P1.2-P1.3为左右转弯驱动,P1.4为自动驾驶指示,
; 编码输入从P3.1和p3.2(int0)口,P3.0和P3.5分别为前后红外线探头,在自动
; 驾驶时以控制小汔车前进倒退。
;*************************************
;*                                                                     *
;*           主程序和中断程序入口                 *
;*                                                                     *
;*************************************
ORG         0000H            ;程序执行开始地址
LJMP       START     ;跳至START执行
ORG         0003H            ;外中断0中断入口地址
LJMP       INTEX0   ;跳至INTEX0中断服务程序
ORG         000BH            ;定时器T0中断入口地址
RETI                       ;中断返回(不开中断)
ORG         0013H            ;外中断1中断入口地址
RETI                       ;中断返回(不开中断)
ORG         001BH            ;定时器T1中断入口地址
RETI                       ;中断返回(不开中断)
ORG         0023H            ;串行口中断入口地址
RETI                       ;中断返回(不开中断)
ORG         002BH            ;定时器T2中断入口地址
RETI            ;中断返回(不开中断)
;
;***************************
;*                                                 *
;*             初始化程序               *
;*                                                 *
;****************************
CLEARMEMIO:         CLR    A     ;清A
    MOV         P1,A     ;P1口置0
                               DEC         A     ;A为#0FFH
                               MOV         P3,A     ;P3口置1
                               SETB       P1.4     ;关自动驾驶指示灯
                               CLR         00H     ;自动驾驶标志位清0
CLEARMEM:             MOV         IE,#00H     ;关所有中断
                               SETB       EX0     ;开外中断
                               SETB       EA     ;开总中断允许
    RET             ;返回
;
;*************************************
;*                                                                     *
;*           主   程   序                                   *
;*                                                                     *
;*************************************
START:                   LCALL     CLEARMEMIO           ;上电初始化
MAIN:                     JB         00H,AUTO2    ;00H位标志为1转自动驾驶
                          LJMP    MAIN         ;主程序循环
                               NOP                                       ;PC值出错处理
    NOP
    LJMP    START       ;重新上电启动
AUTO2:                   LJMP       AUTO         ;至自动驾驶程序
;******************************
;                                                           ;
;                 中断接收程序                 ;
;                                                           ;
;******************************
INTEX0:                 CLR         EX0         ;关中断
                               JNB         P3.1,READ1    ;P3.1为0转READ1
READOUTT0:           SETB       EX0         ;干扰,中断退出
                               RETI             ;中断返回
;
READ1:                   CLR         A         ;清A
                               MOV         DPH,A       ;清DPTR
                               MOV         DPL,A       ;
HARD1:                   JB           P3.1,HARD11    ;P3.1为高电平时转HARD11
                               INC         DPTR         ;低电平脉冲宽度时间计数
                               NOP             ;空操作延时
                               NOP
                               AJMP       HARD1       ;跳回循环(周期约为8微秒)
HARD11:                 MOV         A,DPH       ;取DPTR高8位计数值
                               JZ           READOUTT0       ;若为0,则脉宽不足3毫秒退出中断
                               CLR         A         ;脉宽大于2MS,是第一个肪冲
READ11:                 INC         A         ;脉冲计数加1
READ12:                 JNB         P3.1,READ12    ;低电平等待,
                               MOV         R1,#06H       ;高电平脉宽判断用
READ13:                 JNB         P3.1,READ11    ;低电平转READ11(脉冲计数)
                               LCALL     DELAY       ;延时512微秒
                               DJNZ       R1,READ13         ;高电平脉宽小于3MS,转READ13循环
                               DEC         A         ;高电平脉宽大于3MS,计数结束,A减1
                               DEC         A         ;再减1
                               JZ           FUN0              ;收到2个肪冲,执行前进功能
                               DEC         A
                               JZ           FUN1            ;收到3个肪冲,执行后退功能
                               DEC         A
                               JZ           FUN2            ;收到4个肪冲,执行左转功能
                               DEC         A
                               JZ           FUN3            ;收到5个肪冲,执行右转功能
                               DEC         A
                               JZ           FUN4            ;收到6个肪冲,执行自动驾驶功能
                               DEC         A
                               JZ           FUN5            ;收到7个肪冲,执行转弯复位功能
                               DEC         A
                               JZ           FUN6            ;收到8个肪冲,执行停车功能
                               NOP            ;出错处理
                               NOP            ;
                               LJMP       READOUTT0   ;退出
FUN0:                     SETB         P1.0     ;前进状态
                               LJMP       READOUTT0   ;
FUN1:                     SETB         P1.1     ;后退状态
                               LJMP       READOUTT0   ;
FUN2:                     SETB         P1.2     ;左转弯状态
                               LJMP       READOUTT0   ;
FUN3:                     SETB         P1.3     ;右转弯状态
                               LJMP       READOUTT0   ;
FUN4:                     CPL       00H        ;自动驾驶标志取反
                               JB         00H,AUTO1      ;00H=1进入自动驾驶
                               CLR         P1.0                ;00H=0时进入遥控驾驶,停车操作
                               CLR         P1.1                ;停车操作
                               CLR         P1.2                ;停车操作
                               CLR         P1.3                ;停车操作
                               SETB       P1.4                ;关自动驾驶灯
                               LJMP       READOUTT0   ;中断退出
AUTO1:                   CLR         P1.4            ;进入自动驾驶,开自动驾驶指示灯
                               SETB       EX0        ;开中断
                               RETI            ;中断返回
  AUTO:                   JNB         P3.0,BL        ;自动驾驶控制程序,前有障碍转BL
                               SETB       P1.0          ;前面无障碍,前进状态
                               CLR         P1.1           ;前面无障碍,前进状态
                               CLR         P1.2           ;前面无障碍,前进状态
                               CLR         P1.3           ;前面无障碍,前进状态
                               JNB         00H,OUT1        ;标志为0转OUT1(转遥控)
                               AJMP       AUTO           ;为1转AUTO循环
BL:                         CLR         P1.0           ;前面有障碍,后退并左转处理
                               SETB       P1.1           ;置后退状态
                               SETB       P1.2           ;左转状态
                               CLR         P1.3          ;
                               JNB         00H,OUT1        ;标志为0转OUT1(转遥控)
                               JNB         P3.5,AUTO        ;后面有障碍物转AUTO(前进处理)
                               AJMP       BL           ;后无障碍转BL继续后退循环
OUT1:                     CLR         P1.0           ;自动驾驶退出程序,关闭驱动及转向电机
                               CLR         P1.1           ;
                               CLR         P1.2           ;
                               CLR         P1.3           ;
                               SETB       P1.4           ;关自动驾驶指示灯
                               LJMP       MAIN           ;转回主程序
FUN5:                     CLR         P1.2           ;转弯停止程序
                               CLR         P1.3           ;
                               LJMP       READOUTT0        ;退出中断
FUN6:                     CLR         P1.0           ;遥控停车程序,关闭驱动及转向电机
                               CLR         P1.1           ;
                               CLR         P1.2           ;
                               CLR         P1.3           ;
                               LJMP       READOUTT0         ;中断退出

;*************************************
;*                                                                     *
;*   延时程序( 255 X 2 = 513 us)     *
;*                                                                     *
;*************************************
DELAY:                   MOV         R0,#0FFH        ;
DELAY1:                 DJNZ       R0,DELAY1        ;
    RET               ;
;
;
    END               ;程序结束

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号