📄 xdxhfsq.asm
字号:
LCALL L0704H ;调L0704H子程序
MOV A, #0EH ;执行0E#指令:显示开,光标显示,光标不闪烁
LCALL L0704H ;调L0704H子程序
L026DH: ;
AJMP L0330H ;转闪烁显示处理
;-------------------------------;
;NOIS键处理 ;
;-------------------------------;
L026FH: ;NOIS键处理
JB 13H, L028EH ;主菜单没有NOIS键处理要求,则跳转闪烁显示处理
JNB 15H, L028EH ;非主菜单但在WAVE状态下也无需NOIS处理要求,则跳转闪烁显示处理
JBC 05H, L0285H ;若NIOS功能已经打开,则本次按NIOS键关闭该功能,故清零0且转
SETB 05H ;若前面没打开NIOS功能,则现在启用该功能,设置标志
MOV A, #0CBH ;CB#指令:次行DDRAM地址从4BH开始
MOV R0, #4BH ;5个NIOS有关提示字符送液晶显示器
MOV R7, #05H ;将从4BH开始的5个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序:查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
AJMP L028EH ;短跳转至L028EH
L0285H: ;
MOV A, #0CBH ;CB#指令:次行DDRAM地址从4BH开始
MOV R7, #05H ;5个空格写入液晶显示器
LCALL L0723H ;调L0723H子程序:查询液晶状态BF,若为0则写入指令代码,再将(R7)个空格写入到数据寄存器中
AJMP L028EH ;短跳转闪烁显示处理
L028EH: ;
AJMP L0330H ;短跳转闪烁显示处理
;-------------------------------;
;∩键处理程序 ;
;-------------------------------;
L0290H: ;∩键处理程序
JB 13H, L02A0H ;主菜单下没∩键处理要求,则跳转闪烁显示处理
JNB 0CH, L02A0H ;不存在非定标信号处理,不可能加定标脉冲,则跳转闪烁显示处理
JB 06H, L02A0H ;若已经启用∩键处理,则跳转闪烁显示处理
MOV 5DH, #00H ;标记时间记时器清0
SETB 06H ;设置启用∩键处理标记标志
AJMP L02A0H ;短跳转至L02A0H
L02A0H: ;
AJMP L0330H ;短跳转至L0330H
;-------------------------------;
;MENU键处理 ;
;-------------------------------;
L02A2H: ;MENU键处理
JB 13H, L02EEH ;若是在主菜单状态,则跳转至L02EEH
MOV R0, #30H ;其它状态下按MENU键,要回到主菜单,
MOV R7, #20H ;将主菜单屏显示的信息拷贝到显示缓冲区30H~4FH中
MOV R6, #00H ;
LCALL L0694H ;调L0694H子程序:拷贝No1_SCREEN中偏移(R6)开始的(R7)个字节到@R0中
SETB 13H ;设置主菜单标志
MOV A, #80H ;80#指令:两行显示,首行DDRAM地址从00H开始
MOV R0, #30H ;显示首行
MOV R7, #10H ;将从30H开始的16个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序:查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
MOV A, #0C0H ;C0#指令:两行显示,次行DDRAM地址从40H开始
MOV R0, #40H ;显示第2行
MOV R7, #10H ;将从40H开始的16个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序:查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
MOV R4, #00H ;光标位置设置为0,光标在正常心电ECG
LCALL L069FH ;调L069FH子程序:取表08E5H偏移(R4)的字符给A,光标在正常心电ECG处显示
LCALL L0704H ;调L0704H子程序
MOV A, #0EH ;执行0E#指令:显示开,光标显示,光标不闪烁
LCALL L0704H ;调L0704H子程序
MOV R1, #07H ;波形类型计数器缺省为7
MOV A, R1 ;R1的内容送A
CJNE A, 2CH, L02D7H ;若A的值不等于原始波形类型值,则跳转至L02D7H
AJMP L02DBH ;短跳转至L02DBH
L02D7H: ;
SETB 04H ;还有因波形类型修改后要处理的内容
MOV 2CH, R1 ;把回到主菜单的缺省心电波形类型代码7作为原始波形类型计数器
L02DBH: ;
MOV R2, #09H ;增益代码重新设置为9(x1.0)
MOV R0, #5BH ;获得增益值
MOV R7, #01H ;
MOV R6, #03H ;
LCALL L0642H ;调L0642H子程序:拷贝0988H中偏移(R2)*4+(R6)开始的(R7)个字节到@R0中
CLR 02H ;取消TYPE波形类型选择功能
CLR 03H ;取消GAIN增益设置功能
CLR 05H ;取消NOIS功能
AJMP L0330H ;短跳转闪烁显示处理
L02EEH: ;主菜单是MENU键处理
MOV A, #0CH ;执行0C#指令:显示开,光标不显示,光标不闪烁
LCALL L0704H ;调L0704H子程序
CJNE R4, #00H, L0305H ;若光标位置不在正常心电ECG,则跳转至L0305H
LCALL L06A5H ;是在正常心电状态,调L06A5H子程序,把正常心电的显示信息送显示缓冲区,包括x*.*、脉冲作用位置和NOISE信息
MOV 2EH, #0 ;00000000B送2EH
MOV 2FH, #13 ;正常心电波形类型码在0~13范围,下限2EH是0,上限送13
SETB 14H ;正常心电14H置1
SETB 15H ;正常心电15H置1
AJMP L0330H ;短跳转闪烁显示处理
L0305H: ;不是正常心电
CJNE R4, #01H, L031DH ;若也不是ARRHY,则是WAVE,则跳转至L031DH
MOV R1, #16 ;是ARRHY状态,波形类型缺省起点16送波形类型,即提示信息是PVCS 10/min 80的波形
MOV 2CH, R1 ;原始波形类型记忆为16
SETB 04H ;因波形类型修改后有要处理的内容
LCALL L06A5H ;是ARRHY,调L06A5H子程序,
MOV 2EH, #14 ;ARRHY波形类型码范围是14~32,故下限送14
MOV 2FH, #32 ;上限送32
CLR 14H ;ARRHY时14H清0
SETB 15H ;ARRHY时15H置1
AJMP L0330H ;短跳转闪烁显示处理
L031DH: ;光标在WAVE位置时MENU键按下时的处理
MOV R1, #33 ;波形类型计数器设置为33
MOV 2CH, R1 ;并且记忆为原始波形类型代码
SETB 04H ;因波形类型修改后有要处理的内容
LCALL L06A5H ;WAVE状态,调L06A5H子程序
MOV 2EH, #33 ;WAVE状态,下限送33
MOV 2FH, #35 ;WAVE状态,上限送35
CLR 14H ;WAVE状态,14H清0
CLR 15H ;WAVE状态,15H清0
;===============================;
;闪烁显示处理模块 ;
;===============================;
L0330H: ;闪烁显示处理由此开始
JNB TF1, L03A3H ;若T1计时未溢出,即不到10mS,则跳转至L03A3H
CLR TR1 ;10mS到了,禁止T1计时
MOV A, #0F7H ;11110111B送A
ADD A, TL1 ;A=A+TL1
MOV TL1, A ;A送TL1
MOV A, #0D8H ;11011000B送A
ADDC A, TH1 ;A=A+TH1+CY
MOV TH1, A ;冲装定时9.993mS
SETB TR1 ;允许T1计时
CLR TF1 ;溢出标志TF1清0
MOV PSW, #10H ;改用2区,准备处理闪烁显示问题
INC R1 ;定时计时器加1(+10mS)
CJNE R1, #20, L035BH ;不到0.2秒,则跳转至L035BH
JB 13H, L036EH ;若主菜单状态,则跳转至L036EH
MOV A, #8FH ;到0.2秒时,不在主菜单的情况,8F#指令:两行显示,首行DDRAM地址从0FH开始
LCALL L0704H ;调L0704H子程序
MOV A, #20H ;实现心脏闪烁,目前换成显示空格
LCALL L06FCH ;调L06FCH子程序:将空格数据写入数据寄存器中
AJMP L036EH ;短跳转至L036EH
L035BH: ;
MOV A, R1 ;R1的内容送A
CJNE A, 50H, L036EH ;未计时到闪烁显示周期记时器的10mS倍数,则跳转至L036EH
JB 13H, L036CH ;主菜单状态,则跳转至L036CH
MOV A, #8FH ;计时到50H存放10mS的倍数,8F#指令:两行显示,首行DDRAM地址从0FH开始
LCALL L0704H ;调L0704H子程序
MOV A, #00H ;红心字符送显示,与前面的空格形成闪烁的效果。
LCALL L06FCH ;调L06FCH子程序:将数据写入数据寄存器中
L036CH: ;
MOV R1, #00H ;R1计时器清0
L036EH: ;
INC R2 ;R2在TYPE波形类型选择状态时设置为20,R2计时器加1
CJNE R2, #40, L0386H ;若R2的内容不等于400mS,则跳转至L0386H
JNB 02H, L037CH ;若不在波形类型选择状态,则跳转至L037CH
MOV A,#80H ;R2计时到400mS时,在波形类型选择状态,
MOV R7,#0FH ;波形类型选择显示提示先送15个空格,达到闪烁显示的目的
LCALL L0723H ;调L0723H子程序:查询液晶状态BF,若为0则写入指令代码,再将(R7)个数据空格20H写入到数据寄存器中
L037CH: ;
JNB 03H, L0386H ;若不在增益选择状态,则跳转至L0386H
MOV A, #0C1H ;在增益选择状态,C1#指令:两行显示,次行DDRAM地址从41H开始
MOV R7, #03H ;应该在增益提示显示处先送空格
LCALL L0723H ;调L0723H子程序:查询液晶状态BF,若为0则写入指令代码,再将(R7)个数据空格20H写入到数据寄存器中
L0386H: ;
CJNE R2, #80, L03A3H ;若R2的内容不等于800mS,则跳转至L03A3H
JNB 02H, L0395H ;不在波形类型选择状态,则跳转至L0395H
MOV A, #80H ;在波形类型选择期间,R2计时到800mS,80#指令:两行显示,首行DDRAM地址从00H开始
MOV R0, #30H ;将显示缓冲区首行的15个字符,送液晶显示器显示。
MOV R7, #0FH ;将从30H开始的15个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序:查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
L0395H: ;
JNB 03H, L03A1H ;若不在增益选择状态,则跳转至L03A1H
MOV A, #0C1H ;在增益选择状态,C1#指令:两行显示,次行DDRAM地址从41H开始
MOV R0, #41H ;将显示缓冲区2行增益字符送液晶显示器显示
MOV R7, #03H ;将从41H开始的3个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序:查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
L03A1H: ;
MOV R2, #00H ;计时器R2重新清0,闪烁显示处理完毕
L03A3H: ;无论10mS到与否,均会到此。
MOV A, 5CH ;5CH中的内容送A
ADD A, TL0 ;A=A+TL0
ANL A, #0FH ;取A的低4位,值为0~7H、8~FH
CLR C ;CY清0
SUBB A, #08H ;A=A-08H,结果原来在0~7H,结果是F8H~FFH,原来是8~FH,结果则为0~7H
MOV 5CH, A ;A值送5CH,特点是-8~+7,即绝对值较小。
MOV C, ACC.7 ;将A.7送CY
MOV ACC.2, C ;将CY送A.2,符号位送第2位,
;意味着F8H~FFH符号位是1,结果FCH\FDH\FEH\FFH\FCH\FDH\FEH\FFH\
;意味着00H~07H符号位是0,结果00H\01H\02H\03H\00H\01H\02H\03H\
MOV 5EH, A ;将A送5EH,特点是-4~+3,即绝对值更小。
MOV A, 5FH ;5FH的内容送A
SUBB A, TL0 ;A=A-TL0-CY
ANL A, #07H ;取的低3位,00H~07H
CLR C ;CY清0
SUBB A, #04H ;A=A-04H-CY,得到-4~+3
MOV 5FH, A ;将A值送5FH,FDH~03H
JNB 07H, L03C6H ;若07为0,则跳转至L03C6H
CLR 06H ;07H标志为1的话,关闭定标信号处理标志。
CLR 07H ;07H清0
L03C6H: ;
JNB 10H, L03E1H ;若定标信号作用电极未更换,则跳转至L03E1H
JB 06H, L03E1H ;若标记信号处理标志有效的话,则跳转至L03E1H
CLR 10H ;定标信号处理标志无效且无标记,则10H清0
JNB 0AH, L03D3H ;无50Hz正弦输出波D/A输出标志,则跳转至L03D3H
SETB 12H ;50Hz正弦输出波D/A输出标志有效,则一定要先行过渡期处理有效
L03D3H: ;
MOV PSW, #08H ;回到1区
MOV 27H, R3 ;记忆定标信号或正弦信号加的位置
MOV R0, #28H ;依据定标信号作用导联位置提取标记修正参数,28H~2BH四个字节从表格08E8H拷贝数据
MOV R7, #04H ;四个字节
MOV R6, #04H ;偏移4个字节
LCALL L0652H ;调L0652H子程序:拷贝08E8H中偏移(R3)*12+(R6)开始的(R7)个字节到@R0中
L03E1H: ;
DJNZ 2DH, L03E7H ;中断不止一次,继续处理,则跳转至L03E7H
ORL PCON, #01H ;仅中断一次,则CPU进入空闲工作方式
L03E7H: ;
AJMP L00FAH ;短跳转至L00FAH
;===============================;
;中断服务处理模块 ;
;===============================;
L03E9H: ;
PUSH PSW ;
PUSH ACC ;
PUSH B ;
PUSH DPH ;
PUSH DPL ;保护现场
JB 12H, L0403H ;是其他波形向50Hz正弦输出的过渡期,刷新率200SPS,级别最高,先判断转至L0403H
JB 0AH, L03FEH ;是正弦波输出的D/A转换,1200SPS,级别第2,则跳转至L03FEH
LCALL L0449H ;是其他波形的正常D/A输出,200SPS,调L0449H子程序
AJMP L0406H ;短跳转至L0406H
L03FEH: ;
LCALL L0550H ;调L0550H子程序
AJMP L0406H ;短跳转至L0406H
L0403H: ;
LCALL L05DDH ;调L05DDH子程序
;-------------------------------;
;键扫描及防抖处理模块 ;
;-------------------------------;
L0406H: ;
DJNZ R5, L043CH ;R5的内容减1不为0,防抖定时没到,则跳转至L043CH
JB 0AH, L040FH ;定时到了,若是WAVE下的正弦定标输出期间,则跳转至L040FH
MOV R5, #04H ;其他波形输出期间,防抖动定时重新定4个5毫秒=20毫秒
AJMP L0411H ;短跳转至L0411H
L040FH: ;
MOV R5, #18H ;正弦定标输出期间,防抖动定时重新送24个0.833毫秒=20毫秒
;最初01_00H=00B;59H=FFH(无键按下)
;首次按下某键,59H=键盘口值(!=FFH),01_00H=01B
;20mS后,该按键抖动为无效,!=59H,01_00H=00B,59H=FFH
;20mS后,该按键稳定,且上次不是初次按键,从来就没有按键,01_00H=00B,59H=FFH
;20mS后,该按键稳定,且有初次按键,但现在键值是没按键,01_00H=00B
;20mS后,该按键稳定=59H,且有00H=1初次按键,但现在键值!=FFH,,01H=0B,则01H=1B
L0411H: ;
MOV A, P1 ;键盘口P1送A
CJNE A, 59H, L0430H ;若目前键盘口值不等于20mS前的键盘口值59H,则跳转至L0430H
JNB 00H, L043CH ;相同,若00H为0,则跳转至L0430H,无键盘要求转
CJNE A, #0FFH, L0420H ;有读按键要求,若A值有按键,则跳转至L0420H
CLR 01H ;没按键A=FFH,清除01H清0
AJMP L042CH ;短跳转至L042CH
L0420H: ;
JB 01H, L042CH ;若01H为1,则跳转至L042CH
SETB 01H ;01H置1
MOV DPTR, #07DDH ;送表首地址07DDH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -