⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 12f629-ir.txt

📁 pic12f629做的PT2262红外解码程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
            setc              ;rem为1,c置1
            
            rlf A0_addr2,f
            rlf A0_addr1,f
             
;等待第二个下降沿
;加入了限时判断,防止死循环。
;
;            btfss rem        ;rem为0,一直执行
;            goto $-1
            movlw .255
            movwf r5
            btfsc rem         ;rem为0,一直执行
            goto $+4
            decfsz r5,f
            goto $-3
            goto remote8      ;超时,跳到错误处理
            
                 
;            btfsc rem         ;rem为1,一直执行 
;            goto $-1
            movlw .255
            movwf r5
            btfss rem         ;rem为1,一直执行 
            goto $+4
            decfsz r5,f
            goto $-3
            goto remote8      ;超时,跳到错误处理 
            
            
;等待1200uS后采集接收信号                              
            movlw .200      
            movwf r5
            decfsz r5,f
            goto $-1
            movlw .200
            movwf r5
            decfsz r5,f
            goto $-1
                
            btfss rem         ;如果rem为1,则c置1,否则清0
            clrc
            btfsc rem
            setc              ;rem为1,c置1
            
            rlf A1_addr2,f
            rlf A1_addr1,f
 
;等待第二个码值的下降沿
;加入了限时判断,防止死循环。
;
;            btfss rem        ;rem为0,一直执行
;            goto $-1
            movlw .255
            movwf r5
            btfsc rem         ;rem为0,一直执行
            goto $+4
            decfsz r5,f
            goto $-3
            goto remote8      ;超时,跳到错误处理
            
                 
;            btfsc rem         ;rem为1,一直执行 
;            goto $-1
            movlw .255
            movwf r5
            btfss rem         ;rem为1,一直执行 
            goto $+4 
            decfsz r5,f
            goto $-3
            goto remote8      ;超时,跳到错误处理 
            
                 
            decfsz count,f
            goto remote6      ;连续接收12位
            goto decode       ;接收完12位编码,跳到解码 
;开始解码
;把接收的编码左移4位,将8位密码放在同一字节上
    decode  movlw .4
            movwf count
   remote7  clrc
            rlf A0_addr2,f
            rlf A0_addr1,f
            clrc
            rlf A1_addr2,f
            rlf A1_addr1,f
            decfsz count,f
            goto remote7
          
;把4位数据编码由高4位移到低4位上
            swapf A0_addr2,f
            swapf A1_addr2,f  
                 
;比较密码                                         
            movf A0_addr1,w
            xorwf addr_set1,w
            skpz
            goto remote8       ;跳到接收错误处理 
                 
            movf A1_addr1,w
            xorwf addr_set2,w
            skpz
            goto remote8       ;跳到接收错误处理
;接收正确处理                                   
;每次按键都一次响应
;按键为PT2262IR pin10(D8) 和 pin13(D11)
;以下只识别D8、D11,对数据理D9、D10不作处理
;
;悬空: A0=1 , A1=0
;  1: A0=0 , A1=0
;  0: A0=1 , A1=1
;
;检查键值D8,ON/OFF键
            movf A0_addr2,w
            andlw 0fh
            xorwf A0_data1,w   
            skpz 
            goto D11           ;不是只有键值D8按下,检查键值D11,
                               ;即D8没有按下或D8按下同时还有其它按键按下
            movf A1_addr2,w
            andlw 0fh
            xorwf A1_data1,w
            skpz
            goto D11           ;不是只有键值D8按下,检查键值D11
                               ;即D8没有按下或D8按下同时还有其它按键按下
;是键值D8按下,开始处理    
;on/off处理,按下on/off键假如on,
;再按下就是off,然后再按下又是off。
                                  
            movlw b'00000010'  ;取反user_reg的on_off位
            xorwf user_reg,f
            btfss on_off       ;on_off位为0,reset置1,返回时关显示
            goto clr_rst
            bsf unlock         ;on_off位为1,置unlock为1,返回时开显示
            goto back
 
;检查键值D11,NEXT键。  
       D11  btfss on_off       ;on_off为0,当前已关显示,按键NEXT无效
            goto back          ;返回
                    
            movf A0_addr2,w
            andlw 0fh
            xorwf A0_data2,w    
            skpz 
            goto back          ;也不是只有键值D11按下,返回
                               ;即D11没有按下或D11按下同时还有其它按键按下
            movf A1_addr2,w
            andlw 0fh
            xorwf A1_data2,w
            skpz
            goto back          ;也不是只有键值D11按下,返回
                               ;即D11没有按下或D11按下同时还有其它按键按下
            
;是键值D11按下,开始处理             
            bsf go_next        ;跳下一段
            bcf reset  
            goto back            
                                               
   clr_rst  bsf reset
            bcf go_next
            goto back   
                        
      back  bcf t1con,tmr1on  ;停止TMR1
            clrf tmr1h
            clrf tmr1l
            bsf t1con,tmr1on  ;启动TMR1
            bsf enable        ;置1,防止开关按住不放,不断响应。
                                  
  work_end  retfie            ;返回并开中断
            
;接收错误处理                 
   remote8  bcf enable
            
            bcf go_next       ;密码错误,取消解码,清0
            bcf reset         ;密码错误,取消解码,清0
            bcf unlock
            
            bsf enable        ;虽接收错误,但都是有按键按下
            
;重新设定TMR1 
            bcf t1con,tmr1on  ;停止TMR1       
            clrf tmr1h        ;ffff为65.536mS
            clrf tmr1l
            bsf t1con,tmr1on  ;重启动TMR1
            retfie            ;返回并开中断            
                                                      
;-------------------------------------------
;初始化程序
      init  bsf status,rp0     ;选择bank1
            call 3ffh
            movwf osccal
            movlw b'00001000'  ;GP0/1/2为输出
            movwf trisio       ;GP3为输入 
            clrf ioc           ;关闭所有电平变化中断
            bsf pie1,tmr1ie    ;开TMR1中断
            
            bcf status,rp0     ;选择bank0 
            bcf intcon,gie     ;关所有中断
            bsf intcon,peie    ;开外设中断 
            bcf t1con,tmr1on   ;停止TMR1
            
            clrf gpio          ;输出清0
            movlw 07h         
            movwf cmcon        ;设置GP0/1/2为IO
            
            bcf enable         ;头次上电,初始化enable、reset、go_next
            bcf reset
            bcf go_next
            
;编码地址设定为:A0~A7为悬空(A0=1,A1=0) 
            movlw b'11111111'  ;A0
            movwf addr_set1
            movlw b'00000000'  ;A1
            movwf addr_set2
            
;D8设置1(A0=0,A1=0),D9、D10悬空(A0=1,A1=0)
;D11设置0(A0=1,A1=1),该状态为只有D8按下。D8为ON/OFF键。
            movlw b'00001110'  ;A0                        
            movwf A0_data1
            movlw b'00001000'  ;A1
            movwf A1_data1
            
;D11设置1(A0=0,A1=0),,D9、D10悬空(A0=1,A1=0)
;D8设置0(A0=1,A1=1),该状态为只有D11按下。D11为NEXT键。
            movlw b'00000111'  ;A0                        
            movwf A0_data2
            movlw b'00000001'  ;A1            
            movwf A1_data2
 
            return       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -