RSS

滚动码解码源程序

来源:网络 作者:未知 时间:2007-01-05 Tag: 点击:


 GOTO M_HOP   ; FOUND TRANSMITTER - DECRYPT

 BSF FLAGS,RELEARN  ; SET RELEARN FLAG
 GOTO LEARN_F   ; FOUND TRANSMITTER - LEARN
  
; **** SEARCH NEXT POSITION FOR SERIAL NUMBER *****
M_NEXT INCF TXNUM,F   ; POINT TO NEXT TRANSMITTER POSITION
 MOVLW MAX_USERS  ; TEST FOR LAST POSITION
 SUBWF TXNUM,W   
 BTFSS STATUS,C  ; NOT FOUND IN MAP
 GOTO M_SERIAL  ; TRY NEXT POSITION
M_NF
 BTFSS FLAGS,LRNF  ; LEARN MODE
 GOTO M_LOOP   ; NO... INVALID SERIAL NUMBER
 GOTO LEARN_NF  ; NEW TRANSMITTER - USE POINTER FOR LEARN

; ********** DECRYPT HOPCODE *********************
M_HOP 
 CALL DECRYPT   ; DECRYPT HOPCODE

; ********* TEST DICRIMINATION VALUE *************
M_DIS MOVFW SER_3   ; SERIAL NUBER LSB MUST BE EQUAL
 XORWF DISC,W   ; TO DISCRIMINATION VALUE
 BNZ M_LOOP

; *************** CHECK COUNTERS VALID ************
 BCF FLAGS,SEC_CNT  ; CHECK FIRST COUNTER
M_CNT CALL TX_LOOKUP  ; POINT LOWER 16 BIT COUNTER
 BTFSC FLAGS,SEC_CNT  ; IF SECOND COUNTER IS USED
 INCF ADDRESS,F  ; INCREMENT ADDRESS
 CALL EEREAD   ; READ LOWER 16 BIT COUNTER FROM EEPROM

; ************ CHECK COUNTER WINDOWS ***********
M_SUB
 MOVFW TMP2   ; 16 BIT COUNTER SUBSTRACTION
 SUBWF CNTR_LW,W
 MOVWF TMP2   
 SKPC    ; SKIP IF NO BORROW
 INCF TMP1,F   ; ... ELSE INCR HI BYTE
 MOVFW TMP1
 SUBWF CNTR_HI,W
 MOVWF TMP1

 BCF TMP1,0   ; MAKE ACCEPTED WINDOW 512

M_CHECK0
 MOVFW TMP1   ; TEST IF IN WINDOW ( UPPER BYTE )
 BTFSC STATUS,Z
 GOTO M_CHECK2  ; GO AND CHECK LOWER BYTE

 BTFSC FLAGS,SEC_CNT  ; IF SECOND COUNTER
 GOTO M_LOOP   ; ERROR - GOTO MAIN LOOP  

 BSF FLAGS,SEC_CNT  ; SET FLAG FOR SECOND COUNTER CHECK
 GOTO M_CNT   ; AND CHECK IT

M_CHECK2
 MOVFW TMP2   ; CHECK LOWER BYTE
 BZ M_TZERO   ; IF REPEAT - RESET TIMEOUT COUNTER

; ************ UPDATE EEPROM COUNTER ***********
M_UPDATE
 CALL TX_LOOKUP  ; GET CURRENT TX BASE ADDRESS
 CALL LOAD_CNT_VALS  ; LOAD COUNTER VALUES
 CALL EEWRITE   ; UPDATE FIRST COUNTER
 CALL LOAD_CNT_VALS  ; LOAD COUNTER VALUES 
 CALL EEWRITE   ; UPDATE SECOND COUNTER

; ******** UPDATE OUTPUT WITH CURRENT BUTTON CODE ********

M_OUTPUT
 MOVLW 0F0H   ; MASK ONLY BUTTON CODES
 ANDWF FUNC,1
 SWAPF FUNC,1   ; GET BUTTON CODE FROM FUNC BYTE
 
 BTFSC FUNC,0   ; CHANGE BUTTON TO S-OUTPUT FORMAT
 BSF FUNC,4   ; [ S2 S1 S0 S3 ]
 CLRC    
 RRF FUNC,W   
 
M_OUTPUT1
 MOVWF PORTB   ; UPDATE PORT WITH FUNCTION CODE

M_TZERO CLRF CNT_HI   ; RESET RTCC CLOCK
 CLRF CNT_LW   

M_END 
 GOTO M_LOOP   ; WAIT FOR NEXT TRANMISSION

;------------------------------------------------------------------------------
;
; FUNCTION      : LEARN ()          
;
; DESCRIPTION   : LEARN ROUTINE
;
;------------------------------------------------------------------------------

LEARN
 CLRF CNT_LW   ; RESET TIMER
 CLRF CNT_HI
 
 
LEARN1 BSF PORTA,LED  ; LED ON
 CALL TST_RTCC  ; UPDATE TIMER
 BTFSC PORTA,LRN  ; TEST FOR BUTTON RELEASE  
 GOTO LEARN2   ; ENTER LEARN MODE
 BTFSS CNT_HI,0  ; TEST FOR ERASE ALL
 GOTO LEARN1   ; LOOP BACK

; ******* EEPROM ERASE ALL ******************

 BCF PORTA,LED
ERASE_ALL
 CLRWDT    ; CLEAR WATCHDOG TIMER
 BTFSS PORTA,LRN  ; WAIT FOR BUTTON RELEASE
 GOTO ERASE_ALL  ; LOOP BACK

   MOVLW 30H   ; ERASE ENABLE COMMAND
 MOVWF   OUTBYT                
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
教程下载