📄 rke_tianqiu_630 over.lst
字号:
00193 #define KEY2_ADDRESS 0X10
00194 #define KEY3_ADDRESS 0X20
00195 #define KEY4_ADDRESS 0X30
00196
00197 #define LEARN_ADDRESS 0X60 ;60 save 2 copy
00198 ;#define DECRIM_NUMBER 0XC2
00199 #define EEPROM_PROTEC 0X3A
00200
00201
00202 ;------------------------------------------------
00203
00204 ;RKE_Learn_Status
00205 #define RKE_LEARN_BEGIN 0x00 ;Get two H two L
00206 #define RKE_LEARN_READY 0x01
00207 #define RKE_LEARN_REAL1 0x02
00208 #define RKE_LEARN_REAL2 0x03
00209
00210
00211 ;------------------------------------------------
00212
00213 ;RF_Flags
00214 #define ALERT_LED_SHOW RF_Flags,0
00215 #define MAIN_CHECK RF_Flags,1
00216 #define WRITE_EEPROM_ENABLE RF_Flags,2
00217
00218 #define KEY_MAY_ERROR_CHECK RF_Flags,3
00219
00220 #define PASS_LOW RF_Flags,5
00221 #define RF_FRAME_GET RF_Flags,6
00222 #define RF_FRAME_RECIEVE RF_Flags,7 ;if set, Preamble is Get, if clr, test for preamble
00223
00224 ;------------------------------------------------
00225
00226 ;About Learn Port ;Door, fire and LearnKey
00227 #define PORT_LEARN_STATUS Key_Flag,2 ;three ways in at RC0/2/5
00228 #define PORT_HAND_OPEN Key_Flag,0 ;
00229 #define PORT_HAND_CLOSE Key_Flag,1 ;
00230
00231
00232
00233
00234
00235
00236
00237
00018
00019
00020
00021 ;**********************************************************************
0000 00022 ORG 0x000 ; processor reset vector
0000 018A 00023 clrf PCLATH ; ensure page bits are claared
0001 28CE 00024 goto main ; go to beginning of program
00025
MPASM 03.80 Released RKE_TIANQIU_630.ASM 2-7-2005 14:54:21 PAGE 6
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00026
0004 00027 ORG 0x004 ; interrupt vector location
0004 00A0 00028 movwf w_temp ; save off current W register contents
0005 0803 00029 movf STATUS,W ; move status register into W register
0006 1283 00030 bcf STATUS,RP0 ; ensure file register bank set to 0
0007 00A1 00031 movwf status_temp ; save off contents of STATUS register
00032
0008 018A 00033 clrf PCLATH
0009 204D 00034 call Interrupt_Begin
00035
000A 0821 00036 movf status_temp,w ; retrieve copy of STATUS register
000B 0083 00037 movwf STATUS ; restore pre-isr STATUS register contents
000C 0EA0 00038 swapf w_temp,f
000D 0E20 00039 swapf w_temp,w ; restore pre-isr W register contents
000E 0009 00040 retfie ; return from interrupt
00041
00042 #include "Decript.inc"
00001 ;-------------------------------------------------------------------------
00002 ;
00003 ; FUNCTION : DECRYPT ()
00004 ;
00005 ; DESCRIPTION : DECRYPTS 32 BIT [HOP1:HOP4] USING [CSR0:CSR7]
00006 ;
00007 ; PAGE : 0 ( NOTE : MUST BE LOWER HALF OF PAGE )
00008 ;
00009 ;-------------------------------------------------------------------------
000F 00010 DECRYPT
000F 300C 00011 MOVLW 11+1 ; OUTER LOOP 11+1 TIMES
0010 00A7 00012 MOVWF CNT1 ; OUTER LOOP 11+1 TIMES
00013
0011 00014 DECRYPT_OUTER
0011 3030 00015 MOVLW 48 ; INNER LOOP 48 TIMES
0012 00A6 00016 MOVWF CNT0 ; INNER LOOP 48 TIMES
00017
0013 00018 DECRYPT_INNER
0013 0064 00019 CLRWDT ; RESET WATCHDOG TIMER
0014 0827 00020 MOVFW CNT1 ; LAST 48 LOOPS RESTORE THE KEY
0015 3A01 00021 XORLW 1 ; LAST 48 LOOPS RESTORE THE KEY
0016 1903 00022 SKPNZ ; LAST 48 LOOPS RESTORE THE KEY
0017 283D 00023 GOTO ROTATE_KEY ; LAST 48 LOOPS RESTORE THE KEY
00024
00025 ; THE LOOKUP TABLE IS COMPRESSED INTO IN 4 BYTES TO SAVE SPACE
00026 ; USE THE 3 LOW INDEX BITS TO MAKE UP AN 8-BIT BIT MASK
00027 ; USE THE 2 HIGH INDEX BITS TO LOOK UP THE VALUE IN THE TABLE
00028 ; USE THE BIT MASK TO ISOLATE THE CORRECT BIT IN THE BYTE
00029 ; PART OF THE REASON FOR THIS SCHEME IS BECAUSE NORMAL TABLE
00030 ; LOOKUP REQUIRES AN ADDITIONAL STACK LEVEL
00031
0018 1003 00032 CLRC ; CLEAR CARRY (FOR THE LEFT SHIFT)
00033
0019 3001 00034 MOVLW 1 ; INITIALISE MASK = 1
001A 19B1 00035 BTFSC HOP3,3 ; SHIFT MASK 4X IF BIT 2 SET
001B 3010 00036 MOVLW 10000B ; SHIFT MASK 4X IF BIT 2 SET
MPASM 03.80 Released RKE_TIANQIU_630.ASM 2-7-2005 14:54:21 PAGE 7
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
001C 00A5 00037 MOVWF MASK ; INITIALISE MASK = 1
00038
001D 1C32 00039 BTFSS HOP2,0 ; SHIFT MASK ANOTHER 2X IF BIT 1 SET
001E 2821 00040 GOTO $+3
001F 0DA5 00041 RLF MASK,F
0020 0DA5 00042 RLF MASK,F
00043
0021 1833 00044 BTFSC HOP1,0 ; SHIFT MASK ANOTHER 1X IF BIT 0 SET
0022 0DA5 00045 RLF MASK,F
00046
00047 ; MASK HAS NOW BEEN SHIFTED 0-7 TIMES ACCORDING TO BITS 2:1:0
00048
0023 3000 00049 MOVLW 0 ; TABLE INDEX = 0
0024 18B0 00050 BTFSC HOP4,1
0025 3802 00051 IORLW 2 ; IF BIT 3 SET ADD 2 TO THE TABLE INDEX
0026 1B30 00052 BTFSC HOP4,6
0027 3804 00053 IORLW 4 ; IF BIT 4 SET ADD 4 TO THE TABLE INDEX
00054
0028 0782 00055 ADDWF PCL,F ; ADD THE INDEX TO THE PROGRAM COUNTER
00056 ; [ MUST BE IN LOWER HALF OF PAGE ]
00057
0029 00058 TABLE
0029 302E 00059 MOVLW 02EH ; BITS 4:3 WERE 00
002A 2830 00060 GOTO TABLE_END ; END OF LOOKUP
00061
002B 3074 00062 MOVLW 074H ; BITS 4:3 WERE 01
002C 2830 00063 GOTO TABLE_END ; END OF LOOKUP
00064
002D 305C 00065 MOVLW 05CH ; BITS 4:3 WERE 10
002E 2830 00066 GOTO TABLE_END ; END OF LOOKUP
00067
002F 303A 00068 MOVLW 03AH ; BITS 4:3 WERE 11
00069
0030 00070 TABLE_END
0030 05A5 00071 ANDWF MASK,F ; ISOLATE THE CORRECT BIT
0031 3000 00072 MOVLW 0 ; COPY THE BIT TO BIT 7
0032 1D03 00073 SKPZ ; COPY THE BIT TO BIT 7
0033 3080 00074 MOVLW 10000000B ; COPY THE BIT TO BIT 7
00075
0034 0632 00076 XORWF HOP2,W ; ONLY INTERESTED IN BIT HOP2,7
0035 0630 00077 XORWF HOP4,W ; ONLY INTERESTED IN BIT HOP4,7
0036 0629 00078 XORWF KEY1,W ; ONLY INTERESTED IN BIT KEYREG1,7
00079
0037 00A5 00080 MOVWF MASK ; STORE W TEMPORARILY (WE NEED BIT 7)
0038 0DA5 00081 RLF MASK,F ; LEFT ROTATE MASK TO GET BIT 7 INTO CARRY
00082
0039 0DB3 00083 RLF HOP1,F ; SHIFT IN THE NEW BIT
003A 0DB2 00084 RLF HOP2,F
003B 0DB1 00085 RLF HOP3,F
003C 0DB0 00086 RLF HOP4,F
00087
003D 00088 ROTATE_KEY
003D 1003 00089 CLRC ; CLEAR CARRY
MPASM 03.80 Released RKE_TIANQIU_630.ASM 2-7-2005 14:54:21 PAGE 8
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
003E 1BAF 00090 BTFSC KEY7,7 ; SET CARRY IF LEFTMOST BIT SET
003F 1403 00091 SETC ; SET CARRY IF LEFTMOST BIT SET
00092
0040 0DA8 00093 RLF KEY0,F ; LEFT-ROTATE THE 64-BIT KEY
0041 0DA9 00094 RLF KEY1,F
0042 0DAA 00095 RLF KEY2,F
0043 0DAB 00096 RLF KEY3,F
0044 0DAC 00097 RLF KEY4,F
0045 0DAD 00098 RLF KEY5,F
0046 0DAE 00099 RLF KEY6,F
0047 0DAF 00100 RLF KEY7,F
00101
00102
0048 0BA6 00103 DECFSZ CNT0,F ; INNER LOOP 48 TIMES
0049 2813 00104 GOTO DECRYPT_INNER ; INNER LOOP 48 TIMES
00105
004A 0BA7 00106 DECFSZ CNT1,F ; OUTER LOOP 12 TIMES (11+1 TO RESTORE KEY)
004B 2811 00107 GOTO DECRYPT_OUTER ; OUTER LOOP 12 TIMES (11+1 TO RESTORE KEY)
00108
004C 3400 00109 RETLW 0 ; RETURN
00043 #include "Inter.inc"
00001 ; isr code can go here or be located as a call subroutine elsewhere
00002 ;**********************************************************
00003 ;interrupt codes
00004 ;**********************************************************
004D 00005 Interrupt_Begin:
00006 ;==========================================================
00007
004D 1283 1303 00008 banksel PORTA
00009
004F 1D0B 00010 btfss INTCON,T0IF
0050 28B3 00011 goto TMR0_Interrupt_Over
0051 110B 00012 bcf INTCON,T0IF
00013
0052 30B8 00014 movlw d'184' ;75us
0053 0781 00015 addwf TMR0,F
00016
0054 1B3D 00017 btfsc RF_FRAME_GET
0055 28C3 00018 goto Interrupt_Over
00019
0056 1BBD 00020 btfsc RF_FRAME_RECIEVE
0057 288C 00021 goto Get_Frame_Begin
00022
0058 1805 00023 btfsc RECIEVE_PORT
0059 285D 00024 goto Recieve_High
00025
005A 00026 Recieve_Low:
005A 0ABE 00027 incf Preamble_Low_Counter,F
005B 16BD 00028 bsf PASS_LOW
005C 28C3 00029 goto Interrupt_Over
005D 00030 Recieve_High:
005D 1EBD 00031 btfss PASS_LOW
005E 288A 00032 goto Recieve_High_Jump
MPASM 03.80 Released RKE_TIANQIU_630.ASM 2-7-2005 14:54:21 PAGE 9
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
005F 12BD 00033 bcf PASS_LOW
00034
00035 ;if 3<=High<5 and 3<=Low<5 then increase Preamble_Counter
00036 ;if 3<=High<5 and 30<=Low then test Preamble_Counter
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -