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

📄 transmit_a.asm

📁 TPMS transmit subroutine
💻 ASM
📖 第 1 页 / 共 3 页
字号:
				BCF				STATUS,C
				RLF				RF_SEND,1
				BTFSC			STATUS,C
				GOTO			SEND_HIGH
				CALL			TRAN_0BIT
				GOTO			NEXT_BIT
SEND_HIGH:
				INCF			PARIT_CODE,1
				CALL			TRAN_1BIT
NEXT_BIT:
				DECFSZ			RF_TRAN_COUNT,1
				GOTO			COUNTINUE_SEND							
END_TRAN_1BYTE:
				RETURN	
;*-------------RF SEND ALL OF DATA TO AIR SUBROUTINE---------*
RF_DATA_SEND:
				BCF			STATUS,RP0				;bank0
				BCF			INTCON,GIE				;all interruption disable
				BCF			INTCON,PEIE				;all external interruption disable
				CALL		START_CODE				;send start code to air
				MOVF		PREAM_CODE_H,W		;send pream high code to air
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		PREAM_CODE_L,W		;send pream low code to air
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		PRESS_COMPEN,W		;send pressure data to air
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		TEMP_COMPEN,W			;send temperature to air
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		ID_CODE_H,W				;send ID code high to air
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		ID_CODE_MID,W			;send ID code middle to air 
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		ID_CODE_L,W				;send ID code low to air
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		PARIT_CODE,W			;send parity code to air
				MOVWF		RF_SEND
				CALL		PARITY_SEND
				RETURN	
RF_LEARN_SEND:
				BCF			STATUS,RP0				;bank0
				BCF			INTCON,GIE				;all interruption disable
				BCF			INTCON,PEIE				;all external interruption disable
			
				MOVLW   0X00
				MOVWF		PARITY_CODE								;Clear parity_code register
				CALL		START_CODE								;send start code
				MOVLW		0X00
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE								;send learning pream code
				MOVLW		0X01
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE								;send learning pream code
				MOVF		PRESS_COMPEN,W
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE								;send pressure data code
				MOVF		TEMP_COMPEN,W
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE										;send temperature data
				MOVF		ID_CODE_H,W
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		ID_CODE_MID,W
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		ID_CODE_L,W
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE
				MOVF		SQUENCE_CODE,W
				MOVWF		RF_SEND
				CALL		TRAN_1BYTE									;send squence code
				MOVF		PARIT_CODE,W
				MOVWF		RF_SEND
				CALL		PARITY_SEND
				RETURN								
;*------------SEND PARITY CODE SUBROUTINE--------------------*
PARITY_SEND:
				BCF			STATUS,RP0				;bank0
				BCF			INTCON,GIE				;all interruption disable
				BCF			INTCON,PEIE				;all external interruption disable
			
				MOVLW			0X08
				MOVWF			RF_TRAN_COUNT
COUNTINUE_SEND1:				
				BCF				STATUS,C
				RLF				RF_SEND,1
				BTFSC			STATUS,C
				GOTO			SEND_HIGH
				CALL			TRAN_0BIT
				GOTO			NEXT_BIT
SEND_HIGH1:
				CALL			TRAN_1BIT
NEXT_BIT1:
				DECFSZ			RF_TRAN_COUNT,1
			;	GOTO			END_TRAN_1BYTE1
				GOTO			COUNTINUE_SEND1								
END_TRAN_1BYTE1:
				BCF				STATUS,RP0
				BSF				INTCON,GIE
				BSF				INTCON,PEIE
				RETURN												
;*-----------DELAY 256US SUBROUTINE-------------*
DELAY_256US:
				CLRWDT
				MOVLW	0X32						;1 CYCLE
				MOVWF	DEL_COUNT					;1 CYCLE
DELAY256:
				NOP									;1 CYCLE
				DECFSZ	DEL_COUNT,1					;2 CYCLES
				GOTO	DELAY256					;2 CYCLES
				RETURN								;2 CYCLES

;*----------DELAY 768US SUBROUTINE--------------*
DELAY_768US:
				CLRWDT
				MOVLW  		0X7D						;1 CYCLE
				MOVWF		DEL_COUNT					;1 CYCLE
DELAY768:
				NOP										;1 CYCLE
				DECFSZ		DEL_COUNT,1					;2 CYCLES
				GOTO		DELAY768					;2 CYCLES
				RETURN									;2 CYCLES
;*----------START CODE SUBROUTINE--------------*
START_CODE:
				BSF			PORTA,1 
				CALL		DELAY_768US
				BCF			PORTA,1
				CALL		DELAY_256US
				RETURN
;*-----------RESET SP12 SUBROUTINE--------------*
RESET_SP12:
				BSF			PORTA,SP12_VDD
ASLEEP:				
				SLEEP											;wait for sp12 reset pluse
				NOP
				NOP
				BTFSS		FLAG,FLG_INTF				
				GOTO		ASLEEP
				BCF			FLAG,FLG_INTF			;clear external interrupt flag
				RETURN
;*-----------SPI INTERFACE SUBROUTINE-----------*
SP12_1COMMAND:
				MOVLW		0X08
				MOVWF		SP12_COMM_COUN
				BCF			PORTC,SP12_CLK			;SPI PORT initial
				BSF			PORTC,SP12_NCS			;SPI port initial
				BCF			PORTC,SP12_SDO			;SPI port initial
				BCF			PORTC,SP12_SDI			;SPI port initial
				BCF			PORTC,SP12_NCS			;SP12 ENABLE
SEND_COMM1:				
				BSF			PORTC,SP12_CLK			;clock signal pluse
				BCF			STATUS,C
				RRF			SP12_COMM,1
				BTFSS		STATUS,C
				GOTO		COMMAND_LOW1
				BSF			PORTC,SP12_SDI
				GOTO		NEXT_BIT_COMM1			
				
COMMAND_LOW1:				
				BCF			PORTC,SP12_SDI		
				NOP
NEXT_BIT_COMM1:
				BCF			PORTC,SP12_CLK
				DECFSZ		SP12_COMM_COUN,1
				GOTO		SEND_COMM1						
				BSF			PORTC,SP12_NCS
				RETURN
;*-----------SEND COMMAND TO SP12 TWICE--------------------*
SP12_2COMMAND:
				MOVLW			0X08
				MOVWF			SP12_COMM_COUN
				BCF				PORTC,SP12_CLK			;SPI PORT initial
				BSF				PORTC,SP12_NCS			;SPI port initial
				BCF				PORTC,SP12_SDO			;SPI port initial
				BCF				PORTC,SP12_SDI			;SPI port initial
				BCF				PORTC,SP12_NCS			;SP12 ENABLE
SEND_COMM2:				
				BSF				PORTC,SP12_CLK			;clock signal pluse
				BTFSC			PORTC,SP12_SDO
				GOTO			SP12_COMMEND				;FSI error if return high level FSI correct if return low level 
				NOP
				BTFSS			PORTC,SP12_SDO
				GOTO			OUT_IS_0
				INCF			SP12_DATA_OUT1,1							;read data is high level
				RLF				SP12_DATA_OUT1,1							;left shift 1bit
				GOTO			NEXT
OUT_IS_0:
				RLF				SP12_DATA_OUT1,1
NEXT:								
				BCF				STATUS,C
				RRF				SP12_COMM,1
				BTFSS			STATUS,C
				GOTO			COMMAND_LOW2
				BSF				PORTC,SP12_SDI
				GOTO			NEXT_BIT_COMM1							
COMMAND_LOW2:				
				BCF				PORTC,SP12_SDI		
				NOP
NEXT_BIT_COMM2:
				BCF				PORTC,SP12_CLK
				DECFSZ			SP12_COMM_COUN,1
				GOTO			SEND_COMM2						
				BSF				PORTC,SP12_NCS
SP12_COMMEND:
				RETURN				
;*------------SP12 NEED DELAY--------------------*
SP12_DELAY:														;for temperature and pressure accelerate measure delay
				
				SLEEP
				BTFSC				FLAG,FLG_TIM1
				GOTO				SP12_DELAY
				BCF					FLAG,FLG_TIM1														
				RETURN
;*-----------get remain data and crc data subroutine------*
REMAIN_DATA:
					BCF				STATUS,C
					BSF				STATUS,RP0
					MOVWF			EE_DATA												;GET VALUE
					MOVLW			0X00
					MOVWF			EE_CRC_DATA										;CRC CODE REGISTER CLEARED
					MOVWF			EE_REMAIN_DATA								;REMAIN CODE REGISTER CLEARED
					RRF				EE_DATA,1
					BTFSC			STATUS,C
					GOTO			REMAIN_ADD1
					RLF				EE_CRC_DATA,1
CONTINUE_REMAIN:										
					RRF				EE_DATA,1
					BTFSC			STATUS,C
					GOTO			REMAIN_2ADD1
					MOVF			EE_DATA,0
					MOVWF			EE_REMAIN_DATA				
					RETURN
REMAIN_ADD1:
					BCF				STATUS,C
					INCF			EE_CRC_DATA,1
					RLF				EE_CRC_DATA,1
					GOTO      CONTINUE_REMAIN					
REMAIN_2ADD1:
					INCF			EE_CRC_DATA,1
					MOVF			EE_DATA,0
					MOVWF			EE_REMAIN_DATA
					RETURN								
;*--------------EEPROM WRITE SUBROUTINE----------*
EE_WRITEBYTE:
				BSF				STATUS,RP0								;BANK0
				MOVLW			0X03
				MOVWF			EE_COUNT
				MOVF			WR_DATA,0										;GET DATA WRITE TO EEPROM
EE_WRITE:				
				;bsf 				STATUS,RP0 								;Bank 1
				MOVWF 				EEDAT 									;EEDATA not changed
				bsf 				EECON1,WREN 							;Enable write
				bcf 				INTCON,GIE 								;Disable INTs
				movlw 				55h			 									;Unlock write
				movwf 				EECON2 ;
				movlw 				0AAh ;
				movwf 				EECON2 ;
				bsf 				EECON1,WR 											;Start the write
				bsf 				INTCON,GIE 											;Enable INTS				
WAIT_EEWRITE:
				BTFSC				EECON1,WR
				GOTO				WAIT_EEWRITE
				bsf 				EECON1,RD 											;YES, Read the
				BCF					EECON1,WREN				;WRITE DISABLE
				MOVF 				EEDATA,0
				;BCF				STATUS,RP0											;BANK0
				xorwf 				WR_DATA,W
				btfss 				STATUS,Z 												;Is data the same
				GOTO				COUNTINUE_WRITE
EEWRITE_END:	
				BCF					STATUS,RP0			
				RETURN				
COUNTINUE_WRITE:
				DECFSZ				EE_COUNT,1
				GOTO				EEWRITE_END
				GOTO				EE_WRITE	
WIRTE_IDHIGH:
				BCF					STATUS,RP0									;BANK0
				MOVF				ID_CODE_H,0
				BSF					STATUS,RP0
				MOVWF				WR_DATA
				CALL				REMAIN_DATA									;GET REMAIN DATA AND CRC DATA	
				BSF					STATUS,RP0
				MOVLW				0X11
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X41
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				MOVF				EE_REMAIN_DATA,0
				BSF					STATUS,RP0
				MOVLW				0X12
				MOVWF				EEADR
				MOVF				EE_REMAIN_DATA,0
				MOVWF				WR_DATA
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X42
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				MOVF				EE_CRC_DATA,0
				BSF					STATUS,RP0
				MOVLW				0X13
				MOVWF				EEADR
				MOVF				EE_CRC_DATA,0
				MOVWF				WR_DATA
				CALL				EE_WRITEBYTE
				BSF					STATUS,RP0
				MOVLW				0X43
				MOVWF				EEADR
				CALL				EE_WRITEBYTE
				BCF					STATUS,RP0
				RETURN
WIRTE_IDMIDDLE:
				BCF					STATUS,RP0									;BANK0
				MOVF				ID_CODE_MID,0
				BSF					STATUS,RP0
				MOVWF				WR_DATA
				CALL				REMAIN_DATA									;GET REMAIN DATA AND CRC DATA	
				BSF					STATUS,RP0

⌨️ 快捷键说明

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