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

📄 pic12f629解pt2262ir的源程序.txt

📁 [代码]PIC单片机应用源程序 DS1620 - 12F675温度lcd显示 -该实战的目的作为学习和应用MCD1在线调试工具套件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
            btfsc rem           
            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      
      
;------------------------------------------------------      
   
            end

⌨️ 快捷键说明

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