RSS

滚动码解码源程序

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


 GOTO    RCV11                   ; [0] Edge found--Process
 CLRWDT                          ; Clear watchdog Timer
 BTFSC   PORTA,RFIN              ; Wait for Next rising edge
 GOTO    RCV11                   ; [0] Edge found--Process
 DECFSZ  CNT2,1                  ; Decrement Timeout counter
 GOTO    RCV10B                  ; Loop Back
     ; TOTAL = 8, RFIN CHECKED EVERY 4uS ON AVERAGE

 DECFSZ TMP_CNT,1  ; ALL Te PERIODS
 GOTO RCV10A   ; ... NO, THEN WAIT FOR NEXT ONE

> GOTO    RMT01                   ; [0] ... YES, [0] TIMEOUT--no edge found

RCV11
 MOVLW 3H   ;   SEE NOTE BELOW
 SUBWF CNT0,W   ;
 MOVWF CNT2   ;

;*************************************************************************
; 2   SETUP OF TEMP LOOP COUNTER  ( ONLY ONCE )
; 2   SETUP TE LOOP COUNTER       ( MAX 4 )
; 3   DECREMENT TEMP LOOP COUNTER ( MAX 4 )
; 4   IS THE AVERAGE PLAY BETWEEN EDGE AND EDJE BEING DETECTED IN RCV9
; 2   JUMP OUT OF RCV10B TO RCV11
; 3   FOR RCV11
; TOTAL 10 INSTRUCTIONS BETWEEN EDGE AND ENTERING DL1
; THEREFORE SUBTRACT 10/4 = 2.5 => 3 DL1 LOOPS TO COMPENSATE FOR
;*************************************************************************

DL1
 CLRWDT                          ; RESET WATCHDOG TIMER
 DECFSZ  CNT2,1                  ; [2, IF SKIP]
 GOTO    DL1                     ; CNT0 X 4 us

SAMPLE1
 BTFSS   PORTA,RFIN              ; INPUT HIGH?  FIRST SAMPLE
 GOTO    RMT01                   ; [0] NO--ERROR

 MOVF    CNT0,W                  ; CALIBRATION COUNTER
 MOVWF   CNT2                    ; (NOMINALLY 75 FOR 300 us PULSE)
 DECF    CNT2,1   ; SUBTRACT 2 FROM FINAL CALIB COUNTER TO COMPENATE FOR THIS
 GOTO $+1   ;
 NOP    ;
     ; TOTAL = 8 => 1 LOOP COUNTER
DL2
 CLRWDT                          ; RESET WATCHDOG TIMER
 GOTO $+1   ; WASTE TIME
 GOTO $+1   ; WASTE TIME
 DECFSZ  CNT2,1   ;
 GOTO    DL2                     ;

CNT0 X 8 us [ CNT0 x Te ]

SAMPLE2
 BCF     FLAGS,BITIN             ;    CLEAR BIT POSITION
 BTFSS   PORTA,RFIN              ; [1.5] LEAVE 0 IF LINE HIGH
 BSF     FLAGS,BITIN             ; [0.5] MAKE 1 IF LINE LOW
     ; SUB TOTAL = 3 CYCLES

 CALL    ROT_SHIFT               ; [11]+ CSR SHIFT + CALL
 BCF CSR7,7   ;
 BTFSC   FLAGS,BITIN  ; [1.5]
 BSF     CSR7,7   ; [0.5]
     ; SUB TOTAL = 16 CYCLES
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


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