XORWF KEY1,W ; ONLY INTERESTED IN BIT KEYREG1,7
MOVWF MASK ; STORE W TEMPORARILY (WE NEED BIT 7)
RLF MASK,F ; LEFT ROTATE MASK TO GET BIT 7 INTO THE CARRY
RLF HOP1,F ; SHIFT IN THE NEW BIT
RLF HOP2,F
RLF HOP3,F
RLF HOP4,F
ROTATE_KEY
CLRC ; CLEAR CARRY
BTFSC KEY7,7 ; SET CARRY IF LEFTMOST BIT SET
SETC ; SET CARRY IF LEFTMOST BIT SET
RLF KEY0,F ; LEFT-ROTATE THE 64-BIT KEY
RLF KEY1,F
RLF KEY2,F
RLF KEY3,F
RLF KEY4,F
RLF KEY5,F
RLF KEY6,F
RLF KEY7,F
DECFSZ CNT0,F ; INNER LOOP 48 TIMES
GOTO DECRYPT_INNER ; INNER LOOP 48 TIMES
DECFSZ CNT1,F ; OUTER LOOP 12 TIMES (11 + 1 TO RESTORE
KEY)
GOTO DECRYPT_OUTER ; OUTER LOOP 12 TIMES (11 + 1 TO RESTORE KEY)
RETLW 0 ; RETURN
;------------------------------------------------------------------------------
;
; FUNCTION : LOAD_CNT_VALS()
;
; DESCRIPTION : LOAD COUNTERS INTO WRITE BUFFERS
;
; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
;
;------------------------------------------------------------------------------
LOAD_CNT_VALS
MOVFW CNTR_HI ; LOAD MSB OF COUNTER
MOVWF TMP1
MOVFW CNTR_LW ; LOAD LSB OF COUNTER
MOVWF TMP2
RETLW 0
;------------------------------------------------------------------------------
;
; FUNCTION : RECEIVE()
;
; DESCRIPTION : RECEPTION ROUTINE FOR PWM TRANSMISSIONS
;
; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
;
;------------------------------------------------------------------------------
RECEIVE
;******** WAIT FOR HEADER AND CALIBRATE *******************
BTFSS PORTA,RFIN ; INPUT LOW?
GOTO RMT_0 ; YES; RECEIVE ERROR
MOVLW 10 ; 10 ms TIMER
MOVWF CNT1
RCV0
MOVLW 200
MOVWF CNT0
RCV1
BTFSS PORTA,RFIN ; INPUT HIGH?
GOTO RCV2 ; [0] NO, JUMP OUT OF LOOP
DECFSZ CNT0,1 ; YES, CONTINUE WITH TIMING LOOP
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.

