英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: [分享KEELQ 滚动码解码源程序---1 [打印本页]

作者: winnie    时间: 2009-3-8 15:12
标题: [分享KEELQ 滚动码解码源程序---1
[分享KEELQ 滚动码解码源程序---1

      LIST P=16C54,R=DEC
;------------------------------------------------------------------------------
;******USER DEFINITIONS******
MAX_USERS      EQU      15
; This is the maximum number of transmitters that the system is able to
; learn (1 to 15).  
;------------------------------------------------------------------------------

; GENERAL PURPOSE REGISTERS

IND      EQU      00H            ; INDIRECT ADDRESS REGISTER
RTCC      EQU      01H            ; REAL TIME COUNTER CLOCK
PC      EQU      02H            ; PROGRAM COUNTER
STATUS      EQU      03H             ; STATUS REGISTER
FSR      EQU      04H            ; FILE SELECT REGISTER
PORTA   EQU     05H            ; PORT A
PORTB   EQU     06H            ; PORT B

; USER DEFINED REGISTER

FLAGS      EQU      07H            ; USER FLAG REGISTER
ADDRESS      EQU      08H            ; ADDRESS REGISTER
TXNUM      EQU      09H            ; CURRENT TX
OUTBYT      EQU      0AH            ; GENERAL DATA REGISTER
MASK      EQU      OUTBYT            ; MASK REGISTER USED IN DECRYPTION
TMP_CNT      EQU      OUTBYT            ; TEMPORARY COUNTER

; COUNTER REGISTERS

CNT0    EQU     0BH            ; LOOP COUNTERS
CNT1    EQU      0CH            
CNT2    EQU     0DH            

CNT_HI      EQU      0EH            ; 16 BIT CLOCK COUNTER
CNT_LW      EQU      0FH            

; CIRCULAR BUFFER REGISTER

CSR0    EQU     10H                 ; 64 BIT RECEIVE SHIFT REGISTER
CSR1    EQU     11H            
CSR2    EQU     12H            
CSR3    EQU     13H            
CSR4    EQU     14H                 
CSR5    EQU     15H            
CSR6    EQU     16H            
CSR7    EQU     17H            

; TEMP REGISTERS
TMP1      EQU      18H            ; TEMP REGISTER FOR READ AND WRITE
TMP2      EQU      19H            ; TEMP REGISTER FOR READ AND WRITE
REG      EQU      1AH            ; NOT USED
REG1      EQU      1BH            ; NOT USED

KEY0      EQU      1CH            ; 64 BIT KEY SHIFT REGISTER
KEY1      EQU      1DH
KEY2      EQU      1EH
KEY3      EQU      1FH
KEY4      EQU      CNT2
KEY5      EQU      CSR5
KEY6      EQU      CSR6
KEY7      EQU      CSR7

; ***** USER REGISTER RE-MAPPINGS ***************

HOP1      EQU      CSR0            ; 32 BIT HOPCODE REGISTER
HOP2      EQU      CSR1
HOP3      EQU      CSR2
HOP4      EQU      CSR3

; RECEIVED TRANSMISSION OPEN 32 BITS

SER_0      EQU      CSR7            ; 28 BIT SERIAL NUMBER
SER_1      EQU      CSR6
SER_2      EQU      CSR5
SER_3      EQU      CSR4

; RECEIVED TRANSMISSION ENCRYPTED 32 BITS

FUNC      EQU      CSR3            ; BUTTON CODE & USER BIT FUNCTION BYTE
DISC      EQU      CSR2            ; DISCRIMINATION VALUE
CNTR_HI      EQU      CSR1            ; 16 BIT RX COUNTER HIGH BYTE
CNTR_LW      EQU      CSR0            ; 16 BIT RX COUNTER LOW BYTE

; ********* EEPROM MEMORY *******
LRNPTR      EQU      01H            ; LEARN POINTER

; ********* PORTA BIT DEFINITIONS *******

RES0      EQU      0H            ; RESERVED PIN
RFIN      EQU      1H            ; RF INPUT
LRN      EQU      2H            ; LEARN BUTTON
LED      EQU      3H            ; LEARN INDICATOR LED OUTPUT - VALID SIGNAL

; ********* PORTB BIT DEFINITIONS *******

S0      EQU      0H            ; S0 OUTPUT
S1      EQU      1H            ; S1 OUTPUT
S2      EQU      2H            ; S2 OUTPUT
S3      EQU      3H            ; S3 OUTPUT

DIO      EQU      4H            ; EEPROM DATA LINE
CLK      EQU      5H            ; EEPROM SERIAL CLOCK
CS      EQU      6H            ; EEPROM CHIP SELECT
RES1      EQU      7H            ; RESERVED PIN

; ********* COMPILER DEFINES ******************
NBITS   EQU     64           ; MAXIMUM TRANSMISSION BIT LENGTH
MIN     EQU     560                 ; TRANSMISSION HEADER MINIMUM LENGTH [鍿]
TRISA      EQU      0111B            ; PORTA: TRI-STATE VALUE
WRCFG      EQU      00000000B      ; PORTB: EEPROM WRITE TRI-STATE VALUE
RDCFG      EQU      00010000B      ; PORTB: EEPROM READ TRI-STATE VALUE

;****** FLAGS DEFINITIONS **************
BITIN      EQU      0H            ; RF BIT VALUE
LRNF      EQU      1H            ; LEARN FLAG
SEC_CNT      EQU      2H            ; SECOND COUNTER IS BEING CHECKED
RELEARN      EQU      3H            ; RELEARNING A TRANSMITTER

;****** STATUS REGISTER BIT DEFINITIONS *****************
C       EQU       0            ; CARRY
DC      EQU       1            ; DIGIT CARRY
Z       EQU       2            ; ZERO
PD      EQU       3            ; POWER DOWN
TO      EQU       4            ; TIMEOUT
PA0     EQU       5            ; NOT USED
PA1     EQU       6            ; NOT USED

;------------------------------------------------------------------------------
; PAGE 0:
;------------------------------------------------------------------------------
     ORG 00H

;------------------------------------------------------------------------------
;
; FUNCTION     : RESET ()                             
;
; DESCRIPTION  : PROGRAM RESET ROUTINE
;
;------------------------------------------------------------------------------

RESET      
     MOVLW      000111B                  ; SETUP RTCC PRESCALER
     OPTION

     CLRF      PORTA                  ; RESET PORTA
     CLRF      PORTB                  ; RESET PORTB

     MOVLW      TRISA                  ; SETUP PORTA
     TRIS      PORTA
     MOVLW      WRCFG                  ; SETUP PORTB
     TRIS      PORTB

     CLRF      FLAGS                  ; RESET FLAGS

     GOTO      M_LOOP                  ; GOTO MAIN PROGRAM LOOP

;------------------------------------------------------------------------------
;
; FUNCTION          : ROT_SHIFT()                             
;
; DESCRIPTION        : RIGHT ROTATE 64 BIT RECEIVE SHIFT REGISTER
;
; NOTE            : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
;
;------------------------------------------------------------------------------

ROT_SHIFT
        RRF     CSR7,F
        RRF     CSR6,F
        RRF     CSR5,F                     
        RRF     CSR4,F                     
        RRF     CSR3,F                     
        RRF     CSR2,F                     
        RRF     CSR1,F                    
        RRF     CSR0,F                    
     RETLW      0

;------------------------------------------------------------------------------
;
; FUNCTION          : TX_LOOKUP ()                             
;
; DESCRIPTION        : TRANSMITTER ADDRESS CALCULATION
;
; NOTE            : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
;
;------------------------------------------------------------------------------

TX_LOOKUP
     MOVF      TXNUM,W                  ; USE TRANSMITTER NUMBER TO CALCULATE
     MOVWF      ADDRESS                  ; ADDRESS OF TRANSMITER BLOCK
     CLRC                        ; MULTIPLY BY 4
     RLF      ADDRESS,F
     RLF      ADDRESS,F
     MOVLW      04H                  ; AND ADD 4
     ADDWF      ADDRESS,F
     RETLW      0                  ; RETURN

;------------------------------------------------------------------------------
;
; FUNCTION          : TST_RTCC ()                             
;
; DESCRIPTION        : UPDATE RTCC COUNTER
;
; NOTE            : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
;
;------------------------------------------------------------------------------
TST_RTCC
     CLRWDT                        ; RESET WATCHDOG TIMER
     MOVLW      TRISA                  ; UPDATE TRI-STATE REGISTER FOR PORTA
     TRIS      PORTA

     BTFSS      RTCC,7                  ; TEST FOR 32MS TIMEOUT      ON RTCC MSB
     RETLW      0                  ; ... DO QUICK RETURN TO RECEIVE ROUTINE

; **** INCREASE 16 BIT CLOCK TIMER *******

     BCF      RTCC,7                  ; CLEAR MSB OF RTCC
     INCF      CNT_LW,F            ; INCREASE 16 COUNTER
     SKPNZ                        ; INCREASE UPPER BYTE IF ZERO ( OVERFLOW )
     INCF      CNT_HI,F
     RETLW      0

;------------------------------------------------------------------------------
;
; FUNCTION          : TST_TIMER()                             
;
; DESCRIPTION        : TEST 32MS TIMER AND UPDATE OUTPUTS IF REQUIRED
;
; NOTE            : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
;
;------------------------------------------------------------------------------

TST_TIMER
; ***** TEST FOR 500 MS TIMEMOUT ON OUTPUTS **********
     BTFSS      CNT_LW,4            ; TEST FOR 500 MS TIMEOUT
     GOTO      TST_30                  ; ... IF NOT TEST 30S TIMEOUT

     MOVLW      0F0H
     ANDWF      PORTB,F                  ; DOWN ALL PULSE OUTPUTS

; ********* TEST FOR 30 S LEARN TIMEOUT *************
TST_30      BTFSS      FLAGS,LRNF
     GOTO      TST_END
     
     BTFSC      CNT_HI,2            ; TEST FOR LEARN TIMEOUT
     GOTO      RESET                  ; ... IF LEARN TIMEMOUT FORCE SOFT RESET

TST_END      
     RETLW      0H

;------------------------------------------------------------------------------
;
; FUNCTION          : SENDC ()                             
;
; DESCRIPTION        : SEND EEPROM COMMAND
;
; NOTE            : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
;
;------------------------------------------------------------------------------

SENDC
     CLRWDT                        ; RESET WATCHDOG TIMER

        BCF     PORTB,CS                ; RESET CS STATE
        BCF     PORTB,CLK               ; RESET CLK STATE
        BCF     PORTB,DIO               ; RESET DIO STATE

        MOVLW   WRCFG
        TRIS    PORTB                   ; DIO = OUTPUT
        GOTO    $+1                     ; WAIT FOR OUTPUTS TO SETTLE
        BSF     PORTB,CS                ; SELECT EEPROM
        SETC                            ; START BIT = 1
        MOVLW   9D                      ; START BIT + 8 DATA BITS
     MOVWF      CNT1

SENDC2
        SKPC                            ; TEST BIT
        BCF     PORTB,DIO               ; WRITE TO DIO
        SKPNC                           ; TEST BIT
        BSF     PORTB,DIO               ; WRITE TO DIO
        GOTO    $+1                     ; WAIT 2 US
        RLF     OUTBYT,F                ; GET NEXT BIT INTO CARRY
        BSF     PORTB,CLK               ; CLOCK HIGH
        GOTO    $+1                     ; WAIT 2 US
        GOTO    $+1                     ; WAIT 2 US
        BCF     PORTB,CLK               ; CLOCK LOW
     DECFSZ      CNT1,F                  ; LOOP COUNTER
        GOTO      SENDC2
        BCF     PORTB,DIO               ; AVOID CONTENTION WITH READ
        RETLW   0





欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2