?? 紅外遙控接收.asm
字號(hào):
;=================================================
; 紅外遙控接收
;=================================================
;=================================================
ORG 0000H
LJMP START;轉(zhuǎn)入主程序
ORG 0010H
START:
MAIN:
JNB P2.2,IR
LJMP MAIN
;以下為進(jìn)入P2.2腳外部中斷子程序,也就是解碼程序
IR:
MOV R6,#9
SB:
ACALL DELAY882 ;調(diào)用882微秒延時(shí)子程序
JB P2.2,EXIT ;延時(shí)882微秒后判斷P2.2腳是否出現(xiàn)高電平如果有就退出解碼程序
DJNZ R6, SB ;重復(fù)10次,目的是檢測(cè)在8820微秒內(nèi)如果出現(xiàn)高電平就退出解碼程序
;以上完成對(duì)遙控信號(hào)的9000微秒的初始低電平信號(hào)的識(shí)別。
JNB P2.2, $ ;等待高電平避開9毫秒低電平引導(dǎo)脈沖
ACALL DELAY2400
JNB P2.2,IR_Rp ;
ACALL DELAY2400 ;延時(shí)4.74毫秒避開4.5毫秒的結(jié)果碼
MOV R1,#1AH ;設(shè)定1AH為起始RAM區(qū)
MOV R2,#4
PP:
MOV R3,#8
JJJJ:
JNB P2.2,$ ;等待地址碼第一位的高電平信號(hào)
LCALL DELAY882 ;高電平開始后用882微秒的時(shí)間尺去判斷信號(hào)此時(shí)的高低電平狀態(tài)
MOV C,P2.2 ;將P2.2引腳此時(shí)的電平狀態(tài)0或1存入C中
JNC UUU ;如果為0就跳轉(zhuǎn)到UUU
LCALL DELAY1000
UUU:
MOV A,@R1 ;將R1中地址的給A
RRC A ;將C中的值0或1移入A中的最低位
MOV @R1,A ;將A中的數(shù)暫時(shí)存放在R1中
DJNZ R3,JJJJ ;接收地址碼的高8位
INC R1 ;對(duì)R1中的值加1,換下一個(gè)RAM
DJNZ R2,PP ;接收完16位地址碼和8位數(shù)據(jù)碼和8位數(shù)據(jù),存放在1AH/1BH/1CH/1DH的RAM中
MOV P1,1DH ;將按鍵的鍵值通過(guò)P1口的8個(gè)LED顯示出來(lái)!
CLR P2.3 ;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功
LCALL DELAY2400
LCALL DELAY2400
LCALL DELAY2400
SETB P2.3;蜂鳴器停止
LJMP MAIN
IR_Rp:
LJMP MAIN
EXIT:
LJMP MAIN ;退出解碼子程序
;=============================882
DELAY882: ;1.085x ((202x4)+5)=882
MOV R7,#202
DELAY882_A:
NOP
NOP
DJNZ R7,DELAY882_A
RET
;=============================1000
DELAY1000: ;1.085x ((229x4)+5)=999.285
MOV R7,#229
DELAY1000_A:
NOP
NOP
DJNZ R7,DELAY1000_A
RET
;=============================2400
DELAY2400: ;1.085x ((245x9)+5)=2397.85
MOV R7,#245
DELAY2400_A:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_A
RET
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -