RSS

滚动码解码源程序

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


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


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