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
MOV LW 30H ; ERASE ENABLE COMMAND
MOV WF OUTBYT
CALL SENDC ; SEND COMMAND TO EEPROM
MOV LW 20H ; ERASE ALL COMMAND
MOV WF 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 ***
MOV LW LRNPTR ; POINT TO LEARN POINTER
MOV WF ADDRESS
CALL EEREAD ; READ LEARN POINTER FROM EEPROM
MOV F TMP2,W ; CHECK LOWER BYTE
MOV LW 0H ; LOAD 0 DEFAULT
BTFSC STATUS,Z ; IF LOWER != 0 LEARN ON 0
MOV F TMP1,W ; ELSE LEARN ON TMP1 VALUE
MOV WF TXNUM ; LOAD TXNUM
LEARN_F
CALL TX_LOOKUP
BSF ADDRESS,1 ; ADD 2 TO BASE ADDRESS
MOV FW SER_2 ; GET LOWER 16 BIT OF SERIAL NUMBER
MOV WF TMP1
MOV FW SER_3
MOV WF TMP2
CALL EEWRITE ; ... AND WRITE TO EEPROM
MOV FW SER_0 ; GET UPPER 16 BIT OF SERIAL NUMBER
MOV WF TMP1
MOV FW SER_1
MOV WF TMP2
CALL EEWRITE ; ... AND WRITE TO EEPROM
; *** DECRYPT HOP CODE ***
LEARN_DEC
CALL DECRYPT ; DECRYPTION ROUTINE
; *** CHECK DISCRIMINATION VALUE ***
LEARN_CHK
MOV FW 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
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 下一页
本文关键字:源程序 PIC单片机,单片机-工控设备 - PIC单片机