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

📄 1527o2272.c

📁 1527或者2272汇编解码程序
💻 C
字号:
1527 and 2272  
解码
          foreverwolfer 
作者:
免责声明:本程序只用于学习交流,如有用于商业用途而引
起的任何纠纷与本人无关! 
 
;-----------------------解码子程序  ;1527 and 2272 
JM     BCF STATUS,5 
       BCF RR,1            ;RR-1为解码成功标志位(为1 成功) 
       CLRF R2 
       CLRF R3 
       CLRF R4 
       CLRF R5 
       CLRF R6 
       CLRF R7 
       CLRF R8 
       CLRF TMR0 
       MOVLW 0C0H 
       MOVWF INTCON 
KT     MOVLW 18H           ;24BIT 
       MOVWF R0 
       BTFSS PORTA,5 
       GOTO JMEND 
       MOVLW 3CH           ; 
       MOVWF DEYH 
J1     NOP 
       NOP 
       nop 
       nop 
       BTFSS PORTA,5       ;是否有0.1-0.5ms高电平 
       GOTO MT             ;计算码头脉宽 
       DECF DEYH,1  
时间有 。 ?则 超时
       BTFSS STATUS,2      ; 0 5MS        
一个周期循环
       GOTO J1             ; 10US 
时间有 。 ?则 超时退出
       GOTO JMEND          ; 0 5MS    
;判断是否有0.1-0.5ms高电平 
MT      
       MOVF DEYH,0 
       SUBLW 08H 
       BTFSC STATUS,C      ;10-DEYH<0则C为0,即DEYH>10 
       GOTO JMEND 
件使用 "pdfFactory" 试用版本创建           www.fineprint.cn

 MOVF DEYH,0 
       SUBLW 032H 
       MOVWF R_TMT 
       INCF R_TMT,1         ;是有0.1-0.5ms高电平,补偿,T=R_TMT*10+10      US 
       CLRF DEYL 
       CLRF DEYH 
TT     CLRWDT 
       BTFSC PORTA,5 
       GOTO MT1 
       INCF DEYH,1 
       NOP 
       MOVF DEYH,0 
       SUBLW 0FFH 
       BTFSS STATUS,Z 
       GOTO TT               ;10us一个周期 
       INCF DEYL,1           ;DEYH=255 DEYL+1 
       CLRF DEYH 
       MOVF DEYL,0 
       SUBLW 07H 
       BTFSS STATUS,Z        ;DEYL=6则已超时 
       GOTO TT               ;未超时则继续 
       GOTO JMEND 
;判断脉宽是否有5。1MS-17。8MS 
MT1    MOVF DEYL,0 
       SUBLW 02H 
       BTFSC STATUS,C 
低电平不能持续 。 ,退出
       GOTO JMEND            ; 5 1MS  
       INCF DEYH,1 
       INCF DEYH,1         ; 补偿,T=DEYH*10+10  +10    US 
       MOVF R_TMT,0 
       ADDWF DEYH,1 
       BTFSC STATUS,C 
       INCF DEYL,1 
       RRF DEYL,1 
       RRF DEYH,1 
       RRF DEYL,1 
       RRF DEYH,1 
       RRF DEYL,1 
       RRF DEYH,1 
       RRF DEYL,1 
       RRF DEYH,1             ;码头除以16=8*OSC   
       MOVF DEYH,0 
       MOVWF DEYH_1   
       DECF DEYH,1 

 DECF DEYH,1  
       DECF DEYH,1     
;;是同位码,延时 MS采集信号 
J5     NOP 
       NOP 
       NOP 
       NOP 
       NOP 
       NOP 
       NOP 
       DECFSZ DEYH,1 
       GOTO J5                ;延时8*OSC后采样    
;采集信号并记录 
       BTFSC PORTA,5 
       GOTO Z1 
能则清
       BCF R2,0               ; R2-0 
       GOTO XH 
为高则检测高电平时间是否能持续
Z1     NOP                    ; 0.18MS 
       BSF R2,0               ;能则置R2-1 
;等待第2个上升沿,先等待到低电平的到来 
XH     MOVF DEYH_1,0 
       MOVWF DEYH 
J8     DECF DEYH,1           ;是否超时 
       BTFSC STATUS,Z 
       GOTO JMEND 
       NOP 
       NOP 
       NOP 
       NOP 
       BTFSC PORTA,5 
       GOTO J8 
;是否接收完24位 
       CLRWDT 
       DECFSZ R0,1  
       GOTO JJ8 
       GOTO CSJ1 
没检测完 位,则移位
JJ8     RLF R2,1               ; 24  
       RLF R3,1 
       RLF R4,1 
;等待高电平的到来  
JX     MOVF DEYH_1,0            
       MOVWF DEYH  
       RLF DEYH,1 
J9     DECF DEYH,1        ;是否超时 

       BTFSC STATUS,Z 
       GOTO JMEND 
       NOP 
       NOP 
       NOP 
       NOP 
       BTFSS PORTA,5  
       GOTO J9 
       MOVF DEYH_1,0            
       MOVWF DEYH 
       DECF DEYH,1 
       DECF DEYH,1  
       DECF DEYH,1 
       GOTO J5 
;接收完24位则判断是否已重复接收 
CSJ1   INCF R8,1 
       MOVLW 01H 
       SUBWF R8,0 
       BTFSC STATUS,2 
       GOTO JX1              ;第一次接收则存接收码 
       MOVLW 02H 
       SUBWF R8,0 
       BTFSC STATUS,2        ;是否为2 
       GOTO BJ               ;为2则比较 
       MOVLW 03H 
       SUBWF R8,0           
是否为
       BTFSS STATUS,2        ; 3 
       GOTO JMEND 
BJ     MOVF R2,0 
       XORWF R5,0            ;R2=R5?   也可用subwf r5,0 
       BTFSS STATUS,2 
       GOTO JMEND 
       MOVF R3,0 
       XORWF R6,0            ;R3=R6? 
       BTFSS STATUS,2 
       GOTO JMEND 
       MOVF R4,0 
       XORWF R7,0            ;R4=R7? 
       BTFSS STATUS,2 
       GOTO JMEND 
       BSF RR,1            ;都相同则置解码成功标志 
       bsf PORTC,3         ;******************* 
       CALL YS             ;******************* 
       ;CALL YS             ;******************* 

   bCf PORTC,3         ;******************* 
       GOTO JMEND 
;-----------未接收完3次则继续 
;-----------等待高电平的到来限时 2.056MS 
JX1    MOVF R2,0 
       MOVWF R5 
       MOVF R3,0 
       MOVWF R6 
       MOVF R4,0 
       MOVWF R7 
       CLRF R2             ;清除第一次接收的数据 
       CLRF R3 
       CLRF R4 
       MOVF DEYH_1,0        ;限时S内检测到同位信号的高电平 
       MOVWF DEYH   
       RLF DEYH,1     
JX11   DECF DEYH,1 
       BTFSC STATUS,Z 
       GOTO JMEND 
       BTFSS PORTA,5 
       GOTO JX11 
       GOTO KT            ;未超时就检测到高电平 
;--------------解码结束 
JMEND  bsf R1,0 
       MOVLW 0C0H 
       MOVWF INTCON 
       RETURN 
;=============================== 
输出:R2,R3,R4 
I/O  
对 口的检测应按自己的实际情况做相应的修改
 
对本程序中有些不必要指令可以做删除,不影响解码效果
可对本程序码头判断的“宽”“严”做调整 
 
 
有任何问题欢迎到http://pic16.com/bbs/dispbbs.asp?boardID=27&ID=15769&page=1
交流 
 
 

⌨️ 快捷键说明

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