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

📄 spm-02.asm

📁 pic16f877a simple mcu apply to industry automatic equipment.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;+==========================================================================================+;
;|																							|;
;|				Sound Pressure Meter - 02	(SPM-02)										|;
;|																							|;
;|												Date		:	Since 2008/02/28			|;
;|												Author		:	Yuta Tanemura				|;
;|												Filename	:	SPM-02.asm					|;
;|												File Ver.	:	Ver_1.00					|;
;|												Device		:	PIC16F877A					|;
;|																							|;
;+==========================================================================================+;

;	Part Table Number				:	AK-0000
;	Electric Circuit Diagram Number	:	A3-0000
;	Circuit Wiring Diagram Number	:	A3-0000

;	STDH_LIMIT (H'02 50' < STDH < H'03 50')
;	STDL_LIMIT (H'01 00' < STDL < H'01 40')
;	FINH_LIMIT (STDH - H'96' < FINH < STDH - H'96')
;	FINL_LIMIT (STDL - H'18' < FINL < STDL - H'18')

;	It changes with the [Specification of Limit] in the limit.



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

	LIST 	P=PIC16F877
	INCLUDE 	"P16F877.INC"

	__CONFIG 	_CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF

	ERRORLEVEL      -302    ;Suppress bank warning

;-----------------------------------------------------------
;	OSC : 20MHz
;-----------------------------------------------------------



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Label Definition
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

		CBLOCK	H'20'
;Temporary Register
W_TEMP
STATUS_TEMP
;Send Temporary Register
SEND_TEMP
;Wait Count Register
WAIT_CNT0
WAIT_CNT1
WAIT_CNT2
;Status Register
MODE_STATUS			;(x/x/x/x/x/FIN/MEA/STD)
JUDG_STATUS			;(x/x/x/x/x/x/x/1[NG] or 0[OK])
LABEL_STATUS		;(x/x/FINL/FINH/MEAL/MEAH/STDL/STDH)
;Number Character Register
NUM_CHAR_010
NUM_CHAR_001
;Hexadecimal Temporary Register
HEX_TEMP
;Conversion Temporary Register
CONV_TEMP
;Conversion Data register
CONV_DATA_HB
CONV_DATA_LB
;Calcuation Temporary Register
CAL_TEMP1_HB
CAL_TEMP1_LB
;A/D Conversion Data Register
AD_DATA1_HB
AD_DATA1_LB
AD_DATA2_HB
AD_DATA2_LB
AD_DATA3_HB
AD_DATA3_LB
AD_DATA4_HB
AD_DATA4_LB
AD_DATA5_HB
AD_DATA5_LB
AD_DATA6_HB
AD_DATA6_LB
AD_DATA7_HB
AD_DATA7_LB
AD_DATA8_HB
AD_DATA8_LB
;Sort Temporary Register
SORT_TEMP
;Sort Count Register
SORT_COUNT
;Sort Data Register
SORT_DATA1_HB
SORT_DATA1_LB
SORT_DATA2_HB
SORT_DATA2_LB
SORT_DATA3_HB
SORT_DATA3_LB
SORT_DATA4_HB
SORT_DATA4_LB
SORT_DATA5_HB
SORT_DATA5_LB
SORT_DATA6_HB
SORT_DATA6_LB
SORT_DATA7_HB
SORT_DATA7_LB
SORT_DATA8_HB
SORT_DATA8_LB
;Standard High-Level Register
STDH_DATA_HB
STDH_DATA_LB
;Standard Low-Level Register
STDL_DATA_HB
STDL_DATA_LB
;Measurement High-Level Register
MEAH_DATA_HB
MEAH_DATA_LB
;Measurement Low-Level Register
MEAL_DATA_HB
MEAL_DATA_LB
;Finish Measurement High-Level Register
FINH_DATA_HB
FINH_DATA_LB
;Finish Measurement Low-Level Register
FINL_DATA_HB
FINL_DATA_LB
;STDH_LIMIT Register
STDH_LLMT_HB
STDH_LLMT_LB
STDH_ULMT_HB
STDH_ULMT_LB
;STDL_LIMIT Register
STDL_LLMT_HB
STDL_LLMT_LB
STDL_ULMT_HB
STDL_ULMT_LB
;FINH_LIMIT Register
FINH_LMT
;FINL_LIMIT Register
FINL_LMT
;FINL_LIMIT High-Level Register
FINH_LLMT_LB
FINH_LLMT_HB
FINH_ULMT_LB
FINH_ULMT_HB
;FINL_LIMIT Low-Level Register
FINL_LLMT_LB
FINL_LLMT_HB
FINL_ULMT_LB
FINL_ULMT_HB
		ENDC

;MODE_STATUS"MODE_STATUS" (x/x/x/x/x/FIN/MEA/STD)
STD				EQU		H'01'			;B'0000 0001'
MEA				EQU		H'02'			;B'0000 0010'
FIN				EQU		H'04'			;B'0000 0100'

;"LABEL_STATUS" (x/x/FINL/FINH/MEAL/MEAH/STDL/STDH)
STDH			EQU		H'01'			;B'0000 0001'
STDL			EQU		H'02'			;B'0000 0010'
MEAH			EQU		H'04'			;B'0000 0100'
MEAL			EQU		H'08'			;B'0000 1000'
FINH			EQU		H'10'			;B'0001 0000'
FINL			EQU		H'20'			;B'0010 0000'
;Port Designation
RC0				EQU		H'00'			;RC0 Port Designation
RC1				EQU		H'01'			;RC1 Port Designation
RC2				EQU		H'02'			;RC2 Port Designation



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Program Start
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

		ORG		0x00					;Reset Vector
		GOTO	INIT					;Initial Process
		ORG		0x04					;Interrupt Vector
		CALL	INT						;Interruption Process



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Initial Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

INIT
	;***************  Port Initialization  ***************
		BSF		STATUS,RP0				;Change to Bank1

			MOVLW	H'03'				;B'0000 0011' = D'3'
			MOVWF	TRISA				;"Wreg" --> "TRISA"
										;Set RA0 & RA1 to Input mode, RA2 <==> RA7 to Output mode

			MOVLW	H'00'				;B'0000 0000' = D'0'
			MOVWF	TRISB				;"Wreg" --> "TRISB"
										;Set PB0 <==> RB7 to Output mode

			MOVLW	H'81'				;B'1000 0001' = D'129'
			MOVWF	TRISC				;"Wreg" --> "TRISC"
										;Set RC0 & RC7 to Input mode, Other to Output mode

			MOVLW	H'00'				;B'0000 0000' = D'0'
			MOVWF	TRISD				;"Wreg" --> "TRISD"
										;Set PORTD to Output mode

			MOVLW	H'00'				;B'0000 0000' = D'0'
			MOVWF	TRISE				;"Wreg" --> "TRISE"
										;Set PORTE to Output mode

			MOVLW	H'24'				;B'0010 0100' = D'36' (TXEN = 1, BRGH = 1)
			MOVWF	TXSTA				;"Wreg" --> "TXSTA"

			MOVLW	H'81'				;B'1000 0001' = D'129' (9600bps)
			MOVWF	SPBRG				;"Wreg" --> "SPBRG"

		BCF		STATUS,RP0				;Change to Bank0

		MOVLW	H'90'					;B'1001 0000' = D'144' (SPEN = 1, CREN = 1)
		MOVWF	RCSTA					;"Wreg" --> "RCSTA"


	;***************   A/D Converter Initialization   ***************
		MOVLW	H'81'					;B'1000 0001' = D'129' (ADCS = 10, CHS = AN0 ADON = ON)
		MOVWF	ADCON0					;"Wreg" --> "ADCON0"

		MOVLW	H'89'					;B'1000 1001' = D'137' (ADCS = 10, CHS = AN1 ADON = ON)
		MOVWF	ADCON0					;"Wreg" --> "ADCON0"

		BSF		STATUS,RP0				;Change to Bank1

			MOVLW	H'84'				;B'1000 0100' = D'132' (ADFM = 1, PCFG = 0100)
			MOVWF	ADCON1				;"Wreg" --> "ADCON1"
										;(RA0 & RA1 & RA3 are Analog Input,
										;					Another is Digital I/O mode)
		BCF		STATUS,RP0				;Change to Bank0

		GOTO	START



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Interruption Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

INT
		MOVWF	W_TEMP					;"Wreg" --> "W_TEMP"
		MOVF	STATUS,W				;"STATUS" --> "Wreg"
		MOVWF	STATUS_TEMP				;"Wreg" --> "STATUS_TEMP"

		MOVF	STATUS_TEMP,W			;"STATUS_TEMP" --> "Wreg"
		MOVWF	STATUS					;"Wreg" --> "STATUS"
		SWAPF	W_TEMP,F				;"W_TEMP" B'xxxx yyyy' --> "W_TEMP" B'yyyy xxxx'
		SWAPF	W_TEMP,W				;"W_TEMP" B'xxxx yyyy' --> "Wreg" B'yyyy xxxx'

		RETFIE



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Main Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

START
	;***************   Initial Value Setting   ***************
		CLRF	PORTB					;RB0 <==> RB7 default to Low
		CLRF	PORTC					;RC0 <==> RC7 default to Low
		CLRF	PORTD					;RD0 <==> RD7 default to Low
		;Clear of Temporary Register
		CLRF	W_TEMP
		CLRF	STATUS_TEMP
		;Clear of Send Temporary Register
		CLRF	SEND_TEMP
		;Clear of Wait Count Register
		CLRF	WAIT_CNT0
		CLRF	WAIT_CNT1
		CLRF	WAIT_CNT2
		;Clear of Status Register
		CLRF	MODE_STATUS
		CLRF	JUDG_STATUS
		CLRF	LABEL_STATUS
		;Clear of Number Character Register
		CLRF	NUM_CHAR_010
		CLRF	NUM_CHAR_001
		;Clear of Hexadecimal Temporary Register
		CLRF	HEX_TEMP
		;Clear of Conversion Temporary Register
		CLRF	CONV_TEMP
		;Clear of Conversion Data register
		CLRF	CONV_DATA_HB
		CLRF	CONV_DATA_LB
		;Clear of Calcuation Temporary Register
		CLRF	CAL_TEMP1_HB
		CLRF	CAL_TEMP1_LB
		;Clear of A/D Conversion Data Register
		CLRF	AD_DATA1_HB
		CLRF	AD_DATA1_LB
		CLRF	AD_DATA2_HB
		CLRF	AD_DATA2_LB
		CLRF	AD_DATA3_HB
		CLRF	AD_DATA3_LB
		CLRF	AD_DATA4_HB
		CLRF	AD_DATA4_LB
		CLRF	AD_DATA5_HB
		CLRF	AD_DATA5_LB
		CLRF	AD_DATA6_HB
		CLRF	AD_DATA6_LB
		CLRF	AD_DATA7_HB
		CLRF	AD_DATA7_LB
		CLRF	AD_DATA8_HB
		CLRF	AD_DATA8_LB
		;Clear of Sort Temporary Register
		CLRF	SORT_TEMP
		;Clear of Sort Count Register
		CLRF	SORT_COUNT
		;Clear of Sort Data Register
		CLRF	SORT_DATA1_HB
		CLRF	SORT_DATA1_LB
		CLRF	SORT_DATA2_HB
		CLRF	SORT_DATA2_LB
		CLRF	SORT_DATA3_HB
		CLRF	SORT_DATA3_LB
		CLRF	SORT_DATA4_HB
		CLRF	SORT_DATA4_LB
		CLRF	SORT_DATA5_HB
		CLRF	SORT_DATA5_LB
		CLRF	SORT_DATA6_HB
		CLRF	SORT_DATA6_LB
		CLRF	SORT_DATA7_HB
		CLRF	SORT_DATA7_LB
		CLRF	SORT_DATA8_HB
		CLRF	SORT_DATA8_LB
		;Clear of Standard High-Level Register
		CLRF	STDH_DATA_HB
		CLRF	STDH_DATA_LB
		;Clear of Standard Low-Level Register
		CLRF	STDL_DATA_HB
		CLRF	STDL_DATA_LB
		;Clear of Measurement High-Level Register
		CLRF	MEAH_DATA_HB
		CLRF	MEAH_DATA_LB
		;Clear of Measurement Low-Level Register
		CLRF	MEAL_DATA_HB
		CLRF	MEAL_DATA_LB
		;Clear of Finish Measurement High-Level Register
		CLRF	FINH_DATA_HB
		CLRF	FINH_DATA_LB
		;Clear of Finish Measurement Low-Level Register
		CLRF	FINL_DATA_HB
		CLRF	FINL_DATA_LB
		;Clear of FINL_LIMIT High-Level Register
		CLRF	FINH_LLMT_LB
		CLRF	FINH_LLMT_HB
		CLRF	FINH_ULMT_LB
		CLRF	FINH_ULMT_HB
		;Clear of FINL_LIMIT Low-Level Register
		CLRF	FINL_LLMT_LB
		CLRF	FINL_LLMT_HB
		CLRF	FINL_ULMT_LB
		CLRF	FINL_ULMT_HB

⌨️ 快捷键说明

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