?? y.asm
字號:
ORG 0000H
AJMP MAIN
ORG 0003H ;外部中斷P3.2腳INT0入口地址
AJMP INTT0 ;轉(zhuǎn)入外部中斷服務(wù)子程序(解碼程序)
ORG 0100H
MAIN: SETB EA
SETB IT0
SETB EX0
AJMP $
;******************以下為進入P3.2腳外部中斷子程序,也就是解碼程序*******************
INTT0: CLR EA ;暫時關(guān)閉CPU的所有中斷請求
MOV R6,#5
SB: ACALL YS1 ;調(diào)用882微秒延時子程序
JB P3.2,EXIT ;延時882微秒后判斷P3.2腳是否出現(xiàn)高電平如果有就退出解碼程序
DJNZ R6, SB ;重復(fù) 5 次,目的是檢測在 4410 微秒內(nèi)如果出現(xiàn)高電平就退出解碼程序
;---------------以上完成對遙控信號引導(dǎo)碼的 4500 微秒的初始低電平信號的識別!!!!!
JNB P3.2, $ ;等待高電平避開 4.5 毫秒低電平引導(dǎo)脈沖
ACALL YS2 ;延時4.74毫秒避開 4.5 毫秒的結(jié)果碼
;---------------以上是對引導(dǎo)碼的 4500 微秒高電平的初始識別!!!!!
;-------------------------------------------------------------------------
MOV R7,#16 ;忽略前16位系統(tǒng)識別碼 (即地址碼)
JJJJA:JNB P3.2,$ ;等待地址碼第一位的高電平信號
LCALL YS1 ;高電平開始后用882微秒的時間延時去判斷信號此時的高低電平狀態(tài)
MOV C,P3.2 ;將P3.2引腳此時的電平狀態(tài) 0或1 存入C中
JNC UUUA ;如果為0就跳轉(zhuǎn)到UUUA
LCALL YS3 ;檢測到高電平1的話延時1毫秒等待脈沖高電平結(jié)束
UUUA: DJNZ R7,JJJJA
;--------------------------------------------------------------------------
MOV R1,#1AH ;設(shè)定1AH為起始RAM區(qū)
MOV R2,#2 ;接收從1AH到1BH的2個內(nèi)存,用于存放操作碼 (即數(shù)據(jù)碼) 和操作反碼
PP: MOV R3,#8 ;每組數(shù)據(jù)為8位
JJJJ: JNB P3.2,$ ;等待 數(shù)據(jù)碼 第一位的高電平信號
LCALL YS1 ;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態(tài)
MOV C,P3.2 ;將P3.2引腳此時的電平狀態(tài)0或1存入C中
JNC UUU ;如果為0就跳轉(zhuǎn)到UUU
LCALL YS3 ;檢測到高電平1的話延時1毫秒等待脈沖高電平結(jié)束
UUU: MOV A,@R1 ;將R1中地址的給A
RRC A ;將C中的值0或1移入A中的最低位
MOV @R1,A ;將A中的數(shù)暫時存放在R1數(shù)值的內(nèi)存中
DJNZ R3,JJJJ ;接收滿8位換一個內(nèi)存
INC R1 ;對R1中的值加1,換下一個RAM
DJNZ R2,PP ;接收完8位數(shù)據(jù)碼和8位數(shù)據(jù)反碼,存放在1AH/1BH中
MOV A,1AH
CPL A ;對1AH取反后和1BH比較
CJNE A,1BH,EXIT ;如果不等表示接收數(shù)據(jù)發(fā)生錯誤,放棄
;---------------------------------------------------------------------
MOV A,1AH
CPL A
MOV 1AH,A
MOV P1,1AH ;將按鍵的鍵值通過P1口的8個LED顯示出來!
CLR P2.5 ;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功
LCALL YS2
LCALL YS2
LCALL YS2
SETB P2.5 ;蜂鳴器停止
EXIT: SETB EA ;允許中斷
RETI ;退出解碼子程序
;-------------------------延時子程序---------------------------------
YS1: MOV R4,#20 ;延時子程序1,精確延時882微秒
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;延時子程序2,精確延時4740微秒
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
YS3: MOV R4,#2;延時程序3,精確延時1000微秒
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -