?? 9t.asm
字號(hào):
; *************************************
; * *
; * 遙控編碼控制器 *
; * *
; * 采用89C2051 *
; *************************************
;
; P1.0口按紐為前進(jìn),P1.1口按紐為后退,P1.2口按紐為左轉(zhuǎn)彎,P1.3口按紐為右轉(zhuǎn)彎,
; P1.4口按紐為自動(dòng)駕駛,P3.5為編碼輸出
;
;*************************************
;* *
;* 主程序和中斷程序入口 *
;* *
;*************************************
ORG 0000H ;程序執(zhí)行開(kāi)始地址
LJMP START ;跳至START執(zhí)行
ORG 0003H ;外中斷0中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
ORG 000BH ;定時(shí)器T0中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
ORG 0013H ;外中斷1中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
ORG 001BH ;定時(shí)器T1中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
ORG 0023H ;串行口中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
ORG 002BH ;定時(shí)器T2中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
;
;*************************************
;* *
;* 初始化程序中的各變量 *
;* *
;*************************************
CLEARMEMIO: CLR A ;清A
DEC A ;A為#0FFH
MOV P1,A ; P1口置1
MOV P3,A ; P3口置1
MOV IE,#00H ;關(guān)所有中斷
RET ;子程序返回
;
;
;
;*************************************
;* *
;* 主 程 序 *
;* *
;*************************************
START: LCALL CLEARMEMIO ;調(diào)用初始化
; 主體程序
MAIN: LCALL KEYWORK ;調(diào)用查鍵子程序
LJMP MAIN ;轉(zhuǎn)MAIN循環(huán)
NOP ;PC值出錯(cuò)處理
NOP
NOP
LJMP START ;轉(zhuǎn)START重新啟動(dòng)
;
;**************************
;* *
;* 鍵盤(pán)工作子程序 *
;**************************
KEYWORK: MOV P1,#0FFH ;置輸入狀態(tài)
JNB P1.0,KEY0 ; 讀P1.0口,為0轉(zhuǎn)KEY0
JNB P1.1,KEY1 ; 讀P1.1口,為0轉(zhuǎn)KEY1
JNB P1.4,KEY4 ; 讀P1.4口,為0轉(zhuǎn)KEY4
KEYOUT: RET ;沒(méi)鍵按下,退出
;
KEY0: LCALL DL10MS ;延時(shí)10毫秒消抖
JB P1.0,KEYOUT ;干擾,退出
LJMP KEYFUN00 ;轉(zhuǎn)KEYFUN00
KEY1: LCALL DL10MS ;
JB P1.1,KEYOUT ; 干擾,退出
LJMP KEYFUN01 ; 轉(zhuǎn)KEYFUN01
KEY2: LCALL DL10MS ; 延時(shí)10毫秒消抖
JB P1.2,KEYOUT ; 干擾,退出
LJMP KEYFUN02 ; 轉(zhuǎn)KEYFUN02
KEY3: LCALL DL10MS ; 延時(shí)10毫秒消抖
JB P1.3,KEYOUT ; 干擾,退出
LJMP KEYFUN03 ; 轉(zhuǎn)KEYFUN03
KEY4: LCALL DL10MS ; 延時(shí)10毫秒消抖
JB P1.4,KEYOUT ; 干擾,退出
LJMP KEYFUN04 ; 轉(zhuǎn)KEYFUN04
KEYWORK1: JNB P1.2,KEY2 ;P1.2口為0轉(zhuǎn)KEY2
JNB P1.3,KEY3 ; P1.3口為0轉(zhuǎn)KEY3
LCALL KEYFUN05 ;調(diào)轉(zhuǎn)彎復(fù)位子程序
RET ;返回
;
KEYFUN00: MOV A,#02H ;發(fā)2個(gè)脈沖賦值
LCALL REMOTE ;發(fā)射2個(gè)脈沖(前進(jìn))
WAIT0: LCALL KEYWORK1 ;調(diào)一次轉(zhuǎn)彎查鍵子程序
JNB P1.0,WAIT0 ;等待按鍵釋放
LCALL KEYFUN06 ;釋放時(shí)發(fā)8個(gè)脈沖(停止)
RET ;返回
;
KEYFUN01: MOV A,#03H ;發(fā)3個(gè)脈沖賦值
LCALL REMOTE ;發(fā)射3個(gè)脈沖(前進(jìn))
WAIT1: LCALL KEYWORK1 ;調(diào)一次轉(zhuǎn)彎查鍵子程序
JNB P1.1,WAIT1 ;等待按鍵釋放
LCALL KEYFUN06 ;釋放時(shí)發(fā)8個(gè)脈沖(停止)
RET ;
;
KEYFUN02: MOV A,#04H ;發(fā)4個(gè)脈沖賦值
LCALL REMOTE ;發(fā)射4個(gè)脈沖(左轉(zhuǎn))
JNB P1.2,KEYOUT1 ;鍵按下不放,轉(zhuǎn)KEYOUT1返回
LCALL DL10MS ;左轉(zhuǎn)鍵放開(kāi),延時(shí)10毫秒
JNB P1.2,KEYOUT1 ;為0(干擾),轉(zhuǎn)KEYOUT1返回
LCALL KEYFUN05 ;左轉(zhuǎn)鍵放開(kāi)發(fā)7個(gè)脈沖(轉(zhuǎn)彎復(fù)位)
RET ;返回
;
KEYFUN03: MOV A,#05H ;發(fā)5個(gè)脈沖賦值
LCALL REMOTE ;發(fā)射5個(gè)脈沖(右轉(zhuǎn))
JNB P1.3,KEYOUT1 ;鍵按下不放,轉(zhuǎn)KEYOUT1返回
LCALL DL10MS ;右轉(zhuǎn)鍵放開(kāi),延時(shí)10毫秒
JNB P1.3,KEYOUT1 ;為0(干擾),轉(zhuǎn)KEYOUT1返回
LCALL KEYFUN05 ;右轉(zhuǎn)鍵放開(kāi)發(fā)7個(gè)脈沖(轉(zhuǎn)彎復(fù)位)
RET ;返回
KEYOUT1: LJMP KEYOUT ;跳至KEYOUT返回
;
KEYFUN04: JNB P1.4,KEYFUN04 ;等待按鍵釋放
LCALL DL10MS ;延時(shí)消抖動(dòng)
JNB P1.4,KEYFUN04 ;P1.4為0,系干擾,轉(zhuǎn)KEYFUN04再等待
MOV A,#06H ;按鍵釋放,發(fā)6個(gè)脈沖(進(jìn)入自動(dòng)駕駛)
LCALL REMOTE ;發(fā)射一次
RET ;返回
;
KEYFUN05: MOV A,#07H ;發(fā)7個(gè)脈沖程序(轉(zhuǎn)彎復(fù)位)
LCALL REMOTE ;發(fā)射一次
RET ;返回
KEYFUN06: MOV A,#08H ;發(fā)8個(gè)脈沖程序(停車(chē))
LCALL REMOTE ;發(fā)射一次
RET ;返回
;
;
;*************************************
;* *
;* 編碼發(fā)送程序 *
;* *
;*************************************
;按A中數(shù)值發(fā)射脈沖
REMOTE: MOV R1,A ;發(fā)射脈數(shù)入A
LJMP OUT3 ;第一個(gè)脈沖處理
OUT: MOV R0,#55H ;1MS脈寬定時(shí)值
OUT1: CLR P3.5 ;發(fā)低電平脈寬
NOP ;延時(shí)循環(huán)(周期約為21微秒)
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R0,OUT1 ;定時(shí)時(shí)間未到,轉(zhuǎn)OUT1循環(huán)
MOV R0,#55H ;1MS脈寬定時(shí)值
OUT2: SETB P3.5 ;發(fā)高電平脈寬
NOP ;延時(shí)循環(huán)(周期約為21微秒)
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R0,OUT2 ;定時(shí)時(shí)間未到,轉(zhuǎn)OUT2循環(huán)
DJNZ R1,OUT ;脈沖數(shù)未發(fā)完轉(zhuǎn)OUT再循環(huán)
LCALL DL10MS ;脈沖發(fā)完延時(shí)10毫秒
RET ;返回
OUT3: MOV R0,#0FFH ;3MS脈寬定時(shí)值
LJMP OUT1 ;轉(zhuǎn)OUT1紅外線發(fā)射
;
;
;
;*************************************
;* *
;* 延時(shí) 255 X 2 = 512 us *
;* *
;*************************************
DELAY: MOV R2,#0FFH
DELAY1: DJNZ R2,DELAY1
RET
;
;*************************************
;* *
;* 延時(shí)10ms程序 *
;* (消按鍵抖動(dòng)用) *
;*************************************
DL10MS: MOV R3,#14H
DL10MS1: LCALL DELAY
DJNZ R3,DL10MS1
RET
DL500MS: MOV R4,#32H
DL500MS1: LCALL DL10MS
DJNZ R4,DL500MS1
RET
;
;
END ;程序結(jié)束
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -