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

📄 escort_95.asm

📁 通过AT89C51的串行口通讯,能够读取Escort_95系列的数字式表头的电压和电流等信号.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
; ********************
; ***** Constant *****
; ********************
c_baul			EQU	(-00417+12)		; ( 1 / 2400 x 1000000 ) = 416.667 us
c_bit			EQU	6




; *****************
; ***** Input *****
; *****************
i_rxd			EQU	P3.0





; ********************
; ***** Variable *****
; ********************

; RS232 2400 6N1 Variable
;    * Example : Receive Data (MSB)001101(LSB) at 2400-6N1
;        - Stage 1 : At least remains 5V for 8 bits
;
;           Time            a  a+1 a+2 a+3 a+4 a+5 a+6 a+7
;                |        |   |   |   |   |   |   |   |   |
;            5V  | ...... |---|---|---|---|---|---|---|---| ......
;                |        |   |   |   |   |   |   |   |   |
;            0V  |        |   |   |   |   |   |   |   |   |
;                                                       * MOV v_stg,#2
;
;
;        - Stage 2 : Wait for 0V
;
;           Time                      b
;                |   |          |   |   |   |   |   |   |   |   |   |   |   |
;            5V  |---|  ---...  |---|   |---|   |---|---|   |   |---|---|---|
;                |   |          |   |   | 1 | 0 | 1 | 1 | 0 | 0 |   |   |   |
;            0V  |   |          |   |---|   |---|   |   |---|---|   |   |   |
;
;                                     * SETB v_btstr
;                                     * MOV  v_stg,#3
;
;
;        - Stage 3 : Receive the following 6 bits which after the start bit
;
;           Time       b  b+1 b+2 b+3 b+4 b+5 b+6
;                |   |   |   |   |   |   |   |   |   |   |   |
;            5V  |---|   |---|   |---|---|   |   |---|---|---|
;                |   |   | 1 | 0 | 1 | 1 | 0 | 0 |   |   |   |
;            0V  |   |---|   |---|   |   |---|---|   |   |   |
;
;                                              * v_rxd = 00001101
;                                              * MOV  v_stg,#4
;                                              * MOV  v_btcnt,#c_bit
;
;
;        - Stage 4 : Check the stop is 5V or not
;
;           Time                                  b+7
;                |   |   |   |   |   |   |   |   |   |   |   |
;            5V  |---|   |---|   |---|---|   |   |---|---|---|
;                |   |   | 1 | 0 | 1 | 1 | 0 | 0 |   |   |   |
;            0V  |   |---|   |---|   |   |---|---|   |   |   |
;
;                                                  * MOV  v_stg,#2
;                                                  * CLR  v_btstr
;                                                  * INC  v_addr
;



v_rxd			EQU	2FH.0			; Receive
v_btstr			EQU	2FH.1			; Bit Start
v_recverr		EQU	2FH.2			; Receive Error Flag
v_stg			EQU	30H			; Stage
v_cnt			EQU	31H			; Bit Count Variable
v_addr			EQU	32H			; Bit Address

; Serial Variable
v_ti			EQU	2FH.3
v_ri			EQU	2FH.4
v_send			EQU	33H
v_recv			EQU	34H
v_cnt			EQU	35H
v_addr			EQU	36H

; Maths Variable
v_in1			EQU	40H			; Range Input Higher Byte
v_in2			EQU	41H			; Range Input Lower Byte
v_in3			EQU	42H			; Range Lower Limit Higher Byte
v_in4			EQU	43H			; Range Lower Limit Lower Byte
v_in5			EQU	44H			; Range Upper Limit Higher Byte
v_in6			EQU	45H			; Range Upper Limit Lower Byte





; ****************
; ***** Data *****
; ****************

; Escort 95T measurement
d_dgt1			EQU	50H
d_dgt2			EQU	51H
d_dgt3			EQU	52H
d_dgt4			EQU	53H
d_dgt5			EQU	54H
d_mode			EQU	55H
d_rng			EQU	56H




; *****************************
; ***** Interrupt Address *****
; *****************************
			ORG	0H
			AJMP	Initial
			ORG	1BH
			AJMP	Timer1IRQ
			ORG	23H
			AJMP	SerialIRQ
			
Initial:
			ACALL	MCUInitial
			SETB	IE.7
			SJMP	Wait
			
Wait:
			ACALL	RamClear
			ACALL	Timer1Initial
			SETB	TR1
			ACALL	Delay1s
			CLR	TR1
			ACALL	CheckEscortString
			ACALL	EscortStringToASCII
			ACALL	HyperTerDisplay
			SJMP	Wait
			
; Timer 1 Initial Routine
Timer1Initial:
			PUSH	ACC
			
			CLR	TR1
			CLR	IE.3
			
			MOV	A,TMOD
			SWAP	A
			MOV	R0,#2
			MOV	R2,#00000001B
			XCHD	A,@R0
			SWAP	A
			MOV	TMOD,A
			
			MOV	TH1,#HIGH(c_baul)
			MOV	TL1,#LOW(c_baul)
			
			SETB	IE.3
			
			MOV	v_cnt,#c_bit
			MOV	v_addr,#60H
			MOV	v_stg,#1
			CLR	v_recverr
			
			POP	ACC
			RET
			
; Timer 1 IRQ
Timer1IRQ:
			MOV	C,i_rxd
			MOV	v_rxd,C
			
			CLR	TR1
			MOV	TH1,#HIGH(c_baul)
			MOV	TL1,#LOW(c_baul)
			SETB	TR1
			
			PUSH	ACC
			PUSH	0
			PUSH	2
			MOV	A,v_stg
Stage1:			CJNE	A,#1,Stage2
			MOV	C,v_rxd
			MOV	R0,v_addr
			MOV	A,@R0
			RRC	A
			MOV	@R0,A
			CPL	A
			JNZ	_Timer1IRQ_Exit
			MOV	@R0,#0
			MOV	v_stg,#2
			SJMP	_Timer1IRQ_Exit
			
Stage2:			CJNE	A,#2,Stage3
			JB	v_rxd,_Timer1IRQ_Exit
			SETB	v_btstr
			MOV	v_stg,#3
			SJMP	_Timer1IRQ_Exit
			
Stage3:			CJNE	A,#3,Stage4
			MOV	C,v_rxd
			MOV	R0,v_addr
			MOV	A,@R0
			RRC	A
			MOV	@R0,A
			DJNZ	v_cnt,_Timer1IRQ_Exit
			MOV	v_cnt,#c_bit
			MOV	v_stg,#4
			SJMP	_Timer1IRQ_Exit
			
Stage4:			CJNE	A,#4,_Timer1IRQ_Exit
			JNB	v_rxd,_Stage4_2
			
			MOV	R0,v_addr
			MOV	R2,#c_bit
			MOV	A,@R0
_Stage4_1:		RL	A
			DJNZ	R2,_Stage4_1
			MOV	@R0,A
			INC	v_addr
			MOV	A,v_addr
			CJNE	A,#080H,_Stage4_2
			MOV	v_stg,#5
			SJMP	_Timer1IRQ_Exit
_Stage4_2:		MOV	v_stg,#2
			SJMP	_Timer1IRQ_Exit
			
Stage5:			SJMP	_Timer1IRQ_Exit
			
_Timer1IRQ_Exit:	POP	2
			POP	0
			POP	ACC
			RETI
			
Error:
			SETB	v_recverr
			MOV	SP,#07
			MOV	DPTR,#Wait
			PUSH	DPL
			PUSH	DPH
			RET
			
; Check Escort String Routine
CheckEscortString:
			PUSH	ACC
			PUSH	0
			PUSH	2
			MOV	R0,#5FH
_CheckEscortString_1:	INC	R0
			MOV	A,R0
			CJNE	A,#80H,_CheckEscortString_2
			SJMP	Error
_CheckEscortString_2:	MOV	A,@R0
			CJNE	A,#00001111B,_CheckEscortString_1
			MOV	v_addr,R0
			MOV	A,#20
			ADD	A,R0
			MOV	R0,A
			MOV	A,@R0
			CJNE	A,#00000000B,Error
			MOV	R0,v_addr
			MOV	R2,#2
_CheckEscortString_3:	INC	R0
			MOV	v_in1,#0
			MOV	v_in2,@R0
			MOV	v_in3,#0
			MOV	v_in4,#100000B
			MOV	v_in5,#0
			MOV	v_in6,#101011B
			ACALL	Range
			JB	v_recverr,Error
			DJNZ	R2,_CheckEscortString_3
			INC	R0
			MOV	R2,#6
_CheckEscortString_4:	INC	R0
			MOV	v_in1,#0
			MOV	v_in2,@R0
			MOV	v_in3,#0
			MOV	v_in4,#100000B
			MOV	v_in5,#0
			MOV	v_in6,#101011B
			ACALL	Range
			JB	v_recverr,Error
			DJNZ	R2,_CheckEscortString_4
			POP	2
			POP	0
			POP	ACC
			RET
			
; Escort String To ASCII Routine
EscortStringToASCII:
			PUSH	ACC
			PUSH	0
			
			MOV	R0,v_addr
			MOV	A,#4
			ADD	A,R0
			MOV	R0,A
			
			MOV	A,@R0
			ORL	A,#00010000B
			MOV	d_dgt5,A
			INC	R0
			MOV	A,@R0
			ORL	A,#00010000B
			MOV	d_dgt4,A
			INC	R0
			MOV	A,@R0
			ORL	A,#00010000B
			MOV	d_dgt3,A
			INC	R0
			MOV	A,@R0
			ORL	A,#00010000B
			MOV	d_dgt2,A
			INC	R0
			MOV	A,@R0
			ORL	A,#00010000B
			MOV	d_dgt1,A
			
			POP	0
			POP	ACC
			RET
			
; Hyper Terminal Display Routine
HyperTerDisplay:
			PUSH	ACC
			PUSH	0
			PUSH	2
			PUSH	3
			PUSH	4
			PUSH	5
			PUSH	6
			PUSH	7
			
			ACALL	SerialInitial
			
			; Get the Item 2 ( to R2 ) and 3 ( to R3 ) and 17 ( to R4 )
			MOV	R0,v_addr
			INC	R0
			MOV	2,@R0
			INC	R0
			MOV	3,@R0
			MOV	A,#14
			ADD	A,R0
			MOV	R0,A
			MOV	4,@R0
			
			; Get the Item 10 ( to R5 )
			MOV	R0,v_addr
			MOV	A,#9
			ADD	A,R0
			MOV	R0,A
			MOV	5,@R0
			MOV	A,R5
			ANL	A,#00000111B
			MOV	d_rng,A
			
_HyperTerDisplay_1a:	CJNE	R2,#00100011B,_HyperTerDisplay_1b
			CJNE	R3,#00100000B,_HyperTerDisplay_1b
			MOV	d_mode,#1			; Mode 1 : 03,00 AC uA
			MOV	A,d_rng
			ADD	A,#3
			MOV	R6,A
			CLR	C
			MOV	A,#5
			SUBB	A,R6
			MOV	R7,A
			
			;MOV	A,R6
			;ORL	A,#00110000B
			;MOV	v_send,A
			;ACALL	SendByte
			;MOV	A,R7
			;ORL	A,#00110000B
			;MOV	v_send,A
			;ACALL	SendByte
			
			
			AJMP	_HyperTerDisplay_2
			
_HyperTerDisplay_1b:	CJNE	R2,#00100011B,_HyperTerDisplay_1c
			CJNE	R3,#00100001B,_HyperTerDisplay_1c
			MOV	d_mode,#2			; Mode 2 : 03,01 DC uA
			MOV	A,d_rng
			ADD	A,#3
			MOV	R6,A
			CLR	C
			MOV	A,#5
			SUBB	A,R6
			MOV	R7,A
			AJMP	_HyperTerDisplay_2
			
_HyperTerDisplay_1c:	CJNE	R2,#00100100B,_HyperTerDisplay_1d
			CJNE	R3,#00100000B,_HyperTerDisplay_1d
			MOV	d_mode,#3			; Mode 3 : 04,00 AC mA
			MOV	A,d_rng
			ADD	A,#2
			MOV	R6,A
			CLR	C
			MOV	A,#5
			SUBB	A,R6
			MOV	R7,A
			AJMP	_HyperTerDisplay_2
			
_HyperTerDisplay_1d:	CJNE	R2,#00100100B,_HyperTerDisplay_1e
			CJNE	R3,#00100001B,_HyperTerDisplay_1e
			MOV	d_mode,#4			; Mode 4 : 04,01 DC mA
			MOV	A,d_rng
			ADD	A,#2
			MOV	R6,A
			CLR	C
			MOV	A,#5
			SUBB	A,R6
			MOV	R7,A
			AJMP	_HyperTerDisplay_2
						
_HyperTerDisplay_1e:	CJNE	R2,#00100001B,_HyperTerDisplay_1f
			CJNE	R3,#00100000B,_HyperTerDisplay_1f
			MOV	d_mode,#5			; Mode 5 : 01,00 AC V
			MOV	A,d_rng
			ADD	A,#1
			MOV	R6,A
			CLR	C
			MOV	A,#5
			SUBB	A,R6
			MOV	R7,A
			AJMP	_HyperTerDisplay_2
			
_HyperTerDisplay_1f:	CJNE	R2,#00100001B,_HyperTerDisplay_1g
			CJNE	R3,#00100001B,_HyperTerDisplay_1g
			MOV	d_mode,#6			; Mode 6 : 01,01 DC V
			MOV	A,d_rng
			ADD	A,#1
			MOV	R6,A
			CLR	C
			MOV	A,#5
			SUBB	A,R6
			MOV	R7,A
			AJMP	_HyperTerDisplay_2
			
_HyperTerDisplay_1g:	CJNE	R2,#00100010B,_HyperTerDisplay_1h
			CJNE	R3,#00100000B,_HyperTerDisplay_1h
			MOV	d_mode,#7			; Mode 7 : 02,00 AC mV
			MOV	A,d_rng
			ADD	A,#2
			MOV	R6,A
			CLR	C
			MOV	A,#5
			SUBB	A,R6
			MOV	R7,A
			AJMP	_HyperTerDisplay_2
			
_HyperTerDisplay_1h:	CJNE	R2,#00100010B,_HyperTerDisplay_1i
			CJNE	R3,#00100001B,_HyperTerDisplay_1i
			MOV	d_mode,#8			; Mode 8 : 02,01 DC mV
			MOV	A,d_rng
			ADD	A,#2
			MOV	R6,A
			CLR	C
			MOV	A,#5
			SUBB	A,R6
			MOV	R7,A
			AJMP	_HyperTerDisplay_2
			
_HyperTerDisplay_1i:	MOV	d_mode,#0
			AJMP	_HyperTerDisplay_End2
			
			
			
			; Send the sign out
_HyperTerDisplay_2:	MOV	A,R5
			JB	ACC.3,_HyperTerDisplay_2a
			MOV	v_send,#'+'
			ACALL	SendByte
			SJMP	_HyperTerDisplay_3
_HyperTerDisplay_2a:	MOV	v_send,#'-'
			ACALL	SendByte
			
			
			
			
			; Send the digits out
_HyperTerDisplay_3:	MOV	A,d_dgt1
			CJNE	A,#00111011B,_HyperTerDisplay_3a
			MOV	v_send,#'O'
			ACALL	SendByte
			MOV	v_send,#'v'
			ACALL	SendByte
			MOV	v_send,#'e'
			ACALL	SendByte
			MOV	v_send,#'r'
			ACALL	SendByte
			MOV	v_send,#'F'
			ACALL	SendByte
			MOV	v_send,#'l'
			ACALL	SendByte
			MOV	v_send,#'o'
			ACALL	SendByte
			MOV	v_send,#'w'
			ACALL	SendByte
			AJMP	_HyperTerDisplay_4
			
_HyperTerDisplay_3a:	MOV	R0,#50H
_HyperTerDisplay_3b:	MOV	v_send,@R0
			ACALL	SendByte
			INC	R0
			DJNZ	R6,_HyperTerDisplay_3b
			MOV	v_send,#'.'
			ACALL	SendByte
_HyperTerDisplay_3c:	MOV	v_send,@R0
			ACALL	SendByte
			INC	R0
			DJNZ	R7,_HyperTerDisplay_3c

			
			
			
			; Send the Unit out
_HyperTerDisplay_4:	MOV	A,d_mode
_HyperTerDisplay_4a:	CJNE	A,#1,_HyperTerDisplay_4b
			MOV	v_send,#'u'
			ACALL	SendByte
			MOV	v_send,#'A'
			ACALL	SendByte
			MOV	v_send,#' '
			ACALL	SendByte
			MOV	v_send,#'A'
			ACALL	SendByte

⌨️ 快捷键说明

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