📄 屏幕显示(51).asm
字号:
ANL A,#0F0H
JNZ CMV0
CLR DMO
CMV0:
RET
;-----取得乘数----
;出口: TDD,存放乘以10X的被转换数据,与100万比较,比较结果为A
GETIER:
MOV A,#4
CALL GPSD
JNB HD,GIER1
ADD A,MHZD
GIER1:
JNB MT,GIER2
CLR MT
MOV R1,B
CJNE R1,#2,GIER2 ;非测量大电压无关
CLR C
SUBB A,#4
GIER2:
MOV DPTR,#SATC
MOV R1,#TDD
CALL GETROMF
MOV R0,#TFD
CALL FML4 ;测量值乘对应的转换系数
MOV R0,#TDD
CALL FST4
RET
;***********特性数据表格***********
;各UNIT的属性数据列表:
PSTAB:
;特性数据共13项:
;0 小数点位置(从右边算起)(分辨力)
;1 定值输出显示位数
;2 定值输出最大值(正)
;3 定值输出数值转换用除数偏移量
;MV,1000000; V,10000; MA,1000000; K,10,S,10; OHM,100; PT100,100; CU50,100; HZ,100
;4 测量值转换用乘数偏移量
;MV,1000000; V,10000; MA,1000000; KPa,10; MPa,1; OHM,100; PT100,100; CU50,100; HZ,1000
;5 设定值数符,1(压流,热电阻)允许为负
;6 步进值显示(非修改位)后缀零个数
;7 步进修改台阶
;8 步进值转化为浮点数用乘数的偏移量
;9 选定步进值最大值
;10 选定步进值小值
;(0)
DB 3,4,3,1,4,2,2,2,2,2,2,2,2,2,2
;(1)
DB 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
;(2)
DB 0,0,25H,11H,16H,0,60H,15H,10H,12H,40H,18H,17H,15H,0
;(3)
DB 28,20,28,8,8,12,12,12,8,8,12,8,8,12,12
;(4)
DB 28,20,28,8,8,4,12,12,8,8,12,8,8,12,4
;(5)
DB 1,1,1,1,0,0,1,1,1,1,1,0,0,1,0
;(6)
DB 1,0,0,2,2,2,1,1,2,2,2,2,2,1,2
;(7)
DB 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
;(8)
DB 0,4,32,12,12,12,8,8,12,12,12,12,12,8,12
;(9)
DB 138,138,153,139,144,138,188,143,138,140,132,146,145,143,138
;(10)
DB 118,118,103,128,128,128,123,123,126,126,126,128,128,123,128
;-----------常数表格--------------
SATC:
DB 07AH,0A3H,0D7H,00AH ;0.01 7AA3D70A
D5TTAB:
DB 001H,080H,000H,000H ;1 01800000
DB 004H,0A0H,000H,000H ;10
DB 007H,0C8H,000H,000H ;100
DB 00AH,0FAH,000H,000H ;1000
DB 00EH,09CH,040H,000H ;10000
DB 011H,0C3H,050H,000H ;100000
DB 014H,0F4H,024H,000H ;1000000
DB 077H,083H,012H,06FH ;0.001 7783126F
;------时间处理,处理一些与时间有关的位-----
TIMP:
SETB DR
INC STM
MOV A,STM ;可被10整除,5秒到,发步进命令
MOV B,#10
DIV AB
MOV A,B
JNZ TMP3
JBC SAS,TMP2
MOV C,CP ;步进已中断或步进未处于标准步进中或步进台阶最大时,
ORL C,SAO ;步进已超出设定范围10/100,
ORL C,/LP ;或无确定步进命令,不再自动产生步进命令位
ORL C,HS
JC TMP2
SETB SA
MOV B,#DSB1 ;P1页为输出?
MOV A,UNTB1
JB PA1,TMP1
MOV B,#DSB2 ;P2页为输出?
MOV A,UNTB2
JNB PA2,TMPE
TMP1:
MOV R1,#UNTB ;保存UNIT和显存地址
MOVX @R1,A
MOV R1,#DSBA
MOV A,B
MOVX @R1,A
CALL CNSH ;计算新的台阶值
TMP2:
MOV A,RSDT ;恢复设定值计时器已为零,不再处理
JZ TMP3
JB TPD,TMP3
MOV A,PNM ;当前页非定值页
CJNE A,#0,TMP21
JNB PA1,TMP3
SJMP TMP22
TMP21:
CJNE A,#1,TMP3
JNB PA2,TMP3
TMP22:
DJNZ RSDT,TMP3 ;10秒内未操作键盘,恢复原设定值
SETB RN
TMP3:
MOV A,STM
CJNE A,#120,$+3
JC TMP4
MOV STM,#0 ;1分钟到,刷新屏幕,>=120*25*20MS
SETB RF
TMP4:
JNB KPP,TMP5 ;P键被按住2秒钟,显示变送页
INC KPT
MOV A,KPT
CJNE A,#4,$+3
JC TMPE
JB ITP,TMP6
CPL TPD
JB TPD,TMP41
CLR TCA
CLR TOO
TMP41:
SETB KV
SETB RF
JMP TMP6
TMP5:
JNB KPR,TMP6 ;RIGHT键被按住2秒钟,显示内部温度标定输出测量电压基准使用
INC KRT
MOV A,KRT
CJNE A,#4,$+3
JC TMPE
CPL HTI
SETB KV
SETB RF
JMP TMP6
TMP6:
CLR KPP
CLR KPC
CLR KPR
MOV KPT,#0
MOV KRT,#0
TMPE:
RET
;******************系统初始化**************
SETUP:
MOV IE,#0
MOV R0,#SPB ;内部RAM先全清零
CLRRAM:
MOV @R0,#0
DJNZ R0,CLRRAM
MOV AUXR,#0 ;清外部RAM
MOV R0,#0
CLR A
CXRP:
MOVX @R0,A
DJNZ R0,CXRP
SETB UNT
MOV CSN,#80H
MOV CMN,#80H
MOV UNTB1,#4 ;页1初始化测量压力,页2初始化输出MV
SETB K4B
CLR PA1
CLR PE1
MOV UNTB2,#1
SETB PA2
SETB PE2
MOV R0,#DPN1
MOV A,#4
MOVX @R0,A
MOV R0,#DPN2
MOV A,#3
MOVX @R0,A
MOV LAD,#3 ;步进速率为0.05/100
SETB HS
MOV PNM,#0 ;显示第一页
MOV US,#1
MOV KBV,#118
MOV KEV,#138
SETB XTK ;外通信引脚置高
SETB XTD
CLR RLP ;上电初始背光亮
CALL CLS
MOV A,#10
CALL WTN10MS
SETB RF
MOV TL1,#251 ;X=T1定时初值
MOV TH0,#88H
MOV TL0,#0
SYSSET: ;系统设置
;定时器及串口设置
MOV TMOD,#21H ;T1,方式2(8位常数自动装入)作波特率发生器; T0,16位定时器
MOV TH1,#251 ;9600 BPS,18.432 MHZ晶振; BPS=FOSC*(2^SMOD)/[384*(256-X)]
MOV PCON,#0 ;SMOD=0
MOV AUXR,#0 ;指定MOVX指令访问内部增强RAM
MOV AUXR1,#0 ;特殊功能寄存器
CLR SM0
SETB SM1
CLR SM2
SETB TR1
SETB TR0
SETB PX0 ;设为高级中断
SETB IT0 ;外部中断0程控为边沿触发方式,启动T1,T0计数
;开中断允许
CLR IE0
SETB EX0
SETB ES
SETB ET0
SETB REN
SETB TEN
SETB EA
RET
;----------- WATCH DOG END--------
;延时N*10MS,使用了,R6,R7,PSW,XCS
;ACC=N
WTN10MS:
MOV R7,#30
CLR XCS
NOP
SETB XCS
WTN10MS1:
MOV R6,#00H
DJNZ R6,$
DJNZ R7,WTN10MS1
DEC A
JNZ WTN10MS
RET
;********发送PC命令到两下位模块*******
;(1) 若PC命令为'进入标定'命令,置标志位,发'开始标定'命令给下位模块
;(2) 命令为0FFH,退出标定
;(2) 其他命令,将数据完全传递
TC2M:
MOV R0,#CDA
MOV A,@R0
CJNE A,#2,$+3
JNC TC00
JMP TCE
TC00:
MOV R0,#CMD
MOV A,@R0
JNZ TC1 ;进入标定
SETB ID
SETB RF
MOV R3,#2 ;模块个数
MOV R2,#2 ;地址
JMP TC0
TC01:
MOV R2,#3
TC0:
MOV A,#':'
CALL SDBIN
MOV A,R2
CALL SDHEX
MOV A,#1
CALL SDHEX
CLR A
CALL SDHEX
DJNZ R3,TC01
CALL T2PC1
JMP TCE
TC1: ;退出标定
CJNE A,#0FFH,TC2
CLR ID
CALL T2PC1
SETB RF
JMP TCE
TC2: ;传送数据
CALL TCDM ;发送命令+数据给工作模块
CLR DDT ;确定显示UNIT
MOV R0,#CDA
MOV A,@R0
INC R0
INC R0
CJNE A,#2,TC3 ;电信号测量模块
MOV A,@R0 ;测量模块的电压标定特殊处理
CJNE A,#1,TC4 ;电压标定命令,数据为1个量程位
INC R0
MOV B,@R0
MOV A,#1
JNB B.0,TCE1 ;量程位区分
MOV A,#2
JMP TCE1
TC4:
CJNE A,#2,TCE ;电流MA
MOV A,#3
JMP TCE1
TC3: ;输出模块
MOV A,@R0
CJNE A,#1,TC6 ;电压根据被标定值大小确定UNIT=MV或V
INC R0
MOV A,@R0
CLR ACC.7
MOV @R0,A
MOV TFD,#7EH ;与160MV比较,确定正在标定小量程(MV)或大量程(V)
MOV TFD+1,#0A3H
MOV TFD+2,#0D7H
MOV TFD+3,#0AH
MOV R1,#TFD
CALL FCOMP
MOV B,A
MOV A,#1 ;小电压
JB B.0,TCE1
MOV A,#2 ;大电压
JMP TCE1
TC6:
CJNE A,#2,TCE ;电流
MOV A,#3
TCE1:
MOV R0,#UNTB
MOVX @R0,A
SETB DDT
SETB DR
TCE:
RET
;------将命令和数据发送给工作模块------
;入口: CDA,CDL,等
;使用: A,B,R0,R1等
TCDM:
MOV A,#':' ;将命令发送给工作模块
CALL SDBIN
MOV R0,#CDL
MOV A,@R0
ADD A,#2
MOV R1,A
MOV R0,#CDA
TC1LP:
MOV A,@R0
CALL SDHEX
INC R0
DJNZ R1,TC1LP
RET
;********汇报数据给PC机*******
;(1) 对于长接收,将数据分段发送给PC
; 第一段,须发送地址长度命令和一段数据等信息,第二段以后只发数据
;(2) 短接收,一次性传递给PC
T2PC:
CALL T2PC1
;未校准标定数据转换以显示:
JNB DDT,TPCE
CLR DDT
SETB DR ;刷新显示
MOV A,#DSB1
MOV R1,#DSBA
MOVX @R1,A
MOV R1,#UNTB
MOVX A,@R1
MOV B,A
CLR A
CALL GPSD
MOV R1,#DPN
MOVX @R1,A
MOV R0,#CDB
CLR MT
MOV R1,#CDA
MOV A,@R1
CJNE A,#2,TPC1
SETB MT ;测量模块测量电压转换特殊处理
TPC1:
CALL CTMV ;转换输出模块未标定值
TPCE:
RET
;------发送数据到PC机-----
T2PC1:
MOV A,#'$'
CALL SD8B
MOV R0,#CDL
MOV A,@R0
ADD A,#2
MOV R3,A
MOV R0,#CDA ;待发数据起始地址
TPCL:
MOV A,@R0
CALL SD8B
INC R0
DJNZ R3,TPCL
CLR IE0
RET
;-----------发送一个字节数据----------
SD8B:
MOV R1,#8 ;八位
SETB XTK
SDDAT:
NOP
RLC A ;下降沿前将数据位移入数据线
MOV XTD,C
CALL XCDEL
CLR XTK
NOP
CALL XCDEL
SETB XTK ;CK 上升沿使该位数据移入输入寄存器
DJNZ R1,SDDAT
SETB XTD
RET
;============移位时钟脉宽==========
XCDEL:
MOV R2,#30
DJNZ R2,$
RET
;***************浮点运算子程序************
;-------------四字节浮点数加法 FAD4 7-9 BYTES----------------
;功能: (R0)指向数+(R1)指向数--R4(阶)R5R6R7
;使用: A,位X38H,X39H,X3AH,F0和现行工作寄存器,不改变R0
FAD4:
CLR X3AH
CALL FLD4
CALL FAB4
RET
;---------三字节整数转换为四字节浮点数---------
;BFTURN BIN TO FD
; R0 R0+1 R0+2
; IN: R0指向BIN:HHHHHHHH MMMMMMMM LLLLLLLL
; R1 R1+1 R1+2 R1+3
;OUT: R1指向FD : 数符阶符阶 尾数 一 尾数 二 尾数 三
;USE: A
BFTURN: MOV A,#18H
MOV @R1,A
MOV A,@R0
INC R1
MOV @R1,A
INC R0
MOV A,@R0
INC R1
MOV @R1,A
INC R0
MOV A,@R0
INC R1
MOV @R1,A
INC R0
DEC R1
DEC R1
DEC R1
PUSH 1
MOV A,R1
MOV R0,A
CALL FDLS4
POP 1
RET
;-------四字节浮点数转换为三字节整数--------
;FBTURN FD TO BIN
; R1 R1+1 R1+2 R1+3
; IN: R1指向FD : 数符阶符阶 尾数 一 尾数 二 尾数 三
; R0 R0+1 R0+2
;OUT: R0指向BIN:HHHHHHHH MMMMMMMM LLLLLLLL
; X3CH 是符号位
;USE: X3CH, A,C,F0 IF F0=1 THEN R1 IS TOO LARGE TO TURN
FBTURN: INC R1
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
MOV @R0,A
DEC R0
DEC R1
DEC R0
DEC R1
DEC R1
CLR F0
MOV A,@R1
MOV C,ACC.7
MOV X3CH,C
CLR ACC.7
JNB ACC.6,FIN1
MOV A,#0
MOV @R0,A
INC R0
MOV @R0,A
INC R0
MOV @R0,A
DEC R0
DEC R0
RET
FIN1: CJNE A,#25,FIN6
FIN6: JC FIN3
SETB F0
MOV A,#0FFH
MOV @R0,A
INC R0
MOV @R0,A
INC R0
MOV @R0,A
DEC R0
DEC R0
RET
FIN3: CJNE A,#24,FIN4
RET
FIN4: CLR C
XCH A,@R0
RRC A
XCH A,@R0
INC R0
XCH A,@R0
RRC A
XCH A,@R0
INC R0
XCH A,@R0
RRC A
XCH A,@R0
INC A
DEC R0
DEC R0
JMP FIN3
FBTEND: NOP
;---------3字节二进数转换为7位压缩十进制子程序NIBTD-------
;精度为7位
;入口: R0 R0+1 R0+2
; H M L
;出口: R1 R1+1 R1+2 R1+3
;BCD: 0 000 XH XXH XXH XXH
NIBTD: MOV A,R0 ;
INC A
INC A
MOV R5,A
MOV A,R7
INC A
MOV R3,A
CLR A ;
NBD0: MOV @R1,A
INC R1
DJNZ R3,NBD0
MOV A,R1
DEC A
MOV R6,A
MOV A,R7
MOV B,#08H
MUL AB
MOV R3,A
NBD4: MOV A,R5
MOV R0,A
MOV A,R7
MOV R2,A
CLR C
NBD1: MOV A,@R0 ;N字节二进制数左移一位,高位移入CY
RLC A
MOV @R0,A
DEC R0
DJNZ R2,NBD1
MOV A,R6
MOV R1,A
MOV A,R7
MOV R2,A
INC R2
NBD3: MOV A,@R1 ;
ADDC A,@R1 ;
DA A ;
MOV @R1,A
DEC R1
DJNZ R2,NBD3
DJNZ R3,NBD4 ;循环N*8次
RET
;---------四字节浮点数除法 FDV4 85 BYTES----------
;四字节浮点数除法 FDV4 85 BYTES
;功能: (R0)指向数/(R1)指向数--R4(阶)R5R6R7
;使用: A,位X38H,X39H,F0和现行工作寄存器,不改变R0,R1
;出口: C=0 正常,C=1 除数=0
FDV4: CALL FLD4
MOV A,@R0
XRL A,@R1
MOV C,0E7H
MOV X38H,C
CLR A
MOV R5,A
MOV R6,A
MOV R7,A
INC R1
CJNE @R1,#00H,FDV23H
INC R1
CJNE @R1,#00H,FDV22H
INC R1
CJNE @R1,#00H,FDV21H
DEC R1
DEC R1
DEC R1
SETB C
RET
FDV21H: DEC R1
FDV22H: DEC R1
FDV23H: DEC R1
MOV A,@R0
XCH A,R0
INC R1
PUSH ACC
FDV29H:
MOV A,R4
INC R1
INC R1
SUBB A,@R1
MOV A,R3
DEC R1
SUBB A,@R1
MOV A,R2
DEC R1
SUBB A,@R1
JC FDV42H
CLR 0D5H
CLR X39H
CALL FSD4
MOV A,R5
RRC A
MOV R5,A
CLR C
SJMP FDV29H
FDV42H:
MOV A,R0
PUSH ACC
CALL DDV3
POP ACC
DEC R1
XCH A,R0
POP ACC
XCH A,R0
CLR C
SUBB A,@R1
MOV C,X38H
MOV 0E7H,C
MOV R4,A
;WEN INSERT IN 16:54 98-7-23 FORMAT 0=0*^(-64)
CJNE R5,#00,DVNOT0
CJNE R6,#00,DVNOT0
CJNE R7,#00,DVNOT0
MOV R4,#40H
;WEN INSERT END
DVNOT0:
CLR C
RET
;四字节浮点数送操作数 FLD4 13 BYTES
FLD4: INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
MOV R3,A
INC R0
MOV A,@R0
MOV R4,A
DEC R0
DEC R0
DEC R0
RET
;--------三字节定点小数原码除法-------------
;DDV3 55 BYTES
;功能: (R2R3R4)*((R1))((R1)+1)((R1)+2)--R5R6R7R2R3R4
;使用: A和现行工作寄存器,不改变R1
DDV3: MOV R0,#18H
INC R1
INC R1
DDV07H: CLR C
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
RLC A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -