?? 遙控接收解碼采用at89c2051.asm
字號:
; *************************************
; * *
; * 遙 控 接 收 解 碼 *
; * 采用AT89C2051 *
; * *
; *************************************
;
; P1.0-P1.1為電機前后驅(qū)動,P1.2-P1.3為左右轉(zhuǎn)彎驅(qū)動,P1.4為自動駕駛指示,
; 編碼輸入從P3.1和p3.2(int0)口,P3.0和P3.5分別為前后紅外線探頭,在自動
; 駕駛時以控制小汔車前進倒退。
;*************************************
;* *
;* 主程序和中斷程序入口 *
;* *
;*************************************
ORG 0000H ;程序執(zhí)行開始地址
LJMP START ;跳至START執(zhí)行
ORG 0003H ;外中斷0中斷入口地址
LJMP INTEX0 ;跳至INTEX0中斷服務(wù)程序
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 ;關(guān)自動駕駛指示燈
CLR 00H ;自動駕駛標志位清0
CLEARMEM: MOV IE,#00H ;關(guān)所有中斷
SETB EX0 ;開外中斷
SETB EA ;開總中斷允許
RET ;返回
;
;*************************************
;* *
;* 主 程 序 *
;* *
;*************************************
START: LCALL CLEARMEMIO ;上電初始化
MAIN: JB 00H,AUTO2 ;00H位標志為1轉(zhuǎn)自動駕駛
LJMP MAIN ;主程序循環(huán)
NOP ;PC值出錯處理
NOP
LJMP START ;重新上電啟動
AUTO2: LJMP AUTO ;至自動駕駛程序
;******************************
; ;
; 中斷接收程序 ;
; ;
;******************************
INTEX0: CLR EX0 ;關(guān)中斷
JNB P3.1,READ1 ;P3.1為0轉(zhuǎn)READ1
READOUTT0: SETB EX0 ;干擾,中斷退出
RETI ;中斷返回
;
READ1: CLR A ;清A
MOV DPH,A ;清DPTR
MOV DPL,A ;
HARD1: JB P3.1,HARD11 ;P3.1為高電平時轉(zhuǎn)HARD11
INC DPTR ;低電平脈沖寬度時間計數(shù)
NOP ;空操作延時
NOP
AJMP HARD1 ;跳回循環(huán)(周期約為8微秒)
HARD11: MOV A,DPH ;取DPTR高8位計數(shù)值
JZ READOUTT0 ;若為0,則脈寬不足3毫秒退出中斷
CLR A ;脈寬大于2MS,是第一個肪沖
READ11: INC A ;脈沖計數(shù)加1
READ12: JNB P3.1,READ12 ;低電平等待,
MOV R1,#06H ;高電平脈寬判斷用
READ13: JNB P3.1,READ11 ;低電平轉(zhuǎn)READ11(脈沖計數(shù))
LCALL DELAY ;延時512微秒
DJNZ R1,READ13 ;高電平脈寬小于3MS,轉(zhuǎn)READ13循環(huán)
DEC A ;高電平脈寬大于3MS,計數(shù)結(jié)束,A減1
DEC A ;再減1
JZ FUN0 ;收到2個肪沖,執(zhí)行前進功能
DEC A
JZ FUN1 ;收到3個肪沖,執(zhí)行后退功能
DEC A
JZ FUN2 ;收到4個肪沖,執(zhí)行左轉(zhuǎn)功能
DEC A
JZ FUN3 ;收到5個肪沖,執(zhí)行右轉(zhuǎn)功能
DEC A
JZ FUN4 ;收到6個肪沖,執(zhí)行自動駕駛功能
DEC A
JZ FUN5 ;收到7個肪沖,執(zhí)行轉(zhuǎn)彎復位功能
DEC A
JZ FUN6 ;收到8個肪沖,執(zhí)行停車功能
NOP ;出錯處理
NOP ;
LJMP READOUTT0 ;退出
FUN0: SETB P1.0 ;前進狀態(tài)
LJMP READOUTT0 ;
FUN1: SETB P1.1 ;后退狀態(tài)
LJMP READOUTT0 ;
FUN2: SETB P1.2 ;左轉(zhuǎn)彎狀態(tài)
LJMP READOUTT0 ;
FUN3: SETB P1.3 ;右轉(zhuǎn)彎狀態(tài)
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 ;關(guān)自動駕駛燈
LJMP READOUTT0 ;中斷退出
AUTO1: CLR P1.4 ;進入自動駕駛,開自動駕駛指示燈
SETB EX0 ;開中斷
RETI ;中斷返回
AUTO: JNB P3.0,BL ;自動駕駛控制程序,前有障礙轉(zhuǎn)BL
SETB P1.0 ;前面無障礙,前進狀態(tài)
CLR P1.1 ;前面無障礙,前進狀態(tài)
CLR P1.2 ;前面無障礙,前進狀態(tài)
CLR P1.3 ;前面無障礙,前進狀態(tài)
JNB 00H,OUT1 ;標志為0轉(zhuǎn)OUT1(轉(zhuǎn)遙控)
AJMP AUTO ;為1轉(zhuǎn)AUTO循環(huán)
BL: CLR P1.0 ;前面有障礙,后退并左轉(zhuǎn)處理
SETB P1.1 ;置后退狀態(tài)
SETB P1.2 ;左轉(zhuǎn)狀態(tài)
CLR P1.3 ;
JNB 00H,OUT1 ;標志為0轉(zhuǎn)OUT1(轉(zhuǎn)遙控)
JNB P3.5,AUTO ;后面有障礙物轉(zhuǎn)AUTO(前進處理)
AJMP BL ;后無障礙轉(zhuǎn)BL繼續(xù)后退循環(huán)
OUT1: CLR P1.0 ;自動駕駛退出程序,關(guān)閉驅(qū)動及轉(zhuǎn)向電機
CLR P1.1 ;
CLR P1.2 ;
CLR P1.3 ;
SETB P1.4 ;關(guān)自動駕駛指示燈
LJMP MAIN ;轉(zhuǎn)回主程序
FUN5: CLR P1.2 ;轉(zhuǎn)彎停止程序
CLR P1.3 ;
LJMP READOUTT0 ;退出中斷
FUN6: CLR P1.0 ;遙控停車程序,關(guān)閉驅(qū)動及轉(zhuǎn)向電機
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 ;程序結(jié)束
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -