|
;-------------------------------------------------------
;2009 04 01 红外遥控器解码 6122
;-------------------------------------------------------
IR_DATA EQU 50H
ORG 0000H
LJMP MAIN
ORG 0003H
NOP
NOP
LJMP W_INT0 ;外中断0,红外
ORG 0100H
MAIN:
MOV SP,#60H
SETB EA
SETB EX0
SETB PX0
SETB IT0
MAIN1:
LJMP MAIN1
W_INT0:
PUSH ACC
PUSH PSW
CLR EX0
JB P3.2,IR_RET
;---------------------------------------------
MOV R6,#09H
IR_LEAD: ;9ms低电平引导码
LCALL DELAY900
JB P3.2,IR_RET
DJNZ R6,IR_LEAD
JNB P3.2,$ ;9ms结束
LCALL DELAY2250 ;2.25ms,判断是否是重复码
JNB P3.2,IR_CONTINUE;重复码
JB P3.2,$ ;引导码4.5ms结束
MOV R1,#1AH ;以下为数据接收
MOV R2,#4
IR_4BYTE:
MOV R3,#8
IR_8BIT:
JNB P3.2,$ ;低电平滤去只看高电平
NOP
NOP
LCALL DELAY900
MOV C,P3.2
JNC IR_8BIT_0
NOP
NOP
LCALL DELAY900
IR_8BIT_0:
MOV A,@R1
RRC A
MOV @R1,A
DJNZ R3,IR_8BIT
INC R1
DJNZ R2,IR_4BYTE
IR_CONTINUE:
MOV A,1CH
CPL A
CJNE A,1DH,IR_RET
MOV IR_DATA,1CH
; CLR P3.1
; lcall DELAY900
; setb p3.1
MOV A,1Ch
MOV P1,A
IR_RET:
SETB EX0
POP PSW
POP ACC
RETI
DELAY2250: ;2.25ms
MOV R6,#226
DELAY2250_A:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6,DELAY2250_A
RET
DELAY900:
MOV R7,#223;223=900
DELAY900_A:
NOP
NOP
DJNZ R7,DELAY900_A
NOP
NOP
NOP
RET
END |
|