|
松翰单片机,利用外部中断1进行红外遥控器解码,现在是可以解码出来的,而且解码的结果页对,但是唯一不爽的是,有时解码功能失灵(即当解码成功后,要等一会才可以继续使用遥控器解码),程序没有死机,遥控器解码失灵时,使用按键程序运行也很正常,望高人指点,程序如下
芯片:SN8F27E65
晶振:4MHZ
外部中断1,下降沿
用T0作为定时器,
T0M=256分频
PEDGE = 0x08; //下降沿触发
FP01IEN = 1;
程序开始:
L_Ir_Rev:
//b0xch a,_rAccBuf
//b0mov a,PFLAG
//b0mov _rPflagBuf,a
bts1 fp01irq
jmp L_int_sev90
bclr fp01irq
mov a,_rIr_State
b0add pcl,a
jmp ir_00
jmp ir_10
jmp ir_20
jmp L_int_sev90
;------------------------------------------------
ir_00: ; 准备接收
clr t0c
bset ft0enb
mov a,#1
mov _rIr_State,a
jmp L_int_sev90
;------------------------------------------------
;---------------引导码前部分---------------------
ir_10: ; 接收9ms+4.5ms引导码
mov a,t0c //rwk1 -> rDataCodeCT
mov _rDataCodeCT,a
clr t0c
mov a,_rDataCodeCT
sub a,#188 ; 64*170=10880 9+4.5ms min
bts1 fc
jmp L_check_err
mov a,_rDataCodeCT
sub a,#234 ; 64*234=14976 9+4.5ms max
bts0 fc
jmp L_check_err
mov a,#2
mov _rIr_State,a
jmp L_int_sev90
;------------------------------------------------
; ---------------------get data code 4 byte---------------------
ir_20:
mov a,t0c
mov _rDataCodeCT,a
clr t0c
mov a,_rDataCodeCT
sub a,#15 ; 64*15=960
bts1 fc
jmp L_check_err
mov a,_rDataCodeCT
sub a,#19 ; 64*19=1216
bts0 fc
jmp ir_21
jmp ir_bit0
ir_21: //接收bit1
mov a,_rDataCodeCT
sub a,#30
bts1 fc
jmp L_check_err
mov a,_rDataCodeCT
sub a,#38
bts0 fc
jmp L_check_err
ir_bit1:
bset fc
jmp ir_bit
ir_bit0:
bclr fc
ir_bit:
rrcm _rDataCodeL
rrcm _rDataCodeH
rrcm _rUserCodeL
rrcm _rUserCodeH
incms _rRcv_bit
mov a,_rRcv_bit
cmprs a,#32
jmp L_int_sev90
ir_data_check:
bclr ft0enb
clr T0C
clr _rIr_State
clr _rRcv_bit
mov a,_rUserCodeH
cmprs a,#IR_USER
jmp L_check_err
mov a,_rUserCodeL
cmprs a,#IR_USER_SHIFT
jmp L_check_err
mov a,_rDataCodeL
xor a,#0xff
cmprs a,_rDataCodeH
jmp L_check_err
bset _bIR_OK
MOV A,#60
MOV _rIrCntCA,A
jmp L_int_sev90
;------------------------------------------------
L_check_err:
bclr ft0enb
clr _rIr_State
clr _rRcv_bit
bclr _bIR_OK
L_int_sev90:
reti |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|