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

📄 transmit_a.asm

📁 TPMS transmit subroutine
💻 ASM
📖 第 1 页 / 共 3 页
字号:
				MOVLW				0X14
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X44
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X15
				MOVWF				EEADR
				MOVF				EE_REMAIN_DATA,0
				MOVWF				WR_DATA
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X45
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X16
				MOVWF				EEADR
				MOVF				EE_CRC_DATA,0
				MOVWF				WR_DATA
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X46
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BCF					STATUS,RP0
				RETURN				
WIRTE_IDLOW:
				BCF					STATUS,RP0									;BANK0
				MOVF				ID_CODE_L,0
				BSF					STATUS,RP0
				MOVWF				WR_DATA
				CALL				REMAIN_DATA									;GET REMAIN DATA AND CRC DATA	
				BSF					STATUS,RP0
				MOVLW				0X17
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X47
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0				
				MOVLW				0X18
				MOVWF				EEADR
				MOVF				EE_REMAIN_DATA,0
				MOVWF				WR_DATA
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X48
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVF				EE_CRC_DATA,0
				MOVLW				0X19
				MOVWF				EEADR
				MOVF				EE_CRC_DATA,0
				MOVWF				WR_DATA
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X49
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BCF					STATUS,RP0
				RETURN	
WRITE_SQUENCE:
				BCF					STATUS,RP0						;BANK0
				MOVF				SQUENCE_CODE,0
				BSF					STATUS,RP0
				MOVWF				WR_DATA
				MOVLW				0X21
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X51
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BCF					STATUS,RP0
				RETURN
WRITE_SYSMBOL:
				BCF					STATUS,RP0
				MOVF				SYSMBOL_CODE,0
				BSF					STATUS,RP0
				MOVWF				WR_DATA
				MOVLW				0X61
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X71
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BCF					STATUS,RP0
				RETURN															
;*--------------EEPROM READ SUBROUTINE------------*
EE_READBYTE:																		;read 1byte data from eeprom
				BSF					STATUS,RP0										;change to bank0
				MOVLW				0X03
				MOVWF				EE_COUNT										;perbyte must third read
EE_READ:								
				;bsf 				STATUS,RP0 										;Bank 1
				MOVF 				RD_EE_ADDR,0 										;RD
				movwf 				EEADR 												;Address to read
				bsf 				EECON1,RD 										;EE Read
				BCF					EECON1,WREN										;WRITE disable
				movf 				EEDAT,W 											;Move data to W
				MOVWF				RD_DATA
				;BCF				STATUS,RP0										;change to bank0
				DECFSZ				EE_COUNT,1										;decide have read third?
				GOTO				NEXT_COUNTINUE
				GOTO				DECIDE_RD_DATA	
NEXT_COUNTINUE:
				BTFSC				EE_COUNT,1										;decide EE_COUNT is 2?
				GOTO				BIT2_IS_0
				MOVWF				RD_DATA2
				GOTO				EE_READ
BIT2_IS_0:
				MOVWF				RD_DATA1
				GOTO				EE_READ				
DECIDE_RD_DATA:
				MOVF				RD_DATA,0
				XORWF				RD_DATA1,0
				BTFSS				STATUS,Z											;if equal 0 next instruction is nop
				GOTO				COMPARE_DATA2
				RETURN
COMPARE_DATA2:
				MOVF				RD_DATA,0
				IORWF				RD_DATA2,0
				BTFSC				STATUS,Z
				GOTO				COMPARE_DATA1_2
				RETURN
COMPARE_DATA1_2:
				MOVF				RD_DATA1,0
				IORWF				RD_DATA2,0
				BTFSC				STATUS,Z
				GOTO				EE_READBYTE
				MOVF				RD_DATA1,0
				MOVWF				RD_DATA								
				RETURN
READ_DATA:
				BSF					STATUS,RP0								;BANK1
				MOVWF				RD_EE_ADDR
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP
				INCF				RD_EE_ADDR,1 									;EEPROM ADDRESS +1 remain data
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP1									;save remain data
				INCF				RD_EE_ADDR,1										;eeprom address+1 crc data
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP2
				BCF					STATUS,C
				RLF					EE_RDTEMP2,1
				BCF					STATUS,C
				RLF					EE_RDTEMP1,1								;LEFT SHIFT 1 BIT
				RLF					EE_RDTEMP1,1								;LEFT SHIFT 1 BIT
				MOVF				EE_RDTEMP1,0
				ADDWF				EE_RDTEMP2,0								;EE_TEMP1+EE_TEMP2(REMAIN DATA+CRC DATA)
				XORWF				EE_RDTEMP,0									;decide (source data=remain data+crc data?)
				BTFSC				STATUS,Z
				GOTO				READ_SUCCEED
				MOVLW     			0X2E
				ADDWF				EEADR,1
				MOVWF				RD_EE_ADDR
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP
				INCF				RD_EE_ADDR,1 									;EEPROM ADDRESS +1 remain data
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP1									;save remain data
				INCF				RD_EE_ADDR,1										;eeprom address+1 crc data
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP2
				BCF					STATUS,C
				RLF					EE_RDTEMP2,1
				BCF					STATUS,C
				RLF					EE_RDTEMP1,1								;LEFT SHIFT 1 BIT
				RLF					EE_RDTEMP1,1								;LEFT SHIFT 1 BIT
				MOVF				EE_RDTEMP1,0
				ADDWF				EE_RDTEMP2,0								;EE_TEMP1+EE_TEMP2(REMAIN DATA+CRC DATA)
				IORWF				EE_RDTEMP,0									;decide (source data=remain data+crc data?)
				BTFSS				STATUS,Z
				GOTO				READ_SUCCEED
				BCF					STATUS,RP0
				BSF					FLAG,EE_FLG_ERROR
				RETURN				
READ_SUCCEED:							
				BCF      			STATUS,RP0
				BCF      			FLAG,EE_FLG_ERROR
				RETURN
READ_IDCODE:
				BSF					STATUS,RP0
				MOVLW				0X11						;READ ID CODE HIGH 8BTI
				CALL    			READ_DATA
				MOVF				EE_RDTEMP,0
				BCF					STATUS,RP0
				MOVWF				ID_CODE_H				;SAVE TO HIGH REGISTER
				BSF					STATUS,RP0
				MOVLW				0X14						;READ ID CODE MIDDLE 8BIT
				CALL				READ_DATA
				MOVF				EE_RDTEMP,0
				BCF					STATUS,RP0
				MOVWF				ID_CODE_MID			;SAVE TO MIDDLE REGISTER
				BSF					STATUS,RP0
				MOVLW				0X17						;READ ID CODE LOW 8BIT
				CALL				READ_DATA
				MOVF				EE_RDTEMP,0
				BCF					STATUS,RP0
				MOVWF				ID_CODE_L				;SAVE TO LOW REGISTER
				RETURN
READ_SQUENCE:
				BSF					STATUS,RP0			;BANK1
				MOVLW				0X21
				MOVWF				RD_EE_ADDR
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP
				MOVLW				0X51
				MOVWF				RD_EE_ADDR
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP1
				MOVF				EE_RDTEMP1,0
				XORWF				EE_RDTEMP,0	
				BTFSC				STATUS,Z
				GOTO				END_SQUEN
				MOVF				EE_RDTEMP,0
				BCF					STATUS,RP0
				MOVWF				SQUENCE_CODE
				BSF					FLAG,EE_FLG_ERROR
				RETURN					
END_SQUEN:
				MOVF				EE_RDTEMP,0
				BCF					STATUS,RP0
				MOVWF				SQUENCE_CODE
				RETURN
READ_SYSMBOL:
				BSF					STATUS,RP0			;BANK1
				MOVLW				0X61
				MOVWF				RD_EE_ADDR
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP
				MOVLW				0X71
				MOVWF				RD_EE_ADDR
				CALL				EE_READBYTE
				MOVF				RD_DATA,0
				MOVWF				EE_RDTEMP1
				MOVF				EE_RDTEMP1,0
				XORWF				EE_RDTEMP,0	
				BTFSC				STATUS,Z
				GOTO				END_SQUEN1
				MOVF				EE_RDTEMP,0
				BCF					STATUS,RP0
				MOVWF				SQUENCE_CODE
				BSF					FLAG,EE_FLG_ERROR
				RETURN					
END_SQUEN1:
				MOVF				EE_RDTEMP,0
				BCF					STATUS,RP0
				MOVWF				SQUENCE_CODE
				RETURN															
;*------------INTERRUPT SUBROUTINE-----------------*								
INT_ADDRESS:											;interruption subroutine
				movwf   			w_temp            ; save off current W register contents                                                 
				movf    			STATUS,w          ; move status register into W register                                                 
				movwf				status_temp       ; save off contents of STATUS register                                                 
        		MOVF    			PCLATH,W                                                                                                 
        		MOVWF   			PCLATH_TEMP                                                                                              

				BTFSS				PIR1,INTF					;decide whether it is sp12 wakeup
				GOTO				DECIDE_TIM0				;is not external interruption
				BSF					FLAG,FLG_INTF			;set interrupt flag
				BCF					PIR1,INTF					;clear this interrupt symbol
DECIDE_TIM0:
				BTFSS				INTCON,T0IF				;decide timer0 interruption's flag have set?
				GOTO				DECIDE_TIME1				
				BCF					INTCON,T0IF
				MOVLW				0XF0
				MOVWF				TMR0
				INCF				TIMER0_COUNT,1
				MOVLW				0X50
				SUBWF				TIMER0_COUNT,0
				BTFSS				STATUS,C
				GOTO				INT_RETURN
				CLRF				TIMER0_COUNT
				BSF					FLAG,KEY_PRESSED
				BSF					FLAG,SECOND_SY
				INCF				TIMER0_COUN1,1
				MOVLW				0XFE
				SUBWF				TIMER0_COUN1,0
				BTFSS				STATUS,C
				GOTO				INT_RETURN
				CLRF				TIMER0_COUN1
				INCF				TIMER0_COUN2,1
				MOVLW				0X8D
				SUBWF				TIMER0_COUN2,0
				BTFSS				STATUS,C
				GOTO				INT_RETURN
				BSF					FLAG,HOUR2_SY
				CLRF				TIMER0_COUN2
				GOTO				INT_RETURN
DECIDE_TIME1:
				BTFSS				PIR1,TMR1IF									;DECIDE TIMER1 INTERRUPT
				GOTO				INT_RETURN									;is not timer1 interrupt
				BCF					PIR1,TMR1IF									;is timer1 interrupt
				MOVLW				0XEC												;SET TIMER1 INTERRUPTION 10MS
				MOVWF				TMR1H
				MOVLW				0X77
				MOVWF				TMR1L		
				MOVLW				0X10
				MOVWF				T1CON		
INT_RETURN:				                                                                                        
				MOVF    			PCLATH_TEMP,W                                                                                            
				MOVWF   			PCLATH                                                                                                   
				movf    			status_temp,w     ; retrieve copy of STATUS register                                                     
				movwf	  			STATUS            ; restore pre-isr STATUS register contents                                             
				swapf   			w_temp,f                                                                                                 
				swapf   			w_temp,w          ; restore pre-isr W register contents                                                                                                                                                                           
				retfie                    ; return from interrupt      								
				END                       ; directive 'end of program'                                                          

⌨️ 快捷键说明

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