⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hcs301_pro.asm

📁 HCS301的解码程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;本程序由"三全科技股份有限公司"的黄志伟提供,www.toptrend.com.tw   13530855065   0755-21827802
;本司代理:ATMEL;电源升降压如:1117/7805等;继电器


;-------------------------------------------------------------------------
;  LEGAL NOTICE
;
;  The information contained in this document is proprietary and
;  confidential information of Microchip Technology Inc.  Therefore all

;  parties are required to sign a non-disclosure agreement before
;  receiving this document.
;
; The information contained in this Application Note is for suggestion
; only.  It is your responsibility to ensure that your application
 meets
; with your specifications.  No representation or warranty is given and

; no liability is assumed by Microchip Technology Incorporated with
; respect to the accuracy or use of such information or infringement of

; patents or other intellectual property arising from such use or
; otherwise.
;-------------------------------------------------------------------------
;  MICROCHIP KEELOQ CODE HOPPING DECODER - NORMAL LEARN
;
;-------------------------------------------------------------------------
;  PROCESSOR   PIC16C56A
	RADIX       DEC
  ;  include     <p16c5x.inc>
;    __CONFIG  _WDT_ON & _CP_ON & _RC_OSC

;-------------------------------------------------------------------------
;CONFIGURATION CONTROL:
;  -VERSION 1.6  Lucio Di Jasio
;
;           FILE:	NORMAL.ASM.
;           DATE:	6 JUNE 2001
;           VER.:	1.6
;           CHKSM:  3973H
;           FUSES:	RC,WDT=ON,CP=ON.
;           ASM.: 	MPASM VERSION 2.61 USED.
;           INCL:	NONE
;
; CHANGES:
;       1. includes __config statement
;       2. name changed to NORMAL.ASM
;       3. processor changed to PIC16C56A
;
;  -VERSION 1.5  S. DAWSON
;
;           FILE:	MCDEC15.ASM.
;           DATE:	8 SEPTEMBER 1998
;           VER.:	1.5
;	    FUSES:	RC,WDT=ON,CP=ON.
;           ASM.: 	MPASM VERSION 2.13 USED.
;	    INCL:	NONE
;
;
;     1.  CODE HAS BECOME A RESERVED WORD IN MPASM - CHANGED IT TO DISC
;     2.  ADDED DISCLAIMER
;
;  -FIFTH VERSION 18 APRIL 1996, S.G. DAWSON
;
;           FILE:	MCDEC14.ASM.
;           DATE:	18 APRIL 1996.
;           VER.:	1.4
;	    FUSES:	RC,WDT=ON,CP=ON.
;           ASM.: 	MPASM VERSION 1.30.01 USED.
;	    INCL:	NONE
;
;
;      1.  STEMMING FROM THE MODIFICATION MADE IN THE 3RD REVISION.
;          THE NUMBER OF ROTATIONS IS DEPENDENT ON WHERE IN THE RECEIVE
;          ROUTINE THE RECEPTION FAILS.  IF FAIL ON THE FIRST SAMPLE
 THE
;          REGISTER WON'T HAVE BEEN SHIFTED.  FAILING ON THE 3RD BIT
 THE
;          SHIFT REGISTER WILL HAVE BEEN SKEWED.  ADDING RMT01 ALLOWS
 THE
;          CORRECTION ONLY TO BE DONE IF THE REGISTER HAS BEEN SKEWED.
;      2.  MORE CHANGES TO COMMENTS INCLUDING INVERTING THE ORDER OF
;          REVISION INFORMATION SO THAT THE MOST RECENT IS AT THE TOP
 OF
;          THE LIST.
;
;  -FOURTH VERSION APRIL 1996, S.G. DAWSON
;
;           FILE:	MCDEC13.ASM.
;           DATE:	APRIL 1996.
;           VER.:	1.3
;	    FUSES:	RC,WDT=ON,CP=ON.
;           ASM.: 	MPASM VERSION 1.30.01 USED.
;	    INCL:	NONE
;
;
;     1.  LEGAL INFORMATION ADDED.
;     2.  COMMENTS UPDATED TO FIT 75 COLUMN PAGE WIDTH WITH TAB SPACING
;         8 COLUMNS WIDE.
;
;  -THIRD VERSION  MARCH 1996, S.G. DAWSON
;
;           FILE:	MCDEC12.ASM.
;           DATE:	MARCH 1996.
;           VER.:	1.2
;	    FUSES:	RC,WDT=ON,CP=ON.
;           ASM.: 	MPASM VERSION 1.30.01 USED.
;	    INCL:	NONE
;
;    1.  RECEIVE ROUTINE UPDATED TO ALLOW MORE TOLERANCE TO PULSE
;        DISTORTION AT THE SMALLER BASIC PULSE WIDTHS.  THE PRIMARY
;        CHANGE MADE SHIFTS THE 64-BIT ROTATION OF THE INPUT BUFFER
 FROM
;        AFTER THE THIRD SAMPLE IS TAKEN INTO THE DELAY BETWEEN
 SAMPLING
;        THE DATA AND THE THIRD SAMPLE BEING TAKEN.  THE THIS ALLOWS
 THE
;        RECEPTION ROUTINE TO GET BACK TO POLLING FOR THE RISING EDGE
 OF
;        THE FOLLOWING BIT EARLIER AND ALLOWS MORE ROOM FOR PULSE
;        DISTORTION ON THE FAST SIDE.
;
;  APRIL 1996, S.G. DAWSON
;
;           FILE:	MCDEC12a.ASM.
;           DATE:	APRIL 1996.
;           VER.:	1.2a
;	    FUSES:	RC,WDT=ON,CP=ON.
;           ASM.: 	MPASM VERSION 1.30.01 USED.
;	    INCL:	NONE
;
;     1.  NTQ106 TRANSMISSIONS WERE ROTATED ONCE TOO MANY AS A RESULT
 OF
;         SHIFTING THE BIT UPDATE TO BEFORE THE 3RD SAMPLE.  THE
;         MODIFICATION MADE ROTATES THE NTQ106 TRANSMISSIONS CORRECTLY.
;
;  -SECOND VERSION  MARCH 1996, S.G. DAWSON
;
;           FILE:	MCDEC11.ASM.
;			DATE:	MARCH 1996.
;			VER.:	1.1
;			FUSES:	RC,WDT=ON,CP=ON.
;			ASM.: 	MPASM VERSION 1.30.01 USED.
;			INCL:	NONE
;
;    1.  RECEIVE ROUTINE UPDATED TO RECEIVE ALL EXISTING KEELOQ ENCODER

;        TRANSMISSIONS.
;    2.  RTCC UPDATED TO USE TIMER0 OVERFLOW AND KEEP MORE ACCURATE
;        SYSTEM TIME.
;
;  -FIRST VERSION   9 MAY 1995
;           FILE:	MCDEC10.ASM.
;			DATE:	TUESDAY 9 MAY 1995.
;			VER.:	1.0
;			CKSM:	2309H - FUSES:RC,WDT=ON,CP=ON.
;			ASM.: 	MPASM VERSION 1.10 USED.
;			INCL:	NONE
;
;
;------------------------------------------------------------------------
  ERRORLEVEL 0,-305,-306  ; Messages, Warnings and Errors Printed
                          ; Ignore [305] => Using default dest of
                          ; 1 file
                          ; Ignore [306] => Crossing Page Boundary

; GENERAL PURPOSE REGISTERS

IND	EQU	00H		; INDIRECT ADDRESS REGISTER
TIMER0	EQU	01H		; REAL TIME COUNTER CLOCK
PC	EQU	02H		; PROGRAM COUNTER
STATUS	EQU	03H             ; STATUS REGISTER
FSR	EQU	04H		; FILE SELECT REGISTER
PORTA	EQU	05H		; PORT A
PORTB	EQU	06H		; PORT B

; USER DEFINED REGISTER

FLAGS	EQU	07H		; USER FLAG REGISTER
ADDRESS	EQU	08H		; ADDRESS REGISTER
TXNUM	EQU	09H		; CURRENT TX
OUTBYT	EQU	0AH		; GENERAL DATA REGISTER
MASK	EQU	OUTBYT		; MASK REGISTER USED IN DECRYPTION

; COUNTER REGISTERS

CNT0    EQU     0BH		; LOOP COUNTERS
CNT1    EQU	0CH
CNT2    EQU     0DH

CNT_HI	EQU	0EH		; 16 BIT CLOCK COUNTER
CNT_LW	EQU	0FH

; TEMP REGISTERS

TMP1	EQU	10H		; TEMP REGISTERS
TMP2	EQU	11H
TMP3	EQU	12H
TMP4	EQU	13H

; CIRCULAR BUFFER REGISTER

CSR4    EQU     14H            	; 64 BIT RECEIVE SHIFT REGISTER
CSR5    EQU     15H
CSR6    EQU     16H
CSR7    EQU     17H

CSR0    EQU     18H
CSR1    EQU     19H
CSR2    EQU     1AH
CSR3    EQU     1BH

; WORK REGISTERS

OLD_BUT	EQU	1CH		; STORE PREVIOUS BUTTON CODE
RAM_HI	EQU	1DH		; 16 BIT RAM COUNTER ( USED IN RESYNC )
RAM_LW	EQU	1EH
SREG	EQU	1FH		; PROGRAM STATE INDICATOR REGISTER

; **************  DECRYPTION REGISTER RE-MAPPINGS *******************
;
; NOTE : INDIRECT ADDRESSING USED, DO NOT CHANGE REGISTER ASSIGNMENT
;
; ******************************************************************

KEY0	EQU	TMP2		; 64BIT SHFT REGISTER WITH DECRYPTION KEY
KEY1	EQU	TMP1
KEY2	EQU	TMP3
KEY3	EQU	TMP4
KEY4	EQU	CSR4
KEY5	EQU	CSR5
KEY6	EQU	CSR6
KEY7	EQU	CSR7

HOP1	EQU	CSR0		; 32 BIT HOPCODE REGISTER
HOP2	EQU	CSR1
HOP3	EQU	CSR2
HOP4	EQU	CSR3

; USER REGISTER RE-MAPPINGS

DAT1	EQU	CSR3		; 32 BIT DATA REGISTER
DAT2	EQU	CSR2
DAT3	EQU	CSR1
DAT4	EQU	CSR0

; NOTE : THESE REGISTERS ARE USED DURING KEYGEN AS A 32 BIT BUFFER

ETMP1	EQU	CNT2		; EXTENDED 32 BIT BUFFER
ETMP2	EQU	OLD_BUT
ETMP3	EQU	RAM_HI
ETMP4	EQU	RAM_LW

; RECEIVED TRANSMISSION OPEN 32 BITS

SER_0	EQU	CSR7		; 24/28 BIT SERIAL NUMBER
SER_1	EQU	CSR6
SER_2	EQU	CSR5
SER_3	EQU	CSR4

; RECEIVED TRANSMISSION ENCRYPTED 32 BITS

FUNC	EQU	DAT1		; BUTTON CODE & USER BIT FUNCTION BYTE
DISC	EQU	DAT2		; DISCRIMINATION VALUE
CNTR_HI	EQU	DAT3		; 16 BIT RX COUNTER
CNTR_LW	EQU	DAT4

; ********* PORTA BIT DEFINITIONS *******

RES0	EQU	0H		; RESERVED
RFIN	EQU	1H		; RF INPUT
LEARN	EQU	2H		; LEARN BUTTON
LED	EQU	3H		; LEARN INDICATOR LED OUTPUT

; ********* PORTB BIT DEFINITIONS *******

S0	EQU	0H		; S0 OUTPUT
S1	EQU	1H		; S1 OUTPUT
S2	EQU	2H		; S2 OUTPUT
S3	EQU	3H		; S3 OUTPUT

DIO	EQU	4H		; EEPROM DATA LINE
CLK	EQU	5H		; EEPROM SERIAL CLOCK
CS	EQU	6H		; EEPROM CHIP SELECT
B_LRN	EQU	7H		; INDICATE FUNCTION LEARNT WAS RECEIVED

; ********* COMPILER DEFINES ******************
NBITS   EQU     64      	; MAXIMUM TRANSMISSION BIT LENGTH
MIN     EQU     540            	; TRANSMISSION HEADER MINIMUM LENGTH
 [鍿]
MAX     EQU     10800 		; TRANSMISSION HEADER MAXIMUM LENGTH [鍿]
TRISA	EQU	0111B		; PORTA: TRI-STATE VALUE
WRCFG	EQU	00000000B	; PORTB: EEPROM WRITE TRI-STATE VALUE
RDCFG	EQU	00010000B	; PORTB: EEPROM READ TRI-STATE VALUE

;****** NTQ106 FLAGS DEFINITIONS **************
BITIN	EQU	0H		; RESERVED
FLAG1	EQU	1H		; RESERVED
FLAG2	EQU	2H		; RESERVED
FLAG3	EQU	3H		; RESERVED
TCHECK	EQU	4H		; INDICATE ONLY 16 BIT COUNTER UPDATE
NTQ106	EQU	5H		; INDICATE MICROCHIP HCS TX RECEIVED
RESYNC	EQU	6H		; RESYNCH ACTIVE BIT
OUT_500	EQU	7H		; INDICATE BUSY WITH 500MS TIMEOUT ON
				; OUTPUT

;******* PROGRAM STATES ***********************
PASS1	EQU	0C9H		; LEARN FIRST PASS
PASS2	EQU	0CAH 		; LEARN SECOND PASS
NORMAL	EQU	05CH		; NORMAL PROGRAM FLOW
BUSY	EQU	0C7H		; INDICATE LEARN STILL BUSY

;****** STATUS REGISTER BIT DEFINITIONS *****************
C       EQU       0		; CARRY
DC      EQU       1		; DIGIT CARRY
Z       EQU       2		; ZERO
PD      EQU       3		; POWER DOWN
TO      EQU       4		; TIMEOUT
PA0     EQU       5		; PAGE SELECT [0 OR 1]
PA1     EQU       6		; NOT USED IN PIC16C54, 16C56
OVF     EQU       7		; TIMER0 OVERFLOW

;-------------------------------------------------------------------------
; PAGE 0:
;-------------------------------------------------------------------------
	ORG 00H

;-------------------------------------------------------------------------
;
; FUNCTION     : RESET ()
;
; DESCRIPTION  : PROGRAM RESET ROUTINE
;
; PAGE		: 0
;
;-------------------------------------------------------------------------
RESET
	MOVLW	000111B			; SETUP TIMER0 PRESCALER
	OPTION

	CLRF	PORTA			; RESET PORTA
	CLRF	PORTB			; RESET PORTB

	MOVLW	TRISA			; SETUP PORTA FOR ALL OUTPUT
	TRIS	PORTA
	MOVLW	RDCFG			; UPDATE TRIS REGISTER FOR PORTB
	TRIS 	PORTB

	CLRF	FUNC			; RESET FUNCTION BYTE
	CLRF	OLD_BUT			; RESET OLD BUTTON CODE
	CLRF	FLAGS			; RESET FLAGS
	CLRF	CNTR_HI			; RESET CLOCK COUNTER
	CLRF	CNTR_LW

	MOVLW	NORMAL			; INDICATE NORMAL PROGRAM FLOW
	MOVWF	SREG

	BSF	STATUS,PA0		; SELECT PAGE #1
	GOTO	MAIN			; GOTO MAIN PROGRAM LOOP

;-------------------------------------------------------------------------
; UPPER PAGE CALLS
;-------------------------------------------------------------------------
SENDC
	GOTO	SENDC1			; UPPER PAGE CALL TO SENDC

TST_LEARN
	GOTO	TST_LEARN1		; CALL LEARN BUTTON TEST ROUTINE

;-------------------------------------------------------------------------
;
; FUNCTION     	: CHK_TIMER ()
;
; DESCRIPTION  	: TEST TIMEMOUT DURING EEPROM ROUTINES
;
; PAGE		: 0
;
;-------------------------------------------------------------------------
CHK_TIMER
	CLRWDT				; RESET WATCHDOG TIMER
	BTFSS	TIMER0,7			; TEST FOR 32MS EVENT
	RETLW	0

	BCF	TIMER0,7			; CLEAR MSB OF TIMER0
	INCF	CNT_LW			; INCREASE 16 COUNTER
	SKPNZ
	INCF	CNT_HI

	MOVLW	10D			; 10 x 32.7 ms EEPROM ACK TIMEOUT
	BTFSS	FLAGS,TCHECK		; FIRST TIME FLAG
	MOVWF	CNT1

    	BSF	FLAGS,TCHECK		; INDICATE NOT FIRST TIME PASS
	DECFSZ	CNT1			; CHECK FOR EEPROM ACK TIMEOUT
	RETLW	0
	GOTO	RESET			; ... EEPROM WAIT TIMEMOUT

;-------------------------------------------------------------------------
;
; FUNCTION     	: ROT_SHIFT()
;

; DESCRIPTION  	: RIGHT ROTATE 64 BIT RECEIVE SHIFT REGISTER
;
; PAGE		: 0
;
;-------------------------------------------------------------------------
ROT_SHIFT
        RRF     CSR7
        RRF     CSR6
        RRF     CSR5
        RRF     CSR4
        RRF     CSR3
        RRF     CSR2
        RRF     CSR1
        RRF     CSR0
	RETLW	0

;-------------------------------------------------------------------------
;
; FUNCTION        : NTQ_LP1 ()
;
; DESCRIPTION     : WAIT FOR CNT1 TIMES 1 MS
;			CNT2 = OSC/[4*6*1000]  [ 1MS ]
;
; PAGE		: 0
;
;-------------------------------------------------------------------------
NTQ_LP1
	MOVLW	200D			; DELAY COUNTER FOR 1 MS
	MOVWF	CNT2
NTQ_LP2
	NOP				; [1] WASTE TIME
	CLRWDT				; [1]
	DECFSZ	CNT2			; [1]
	GOTO	NTQ_LP2			; [2]

	DECFSZ	CNT1			; [1]
	GOTO	NTQ_LP1			; [2]
	RETLW	0

;-------------------------------------------------------------------------
;
; FUNCTION     	: ROTR()
;
; DESCRIPTION  	: ROTATE 16 BIT SHIFT REGISTER RIGHT
;
; PAGE		: 0
;
;-------------------------------------------------------------------------
ROTR
        RRF     TMP1
        RRF     TMP2
        BCF     TMP1,7
        SKPNC
        BSF     TMP1,7
        RETLW   0

;-------------------------------------------------------------------------
;
; FUNCTION     	: ROTL()
;
; DESCRIPTION  	: ROTATE 16 BIT SHIFT REGISTER LEFT
;
; PAGE		: 0
;
;-------------------------------------------------------------------------
ROTL
        RLF     TMP2
        RLF     TMP1
        BCF     TMP2,0
        SKPNC
        BSF     TMP2,0
        RETLW   0

;-------------------------------------------------------------------------
; Memory Map ROM Keys
;-------------------------------------------------------------------------
	ORG	3FH
KEY_LOOKUP
	ADDWF	PC,1			; ADD OFFSET TO PROGRAM COUNTER

KEYBASE	EQU	$			; BASE ADDRESS 40H
MAS_KEY	EQU	$			; MASTER KEY BASE ADDRESS
	RETLW	0EFH			; MKEY_0 LSB
	RETLW	0CDH			; MKEY_1
	RETLW	0ABH			; MKEY_2
	RETLW	089H			; MKEY_3
	RETLW	067H			; MKEY_4
	RETLW	045H			; MKEY_5
	RETLW	023H			; MKEY_6
	RETLW	001H			; MKEY_7 MSB

EN_KEY	EQU	$			; ENVELOPE KEY BASE ADDRESS
	RETLW	0FFH			; EN_KEY_0 LSB
	RETLW	0FFH			; EN_KEY_1 MSB

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -