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

📄 spm-02.asm

📁 pic16f877a simple mcu apply to industry automatic equipment.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		CALL	WRITE_LABEL				;Writing of Label Process
		GOTO	COM_END					;COM_END

;***************   Finish-High Communication   ***************
FINH_COM
		MOVF	FINH_DATA_HB,W			;"FINH_DATA_HB" --> "Wreg"
		CALL	SEND_HEX_NUM			;Send of hexadecimal Number Process
		MOVF	FINH_DATA_LB,W			;"FINH_DATA_LB" --> "Wreg"
		CALL	SEND_HEX_NUM			;Send of hexadecimal Number Process
		CALL	WRITE_LABEL				;Writing of Label Process
		GOTO	COM_END					;COM_END

;***************   Finish-Low Communication   ***************
FINL_COM
		MOVF	FINL_DATA_HB,W			;"FINL_DATA_HB" --> "Wreg"
		CALL	SEND_HEX_NUM			;Send of hexadecimal Number Process
		MOVF	FINL_DATA_LB,W			;"FINL_DATA_LB" --> "Wreg"
		CALL	SEND_HEX_NUM			;Send of hexadecimal Number Process
		CALL	WRITE_LABEL				;Writing of Label Process
		GOTO	COM_END					;COM_END

;***************   Communication End   ***************
COM_END
		RETURN



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Send of hexadecimal Number Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SEND_HEX_NUM
		MOVWF	HEX_TEMP				;"Wreg" --> "HEX_TEMP"

		CLRF	NUM_CHAR_010			;Clear "NUM_CHAR_010"
		CLRF	NUM_CHAR_001			;Clear "NUM_CHAR_001"

	;**************************************
	; Conversion of the tens place
	;**************************************
		MOVF	HEX_TEMP,W				;"HEX_TEMP" --> "Wreg"
		MOVWF	CONV_TEMP				;"Wreg" --> "CONV_TEMP"

		SWAPF	CONV_TEMP,F				;B'xxxx XXXX' --> B'XXXX xxxx'
		MOVLW	B'00001111'				;B'0000 1111' --> "Wreg"
		ANDWF	CONV_TEMP,F				;"CONV_TEMP" & "Wreg" --> "CONV_TEMP"

		MOVF	CONV_TEMP,W				;"CONV_TEMP" --> "Wreg"
		SUBLW	H'09'					;H'09' - "Wreg" --> "Wreg" (When CNT1 is 0-9, CF=1)
		BTFSS	STATUS,0				;B'xxxx xxx1'?
		GOTO	SEND_HEX_NUM_3			;No. SEND_HEX_NUM_3

	;***************   Processing of 0-9   ***************
		MOVLW	A'0'					;A'0' --> "Wreg"
		ADDWF	CONV_TEMP,F				;"CONV_TEMP" + "Wreg" --> "CONV_TEMP"
		GOTO	SEND_HEX_NUM_4			;SEND_HEX_NUM_4

	;***************   Processing of A-F   ***************
SEND_HEX_NUM_3
		MOVLW	D'10'					;D'10' --> "Wreg"
		SUBLW	A'A'					;A'A' - "Wreg" --> "Wreg"
		ADDWF	CONV_TEMP,F				;"CONV_TEMP" + "Wreg" --> "CONV_TEMP"

SEND_HEX_NUM_4
		MOVF	CONV_TEMP,W				;"CONV_TEMP" --> "Wreg"
		MOVWF	NUM_CHAR_010			;"Wreg" --> "NUM_CHAR_100" (A tens place decision)
		CALL	SEND					;SEND


	;**************************************
	; Conversion of one digit
	;**************************************
		MOVF	HEX_TEMP,W				;"HEX_TEMP" --> "Wreg"
		MOVWF	CONV_TEMP				;"Wreg" --> "CONV_TEMP"

		MOVLW	B'00001111'				;B'0000 1111' --> "Wreg"
		ANDWF	CONV_TEMP,F				;"CONV_TEMP" & "Wreg" --> "CONV_TEMP"

		MOVF	CONV_TEMP,W				;"CONV_TEMP" --> "Wreg"
		SUBLW	H'09'					;H'09' - "Wreg" --> "Wreg" (When CNT1 is 0-9, CF=1)
		BTFSS	STATUS,0				;B'xxxx xxx1'?
		GOTO	SEND_HEX_NUM_5			;No. SEND_HEX_NUM_5

	;***************   Processing of 0-9   ***************
		MOVLW	A'0'					;A'0' --> "Wreg"
		ADDWF	CONV_TEMP,F				;"CONV_TEMP" + "Wreg" --> "CONV_TEMP"
		GOTO	SEND_HEX_NUM_6			;SEND_HEX_NUM_6

	;***************   Processing of A-F   ***************
SEND_HEX_NUM_5
		MOVLW	D'10'					;D'10' --> "Wreg"
		SUBLW	A'A'					;A'A' - "Wreg" --> "Wreg"
		ADDWF	CONV_TEMP,F				;"CONV_TEMP" + "Wreg" --> "CONV_TEMP"

SEND_HEX_NUM_6
		MOVF	CONV_TEMP,W				;"CONV_TEMP" --> "Wreg"
		MOVWF	NUM_CHAR_001			;"Wreg" --> "NUM_CHAR_100" (A tens place decision)
		CALL	SEND					;SEND

		RETURN



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Writing of Label Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

WRITE_LABEL
	;***************   Writing of HT   ***************
		MOVLW	H'09'					;B'0000 1001' = D'09'
		CALL	SEND					;SEND

	;***************   Writing of Label   ***************
;										;(x/x/FINL/FINH/MEAL/MEAH/STDL/STDH)
	;STDH
		BTFSC	LABEL_STATUS,0			;"LABEL_STATUS" B'xxxx xxx0'?
		GOTO	LABEL_STDH				;No. LABEL_STDH
	;STDL
		BTFSC	LABEL_STATUS,1			;"LABEL_STATUS" B'xxxx xx0x'?
		GOTO	LABEL_STDL				;No. LABEL_STDL
	;MEAH
		BTFSC	LABEL_STATUS,2			;"LABEL_STATUS" B'xxxx x0xx'?
		GOTO	LABEL_MEAH				;No. LABEL_MEAH
	;MEAL
		BTFSC	LABEL_STATUS,3			;"LABEL_STATUS" B'xxxx 0xxx'?
		GOTO	LABEL_MEAL				;No. LABEL_MEAL
	;FINH
		BTFSC	LABEL_STATUS,4			;"LABEL_STATUS" B'xxx0 xxxx'?
		GOTO	LABEL_FINH				;No. LABEL_FINH
	;FINL
		BTFSC	LABEL_STATUS,5			;"LABEL_STATUS" B'xx0x xxxx'?
		GOTO	LABEL_FINL				;No. LABEL_FINL
	;NOTHING
		GOTO	LABEL_NG				;LABEL_NG


;***************   Writing of Label 'STDH'   ***************
LABEL_STDH
		MOVLW	'S'						;'S' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'T'						;'T' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'D'						;'D' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'H'						;'H' --> "Wreg"
		CALL	SEND					;SEND
		GOTO	WRITE_LF_CR				;WRITE_LF_CR

;***************   Writing of Label 'STDL'   ***************
LABEL_STDL
		MOVLW	'S'						;'S' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'T'						;'T' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'D'						;'D' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'L'						;'L' --> "Wreg"
		CALL	SEND					;SEND
		GOTO	WRITE_LF_CR				;WRITE_LF_CR

;***************   Writing of Label 'MEAH'   ***************
LABEL_MEAH
		MOVLW	'M'						;'M' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'E'						;'E' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'A'						;'A' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'H'						;'H' --> "Wreg"
		CALL	SEND					;SEND
		GOTO	WRITE_LF_CR				;WRITE_LF_CR

;***************   Writing of Label 'MEAL'   ***************
LABEL_MEAL
		MOVLW	'M'						;'M' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'E'						;'E' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'A'						;'A' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'L'						;'L' --> "Wreg"
		CALL	SEND					;SEND
		GOTO	WRITE_LF_CR				;WRITE_LF_CR

;***************   Writing of Label 'FINH'   ***************
LABEL_FINH
		MOVLW	'F'						;'F' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'I'						;'I' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'N'						;'N' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'H'						;'H' --> "Wreg"
		CALL	SEND					;SEND
		GOTO	WRITE_LF_CR				;WRITE_LF_CR

;***************   Writing of Label 'FINL'   ***************
LABEL_FINL
		MOVLW	'F'						;'F' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'I'						;'I' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'N'						;'N' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'L'						;'L' --> "Wreg"
		CALL	SEND					;SEND
		GOTO	WRITE_LF_CR				;WRITE_LF_CR

;***************   Writing of Label 'NG'   ***************
LABEL_NG
		MOVLW	'N'						;'N' --> "Wreg"
		CALL	SEND					;SEND
		MOVLW	'G'						;'G' --> "Wreg"
		CALL	SEND					;SEND
		GOTO	WRITE_LF_CR				;WRITE_LF_CR

;***************   Writing of "LF" & "CR"   ***************
WRITE_LF_CR
		MOVLW	H'0A'					;B'0000 1010' = D'10'
		CALL	SEND					;SEND
		MOVLW	H'0D'					;B'0000 1101' = D'13'
		CALL	SEND					;SEND

		RETURN



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Send Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SEND
		MOVWF	SEND_TEMP				;"Wreg" --> "SEND_TEMP"
		BSF		STATUS,RP0				;Change to Bank1

LPTX
		BTFSS	TXSTA,TRMT				;"TXSTA" TRMT = '1'?
		GOTO	LPTX					;No. LPTX
		BCF		STATUS,RP0				;Change to Bank0
		MOVF	SEND_TEMP,W				;"SEND_TEMP" --> "Wreg"
		MOVWF	TXREG					;"Wreg" --> "TXREG"

		RETURN



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Wait Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

;***************   1 second   ***************
WAIT
		MOVLW	H'28'					;H'28' = B'0010 1000' = D'40'
		MOVWF	WAIT_CNT2				;"Wreg" --> "WAIT_CNT2"
										;24.948msec亊40=997.92msec = About 1.0 sec
WAIT_LOOP
		CALL	WAIT_25M				;Wait 25msec
		DECFSZ	WAIT_CNT2,F				;End ?
		GOTO	WAIT_LOOP				;No. Continue
		RETURN


;***************   25 milli seconds   ***************
WAIT_25M
		MOVLW	H'A2'					;B'1010 0010' = D'162'
		MOVWF	WAIT_CNT1				;"Wreg" --> "WAIT_CNT1"
		MOVLW	H'FF'					;B'1111 1111' = D'255'
   		MOVWF	WAIT_CNT0				;"Wreg" --> "WAIT_CNT0"
WAIT_25M_LOOP							;256亊162 Time Repeat
		DECFSZ	WAIT_CNT0,F				;End ?
		GOTO	WAIT_25M_LOOP			;No. Continue
		MOVLW	H'FF'					;B'1111 1111' = D'255'
   		MOVWF	WAIT_CNT0				;"Wreg" --> "WAIT_CNT0"
		DECFSZ	WAIT_CNT1,F				;End ?
		GOTO	WAIT_25M_LOOP			;No. Continue
		RETURN


;***************   100 milli seconds   ***************
WAIT_100M
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec

		RETURN


;***************   500 milli seconds   ***************
WAIT_500M
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec

		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec

		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec

		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec

		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec
		CALL	WAIT_25M				;Wait 25msec

		RETURN


;***************   20 micro seconds   ***************
WAIT_20MICRO
		MOVLW	H'21'					;B'0001 0010' = D'33'
		MOVWF	WAIT_CNT0				;"Wreg" --> "WAIT_CNT0"
WAIT_20MICRO_LOOP
		DECFSZ	WAIT_CNT0,F				;End ?
		GOTO	WAIT_20MICRO_LOOP		;No. Continue
		RETURN


;***************   100 micro seconds   ***************
WAIT_100MICRO
		CALL	WAIT_20MICRO			;Wait 20 micro seconds
		CALL	WAIT_20MICRO			;Wait 20 micro seconds
		CALL	WAIT_20MICRO			;Wait 20 micro seconds
		CALL	WAIT_20MICRO			;Wait 20 micro seconds
		CALL	WAIT_20MICRO			;Wait 20 micro seconds
		RETURN


;***************   1 milli seconds   ***************
WAIT_1M
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		CALL	WAIT_100MICRO			;Wait 100 micro seconds
		RETURN



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		End of Sound Pressure Meter
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

		END

⌨️ 快捷键说明

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