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

📄 transmit_a.asm

📁 TPMS transmit subroutine
💻 ASM
📖 第 1 页 / 共 3 页
字号:

;**********************************************************************
;                                                                     *
;    Filename:transmit_temp.asm                                		  	*
;    Date:05/07/28                                               	  	*
;    File Version:A                                                   *
;                                                                     *
;    Author:LuoKC                                                     *
;    Company:burnon                                                   *
;                                                                     * 
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required:  only use for EEPROM testing                     *
;    timer0 and timer1 initial have finished                          *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;      EEPROM ADDRESS						CONNECT					  										*
;      	11&41H                 	ID HIGH BASIC VALUE                   *
;      	12&42H                 	ID HIGH RIGHT VALUE                   *
;				13&43H									ID HIGH CRC VALUE					  					*
;				14&44H									ID MID BASIC VALUE					  				*
;				15&45H									ID MID RIGHT VALUE                    *
;      	16&46H                 	ID MID CRC VALUE                      *
;      	17&47H                 	ID LOW BASIC VALUE                    *
;      	18&48H									ID LOW RIGHT VALUE                    *
;      	19&49H                 	ID LOW CRC VALUE                      *
;				21&51h									squence code						  						*
;				61&71h									learn sysmbol						  						*	
;***********************************************************************


	list      p=16F630            ; list directive to define processor
	#include  <P16F630.inc>        ; processor specific variable definitions

	__CONFIG   _CPD & _WDT_OFF & _BODEN & _PWRTE_ON & _XT_OSC

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

;***** VARIABLE DEFINITIONS
w_temp        		EQU     0x20        ; variable used for context saving 
status_temp   		EQU     0x21        ; variable used for context saving  
PCLATH_TEMP   		EQU     0x22		;variable used for PCLATH saving at interruption	
porta_temp    		EQU     0x23
COUNT		  				EQU	  	0X24
ACC_H		  				EQU			0X25		;initially acceleration value high
ACC_L							EQU			0X26		;initially acceleration value low
ACC_H_OLD					EQU			0X27
ACC_L_OLD					EQU			0X28
ACC_COMPEN				EQU			0X29		;acceleration value compensated
ACC_COMPEN_OLD		EQU			0X2A
MEASURE_COMM			EQU			0X2B		;measure command register
RD_SP12						EQU			0X2C		;read (temperature pressure) data from sp12 register 
PRESS_H						EQU			0X2D		;initially pressure data of sp12 high
PRESS_L						EQU			0X2E		;initially pressure data of sp12 low
PRESS_H_OLD				EQU			0X2F
PRESS_L_OLD				EQU			0X30
PRESS_COMPEN			EQU			0X31		;pressure value after compensated
PRESS_COMPEN_OLD	EQU			0X32
TEMP_H						EQU			0X33		;initially temperature value high
TEMP_L						EQU			0X34		;initially temperature value low
TEMP_H_OLD				EQU			0X35
TEMP_L_OLD				EQU			0X36
TEMP_COMPEN				EQU			0X37		;temperature value after compensated
TEMP_COMPEN_OLD		EQU			0X38

PARIT_CODE				EQU			0X39		;parity code register
;*------------------RF REGISTER----------------------*
PREAM_CODE_H			EQU			0X40
PREAM_CODE_L			EQU			0X41
ID_CODE_H					EQU			0X42
ID_CODE_MID				EQU			0X43
ID_CODE_L					EQU			0X44
PARITY_CODE				EQU			0X45
DEL_COUNT					EQU			0X46
DEL_COUNT1				EQU			0X47
RF_TRAN_COUNT			EQU			0X48
RF_SEND						EQU			0X49
FLAG							EQU			0X4A
RF_NEED						EQU			0
RF_NOT_NEED				EQU			1
FLG_INTF					EQU			2
EE_FLG_ERROR			EQU			3
FLG_TIM1					EQU			4
KEY_PRESSED				EQU			5
HOUR2_SY					EQU			6
SECOND_SY					EQU			7
SQUENCE_CODE			EQU			0X4B
SYSMBOL_CODE			EQU			0X4C

;*--------------------TIMER0 REGISTER----------------*
TIMER0_COUNT			EQU			0X50
TIMER0_COUN1			EQU			0X51
TIMER0_COUN2			EQU			0X52
TIMER0_COUN3			EQU			0X53
TIMER1_COUNT			EQU			0X51
TIMER1_1SECO			EQU			0X52
TIMER1_1MIN				EQU			0X53
TIMER1_52MIN			EQU			0X54

;TIME_REG					EQU			0X5A
;TIME_1SECO				EQU			0
;TIME_1MIN					EQU			1
;TIME_52MIN				EQU			3
;*--------SP12 COMMUNITION REGISTER-------------------*
SP12_COMM_COUN			EQU			0X5A
SP12_DATA_OUT1			EQU			0X51
SP12_DATA_OUT2			EQU			0X52
SP12_DATA_IN1				EQU			0X53
SP12_DATA_IN2				EQU			0X54
SP12_COMM						EQU			0X55
SP12_SEND						EQU			0X56

;*---------EEPROM DATA REGISTER-------------------------*

RD_EE_ADDR					EQU			0XA0
RD_DATA							EQU			0XA1
RD_DATA1						EQU			0XA2
RD_DATA2						EQU			0XA3

RD_BASIC						EQU			0XA4
RD_CAL							EQU			0XA5
RD_CRC							EQU			0XA6
EE_COUNT						EQU			0XA7
WR_EE_ADDR						EQU			0XA8
WR_DATA							EQU			0XA9
WR_BASIC						EQU			0XAA
WR_CAL							EQU			0XAB
WR_CRC							EQU			0XAC

EE_RDTEMP						EQU			0XB0
EE_RDTEMP1						EQU			0XB1
EE_RDTEMP2						EQU			0XB2

EE_REMAIN_DATA				EQU			0XB5
EE_CRC_DATA						EQU			0XB6
EE_DATA								EQU			0XB7
EE_DATA_TEMP					EQU			0XB8
EE_DATA_TEMP1					EQU			0XB9
;*----------------PORTA AND PORTC BIT DEFINE-------------*
TRAN_RF								EQU		2			;PORTA
SP12_SDI							EQU		1			;PORTA
SP12_VDD							EQU		5			;PORTC
SP12_SDO							EQU		4			;PORTC
SP12_CLK							EQU		3			;PORTC
SP12_NCS							EQU		1			;PORTC
SP12_RFPOWER		    	EQU		0			;PORTC
LEARN_SW							EQU		2			;PORTC
;**********************************************************************
		ORG     0x000             ; processor reset vector
					clrf    PCLATH            ; ensure page bits are claared
  					goto    main              ; go to beginning of program


		ORG     0x004             ; interrupt vector location
						GOTO 		INT_ADDRESS

main:

															; remaining code goes here
				CALL		intial_port 
				CALL		CLRRAM
send_data				
				;call		RF_DATA_SEND
				MOVLW			0XF0
				MOVWF			SQUENCE_CODE
				MOVWF			SYSMBOL_CODE
				MOVWF			PREAM_CODE_H
				MOVWF			PREAM_CODE_L
				MOVWF			ID_CODE_H
				MOVWF			ID_CODE_MID
				MOVWF			ID_CODE_L
				CALL			RF_DATA_SEND
				;MOVWF			RF_SEND
				;CALL			PARITY_SEND
				CALL			WRITE_SQUENCE
				CALL			READ_SQUENCE
				CALL			WRITE_SYSMBOL
				CALL			READ_SYSMBOL
				MOVLW			0X0E
				MOVWF			ID_CODE_H
				MOVWF			ID_CODE_MID
				MOVWF			ID_CODE_L
				CALL			WIRTE_IDHIGH
				CALL			WIRTE_IDMIDDLE
				CALL			WIRTE_IDLOW	
				CALL			READ_IDCODE
				;call			RF_SEND
				goto			send_data

intial_port:
;*------------initial porta-----------------------------------*
  		bcf 			STATUS,RP0 			;Bank 0 
			clrf 			PORTA 					;Init PORTA=00h
			movlw 		07h 						;Set RA<2:0> to digital I/O
			movwf 		CMCON 					;digital I/O
			MOVLW 		05H							;porta,0 and porta,2 set to input the other set to output
			bsf 			STATUS,RP0 			;Bank 1				
			MOVWF 		TRISA						;and set RA<5:4,1:0>
     														;RA5 and RA4 RA3 as special function port
			movlw 		04h							;PORTA,2 interrupt wakeup MCU working
			movwf			IOCA						;only porta.1 interrupt enable
	
;*---------------initial portC---------------------------------*
			bcf 				STATUS,RP0 		;Bank 0
			clrf 				PORTC 				;Init PORTC
			bsf 				STATUS,RP0 		;Bank 1
			movlw 			04h 					;Set RC2 as inputs the other as output
			movwf 			TRISC 				;and set RC<5:4,1:0>
													;as outputs
			bcf 				STATUS,RP0 		;Bank 0
;*---------------initial special register----------------------*
			clrwdt 											;Clear WDT and
			bsf				STATUS,RP0				;Bank1
			movlw			0x87							;0XC0
			movwf			OPTION_REG				;option_reg.7 PORTA Pull-up Enable bit
			bcf				STATUS,RP0				;option_reg.6 Interrupt Edge Select bit
																	;option_reg.5 TMR0 Clock Source Select bit
																	;option_reg.4 TMR0 Source Edge Select bit
																	;option_reg.3 Prescaler Assignment bit
																	;option_reg.2-.0 Prescaler Rate Select bits

			movlw			B'11110000'       ;B'1111000'				;int interrupt is not need
			movwf			INTCON						;INTCON.7 Global Interrupt Enable bit
																	;INTCON.6 Peripheral Interrupt Enable bit
																	;INTCON.5 TMR0 Overflow Interrupt Enable bit
																	;INTCON.4 RA2/INT External Interrupt Enable bit
																	;INTCON.3 Port Change Interrupt Enable bit(1)
																	;INTCON.2 TMR0 Overflow Interrupt Flag bit(2)
																	;INTCON.1 RA2/INT External Interrupt Flag bit
																	;INTCON.0 Port Change Interrupt Flag bit
			movlw			00h								;PIE1.7 EE Write Complete Interrupt Enable bit
			movwf			PIE1							;PIE1.6 A/D Converter Interrupt Enable bit (PIC16F676 only)
																	;PIE1.3 Comparator Interrupt Enable bit
																	;PIE1.0 TMR1 Overflow Interrupt Enable bit ,timer1 use to need
			MOVLW  			00H
			MOVWF  			PIR1						;PIR1.7 EEPROM Write Operation Interrupt Flag bit
																	;PIR1.6 A/D Converter Interrupt Flag bit (PIC16F676 only)
																	;PIR1.5-4 Unimplemented: Read as ‘0’
																	;PIR1.3 Comparator Interrupt Flag bit
																	;PIR1.2 -1 Unimplemented: Read as ‘0’
																	;PIR1.0 TMR1 Overflow Interrupt Flag bit
			MOVLW			0X80							;
			MOVWF			OSCCAL						;6-bit Signed Oscillator Calibration bits 
	
			MOVLW			0X04
			MOVWF			WPUA							;SET WAKE UP ENABLE
	
			BCF				STATUS,RP0				;CHANGE BANK TO BANK0
;-------timer0-------------------

		MOVLW			0X06
		MOVWF			TMR0							;SET TIMER0 INITIAL VALUE USE FOR TRANSIMT DATA
		bsf 	STATUS,RP0 						;Bank 1
		movlw 	b'00000000' 						;Select TMR0
															; prescale, and
															; clock source
		movwf 	OPTION_REG 					;
		bcf 	STATUS,RP0 						;Bank 0
;---------timer1------------------ USER FOR CLOCK REFRESH
				MOVLW			0XEC				;SET TIMER1 10MS INTERRUPT
				MOVWF			TMR1H
				MOVLW			0X77
				MOVWF			TMR1L		
				MOVLW			0X10
				MOVWF			T1CON		
;----------interrupt---------------
			MOVLW			0X00
			MOVWF			EECON1
			return
;*-----------------CLEAR ALL OF GENERAL STATIC RAM REGISTER--------------
CLRRAM:                               ;clr  ram  20h~05fh 
                bcf     STATUS,RP0
                movlw   0x20
                movwf   FSR
LOOPRAM0:       
                CLRWDT
                clrf    INDF   
                incf    FSR,F
	          	BTFSS  	FSR,6
	          	goto    LOOPRAM0
				BTFSS  	FSR,4
				GOTO	LOOPRAM0
							;	movlw   0xA0
             	; movwf   FSR
LOOPRAM1:
              ;; clrwdt
              ; clrf    INDF   
              ; incf    FSR
	          	;	BTFSS  FSR,7
	          	;	goto    LOOPRAM1
							;	BTFSS  FSR,6
							;	GOTO	LOOPRAM1
							;	BTFSS  FSR,4
							;	GOTO	LOOPRAM1
				MOVLW			0XFF
				MOVWF			PREAM_CODE_H
				MOVLW			0XFE
				MOVWF			PREAM_CODE_L
                RETURN 
;*-----------TRANSMIT 1LOGIC SUBROUTINE--------*                
TRAN_1BIT:
				BSF		PORTA,1
				CALL  	DELAY_256US
				BCF		PORTA,1
				CALL	DELAY_768US
				RETURN
;*----------TRANSMIT 0LOGIC	SUBROUTINE----------*				
TRAN_0BIT:
				BSF			PORTA,1
				CALL		DELAY_256US
				CALL		DELAY_256US
				BCF			PORTA,1
				CALL		DELAY_256US
				CALL		DELAY_256US
				RETURN			
;*------------TRANSMIT PREAMCODE DATA SUBROUTINE---*				
TRAN_1BYTE:					
				MOVLW			0X08
				MOVWF			RF_TRAN_COUNT
COUNTINUE_SEND:				

⌨️ 快捷键说明

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