用于汽车遥控的Ev1527的pic单片机软件接收解码程序,密码采用I2C总线方式存在EEPROM中-Remote control for automotive Ev1527 the pic Singlechip software decoder to receive the procedure, the password using I2C bus EEPROM in ex
 
LIST      P=16f57
          #INCLUDE "p16F5X.INC"
           __CONFIG _CP_OFF&_WDT_OFF&_XT_OSC
;说明:SCL接单片机   RC0
;    : SDA接单片机   RC1     
;------------------------------------------------------------        
;寄存器定义                       
;------------------------------------------------------------       
BY_COUNT  EQU 14H         ;I2C
COUNT_T0 EQU 12H               
COUNT_T1 EQU 13H
COUNT    EQU 11H
STATUS   EQU 3H
PORTB    EQU 6H
PORTC    EQU 7H
EEPROM   EQU 08H
ADDR     EQU 09H
BUFIN    EQU 0AH
BUFOUT   EQU 0BH
SLAVE    EQU 0CH
TXBUF    EQU 0DH
BIT      EQU 0EH
DLY1     EQU 0FH
DLY2     EQU 10H
;******************************************
 
FLAG      EQU 20H
IN_DATA_0 EQU 19H
IN_DATA_1 EQU 1AH
IN_DATA_2 EQU 1BH
COUNTER0       EQU     15H                            ;计数器
COUNTER1       EQU     16H
COUNTER2       EQU     17H
COUNTER3       EQU     18H
CAR_STATUS     EQU 1CH                        ;      
W_SHADOW       EQU 1DH                        ;函数调用时传送参数
COUNTER        EQU 1EH       
                
DATA1       EQU 1FH         ;保留四位按键信息
DEVICE_W       EQU B'10100000'        ;
DEVICE_R       EQU B'10100001'        ;
              
ADR_LOCK       EQU 0x00                       ;存储器锁门指令入口
ADR_UNLOCK     EQU 0x10                       ;存储器开门指令入口
              
DATA_2         EQU     B'11001111'
DATA_1         EQU     B'00100111'
DATA_U         EQU     B'10111000'
DATA_L         EQU     B'10110100'
               ;都为反码 与上位机通信
COMC_LOCK      EQU     B'11110111'            ;开锁指令              00001000B     
COMC_UNLOCK    EQU     B'11110001'            ;锁门指令              00001110B
COMC_RELAY     EQU     B'11110010'            ;继电器指令            00001101B
PORTA_S EQU     B'11110001'
DI       EQU 7
DO       EQU 6
SDA      EQU 1
SCL      EQU 0
ACKF     EQU 0
 
 
;--------------------------------------------------------------  
;定义管脚        
;-------------------------------------------------------------
          #define    STUDY    PORTC,6
          #define    SIGNAL   PORTC,3
          #define    LIGHT    PORTC,5
        
         
          ORG      00H
          GOTO     INT_INIT
;**********************
BSTART
       BSF   PORTC,SDA
       BSF    PORTC,SCL
       MOVLW B'11001000'
       TRIS   PORTC
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       BCF    PORTC,SDA
       NOP
       NOP
       NOP
       NOP
       NOP
       BCF    PORTC,SCL
       NOP
       NOP
       RETLW 0
;**********************
BSTOP
       BCF    PORTC,SDA
       MOVLW B'11001000'
       TRIS   PORTC
       BCF    PORTC,SDA
       NOP
       NOP
       NOP
       BSF    PORTC,SCL
       NOP
       NOP
       NOP
       BSF    PORTC,SDA
       NOP
       NOP
       BCF    PORTC,SCL
       NOP
       NOP
       RETLW 0
;**********************
TX    
       MOVLW D'8'
       MOVWF BIT
TXLP   BCF    EEPROM,DO
       BTFSC TXBUF,7
       BSF    EEPROM,DO
       CALL   BITOUT
       RLF    TXBUF,1
       DECFSZ BIT,1
       GOTO   TXLP
       CALL   BITIN
       BTFSC EEPROM,DI
       BSF    PORTC,ACKF
       RETLW 0
;************************
RX
       CLRF   BUFIN
       MOVLW D'8'
       MOVWF BIT
       BCF    STATUS,0
RXLP   RLF    BUFIN,1
       BCF    BUFIN,0
       CALL   BITIN
       BTFSC EEPROM,DI
       BSF    BUFIN,0
       DECFSZ BIT
       GOTO   RXLP
       NOP
       RETLW 0
;**********************
BITOUT
       MOVLW   B'11001000'
       tris    PORTC
       BTFSS   EEPROM,DO
       GOTO    BITLOW
       BSF     PORTC,SDA
       GOTO    CLKOUT
BITLOW BCF     PORTC,SDA
CLKOUT BSF     PORTC,SCL
       NOP
       NOP
       NOP
       NOP
       BCF     PORTC,SCL
       RETLW   0
;**********************
BITIN
       BSF     EEPROM,DI
       MOVLW   B'11001010'
       TRIS    PORTC
       BSF     PORTC,SCL
       NOP
       NOP
       NOP
       NOP
       NOP
       BTFSS   PORTC,SDA
       BCF     EEPROM,DI
       BCF     PORTC,SCL
       RETLW   0
;---------------------------------
;延时1s
;---------------------------------`          
DELAY_1S:                                                    ;延时1s
               MOVLW 04H                                     ;3+1
               MOVWF COUNTER1
               MOVLW 0AH                                     ;10
               MOVWF COUNTER2
               MOVLW 031H                                    ;49
               MOVWF COUNTER3
                                                                     ;49*5+(256*5+5)*10+[(256*5+5)*256+5]*3+10=1,000,000us
DELAY_1S_WAIT
               NOP           
               NOP
               DECFSZ COUNTER3,F
               GOTO DELAY_1S_WAIT
               NOP
               NOP
               DECFSZ COUNTER2,F
               GOTO DELAY_1S_WAIT
               NOP
               CLRWDT
               DECFSZ COUNTER1,F
               GOTO DELAY_1S_WAIT
               ;DECFSZ COUNTER0,F
               ;GOTO DELAY_WAIT
DELAY_RET
               RETLW 0         
 
 
;****************************************
 
DELAY_10MS
       MOVLW D'13'
       MOVWF DLY1
       MOVLW 0FFH
       MOVWF DLY2
LP0    DECFSZ DLY2,1
       GOTO   $-1
       DECFSZ DLY1,1
       GOTO   $-5
       RETLW 0
 
 
;********************************************      
WR_EEPROM
       BTFSC FLAG,1
       GOTO   OUT1
       MOVLW B'00000000'
       TRIS   PORTC
       CLRF   PORTC
 
       CLRF   PORTC
       MOVLW B'10100000'
       MOVWF SLAVE
       MOVLW 13H
       MOVWF FSR          ;IN_DATA_0地址
       MOVLW B'10101100'
       MOVWF BUFOUT
       CLRF   ADDR
       CALL   BSTART
       MOVF   SLAVE,0
       MOVWF TXBUF
       CALL   TX
       MOVF   ADDR,0
       MOVWF TXBUF
       CALL   TX
       MOVF   INDF,0
       MOVWF TXBUF
       CALL   TX
       INCF   FSR
       MOVF   INDF,0
       MOVWF TXBUF
       CALL   TX
       INCF   FSR
       MOVF   INDF,0
       MOVWF TXBUF
       CALL   BSTOP
OUT1   RETLW 0
;*****************************************  
XIANSHI
       MOVLW    08H
      MOVWF    COUNT
LOOP   BTFSC    BUFIN,7
       BSF      PORTC,5
       CALL     DELAY_1S
     
       BCF      PORTC,5
      
       CALL     DELAY_1S
       RLF      BUFIN,1
       DECFSZ   COUNT,1
       GOTO     LOOP
       BCF      PORTC,5
       RETLW    0
 ;********************************     
 
 
;------------------------------------------------------------
;25ms计时子程序
;------------------------------------------------------------         
DELAY_25  
         MOVLW     20H
         MOVWF     COUNT_T0
DELAY    CLRWDT
         MOVLW     0FFH
         MOVWF     COUNT_T1
DELAY1   DECFSZ    COUNT_T1,1
         GOTO      DELAY1
         DECFSZ    COUNT_T0,1
         GOTO      DELAY
         RETLW     0
;------------------------------------------------------------
;250ms计时子程序
;------------------------------------------------------------        
DELAY_250
         MOVLW     0F2H
         MOVWF     COUNT_T0
DELAY2   CLRWDT                       
         MOVLW     0FFH
         MOVWF     COUNT_T1
DELAY21 NOP                           ;内层循环1024us
         DECFSZ    COUNT_T1,1        
         GOTO      DELAY21
         DECFSZ    COUNT_T0,0
         GOTO      DELAY2
         RETLW     0          
;-------------------------------------------------------------
;主程序开始
;-------------------------------------------------------------         
          ORG      100H
INT_INIT
              
               BANKSEL PORTC
               MOVLW B'11001000'     
               TRIS PORTC
               CLRF PORTC
        CLRF FLAG
               MOVLW 00H
        MOVWF IN_DATA_0
               MOVWF IN_DATA_1
               MOVWF IN_DATA_2
               MOVWF COUNTER
               MOVWF COUNTER0
               MOVWF COUNTER1
               MOVWF COUNTER2
       
              
SIGNAL_SERVICE                                ;COUNTERX 计数器分配混乱,需要调整
               BTFSS SIGNAL
               GOTO SIGNAL_RET
               CLRF COUNTER0
SIGNAL_SYN_HIGH
 
               CLRWDT
               BTFSS SIGNAL
               GOTO SIGNAL_SYN_HIGH_TEST            
               INCF COUNTER0,F
               BTFSS STATUS,Z
               GOTO SIGNAL_SYN_HIGH
               GOTO SIGNAL_RET
              
SIGNAL_SYN_HIGH_TEST           ;210us
               MOVLW D'30'                    ;30?这个取值需要重新计算
               SUBWF COUNTER0,W
               BNC SIGNAL_RET
               CLRF COUNTER1
 
SIGNAL_SYN_LOW                       
               GOTO $+1
               GOTO $+1
               GOTO $+1
               GOTO $+1
               GOTO $+1
               GOTO $+1
               CLRWDT
               BTFSC SIGNAL
               GOTO SIGNAL_RET
               DECFSZ COUNTER1,F
               GOTO SIGNAL_SYN_LOW
              
SIGNAL_SYN_LOW_WAIT
               CLRWDT
               BTFSS SIGNAL
               GOTO SIGNAL_SYN_LOW_WAIT             
               MOVLW D'24'
               MOVWF COUNTER2
 
SIGNAL_PERIOD_START
               CLRF COUNTER0
               CLRF COUNTER3
 
SIGNAL_PERIOD_LOW_WAIT
               CLRWDT
               GOTO $+1
               BTFSC SIGNAL
               GOTO SIGNAL_PERIOD_HIGH
               INCFSZ COUNTER0,F
               GOTO SIGNAL_PERIOD_LOW_WAIT
               GOTO SIGNAL_RET
 
SIGNAL_PERIOD_HIGH                                           ;6个时钟周期
               CLRWDT
               BTFSS SIGNAL
               GOTO SIGNAL_PERIOD_VALUE_JUDGE
               INCFSZ COUNTER3,F
               GOTO SIGNAL_PERIOD_HIGH
               GOTO SIGNAL_RET
              
SIGNAL_PERIOD_VALUE_JUDGE            
               MOVLW D'20'                                           ;高电平小于120us 退出
               SUBWF COUNTER3,W
               BNC SIGNAL_RET
               BCF FLAG,0
               MOVLW D'80'                                           ;高电平大于120us 小于480us判断为‘0’
               SUBWF COUNTER3,W                              ;              大于480us 判断为‘1’
               BNC SIGNAL_PERIOD_VALUE_SAVE
               BSF FLAG,0
              
SIGNAL_PERIOD_VALUE_SAVE
                              
               RLF IN_DATA_0,F
               RLF IN_DATA_1,F
               RLF IN_DATA_2,F
               BCF IN_DATA_0,0
               BTFSC FLAG,0
               BSF IN_DATA_0,0
               DECFSZ COUNTER2,F
               GOTO SIGNAL_PERIOD_START
              
              
              
              
               BSF LIGHT                    ;收到信号,闪3下
               CALL DELAY_1S
               BCF LIGHT
               CALL DELAY_1S
              
               BSF LIGHT
               CALL DELAY_1S
               BCF LIGHT
               CALL DELAY_1S
              
               BSF LIGHT
               CALL DELAY_1S
               BCF LIGHT
               CALL DELAY_1S
            MOVLW    0FH                           
               ANDWF    IN_DATA_0,W
               MOVWF    DATA1            ;屏蔽低4位,保留地址码值
               MOVLW    0F0H
               ANDWF    IN_DATA_0,F      ;屏蔽高4位,保留键码值
;-------------------------------------------------------------------------------------------          
;对接收到的数据进行处理,若为初始化(学习),则将数据存入EEPROM;否则,给出开锁或者上锁信号
;------------------------------------------------------------------------------------------
SIGNAL_PROCESSING
       BCF      PORTC,0
       BCF      PORTC,1
         
       ;BTFSC    STUDY
       ;GOTO     WRITE
         
       MOVLW 40H
       MOVWF FSR
       MOVLW 03H         ;3次读
       MOVWF BY_COUNT
       CLRF   PORTC
       MOVLW B'10100000'
       MOVWF SLAVE
       CLRF   ADDR
       CALL   BSTART
       MOVF   SLAVE,0
       MOVWF TXBUF
       CALL   TX
       MOVF   ADDR,0
       MOVWF TXBUF
       CALL   TX
       CALL   BSTART
       MOVLW B'10100001'
       MOVWF TXBUF
       CALL   TX
RBYTE CALL   RX
       MOVF   BUFIN,0
       MOVWF INDF
       INCF   FSR
       DECFSZ BY_COUNT,1
       GOTO   LOWACK
       BSF    EEPROM,DO
       CALL   BITOUT
       CALL   BSTOP
       GOTO   OUT2
      
LOWACK BCF    EEPROM,DO
       CALL   BITOUT
       CALL   XIANSHI
       GOTO   RBYTE
       NOP                               
         
OUT2      MOVLW    B'11001000'
          TRIS     PORTC
          BSF      LIGHT               ;读完闪1次
          CALL     DELAY_1S
          BCF      LIGHT
          GOTO     CHECK_AD
WRITE     CALL     WR_EEPROM
          BSF      FLAG,1
         BSF      LIGHT
          CALL     DELAY_250
          BCF      LIGHT               ;进入写EEPROM
          GOTO     EXIT                               
;-----------------------------------------------------------
;比较地址码
;-----------------------------------------------------------              
CHECK_AD MOVLW    40H                        
          MOVWF    FSR
          MOVF     IN_DATA_0,0
          XORWF    INDF,0
          BTFSS    STATUS,Z
          GOTO     EXIT
          INCF     FSR,1
          MOVF     IN_DATA_1,0
          XORWF    INDF,0
          BTFSS    STATUS,Z
          GOTO     EXIT
          INCF     FSR,1
          MOVF     IN_DATA_2,0
          XORWF    INDF,0
          BTFSS    STATUS,Z
          GOTO     EXIT           ;地址码不对,跳出
;------------------------------------------------------------------
;检查指令
;-------------------------------------------------------------------        
          GOTO     OPEN
DONE      MOVF     DATA1,0              
          XORLW    00H
          BTFSS    STATUS,Z
          GOTO     OPEN
          GOTO     EXIT
OPEN      BSF      PORTC,5
          CALL     DELAY_250
          BCF      PORTC,5
          CALL     DELAY_250
          BSF      PORTC,5
          CALL     DELAY_250
          BCF      PORTC,5
EXIT     
          NOP                
          
SIGNAL_RET
               GOTO SERVICE_END
SERVICE_END
 
              
               NOP
               NOP
               BTFSC SIGNAL                          ;SIGNAL =1外部有信号输入
               GOTO SIGNAL_SERVICE
               NOP
                      
               NOP
               NOP
               NOP
               NOP
               NOP
              
               GOTO SERVICE_END      
        END                                                              

  • 发表评论
  • 用户:  验证码: 点击更换  

 

设为首页 | 加入收藏 | 联系我们    
深圳市战狼科技发展有限公司 TEL:0755-84049479  FAX:0755-89764091  EMAIL:ftxy08@126.com
工厂地址:深圳市龙岗区横岗街道简龙街58号月角排科技园B栋二楼

Powered by PageAdmin CMS