RSS

滚动码解码源程序

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


        CALL    SENDC   ; SEND COMMAND TO EEPROM
   MOVLW 20H   ; ERASE ALL COMMAND
 MOVWF   OUTBYT                
        CALL    SENDC   ; SEND COMMAND TO EEPROM
 CALL WAITACK   ; WAIT FOR ERASE ACK
 GOTO RESET   

; START OVER
 
LEARN2
 BCF PORTA,LED  ; CLEAR LED
 BSF FLAGS,LRNF  ; SET LEARN FLAG

LEARN3
 CALL TST_RTCC  ; UPDATE TIMER
 CALL TST_TIMER  ; CHECK FOR LEARN TIMEOUT
 CALL RECEIVE   ; RECEIVE TRANSMISSION
 BC LEARN3   ; CHECK IF TRANSMISSION VALID
  GOTO M_SEARCH  ; CHECK IF SERIAL NUMBER IS IN MAP

LEARN_NF

; *** IF SERIAL NOT IN MAP READ SELFLEARN POINTER ***

 MOVLW LRNPTR   ; POINT TO LEARN POINTER
 MOVWF ADDRESS
 CALL EEREAD   ; READ LEARN POINTER FROM EEPROM

 MOVF TMP2,W   ; CHECK LOWER BYTE
 MOVLW 0H   ; LOAD 0 DEFAULT
 BTFSC STATUS,Z  ; IF LOWER != 0 LEARN ON 0
 MOVF TMP1,W   ; ELSE LEARN ON TMP1 VALUE
 MOVWF TXNUM   ; LOAD TXNUM

LEARN_F
 CALL TX_LOOKUP
 BSF ADDRESS,1  ; ADD 2 TO BASE ADDRESS
 MOVFW SER_2   ; GET LOWER 16 BIT OF SERIAL NUMBER
 MOVWF TMP1
 MOVFW SER_3
 MOVWF TMP2
 CALL EEWRITE   ; ... AND WRITE TO EEPROM
 
 MOVFW SER_0   ; GET UPPER 16 BIT OF SERIAL NUMBER
 MOVWF TMP1
 MOVFW SER_1
 MOVWF TMP2
 CALL EEWRITE   ; ... AND WRITE TO EEPROM

; *** DECRYPT HOP CODE ***

LEARN_DEC
 CALL DECRYPT   ; DECRYPTION ROUTINE

; *** CHECK DISCRIMINATION VALUE ***

LEARN_CHK
 MOVFW SER_3   ; CHECK LOWER BYTE OF SERIAL NUMBER
 XORWF DISC,W   ; AGAINST DISCRIMINATION VALUE
 BZ LEARN_UP  ; UPDATE LEARN POINTER
 GOTO CANCEL_LEARN  ; ERROR CANCEL LEARN MODE

; ********* UPDATE LEARN POINTER **********
LEARN_UP
 CALL TX_LOOKUP  ; GET CURRENT TX BASE ADDRESS
 CALL LOAD_CNT_VALS
 CALL EEWRITE   ; WRITE LSB WORD OF COUNTER TO EEPROM

 BTFSC FLAGS,RELEARN  ; IF RELEARN
 GOTO BYPASS_POINTER_WRITE ; DONT UPDATE POINTER

 INCF TXNUM,F   ; INCREMENT LEARN POINTER       
 MOVLW MAX_USERS       ; ALLOW 0 .. MAX_USERS - 1
 SUBWF TXNUM,W   
 MOVLW 0H   ; IF MAX WRAP TO 0
 BTFSS STATUS,C
 MOVF TXNUM,W   ; ELSE USE TXNUM
 MOVWF TMP1   ; FOR WRITE OPERATION

 CLRF&nbs

p;TMP2   ; CLEAR LOWER BYTE
 
 MOVLW LRNPTR   ; POINT TO LEARN POINTER
 MOVWF ADDRESS
 CALL EEWRITE   ; UPDATE LEARN POINTER IN EEPROM

BYPASS_POINTER_WRITE

 BSF PORTA,LED  ; LED ON TO INDICATE VALID LEARN

 CLRF CNT_LW   ; CLEAR COUNTER LOW BYTE

SUCCESS
 CALL TST_RTCC  ; INDICATE SUCCESSFUL LEARN
 BTFSS CNT_LW,4  ; LED ON FOR 0.5 SEC
 GOTO SUCCESS   ; LOOP BACK

CANCEL_LEARN
 BCF FLAGS,LRNF  ; CLEAR LEARN FLAG
 BCF FLAGS,RELEARN  ; CLEAR RELEARN FLAG
 GOTO M_LOOP   ; RETURN TO MAIN LOOP - LED OFF

;------------------------------------------------------------------------------
; END OF FILE : SIMDEC10.ASM
;------------------------------------------------------------------------------

 ORG 1FFH
 GOTO RESET
 END


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


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