hpdell 发表于 2012-4-24 11:10:42

松翰 SONIX 中断红外遥控器解码有时失灵

松翰单片机,利用外部中断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

raxb 发表于 2012-4-24 11:24:08

没有出来遥控按键弹起吧

hpdell 发表于 2012-4-24 11:36:15

raxb 发表于 2012-4-24 11:24 static/image/common/back.gif
没有出来遥控按键弹起吧

有的, bset      _bIR_OK
                                        MOV                A,#60
                                        MOV                _rIrCntCA,A
这个就是,每2ms扫描一次,如果rIrCntCA这个大于0就开始渐渐,等于0就复位啊

LHD1591415 发表于 2012-9-28 00:21:27

mzh1668 发表于 2012-9-5 21:58 static/image/common/back.gif
千瑞科技 松翰IC一級代理 快速开发软硬件
主要专业于各类智能小家电及闪灯,LED控制器,移动电源,充电器, ...

千瑞科技 松翰IC
你真讨厌,看到那里都是你的广告,好多人都认识千瑞科技的,你不发太多垃圾广告了,你是技术还是业务,,甘做法,好多搞技术的难怪单价做得、压得那么低,搞得市场也跟着烂!公平竞才好!

liangong 发表于 2012-9-28 06:49:00

mzh1668[/quote

见一次扇一次
页: [1]
查看完整版本: 松翰 SONIX 中断红外遥控器解码有时失灵