📄 hcs301_pro.asm
字号:
;本程序由"三全科技股份有限公司"的黄志伟提供,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 + -