?? hongwai.asm
字號:
ORG 0000H
MAIN:
JNB P3.2,IR ;遙控掃描
LJMP MAIN ;主循環
IR: ;解碼開始
MOV R6,#10
IR_SB:
ACALL DELAY882;延時882微秒
JB P3.2,IR_ERROR;數據錯誤退出解碼
DJNZ R6,IR_SB;重復10次檢測
;識別連發碼
JNB P3.2,$;等待高電平避開9MS低電平引導脈沖
ACALL DELAY2400
JNB P3.2,IR_RP;這里為低電平,認為是連發碼
ACALL DELAY2400 ;延時4.74MS避開4.5MS的結果碼
;讀取32位數據碼
MOV R1,#1AH;存放數據的起始地址
MOV R2,#4
IR_4BYTE:
MOV R3,#8
IR_8BIT:
JNB P3.2,$;等待地址碼第一位的高電平信號
LCALL DELAY882;高電平來后開始延時882uS
MOV C,P3.2
JNC IR_8BIT_0;延時后為為低電平則跳到IR_8BIT_0
LCALL DELAY1000
IR_8BIT_0:
MOV A,@R1;將R1中的地址給累加器A
RRC A;將C移入A的最低位
MOV @R1,A;保存A中的值到RAM中
DJNZ R3,IR_8BIT;接收地址碼的高8位
INC R1;下一地址
DJNZ R2,IR_4BYTE;接收完成8位數據,8位數據碼和16位地址碼
JMP IR_GOTO ;解碼結束
IR_RP:
JMP IR_GOTO
IR_ERROR:
LJMP MAIN
IR_GOTO: ;執行部分
MOV A,1CH
CPL A
CJNE A,1DH,IR_ERROR
MOV P1,1DH ;接收到的數據顯示到P1口
MOV 1AH,#00H ;接收區清0
MOV 1BH,#00H
MOV 1CH,#00H
MOV 1DH,#00H
LJMP MAIN;回到主循環
DELAY882: ;延時函數
MOV R7,#202
DELAY882_A:;882us延時
NOP
NOP
DJNZ R7,DELAY882_A
RET
DELAY1000:
MOV R7,#229
DELAY1000_A:
NOP
NOP
DJNZ R7,DELAY1000_A
RET
DELAY2400:
MOV R7,#245
DELAY2400_A:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_A
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -