MOVF CNT0,W ; CALIBRATION COUNTER
MOVWF CNT2 ; (NOMINALLY 75 FOR 300 us PULSE)
MOVLW 3 ; SEE CALCULATION BELOW
SUBWF CNT2,1 ;
NOP ;
; SUB TOTAL = 5 CYCLE
; TOTAL = 24 => 24/8 = 3 LOOP COUNTERS
;*************************************************************************
; TOTAL = 24 INSTRUCTIONS
; SUBTRACT 24/8 = 3 TO COMPESATE FOR UPDATEING CSR AND OTHER PROCESSING
; AFTER DATA SAMPLE IS TAKEN.
;*************************************************************************
DL3
GOTO $+1 ; WASTE TIME
GOTO $+1 ; WASTE TIME
CLRWDT ; RESET WATCHDOG TIMER
DECFSZ CNT2,1 ;
GOTO DL3 ; CNT0 X 8 us [ CNT0 X Te ]
SAMPLE3
BTFSC PORTA,RFIN ; INPUT LOW? THIRD SAMPLE
GOTO RMT0 ; [0] NO--RECEIVE ERROR
CALL TST_RTCC
; [11] CHECK RTCC
DECFSZ CNT1,1 ; LAST BIT?
GOTO RCV8 ; ... NO, GET NEXT BIT
GOTO RMT1 ; TOTAL = 14 CYCLES
RMT_0
RMT0
RMT01 BSF STATUS,C ; INVALID TRANSMISSION
RETLW 1 ; RETURN
RMT1 BSF PORTA,LED ; VALID TRANSMISSION FORMAT, LED ON
MOVLW 0FH ; FORCE OPEN BUTTON CODES TO ZERO
ANDWF SER_0,1
CLRC ; VALID SERIAL NUMBER => VALID TX
RETLW 0 ; RETURN
;------------------------------------------------------------------------------
;
; FUNCTION : M_LOOP ()
;
; DESCRIPTION : MAIN PROGRAM ROUTINE
;
;------------------------------------------------------------------------------
M_LOOP BCF PORTA,LED
BTFSS PORTA,LRN
GOTO LEARN ; TEST & HANDLE LEARN BUTTON
CALL TST_RTCC ; UPDATE TIMER
CALL TST_TIMER ; HANDLE TIMER - UPDATE OUTPUTS
CALL RECEIVE ; RECEIVE TRANSMISSION
BC M_LOOP ; CHECK IF TRANSMISSION VALID
M_SEARCH
CLRF TXNUM ; TEST FIRST POSITION
; ******* COMPARE LOWER WORD OF SERIAL NUMBER ********
M_SERIAL
CALL TX_LOOKUP ; GET TX BASE ADDRESS
BSF ADDRESS,1 ; ADD 2 TO BASE ADDRESS
CALL EEREAD ; READ LOWER 16-BITS OF SER# FROM EEPROM
MOVFW TMP1 ; COMPARE RX AND EEPROM VALUES
XORWF SER_2,W
BNZ M_NEXT ; IF NOT EQUAL CHECK NEXT
MOVFW TMP2 ; COMPARE RX AND EEPROM VALUES
XORWF SER_3,W
BNZ M_NEXT ; IF NOT EQUAL CHECK NEXT
; ******* COMPARE UPPER WORD OF SERIAL NUMBER ********
M_SERIAL2
INCF ADDRESS,F ; POINT TO NEXT ENTRY
CALL EEREAD ; READ UPPER 16-BITS OF SER# FROM EEPROM
MOVFW TMP1 ; COMPARE RX AND EEPROM VALUES
XORWF SER_0,W
BNZ M_NEXT ; IF NOT EQUAL CHECK NEXT
MOVFW TMP2 &nb
sp;; COMPARE RX AND EEPROM VALUES
XORWF SER_1,W
BNZ M_NEXT ; IF NOT EQUAL CHECK NEXT
BTFSS FLAGS,LRNF ; LEARN MODE
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.

