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电子"即可.

