📄 xdxhfsq.asm
字号:
LCALL L0763H ;调L0763H子程序 :D/A模块
INC R3 ;加1指向下一个通道
DJNZ R2, L05F4H ;若8个通道没处理完成,循环至L05F4H
CLR P3.5 ;
SETB P3.5 ;给D/A芯片的LDA引脚发一个控制负脉冲
CLR 06H ;清除定标信号处理标志
CLR 12H ;清除过渡器波形檫除标志
RET ;返回
;===============================;
;其它子程序模块群 ;
;===============================;
L0605H: ;
MOV B, 5BH ;将增益值5BH的内容送B,例如x1.0是128,x2.0是255
MUL AB ;A与B相乘,高8位送B,低8位送A,要防止溢出,A的值应该小于128(无符号数)
RLC A ;准备无符号数除2,低字节A带CY循环左移1位
MOV A, B ;将高字节B送A
RLC A ;高字节A带CY循环左移1位,则增益修正后的值在A中,此
CLR C ;CY清0
SUBB A, 5BH ;不溢出的话A<128,A=A-(5BH),可能够减,也可能不够减,与增益值有关
ADD A, #80H ;A=A+128,数据平移128
RET ;返回
L0613H: ;
MOV DPTR, #0D5DH ;送表首地址0D5DH
MOV A, R1 ;将R1的内容送A
MOV B, #10H ;00010000B送B
MUL AB ;A与B相乘,高8位送B,低8位送A
ADD A, DPL ;A=A+DPL
MOV DPL, A ;将A值送DPL
MOV A, B ;将B值送A
ADDC A, DPH ;A=A+DPH+CY
MOV DPH, A ;将A值送DPH
CLR A ;A清0
MOVC A, @A+DPTR ;取出表中DPTR的字符给A
RET ;返回
L0628H: ;
MOV DPTR, #0D5DH ;送表首地址0D5DH
MOV A, R1 ;将R1的内容送A
MOV B, #10H ;00010000B送B
MUL AB ;A与B相乘,高8位送B,低8位送A
ADD A, DPL ;A=A+DPL
MOV DPL, A ;将A值送DPL
MOV A, B ;将B值送A
ADDC A, DPH ;A=A+DPH+CY
MOV DPH, A ;将A值送DPH
L063AH: ;
MOV A, R6 ;将R6的内容送A
MOVC A, @A+DPTR ;取出取出表中DPTR偏移(R6)的字符给A
MOV @R0, A ;将A值送(R0)所指地址
INC R0 ;R0的内容加1
INC R6 ;R6的内容加1
DJNZ R7, L063AH ;若R7的内容减1不为0,则跳转至L063AH
RET ;返回
L0642H: ;
MOV DPTR, #0988H ;送表首地址0988H
MOV A, R2 ;将R2的内容送A
RL A ;A循环左移1位
RL A ;A循环左移1位
ADD A, R6 ;A=A+(R6)
MOV R6, A ;将A值送R6
L064AH: ;
MOV A, R6 ;将R6的内容送A
MOVC A, @A+DPTR ;取出取出表中0988H偏移(R6)的字符给A
MOV @R0, A ;将A值送(R0)所指地址
INC R0 ;R0的内容加1
INC R6 ;R6的内容加1
DJNZ R7, L064AH ;若R7的内容减1不为0,则跳转至L064AH
RET ;返回
L0652H: ;
MOV DPTR, #08E8H ;送表首地址08E8H
MOV A, R3 ;将R3的内容送A
MOV B, #0CH ;00001100B送B
MUL AB ;A与B相乘,高8位送B,低8位送A
ADD A, R6 ;A=A+(R6)
MOV R6, A ;将A值送R6
L065CH: ;
MOV A, R6 ;将R6的内容送A
MOVC A, @A+DPTR ;取出取出表中08E8H偏移(R6)的字符给A
MOV @R0, A ;将A值送(R0)所指地址
INC R0 ;R0的内容加1
INC R6 ;R6的内容加1
DJNZ R7, L065CH ;若R7的内容减1不为0,则跳转至L065CH
RET ;返回
L0664H: ;
MOV DPTR, #0B1DH ;送表首地址0B1DH
MOV A, 55H ;将55H的内容送A
MOV B, #10H ;00010000B送B
MUL AB ;A与B相乘,高8位送B,低8位送A
ADD A, DPL ;A=A+DPL
MOV DPL, A ;将A值送DPL
MOV A, B ;将B值送A
ADDC A, DPH ;A=A+DPH+CY
MOV DPH, A ;将A值送DPH
MOV A, 56H ;将56H的内容送A
MOVC A, @A+DPTR ;取出取出表中DPTR偏移(56H)的字符给A
RET ;返回
L067BH: ;
MOV DPTR, #09D8H ;送表首地址09D8H
MOV B, #05H ;00000101B送B
MUL AB ;A与B相乘,高8位送B,低8位送A
ADD A, DPL ;A=A+DPL
MOV DPL, A ;将A值送DPL
MOV A, B ;将B值送A
ADDC A, DPH ;A=A+DPH+CY
MOV DPH, A ;将A值送DPH
L068CH: ;
MOV A, R6 ;将R6的内容送A
MOVC A, @A+DPTR ;取出取出表中DPTR偏移(R6)的字符给A
MOV @R0, A ;将A值送(R0)所指地址
INC R0 ;R0的内容加1
INC R6 ;R6的内容加1
DJNZ R7, L068CH ;若R7的内容减1不为0,则跳转至L068CH
RET ;返回
L0694H: ;
MOV DPTR, #No1_SCREEN ;送表首地址No1_SCREEN
L0697H: ;
MOV A, R6 ;将R6的内容送A
MOVC A, @A+DPTR ;取出取出表中DPTR偏移(R6)的字符给A
MOV @R0, A ;将A值送(R0)所指地址
INC R0 ;R0的内容加1
INC R6 ;R6的内容加1
DJNZ R7, L0697H ;若R7的内容减1不为0,则跳转至L0697H
RET ;返回
L069FH: ;
MOV DPTR, #08E5H ;送表首地址08E5H
MOV A, R4 ;将R4的内容送A
MOVC A, @A+DPTR ;取出取出表中08E5H偏移(R4)的字符给A
RET ;返回
L06A5H: ;
MOV R0, #30H ;从波形类型中提取显示提示字符串
MOV R7, #0FH ;15个字符串放到首行显示缓冲区
MOV R6, #01H ;
LCALL L0628H ;调L0628H子程序:拷贝0D5DH+(R1)*16中偏移(R6)开始的(R7)个字节到@R0中
MOV A, #80H ;80#指令:两行显示,首行DDRAM地址从00H开始
MOV R0, #30H ;送液晶显示器显示这15个字符
MOV R7, #0FH ;将从30H开始的15个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序:查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
MOV A, #0C1H ;C1#指令:两行显示,次行DDRAM地址从41H开始
MOV R7, #0DH ;送液晶显示器显示第2行13个空格字符
LCALL L0723H ;调L0723H子程序:查询液晶状态BF,若为0则写入指令代码,再将(R7)个数据20H写入到数据寄存器中
MOV 40H, #78H ;乘号x
MOV R0, #41H ;根据增益代码调增益提示字符串*.*
MOV R7, #03H ;例如1.0
MOV R6, #00H ;
LCALL L0642H ;调L0642H子程序:拷贝0988H中偏移(R2)*4+(R6)开始的(R7)个字节到@R0中
MOV A, #0C0H ;C0#指令:两行显示,次行DDRAM地址从40H开始
MOV R0, #40H ;送液晶显示器增益倍率提示字符串
MOV R7, #04H ;将从40H开始的4个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序:查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
MOV R0, #46H ;从显示缓冲区第2行第6位开始
MOV R7, #04H ;4个字符
MOV R6, #00H ;定标信号偏移为0
CJNE R4, #02H, L06DEH ;若R4的内容不等于2,则跳转至L06DEH
MOV R6, #08H ;正弦信号偏移为8
L06DEH: ;
LCALL L0652H ;调L0652H子程序:拷贝08E8H中偏移(R3)*12+(R6)开始的(R7)个字节到@R0中
;根据定标信号通道和波形大类信号类型决定将定标信号或正弦信号提示信息送显示缓冲区
MOV A, #0C6H ;C6#指令:两行显示,次行DDRAM地址从46H开始
MOV R0, #46H ;显示缓冲区第2行第6字符开始的4个字符调入液晶显示器显示
MOV R7, #04H ;将从46H开始的4个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序:查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
MOV 4BH, #4EH ;N送4BH
MOV 4CH, #4FH ;I送4CH
MOV 4DH, #49H ;O送4DH
MOV 4EH, #53H ;S送5EH
MOV 4FH, #45H ;E送4FH
CLR 13H ;离开主菜单显示
RET ;返回
L06FCH: ;
LCALL L070CH ;调L070CH子程序:查询液晶状态BF
MOV DPTR, #0C001H ;选中液晶模块,LCDCS为1,RS为1,即写入数据
MOVX @DPTR, A ;将数据写入数据寄存器中
RET ;返回
L0704H: ;
LCALL L070CH ;调L070CH子程序:查询液晶状态BF
MOV DPTR, #0C000H ;选中液晶模块,LCDCS为1,RS为0,即写入指令代码
MOVX @DPTR, A ;将指令代码写入指令寄存器中
RET ;返回
L070CH: ;
PUSH ACC ;
MOV DPTR, #0C002H ;选中液晶模块,LCDCS为1,RS为0,即写入指令代码
L0711H: ;
MOVX A, @DPTR ;将BF及AC的值送A
RLC A ;A带CY循环左移1位
JC L0711H ;若CY为1,则跳转至L0711H。即若BF=1,则继续查询BF直至为0
; NOP
; NOP
; DB 40H,0FCH
POP ACC ;
RET ;返回
L0718H: ;
LCALL L0704H ;调L070CH子程序:查询液晶状态BF
L071BH: ;
MOV A, @R0 ;将(R0)所指地址的数据送A
LCALL L06FCH ;调L06FCH子程序:查询液晶状态BF为0后将数据写入数据寄存器中
INC R0 ;R0的内容加1
DJNZ R7, L071BH ;若R7的内容减1不为0,则跳转至L071BH
RET ;返回
L0723H: ;
LCALL L0704H ;调L070CH子程序:查询液晶状态BF
L0726H: ;
MOV A, #20H ;将00100000B送A
LCALL L06FCH ;调L06FCH子程序:查询液晶状态BF为0后将空格写入数据寄存器中
DJNZ R7, L0726H ;若R7的内容减1不为0,则跳转至L0726H
RET ;返回
L072EH: ;
MOV A, @R0 ;取存放的定标波形数组中的数据,将(R0)所指地址的数据送A
JNB 08H, L0746H ;非正常心电,则跳转至L0746H
PUSH DPH ;正常心电波形类型
PUSH DPL ;暂存波形数据指针
MOV DPTR, #08DDH ;送表首地址08DDH
MOV B, A ;暂存到B
MOV A, R3 ;将27H的内容送A
MOVC A, @A+DPTR ;取出表中08DDH偏移(R3)的修正数据
ADD A, B ;正常心电数据要修正,A=A+B修正
POP DPL ;
POP DPH ;恢复波形数据指针
LCALL L0605H ;调L0605H子程序,只有正常心电数据才有增益处理,增益等处理
L0746H: ;
PUSH ACC ;A值入栈
MOV A, 5DH ;将定标计时器送A
CLR C ;CY清0
SUBB A, #2AH ;A=A-2AH-0,42*5mS=0.21S
JC L075BH ;未到0.21秒,则跳转至L075BH
MOV A, 5DH ;到了0.21秒,继续判断
SUBB A, #3AH ;A=A-3AH-0,58*5mS=0.29S
JNC L075BH ;超过0.29秒,则跳转至L075BH
POP ACC ;在0.21秒~0.29秒之间,要进一步进行叠加修正,先恢复A值
INC R0 ;R0的内容加1,指向下一个单元
ADD A, @R0 ;A=A+((R0))叠加起来
PUSH ACC ;A值入栈
L075BH: ;
POP ACC ;恢复A值
CPL A ;A值按位取反(因为模拟电路存在反相放大)
MOV R4, A ;规定D/A数据送3区的R4
LCALL L0763H ;调L0763H子程序 :D/A模块
RET ;返回
L0763H: ;L0763H子程序为D/A模块:在P3.3为下降沿时将12数据(|P4.0|P4.1|P4.2|P4.3|P4.4|P4.5|P4.6|P4.7|1|P3.5|P3.6|P3.7|)送入P3.4
MOV A, R3 ;将R3的内容送A
RR A ;A循环右移1位
RR A ;A循环右移1位
RR A ;A循环右移1位
ORL A, #10H ;置A.7为1(液晶模块的RNG=1)
MOV R7, #04H ;0000010B送R7
L076BH: ;
SETB P3.3 ;P3.3置1 (P3.3连CLK,下降沿有效)
RLC A ;A带CY循环左移1位
MOV P3.4, C ;将CY送P3.4 (P3.4连DATA,数据串行口)
CLR P3.3 ;P3.3清0
DJNZ R7, L076BH ;若R7的内容件1不为0,则跳转至L076BH
MOV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -