📄 屏幕显示(51).asm
字号:
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
XCH A,R3
RLC A
XCH A,R3
XCH A,R2
RLC A
XCH A,R2
MOV F0,C
CLR C
SUBB A,@R1
DEC R1
MOV A,R3
SUBB A,@R1
DEC R1
MOV B,A
MOV A,R2
SUBB A,@R1
INC R1
INC R1
JB F0,DDV2DH
JC DDV35H
DDV2DH: CLR C
MOV R2,A
MOV A,R4
SUBB A,@R1
MOV R4,A
MOV R3,B
INC R7
DDV35H: DJNZ R0,DDV07H
DEC R1
DEC R1
RET
;-------从ROM取一个浮点数---
; IN:R1指向目的RAM开始地址,DPTR+A指向源ROM开始地址
; OUT:浮点数到@R1
; USE:A,B,不改变R1,DPTR
GETROMF:
MOV B,A
MOVC A,@A+DPTR
MOV @R1,A
INC B
MOV A,B
INC R1
MOVC A,@A+DPTR
MOV @R1,A
INC B
MOV A,B
INC R1
MOVC A,@A+DPTR
MOV @R1,A
INC B
MOV A,B
INC R1
MOVC A,@A+DPTR
MOV @R1,A
DEC R1
DEC R1
DEC R1
RET
;----------发送一个浮点数----------
;IN: (R0),ADDRESS0
;OUT:
;USE: ACC,B,(R0,不改变)
SDFDAT:
MOV A,@R0
CALL SDHEX
INC R0
MOV A,@R0
CALL SDHEX
INC R0
MOV A,@R0
CALL SDHEX
INC R0
MOV A,@R0
CALL SDHEX
DEC R0
DEC R0
DEC R0
RET
;------浮点数赋值---------
; NAME: FMOV
;FUNCTION: 浮点数@R0 -->浮点数@R0
; IN: R0指向源浮点数 R1指向目的浮点数
; OUT: R0,R1 不改变
; USED: ACC
; BY: WEN
FMOV: MOV A,@R0
MOV @R1,A
INC R0
INC R1
MOV A,@R0
MOV @R1,A
INC R0
INC R1
MOV A,@R0
MOV @R1,A
INC R0
INC R1
MOV A,@R0
MOV @R1,A
DEC R0
DEC R0
DEC R0
DEC R1
DEC R1
DEC R1
RET
;-------四字节浮点数结果回送--------
FST4: MOV A,R4
MOV @R0,A
INC R0
MOV A,R5
MOV @R0,A
INC R0
MOV A,R6
MOV @R0,A
INC R0
MOV A,R7
MOV @R0,A
DEC R0
DEC R0
DEC R0
RET
;-------四字节浮点数乘----------
;四字节浮点数乘法 FML4 43 BYTES
;功能: (R0)指向数+(R1)指向数--R4(阶)R5R6R7
;使用: A,位X38H,X39H,F0和现行工作寄存器,不改变R0,R1
FML4: CALL FLD4
INC R1
MOV A,R0
PUSH ACC
CALL DML3
POP ACC
MOV R0,A
DEC R1
MOV A,R2
MOV C,0E7H
MOV 0D5H,C
MOV A,@R0
XRL A,@R1
MOV C,0E7H
MOV X38H,C
MOV A,@R0
ADD A,@R1
XCH A,R1
PUSH ACC
SETB C
CALL FSD4
POP ACC
XCH A,R1
MOV C,X38H
MOV 0E7H,C
MOV R4,A
JMP FMLFT0
PUSH ACC
SETB C
CALL FSD4
POP ACC
XCH A,R1
MOV C,X38H
MOV 0E7H,C
MOV R4,A
FMLFT0:
CJNE R5,#00H,FMLRET
CJNE R6,#00H,FMLRET
CJNE R7,#00H,FMLRET
MOV R4,#40H
FMLRET:
RET
;-------三字节定点数原码乘法---------
;DML3 44 BYTE
;功能: (R2R3R4R5R6R7)/((R1))((R1)+1)((R1)+2)--R5R6R7
;使用: A,B,F0和现行工作寄存器,不改变R1
DML3: MOV R0,#19H
CLR C
CLR A
MOV R5,A
MOV R6,A
MOV R7,A
DML0AH: MOV A,R5
RRC A
MOV R5,A
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
XCH A,R2
RRC A
XCH A,R2
XCH A,R3
RRC A
XCH A,R3
XCH A,R4
RRC A
XCH A,R4
DJNZ R0,DML1FH
RET
DML1FH: JNC DML0AH
INC R1
INC R1
ADD A,@R1
MOV R7,A
MOV A,R6
DEC R1
ADDC A,@R1
MOV R6,A
MOV A,R5
DEC R1
ADDC A,@R1
MOV R5,A
SJMP DML0AH
MOV A,R6
DEC R1
ADDC A,@R1
MOV R6,A
MOV A,R5
DEC R1
ADDC A,@R1
MOV R5,A
SJMP DML0AH
;四字节浮点数规格化 FSD4 58 BYTES
FSD4: JC FSD20H
MOV C,X39H
JB 0D5H,FSD15H
MOV A,R2
RRC A
MOV R2,A
MOV A,R3
RRC A
MOV R3,A
MOV A,R4
RRC A
MOV R4,A
INC R0
RET
FSD15H: MOV A,R5
RRC A
MOV R5,A
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
INC R1
RET
FSD20H: MOV A,R5
JNZ FSD2AH
CJNE R6,#00H,FSD2DH
CJNE R7,#00H,FSD2DH
FSD29H: RET
FSD2AH: JB 0E7H,FSD29H
FSD2DH: MOV C,0D5H
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
RLC A
MOV R5,A
CLR 0D5H
DEC R1
SJMP FSD20H
;--------浮点数比较-------------
; NAME: FCOMP
;FUNCTION: 比较两个浮点数的大小
; IN: R0指向浮点数1,R1指向浮点数2
; OUT: ACC=2: @R0=@R1; ACC=1:@R0<@R1;=4:@R0>@R1
; 不改变R0,R1,PSW
; USE:
FCOMP:PUSH PSW
CALL FFMT0 ;R0指向浮点数1若是0则规格化
MOV A,R0
PUSH ACC
MOV A,R1 ;R1指向浮点数2若是0则规格化
MOV R0,A
CALL FFMT0
POP ACC
MOV R0,A
CALL FSB4 ;R0指向浮点数1 - R1指向浮点数2-->R4R5R6R7
CJNE R5,#00,NOTEQU
CJNE R6,#00,NOTEQU
CJNE R7,#00,NOTEQU
MOV A,#02H ;@R0=@R1
JMP FCMPEND
NOTEQU:
MOV A,R4
JB ACC.7,FCMPN
MOV A,#04 ;@R0>@R1
JMP FCMPEND
FCMPN:
MOV A,#01 ;@R0<@R1
FCMPEND:
POP PSW
RET
;四字节浮点数减法 FSB4 7-9 BYTES
;R0 R1 NOT CHANGE
FSB4: SETB X3AH
CALL FLD4
CALL FAB4
RET
;-------浮点数0规格化------------
; NAME: FFMT0
;FUNCTION: 浮点数@R0规格化0
; IN: R0指向源浮点数
; OUT: R0指向结果浮点数
; USED: ACC,R2,R3,R4
; BY: WEN
FFMT0:
CALL FLD4 ;((R0)+1)((R0)+2)((R0)+3)-->R2R3R4
CJNE R2,#00,FDNOT0
CJNE R3,#00,FDNOT0
CJNE R4,#00,FDNOT0
MOV @R0,#40H
FDNOT0:
RET
;四字节浮点数加减处理 FAB4 150 BYTES
;功能: ((R0))(R2)(R3)(R4)+-((R1))(R5)(R6)(R7)--R4(阶)R5R6R7
; X3AH=0加法;X3AH=1减法
;使用: A,位X38H,X39H,X3AH,F0和现行工作寄存器
FAB4: INC R1
MOV A,@R1
MOV R5,A
INC R1
MOV A,@R1
MOV R6,A
INC R1
MOV A,@R1
MOV R7,A
DEC R1
DEC R1
DEC R1
MOV A,@R0
MOV C,0E7H
MOV X38H,C
XRL A,@R1
JNB 0E7H,FAB1AH
CPL X3AH
FAB1AH: MOV A,R0
PUSH ACC
MOV A,@R0
MOV C,0E6H
MOV 0E7H,C
MOV R0,A
MOV A,R1
PUSH ACC
MOV A,@R1
MOV C,0E6H
MOV 0E7H,C
MOV R1,A
FAB2CH: CLR C
MOV A,R0
SUBB A,R1
JZ FAB43H
CLR 0D5H
CLR X39H
JB 0E7H,FAB67H
CJNE R5,#00H,FAB74H
CJNE R6,#00H,FAB74H
CJNE R7,#00H,FAB74H
MOV A,R0
MOV R1,A
FAB43H: JB X3AH,FAB7CH
MOV A,R4
ADD A,R7
MOV R7,A
MOV A,R3
ADDC A,R6
MOV R6,A
MOV A,R2
ADDC A,R5
MOV R5,A
JNC FAB5BH
SETB X39H
CLR C
SETB 0D5H
FAB56H: CALL FSD4
MOV A,R1
MOV R0,A
FAB5BH: POP ACC
MOV R1,A
POP ACC
XCH A,R0
MOV C,X38H
MOV 0E7H,C
XCH A,R4
RET
FAB67H: CJNE R2,#00H,FAB76H
CJNE R3,#00H,FAB76H
CJNE R4,#00H,FAB76H
MOV A,R1
MOV R0,A
SJMP FAB43H
FAB74H: CPL 0D5H
FAB76H: CLR C
CALL FSD4
SJMP FAB2CH
FAB7CH: CLR C
MOV A,R4
SUBB A,R7
MOV R7,A
MOV A,R3
SUBB A,R6
MOV R6,A
MOV A,R2
SUBB A,R5
MOV R5,A
JNC FAB94H
CLR A
CLR C
SUBB A,R7
MOV R7,A
CLR A
SUBB A,R6
MOV R6,A
CLR A
SUBB A,R5
MOV R5,A
CPL X38H
FAB94H: SETB C
CLR 0D5H
SJMP FAB56H
;****************与2个下位机通信*************
;-------内部RAM与增强内存复制数据--------
COPY2:
MOV A,@R0
MOVX @R1,A
INC R0
INC R1
DJNZ R2,COPY2
RET
C99E:
DB 00EH,09CH,03FH,09AH ;9999.9 0E9C3F9A
DB 00AH,0F9H,0FFH,05CH ;999.99 0AF9FF5C
DB 007H,0C7H,0FFH,07DH ;99.999 07C7FF7D
DB 004H,09FH,0FFH,097H ;9.9999 049FFF97
P10E:
DB 00EH,09CH,040H,000H ;10000 0E9C4000
DB 00AH,0FAH,000H,000H ;1000 0AFA0000
DB 007H,0C8H,000H,000H ;100 07C80000
DB 004H,0A0H,000H,000H ;10 04A00000
DB 001H,080H,000H,000H ;1 01800000
;--------各压力UNIT间对应KPA转换值-------
PTTAB:
DB 001H,080H,000H,000H ;1 01800000 KPA
DB 077H,083H,012H,06FH ;.001 7783126F MPA
DB 07EH,094H,09FH,006H ;0.14513788098693759071117561683599 7E949F06 PSI
DB 07AH,0A7H,010H,079H ;0.010196798205363515856021209340267 7AA71079 AT
DB 07AH,0A3H,0D7H,00AH ;0.01 7AA3D70A BAR
DB 004H,0A0H,000H,000H ;10 04A00000 MBAR
DB 07DH,0D0H,0C4H,03EH ;0.10193679918450560652395514780836 7DD0C43E MH20
DB 007H,0CBH,0DFH,0A4H ;101.93679918450560652395514780836 07CBDFA4 MMH2O
DB 003H,080H,083H,099H ;4.0160642570281124497991967871486 03808399 IWC(英寸水柱)
DB 003H,0F0H,006H,025H ;7.50075006484985 03F00625 MMHG
DB 07FH,097H,008H,04FH ;0.29498525073746312684365781710914 7F97084F INHG
;-------转换压力值--------
;(1)将BCD码量程转换为浮点数
;(2)根据传感器量程比较确定小数点位置(即小数位数)
;(3)根据小数位数转换十进制显示值
CTPV:
MOV R0,#CDB+5 ;将A端量程转换为浮点数
CALL TRTF
MOV R0,#TDD
MOV R1,#TFD
CALL FMOV
MOV R0,#CDB+8 ;将B端量程转换为浮点数
CALL TRTF
MOV R0,#TDD
MOV R1,#TFD
CALL FSB4
CALL FST4
MOV R1,#CDB+5 ;判断量程UNIT=MPA,量程值乘1000
MOV A,@R1
JNB ACC.6,CTP1
MOV TBD,#0AH
MOV TBD+1,#0FAH
MOV TBD+2,#0
MOV TBD+3,#0
MOV R1,#TBD
CALL FML4
CALL FST4
CTP1:
CALL GPIER
MOV TBD,#4 ;比较量程确定该UNIT小数点位置
MOV TBD+1,#0
CTP2:
MOV A,TBD+1
RL A
RL A
MOV R1,#TFD
MOV DPTR,#C99E
CALL GETROMF
MOV R0,#TDD
CALL FCOMP
JB ACC.2,CTP3
INC TBD+1
DJNZ TBD,CTP2
CTP3:
MOV R1,#DPN
MOVX A,@R1
MOV R1,A
MOV A,TBD+1 ;保存小数点位置
MOVX @R1,A
CPV0:
MOV R0,#CDB ;转换压力值
MOV A,@R0
MOV C,PA1
ORL C,PE1
JC CTP4
RLC A
MOV PNC1,C
SJMP CTP5
CTP4:
RLC A
MOV PNC2,C
CTP5:
MOV R1,#TDD
CALL FMOV
MOV R0,#TDD ;减零点偏移量
MOV R1,#FZO2
JNB ZC,CTP6
JB PZC,CTP6 ;非测量压力清零
CLR ZC
CALL FMOV ;保存零位
CTP6:
CALL FSB4
CALL FST4
CALL GPIER
MOV R1,#FMC
CALL FMOV
MOV DPTR,#P10E
MOV A,TBD
CALL GIER
CALL FTD0
MOV R1,#DSBA ;取出显存地址
MOVX A,@R1
MOV R1,A
MOV R0,#TDD+1
MOV A,@R0 ;保存最高位
ANL A,#0FH
MOV @R1,A
INC R1 ;分解BCD码保存低4位
INC R0
MOV R2,#2
CTP7:
MOV A,@R0
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,@R0
ANL A,#0FH
MOV @R1,A
INC R1
INC R0
DJNZ R2,CTP7
MOV C,PE1
MOV F0,C
MVOJ:
SETB C ;判断压力值是否超量程
MOV A,TDD
ANL A,#0FH
JNZ CTP8
MOV A,TDD+1
ANL A,#0F0H
JNZ CTP8
CLR C
CTP8:
JB F0,CTP9
MOV MO1,C
SJMP CTP0
CTP9:
MOV MO2,C
CTP0:
RET
;--------根据UNIT转换量程或压力值--------
GPIER:
MOV DPTR,#PTTAB ;取出UNIT字节地址,再读取UNIT
MOV R1,#UNTB
MOVX A,@R1
CLR C
SUBB A,#4
GIER:
RL A
RL A
MOV R1,#TFD
CALL GETROMF
CALL FML4
CALL FST4
RET
;-----------传感器量程转化为浮点数-------
TRTF:
MOV A,@R0
PUSH ACC ;暂存符号位
MOV TDD,@R0
ANL TDD,#0FH
INC R0
MOV TDD+1,@R0
INC R0
MOV TDD+2,@R0
CALL DTOB
MOV R0,#TBD
MOV R1,#TDD
CALL BFTURN
MOV R1,#TBD
MOV TBD,#7AH
MOV TBD+1,#0A3H
MOV TBD+2,#0D7H
MOV TBD+3,#0AH
MOV R0,#TDD
CALL FML4
CALL FST4
POP ACC ;恢复量程符号
RLC A
MOV A,TDD
MOV ACC.7,C
MOV TDD,A
RET
;--------计算变送输出值--------
TOVP:
MOV R0,#FIB ;(3)计算测量量程
MOV R1,#FIA
CALL FSB4
MOV R0,#TFD
CALL FST4
MOV A,TFD
JNB TIW,TOV3
CPL ACC.7
TOV3:
MOV TFD,A
MOV R0,#FMC ;(2)计算测量信号相对零点偏移量
MOV R1,#FIA
JNB TIW,TOV2
MOV R1,#FIB
TOV2:
CALL FSB4
MOV R0,#TDD
CALL FST4
MOV R1,#TFD
CALL FDV4
CALL FST4
MOV R1,#FFS
CALL FMOV
CALL FTD7
MOV R1,#PCT
MOV A,TDD+2
MOV B,FFS
MOV C,B.7
MOV ACC.7,C
MOVX @R1,A
INC R1
MOV A,TDD+3
MOVX @R1,A
MOV R0,#FOB ;(1)计算输出的量程
MOV R1,#FOA
CALL FSB4
MOV R0,#TFD
CALL FST4
MOV A,TFD
JNB TOW,TOV1
CPL ACC.7
TOV1:
MOV TFD,A
MOV R1,#FFS ;(4)计算输出偏移量
CALL FML4
MOV R0,#TDD
CALL FST4
MOV R1,#FOA ;(5)计算输出绝对量
JNB TOW,TOV4
MOV R1,#FOB
TOV4:
CALL FAD4
CALL FST4
MOV R1,#FFS
CALL FMOV
MOV A,U
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -