⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9r.asm

📁 单片机实验程序-13种-17.4M-pdf.zip
💻 ASM
字号:
;                 *************************************
;                 *                                   *
;                 *       遥 控 接 收 解 码           *
;                 *       采用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   	 			 ;程序结束

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -