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

📄 hcs301滚动码遥控应用源程序.txt

📁 rerer huoir tywew opor oproer pokofig
💻 TXT
📖 第 1 页 / 共 3 页
字号:
HCS301滚动码遥控应用源程序
                  中国最大最专业的网上贸易平台 
                  首页┊商务助手┊会员注册┊万业通服务┊帮助中心┊万业论坛

                  首 页我要采购我要销售我要代理我要加工我要合作




            中国万业网首页 > 文章广告 > 正文


            HCS301滚动码遥控应用源程序


            时间:2008-4-4 9:30:00 作者:gcsyzq 来源:不详 点击数:115 


                   配置控制:
                  ; -VERSION 1.1 S. DAWSON
                  ;
                  ; FILE: SIMDEC11.ASM. 
                  ; DATE: 8 SEPTEMBER 1998 
                  ; VER.: 1.1
                  ; FUSES: RC,WDT=ON,CP=ON.
                  ; ASM.: MPASM VERSION 2.13 USED.
                  ; INCL: NONE
                  ;
                  ;---------------------------------------------
                  LIST P=16C54,R=DEC
                  ;--------------------------------------------- 
                  MAX_USERS EQU 15
                  ; 这是系统的最大数,因此系统能记住(1 to 15). 
                  ;---------------------------------------------
                  IND EQU 00H 
                  RTCC EQU 01H 
                  PC EQU 02H 
                  STATUS EQU 03H 
                  FSR EQU 04H 
                  PORTA EQU 05H 
                  PORTB EQU 06H 
                  ;----------------------
                  FLAGS EQU 07H 
                  ADDRESS EQU 08H 
                  TXNUM EQU 09H 
                  OUTBYT EQU 0AH 
                  MASK EQU OUTBYT 
                  TMP_CNT EQU OUTBYT 
                  CNT0 EQU 0BH ; ;计数 
                  CNT1 EQU 0CH 
                  CNT2 EQU 0DH 
                  CNT_HI EQU 0EH ; 16位时钟
                  CNT_LW EQU 0FH 
                  CSR0 EQU 10H ; 64 位接收移位寄存器
                  CSR1 EQU 11H 
                  CSR2 EQU 12H 
                  CSR3 EQU 13H 
                  CSR4 EQU 14H 
                  CSR5 EQU 15H 
                  CSR6 EQU 16H 
                  CSR7 EQU 17H 
                  TMP1 EQU 18H 
                  TMP2 EQU 19H 
                  REG EQU 1AH ; 
                  REG1 EQU 1BH ; 临时寄存器
                  ;
                  KEY0 EQU 1CH ; 64 BIT KEY SHIFT REGISTER
                  KEY1 EQU 1DH
                  KEY2 EQU 1EH
                  KEY3 EQU 1FH
                  KEY4 EQU CNT2
                  KEY5 EQU CSR5
                  KEY6 EQU CSR6
                  KEY7 EQU CSR7
                  ;
                  HOP1 EQU CSR0 ; 32 BIT 
                  HOP2 EQU CSR1
                  HOP3 EQU CSR2
                  HOP4 EQU CSR3
                  ; 
                  SER_0 EQU CSR7 ; 28 BIT 串行数
                  SER_1 EQU CSR6
                  SER_2 EQU CSR5
                  SER_3 EQU CSR4
                  ; RECEIVED TRANSMISSION ENCRYPTED 32 BITS 
                  FUNC EQU CSR3 ; BUTTON CODE & USER BIT FUNCTION BYTE
                  DISC EQU CSR2 ; DISCRIMINATION VALUE
                  CNTR_HI EQU CSR1 ; 16 BIT RX COUNTER HIGH BYTE
                  CNTR_LW EQU CSR0 ; 16 BIT RX COUNTER LOW BYTE
                  ; ********* EEPROM MEMORY *******
                  LRNPTR EQU 01H ; LEARN POINTER
                  ; ********* PORTA BIT DEFINITIONS *******
                  RES0 EQU 0H ; RESERVED PIN
                  RFIN EQU 1H ; RF INPUT
                  LRN EQU 2H ; LEARN BUTTON
                  LED EQU 3H ; LEARN INDICATOR LED OUTPUT - VALID SIGNAL
                  ; ********* 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
                  RES1 EQU 7H ; RESERVED PIN
                  ; ********* COMPILER DEFINES ******************
                  NBITS EQU 64 ; MAXIMUM TRANSMISSION BIT LENGTH
                  MIN EQU 560 ; TRANSMISSION HEADER MINIMUM 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
                  ;****** FLAGS DEFINITIONS **************
                  BITIN EQU 0H ; RF BIT VALUE 
                  LRNF EQU 1H ; LEARN FLAG
                  SEC_CNT EQU 2H ; SECOND COUNTER IS BEING CHECKED
                  RELEARN EQU 3H ; RELEARNING A TRANSMITTER
                  ;----------------- STATUS -------------------
                  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 ; NOT USED
                  PA1 EQU 6 ; NOT USED 

                  ORG 00H
                  ;=========================================
                  RESET 
                  MOVLW 000111B ; SETUP RTCC PRESCALER
                  OPTION
                  CLRF PORTA ; RESET PORTA
                  CLRF PORTB ; RESET PORTB
                  MOVLW TRISA ; SETUP PORTA
                  TRIS PORTA
                  MOVLW WRCFG ; SETUP PORTB
                  TRIS PORTB
                  CLRF FLAGS ; RESET FLAGS
                  GOTO M_LOOP ; GOTO MAIN PROGRAM LOOP
                  ;---------------------------------------------------------------------------
                  ;
                  ; FUNCTION : ROT_SHIFT() 
                  ;
                  ; DESCRIPTION : RIGHT ROTATE 64 BIT RECEIVE SHIFT REGISTER
                  ;
                  ; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
                  ;
                  ;---------------------------------------------------------------------------
                  ROT_SHIFT
                  RRF CSR7,F
                  RRF CSR6,F
                  RRF CSR5,F 
                  RRF CSR4,F 
                  RRF CSR3,F 
                  RRF CSR2,F 
                  RRF CSR1,F 
                  RRF CSR0,F 
                  RETLW 0
                  ;------------------------------------------------------------------------------
                  ;
                  ; FUNCTION : TX_LOOKUP () 
                  ;
                  ; DESCRIPTION : TRANSMITTER ADDRESS CALCULATION
                  ;
                  ; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
                  ;
                  ;---------------------------------------------------------------------------
                  TX_LOOKUP
                  MOVF TXNUM,W ; USE TRANSMITTER NUMBER TO CALCULATE 
                  MOVWF ADDRESS ; ADDRESS OF TRANSMITER BLOCK
                  CLRC ; MULTIPLY BY 4 
                  RLF ADDRESS,F
                  RLF ADDRESS,F
                  MOVLW 04H ; AND ADD 4
                  ADDWF ADDRESS,F
                  RETLW 0 ; RETURN
                  ;----------------------------------------------------------------------------
                  ;
                  ; FUNCTION : TST_RTCC () 
                  ;
                  ; DESCRIPTION : UPDATE RTCC COUNTER 
                  ;
                  ; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
                  ;
                  ;---------------------------------------------------------------------------
                  TST_RTCC
                  CLRWDT ; RESET WATCHDOG TIMER
                  MOVLW TRISA ; UPDATE TRI-STATE REGISTER FOR PORTA
                  TRIS PORTA
                  BTFSS RTCC,7 ; TEST FOR 32MS TIMEOUT ON RTCC MSB
                  RETLW 0 ; ... DO QUICK RETURN TO RECEIVE ROUTINE
                  ; **** INCREASE 16 BIT CLOCK TIMER *******
                  BCF RTCC,7 ; CLEAR MSB OF RTCC
                  INCF CNT_LW,F ; INCREASE 16 COUNTER
                  SKPNZ ; INCREASE UPPER BYTE IF ZERO ( OVERFLOW )
                  INCF CNT_HI,F
                  RETLW 0
                  ;------------------------------------------------------------------------------
                  ;
                  ; FUNCTION : TST_TIMER() 
                  ;
                  ; DESCRIPTION : TEST 32MS TIMER AND UPDATE OUTPUTS IF REQUIRED
                  ;
                  ; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
                  ;
                  ;------------------------------------------------------------------------------
                  TST_TIMER
                  ; ***** TEST FOR 500 MS TIMEMOUT ON OUTPUTS **********
                  BTFSS CNT_LW,4 ; TEST FOR 500 MS TIMEOUT
                  GOTO TST_30 ; ... IF NOT TEST 30S TIMEOUT
                  MOVLW 0F0H
                  ANDWF PORTB,F ; DOWN ALL PULSE OUTPUTS 
                  ; ********* TEST FOR 30 S LEARN TIMEOUT *************
                  TST_30 BTFSS FLAGS,LRNF
                  GOTO TST_END

                  BTFSC CNT_HI,2 ; TEST FOR LEARN TIMEOUT
                  GOTO RESET ; ... IF LEARN TIMEMOUT FORCE SOFT RESET 
                  TST_END 
                  RETLW 0H
                  ;------------------------------------------------------------------------------
                  ;
                  ; FUNCTION : SENDC () 
                  ;
                  ; DESCRIPTION : SEND EEPROM COMMAND 
                  ;
                  ; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
                  ;
                  ;------------------------------------------------------------------------------
                  SENDC
                  CLRWDT ; RESET WATCHDOG TIMER
                  BCF PORTB,CS ; RESET CS STATE
                  BCF PORTB,CLK ; RESET CLK STATE
                  BCF PORTB,DIO ; RESET DIO STATE
                  MOVLW WRCFG
                  TRIS PORTB ; DIO = OUTPUT
                  GOTO $+1 ; WAIT FOR OUTPUTS TO SETTLE
                  BSF PORTB,CS ; SELECT EEPROM
                  SETC ; START BIT = 1
                  MOVLW 9D ; START BIT + 8 DATA BITS
                  MOVWF CNT1
                  SENDC2
                  SKPC ; TEST BIT
                  BCF PORTB,DIO ; WRITE TO DIO
                  SKPNC ; TEST BIT
                  BSF PORTB,DIO ; WRITE TO DIO
                  GOTO $+1 ; WAIT 2 US
                  RLF OUTBYT,F ; GET NEXT BIT INTO CARRY
                  BSF PORTB,CLK ; CLOCK HIGH
                  GOTO $+1 ; WAIT 2 US
                  GOTO $+1 ; WAIT 2 US
                  BCF PORTB,CLK ; CLOCK LOW
                  DECFSZ CNT1,F ; LOOP COUNTER
                  GOTO SENDC2
                  BCF PORTB,DIO ; AVOID CONTENTION WITH READ
                  RETLW 0
                  ;------------------------------------------------------------------------------
                  ;
                  ; FUNCTION : EEWRITE () 
                  ;
                  ; DESCRIPTION : WRITE 16 BIT VALUE TO EEPROM 
                  ;
                  ; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
                  ;
                  ;------------------------------------------------------------------------------
                  EEWRITE
                  ; ******* EEPROM WRITE ENABLE ******************
                  WRITE0 MOVLW 30H ; WRITE ENABLE COMMAND
                  MOVWF OUTBYT 
                  CALL SENDC ; SEND COMMAND TO EEPROM
                  BCF PORTB,CS ; END COMMAND, DESELECT
                  ; ******** WRITE 16-BIT WORD TO EEPROM *********
                  WRITE1 MOVFW ADDRESS ; GET EEPROM ADDRESS
                  MOVWF OUTBYT
                  BSF OUTBYT,6 ; WRITE COMMAND
                  CALL SENDC ; SEND COMMAND TO EEPROM
                  MOVLW 16D ; 16 DATA BITS
                  MOVWF CNT1 
                  WRITE2
                  BTFSS TMP1,7 ; TEST MSB OF 16 BIT WORD
                  BCF PORTB,DIO ; SET DATA BIT
                  BTFSC TMP1,7 ; ... ELSE 
                  BSF PORTB,DIO ; CLEAR DATA BIT
                  GOTO $+1 ; WAIT 2 US
                  RLF TMP2,F ; SHIFT LO BYTE
                  BSF PORTB,CLK ; CLOCK HIGH
                  GOTO $+1 ; WAIT 2 US
                  RLF TMP1,F ; SHIFT HI BYTE
                  BCF PORTB,CLK ; CLOCK LOW
                  DECFSZ CNT1,F
                  GOTO WRITE2 ; LOOP COUNTER
                  WAITACK
                  BCF PORTB,CS ; END OF WRITE COMMAND, DESELECT
                  MOVLW RDCFG
                  TRIS PORTB ; DIO = INPUT
                  BSF PORTB,CS ; CS HIGH TO WAIT FOR ACK
                  WRITE5 
                  BTFSC PORTB,DIO ; CHECK FOR ACK
                  GOTO WRITE6 ; WDT RESET ON NO ACK
                  GOTO WRITE5
                  WRITE6 BCF PORTB,CS ; END OF ACK
                  ; ******* EEPROM WRITE DISABLE ****************
                  MOVLW 000H ; WRITE DISABLE COMMAND
                  MOVWF OUTBYT
                  CALL SENDC
                  BCF PORTB,CS ; END OF DISABLE COMMAND, DESELECT
                  INCF ADDRESS,F ; POINT TO NEXT EEPROM ADDRESS ( BY DEFAULT )
                  RETLW 0H
                  ;------------------------------------------------------------------------------
                  ;
                  ; FUNCTION : EEREAD () 
                  ;
                  ; DESCRIPTION : READ 16 BIT VALUE FROM EEPROM 
                  ;
                  ; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
                  ;

⌨️ 快捷键说明

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