?? escort_95.asm
字號:
; ********************
; ***** 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 + -