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
MOV FW TMP2 ; 16 BIT COUNTER SUBSTRACTION
SUBWF CNTR_LW,W
MOV WF TMP2
SKPC ; SKIP IF NO BORROW
INCF TMP1,F ; ... ELSE INCR HI BYTE
MOV FW TMP1
SUBWF CNTR_HI,W
MOV WF TMP1
BCF TMP1,0 ; MAKE ACCEPTED WINDOW 512
M_CHECK0
MOV FW 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
MOV FW 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
MOV LW 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
MOV WF 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
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 下一页
本文关键字:源程序 PIC单片机,单片机-工控设备 - PIC单片机