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

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

📁 rerer huoir tywew opor oproer pokofig
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                  BTFSC PORTA,RFIN ; [2] INPUT LOW? THIRD SAMPLE
                  GOTO RMT0 ; [0] NO--RECEIVE ERROR
                  CALL TST_RTCC ; [11] CHECK RTCC
                  DECFSZ CNT1,1 ; [1] LAST BIT?
                  GOTO RCV8 ; [2] ... NO, GET NEXT BIT
                  GOTO RMT1 ; TOTAL = 14 CYCLES

                  RMT_0
                  RMT0 
                  RMT01 BSF STATUS,C ; INVALID TRANSMISSION
                  RETLW 1 ; RETURN
                  RMT1 BSF PORTA,LED ; VALID TRANSMISSION FORMAT, LED ON
                  MOVLW 0FH ; FORCE OPEN BUTTON CODES TO ZERO
                  ANDWF SER_0,1
                  CLRC ; VALID SERIAL NUMBER => VALID TX
                  RETLW 0 ; RETURN 
                  ;------------------------------------------------------------------------------
                  ;
                  ; FUNCTION : M_LOOP () 
                  ;
                  ; DESCRIPTION : MAIN PROGRAM ROUTINE
                  ;
                  ;------------------------------------------------------------------------------
                  M_LOOP BCF PORTA,LED 
                  BTFSS PORTA,LRN 
                  GOTO LEARN ; TEST & HANDLE LEARN BUTTON
                  CALL TST_RTCC ; UPDATE TIMER 
                  CALL TST_TIMER ; HANDLE TIMER - UPDATE OUTPUTS
                  CALL RECEIVE ; RECEIVE TRANSMISSION 
                  BC M_LOOP ; CHECK IF TRANSMISSION VALID
                  M_SEARCH
                  CLRF TXNUM ; TEST FIRST POSITION
                  ; ******* COMPARE LOWER WORD OF SERIAL NUMBER ********
                  M_SERIAL
                  CALL TX_LOOKUP ; GET TX BASE ADDRESS
                  BSF ADDRESS,1 ; ADD 2 TO BASE ADDRESS
                  CALL EEREAD ; READ LOWER 16-BITS OF SER# FROM EEPROM

                  MOVFW TMP1 ; COMPARE RX AND EEPROM VALUES
                  XORWF SER_2,W
                  BNZ M_NEXT ; IF NOT EQUAL CHECK NEXT
                  MOVFW TMP2 ; COMPARE RX AND EEPROM VALUES
                  XORWF SER_3,W
                  BNZ M_NEXT ; IF NOT EQUAL CHECK NEXT

                  ; ******* COMPARE UPPER WORD OF SERIAL NUMBER ********
                  M_SERIAL2
                  INCF ADDRESS,F ; POINT TO NEXT ENTRY 
                  CALL EEREAD ; READ UPPER 16-BITS OF SER# FROM EEPROM
                  MOVFW TMP1 ; COMPARE RX AND EEPROM VALUES
                  XORWF SER_0,W
                  BNZ M_NEXT ; IF NOT EQUAL CHECK NEXT
                  MOVFW TMP2 ; COMPARE RX AND EEPROM VALUES
                  XORWF SER_1,W
                  BNZ M_NEXT ; IF NOT EQUAL CHECK NEXT
                  BTFSS FLAGS,LRNF ; LEARN MODE
                  GOTO M_HOP ; FOUND TRANSMITTER - DECRYPT
                  BSF FLAGS,RELEARN ; SET RELEARN FLAG
                  GOTO LEARN_F ; FOUND TRANSMITTER - LEARN

                  ; **** SEARCH NEXT POSITION FOR SERIAL NUMBER *****
                  M_NEXT INCF TXNUM,F ; POINT TO NEXT TRANSMITTER POSITION
                  MOVLW MAX_USERS ; TEST FOR LAST POSITION
                  SUBWF TXNUM,W 
                  BTFSS STATUS,C ; NOT FOUND IN MAP
                  GOTO M_SERIAL ; TRY NEXT POSITION
                  M_NF
                  BTFSS FLAGS,LRNF ; LEARN MODE
                  GOTO M_LOOP ; NO... INVALID SERIAL NUMBER 
                  GOTO LEARN_NF ; NEW TRANSMITTER - USE POINTER FOR LEARN
                  ; ********** DECRYPT HOPCODE *********************
                  M_HOP 
                  CALL DECRYPT ; DECRYPT HOPCODE 
                  ; ********* TEST DICRIMINATION VALUE *************
                  M_DIS MOVFW SER_3 ; SERIAL NUBER LSB MUST BE EQUAL
                  XORWF DISC,W ; TO DISCRIMINATION VALUE
                  BNZ M_LOOP
                  ; *************** CHECK COUNTERS VALID ************
                  BCF FLAGS,SEC_CNT ; CHECK FIRST COUNTER
                  M_CNT CALL TX_LOOKUP ; POINT LOWER 16 BIT COUNTER
                  BTFSC FLAGS,SEC_CNT ; IF SECOND COUNTER IS USED
                  INCF ADDRESS,F ; INCREMENT ADDRESS
                  CALL EEREAD ; READ LOWER 16 BIT COUNTER FROM EEPROM
                  ; ************ CHECK COUNTER WINDOWS ***********
                  M_SUB
                  MOVFW TMP2 ; 16 BIT COUNTER SUBSTRACTION
                  SUBWF CNTR_LW,W
                  MOVWF TMP2 
                  SKPC ; SKIP IF NO BORROW
                  INCF TMP1,F ; ... ELSE INCR HI BYTE
                  MOVFW TMP1
                  SUBWF CNTR_HI,W
                  MOVWF TMP1
                  BCF TMP1,0 ; MAKE ACCEPTED WINDOW 512
                  M_CHECK0
                  MOVFW TMP1 ; TEST IF IN WINDOW ( UPPER BYTE )
                  BTFSC STATUS,Z
                  GOTO M_CHECK2 ; GO AND CHECK LOWER BYTE
                  BTFSC FLAGS,SEC_CNT ; IF SECOND COUNTER
                  GOTO M_LOOP ; ERROR - GOTO MAIN LOOP 
                  BSF FLAGS,SEC_CNT ; SET FLAG FOR SECOND COUNTER CHECK
                  GOTO M_CNT ; AND CHECK IT
                  M_CHECK2
                  MOVFW TMP2 ; CHECK LOWER BYTE
                  BZ M_TZERO ; IF REPEAT - RESET TIMEOUT COUNTER
                  ; ************ UPDATE EEPROM COUNTER ***********
                  M_UPDATE
                  CALL TX_LOOKUP ; GET CURRENT TX BASE ADDRESS
                  CALL LOAD_CNT_VALS ; LOAD COUNTER VALUES
                  CALL EEWRITE ; UPDATE FIRST COUNTER
                  CALL LOAD_CNT_VALS ; LOAD COUNTER VALUES 
                  CALL EEWRITE ; UPDATE SECOND COUNTER
                  ; ******** UPDATE OUTPUT WITH CURRENT BUTTON CODE ********
                  M_OUTPUT 
                  MOVLW 0F0H ; MASK ONLY BUTTON CODES
                  ANDWF FUNC,1
                  SWAPF FUNC,1 ; GET BUTTON CODE FROM FUNC BYTE

                  BTFSC FUNC,0 ; CHANGE BUTTON TO S-OUTPUT FORMAT
                  BSF FUNC,4 ; [ S2 S1 S0 S3 ]
                  CLRC 
                  RRF FUNC,W 

                  M_OUTPUT1
                  MOVWF PORTB ; UPDATE PORT WITH FUNCTION CODE
                  M_TZERO CLRF CNT_HI ; RESET RTCC CLOCK
                  CLRF CNT_LW 
                  M_END 
                  GOTO M_LOOP ; WAIT FOR NEXT TRANMISSION
                  ;------------------------------------------------------------------------------
                  ;
                  ; FUNCTION : LEARN () 
                  ;
                  ; DESCRIPTION : LEARN ROUTINE
                  ;
                  ;------------------------------------------------------------------------------
                  LEARN
                  CLRF CNT_LW ; RESET TIMER
                  CLRF CNT_HI


                  LEARN1 BSF PORTA,LED ; LED ON
                  CALL TST_RTCC ; UPDATE TIMER
                  BTFSC PORTA,LRN ; TEST FOR BUTTON RELEASE 
                  GOTO LEARN2 ; ENTER LEARN MODE
                  BTFSS CNT_HI,0 ; TEST FOR ERASE ALL
                  GOTO LEARN1 ; LOOP BACK
                  ; ******* EEPROM ERASE ALL ******************
                  BCF PORTA,LED
                  ERASE_ALL
                  CLRWDT ; CLEAR WATCHDOG TIMER
                  BTFSS PORTA,LRN ; WAIT FOR BUTTON RELEASE
                  GOTO ERASE_ALL ; LOOP BACK
                  MOVLW 30H ; ERASE ENABLE COMMAND
                  MOVWF OUTBYT 
                  CALL SENDC ; SEND COMMAND TO EEPROM
                  MOVLW 20H ; ERASE ALL COMMAND
                  MOVWF OUTBYT 
                  CALL SENDC ; SEND COMMAND TO EEPROM
                  CALL WAITACK ; WAIT FOR ERASE ACK
                  GOTO RESET ; START OVER

                  LEARN2
                  BCF PORTA,LED ; CLEAR LED
                  BSF FLAGS,LRNF ; SET LEARN FLAG
                  LEARN3
                  CALL TST_RTCC ; UPDATE TIMER
                  CALL TST_TIMER ; CHECK FOR LEARN TIMEOUT
                  CALL RECEIVE ; RECEIVE TRANSMISSION 
                  BC LEARN3 ; CHECK IF TRANSMISSION VALID
                  GOTO M_SEARCH ; CHECK IF SERIAL NUMBER IS IN MAP
                  LEARN_NF
                  ; *** IF SERIAL NOT IN MAP READ SELFLEARN POINTER ***
                  MOVLW LRNPTR ; POINT TO LEARN POINTER
                  MOVWF ADDRESS
                  CALL EEREAD ; READ LEARN POINTER FROM EEPROM
                  MOVF TMP2,W ; CHECK LOWER BYTE
                  MOVLW 0H ; LOAD 0 DEFAULT
                  BTFSC STATUS,Z ; IF LOWER != 0 LEARN ON 0
                  MOVF TMP1,W ; ELSE LEARN ON TMP1 VALUE
                  MOVWF TXNUM ; LOAD TXNUM
                  LEARN_F
                  CALL TX_LOOKUP
                  BSF ADDRESS,1 ; ADD 2 TO BASE ADDRESS
                  MOVFW SER_2 ; GET LOWER 16 BIT OF SERIAL NUMBER
                  MOVWF TMP1
                  MOVFW SER_3
                  MOVWF TMP2
                  CALL EEWRITE ; ... AND WRITE TO EEPROM

                  MOVFW SER_0 ; GET UPPER 16 BIT OF SERIAL NUMBER
                  MOVWF TMP1
                  MOVFW SER_1
                  MOVWF TMP2
                  CALL EEWRITE ; ... AND WRITE TO EEPROM
                  ; *** DECRYPT HOP CODE ***
                  LEARN_DEC
                  CALL DECRYPT ; DECRYPTION ROUTINE
                  ; *** CHECK DISCRIMINATION VALUE ***
                  LEARN_CHK
                  MOVFW SER_3 ; CHECK LOWER BYTE OF SERIAL NUMBER
                  XORWF DISC,W ; AGAINST DISCRIMINATION VALUE
                  BZ LEARN_UP ; UPDATE LEARN POINTER
                  GOTO CANCEL_LEARN ; ERROR CANCEL LEARN MODE
                  ; ********* UPDATE LEARN POINTER **********
                  LEARN_UP
                  CALL TX_LOOKUP ; GET CURRENT TX BASE ADDRESS
                  CALL LOAD_CNT_VALS
                  CALL EEWRITE ; WRITE LSB WORD OF COUNTER TO EEPROM
                  BTFSC FLAGS,RELEARN ; IF RELEARN
                  GOTO BYPASS_POINTER_WRITE ; DONT UPDATE POINTER
                  INCF TXNUM,F ; INCREMENT LEARN POINTER 
                  MOVLW MAX_USERS ; ALLOW 0 .. MAX_USERS - 1
                  SUBWF TXNUM,W 
                  MOVLW 0H ; IF MAX WRAP TO 0
                  BTFSS STATUS,C
                  MOVF TXNUM,W ; ELSE USE TXNUM
                  MOVWF TMP1 ; FOR WRITE OPERATION
                  CLRF TMP2 ; CLEAR LOWER BYTE

                  MOVLW LRNPTR ; POINT TO LEARN POINTER
                  MOVWF ADDRESS
                  CALL EEWRITE ; UPDATE LEARN POINTER IN EEPROM
                  BYPASS_POINTER_WRITE
                  BSF PORTA,LED ; LED ON TO INDICATE VALID LEARN
                  CLRF CNT_LW ; CLEAR COUNTER LOW BYTE
                  SUCCESS
                  CALL TST_RTCC ; INDICATE SUCCESSFUL LEARN
                  BTFSS CNT_LW,4 ; LED ON FOR 0.5 SEC
                  GOTO SUCCESS ; LOOP BACK
                  CANCEL_LEARN
                  BCF FLAGS,LRNF ; CLEAR LEARN FLAG
                  BCF FLAGS,RELEARN ; CLEAR RELEARN FLAG
                  GOTO M_LOOP ; RETURN TO MAIN LOOP - LED OFF
                  ;------------------------------------------------------------------------------
                  ; END OF FILE : SIMDEC10.ASM
                  ;------------------------------------------------------------------------------
                  ORG 1FFH
                  GOTO RESET
                  END

                   

                  我的主页http://gcsyzq.wanye68.com

            责任编辑:不详 【大 中 小】【打 印】【关 闭】



                  关键词广告
                              没有投放广告



            相关新闻
                  没有相关新闻!·多功能阻燃连身服/阻燃衬衫/永久阻燃防护服/消防服 3月7日 17:39
                  ·报警系统|安防器材|智能家居|家庭防盗 3月7日 17:38
                  ·无尘布,超细纤维无尘布,1009S,1009SLE 3月7日 17:36
                  ·要想快致富、养牛养羊是条路 3月7日 17:33
                  ·粘尘垫-蓝色粘尘垫-防静电工作服 3月7日 17:33
                  ·09年养殖什么最赚钱 3月7日 17:32
                  ·HUBY-340棉签净化棉签-净化棉签 3月7日 17:31
                  ·如何轻松擦干净门窗玻璃 3月7日 17:31




                        ·测试:1秒钟看你…
                        ·三年后你会是富翁…
                        ·甜心巧克力大结局…
                        ·测试:你适合结婚…
                        ·测试:从睡姿就能…
                        ·测一测你能成为超…
                        ·看看你是守财奴吗…
                        ·2008年秋季服…
                        ·测试:你成为大老…
                        ·测试你的外遇度有…
                        ·测一测你的发财欲…
                        ·测测看你的手机号…
                        ·测试:你07年的…
                        ·测一测你缺钱的原…
                        ·恋爱小测试 恋人…
                        ·从你的脱衣习惯看…
                        ·测试---你为爱…
                        ·从吃快餐看你未来…
                        ·从新婚之夜来看你…
                        ·爱情测试:你是一…
                        ·测试:你下辈子是…
                        ·通过拿手机看你的…
                        ·创业测试:你的事…
                        ·2009年做什么…
                        ·从玻璃杯看你的金…
                        ·你让人…
                        ·测一测你的奋斗方…
                        ·财富测试:定时炸…
                        ·财富小测验:鼻子…
                        ·从找朋友看你的理…










                  关于我们 │ 联系我们 │ 收费方式 │ 法律声明 │ 帮助中心

                  技术咨询服务:0319-2021966 传真:0319-2021966 技术部电话:010-82569008 
                  公司邮箱:wanye68@163.com 


⌨️ 快捷键说明

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