📄 syq.asm
字号:
RLC A
MOV 4EH,A
MOV A,4FH
RLC A
MOV 4FH,A
DDIV2: CLR C
MOV A,4EH
SUBB A,4AH
MOV 49H,A
MOV A,4FH
SUBB A,4BH
JC DDIV3
MOV 4FH,A
MOV 4EH,49H
INC 4CH
SJMP DDIV2
DDIV3: DJNZ R0,DDIV1
RET
JCL: JB 02H,JCL1 ;02H=1 有键要处理
JCL0: RET ;否则退出
JCL1: MOV A,79H ;取键号(有 0,1,2,3四个有效键)
JZ JCL4 ;0号键 转滴速设定处理
CJNE A,#03H,JCL3
JB 0DH,JCL2 ;3号键 置滴速超限报警开关 即
SETB 0DH ;改变开关标志 0DH 状态
SJMP JCL3 ;若 0DH=1 则变为 0DH=0
JCL2: CLR 0DH ;若 0DH=0 则变为 0DH=1
JCL3: CLR 02H ;清未处理键标志(02H=0)
RET ;退出
JCL4: CLR 0CH ;置滴速显示不加"."
CLR 02H
MOV A,3FH ;取设限状态
JNZ J2 ;状态\=0 转
J1.0: JB 0FH,J1.0 ;如有其他放音,等待结束
MOV 50H,#1AH ;放音"请设定滴速上限"
MOV 51H,#38H
MOV 52H,#34H
MOV 53H,#24H
MOV 54H,#0FFH
MOV 5BH,#50H
SETB 0FH
J1.1: JB 0FH,J1.1 ;等待放音结束
CLR 02H
CLR 12H ;初始滴速设限速度标志(0.5秒)
J1.2: MOV 63H,#00H ;设限定时清0
J1.Z: JB 01H,J1.3 ;有键按下(01H=1)
CLR 02H ;无键按下,清未处理键标志
CLR 12H ;初始滴速设限速度标志(0.5秒)
MOV A,63H ;取设限按键等待时间
CJNE A,#05H,J1.Z ;不到5秒,继续等待
AJMP J3 ;到5秒无按键,退出设限
J1.3: MOV A,79H ;取键号
JNZ J1.Y ;不是0号键 转
J1.X: JNB 02H,J1.X ;0号键,等待键释放
INC 3FH ;置为下一个设限状态
AJMP JCL4 ;转回JCL4处理
J1.Y: CJNE A,#01H,J1.7 ;不是1号键(增量键)转
INC 61H ;上限值加1
MOV A,61H
CLR C
SUBB A,#78H ;所设上限>=规定上限最高值120?
JC J1.4 ;
MOV 61H,#78H ;>=120(78H)则置为120
J1.4: MOV A,61H ;显示当前上限值
ACALL XSDS
MOV DPTR,#0000H ;清计时器(DPTR每4ms自动加1)
J1.5: MOV A,DPL
JB 12H,J1.6 ;快速设限状态(12H=1)转
CJNE A,#80H,J1.5 ;慢态,查DPL=80H?(约0.5秒)等待
SETB 12H ;第1个慢态后立即置为快态
AJMP J1.2 ;继续查键
J1.6: CJNE A,#40H,J1.5 ;快态,查DPL=40H?(0.25秒)等待
AJMP J1.2 ;继续查键
J1.7: CJNE A,#02H,J1.2 ;不是2号键(减量键)转
DEC 61H ;上限值减1
MOV A,61H
CLR C
SUBB A,#3CH ;所设上限<规定上限最低值60?
JNC J1.4
MOV 61H,#3CH ;< 60(3CH)则置为60
AJMP J1.4
J2: CJNE A,#01H,J3 ;不是第1设限态(设滴速下限)转
J2.0: JB 0FH,J2.0 ;如有其他放音,等待结束
MOV 50H,#1AH ;放音"请设定滴速下限"
MOV 51H,#38H
MOV 52H,#34H
MOV 53H,#28H
MOV 54H,#0FFH
MOV 5BH,#50H
SETB 0FH
J2.1: JB 0FH,J2.1 ;等待放音结束
CLR 02H ;清未处理键标志
CLR 12H ;初始滴速设限速度标志(0.5秒)
J2.2: MOV 63H,#00H ;设限定时清0
J2.Z: JB 01H,J2.3 ;有键按下转去处理
CLR 02H ;无键,清未处理键标志
CLR 12H ;初始滴速设限速度标志(0.5秒)
MOV A,63H
CJNE A,#05H,J2.Z ;等待按键5秒
AJMP J3 ;5秒仍无键按下 转退出
J2.3: MOV A,79H ;取键号
JNZ J2.Y ;不是0号键 转
J2.X: JNB 02H,J2.X ;0号键,等待键释放
INC 3FH ;置为下一个设限状态
AJMP JCL4 ;转回JCL4处理
J2.Y: CJNE A,#01H,J2.7 ;不是1号键(增量)转
INC 60H ;1号键,滴速下限值加1
MOV A,60H
CLR C
SUBB A,#3CH ;所设下限<规定下限最高值60?
JC J2.4 ;<60(3CH)有效,转
MOV 60H,#3CH ;>=60,则置为60
J2.4: MOV A,60H
ACALL XSDS ;显示所设下限值
MOV DPTR,#0000H ;清计时器(DPTR每4ms自动加1)
J2.5: MOV A,DPL
JB 12H,J2.6 ;快速设限状态(12H=1)转
CJNE A,#80H,J2.5 ;慢态,查DPL=80H?(约0.5秒)等待
SETB 12H ;第1个慢态后立即置为快态
AJMP J2.2 ;继续查键
J2.6: CJNE A,#40H,J2.5 ;快态,查DPL=40H?(0.25秒)等待
AJMP J2.2 ;继续查键
J2.7: CJNE A,#02H,J2.2 ;不是2号键(减量键)转
DEC 60H ;下限值减1
MOV A,60H
CLR C
SUBB A,#14H ;所设下限<规定下限最低值20?
JNC J2.4
MOV 60H,#14H ;< 20(14H)则置为20
AJMP J2.4
J3: MOV A,61H ;报"滴速上限,每分XX滴"
CLR 08H ;报上限标志
ACALL BDS
MOV A,60H ;报"滴速下限,每分XX滴"
SETB 08H ;报下限标志
ACALL BDS
J3.1: MOV 3FH,#00H
CLR 02H
CLR 12H
CLR 07H
RET
BDS: CLR 13H ;滴速十位0值标志清0
JB 0FH,BDS ;若有放衣数据未放完 等待
MOV 50H,#34H ;置放音区“滴速上/下限,每分”
MOV 51H,#24H
JNB 08H,BDS1 ;若08H=1则改为下限(音码28H)
MOV 51H,#28H
BDS1: MOV 52H,#1CH
MOV 53H,#3CH
MOV 5BH,#50H
MOV R0,#54H ;R0指向放音区下一地址
MOV B,#64H ;滴速/100得十进制百位值
DIV AB
JZ BDS2 ;若百位值=0 转
RL A ;百位值转成音码(即音段地址)
;(值的BCD码左移1位即得音码)
MOV @R0,A ;百位音码送放音区
INC R0 ;放音区地址加1
MOV @R0,#16H ;“百”字音码送放音区
INC R0 ;放音区地址加1
BDS2: XCH A,B
MOV B,#0AH ;余数/10得滴速十进制十位值
DIV AB
JNZ BDS3 ;十位值非0转去放音
SETB 13H ;十位值=0置标志13H=1
SJMP BDS4 ;暂不放音,结合个位一起处理
BDS3: RL A ;十位值转成音码
MOV @R0,A ;十位音码送放音区
INC R0 ;放音区地址加1
MOV @R0,#14H ;“十”字音码送放音区
INC R0 ;放音区地址加1
BDS4: XCH A,B ;取滴速个位值
JZ BDS6 ;个位=0不放音,转去结束
JNB 13H,BDS5 ;个位,十位均非0,转个位放音
MOV @R0,#00H ;个位非0十位=0,先放"零"音,再
INC R0 ;放个位值音
BDS5: RL A ;个位值转成音码
MOV @R0,A ;个位音码送放音区
INC R0 ;放音区地址加1
BDS6: MOV @R0,#18H ;“滴”字音码送放音区
INC R0 ;放音区地址加1
MOV @R0,#0FFH ;写入放音区结束标志FFH
SETB 0FH ;置放音请求标志 0FH=1
RET
XSDS: CJNE A,#01H,XSDS1 ;滴速正常,转
MOV A,#01H ;滴速不正常(即测值>255)时DS子
MOV 74H,A ;程序将测值置为01H,此时直接将
MOV 75H,A ;01H送显,显示为"- - -"
MOV 76H,A
RET
XSDS1: MOV B,#64H ;滴速/100得十进制"百"位值
DIV AB
JZ XSDS2 ;百位值=0直接送显示区(灭)
ACALL DMZH ;否则转换成显示段码
XSDS2: MOV 74H,A ;送显
XCH A,B ;取余数
MOV B,#0AH
DIV AB ;余数/10得"十"位值
ACALL DMZH ;转换成段码
MOV 75H,A ;送显
XCH A,B ;取"个"位值
ACALL DMZH ;转换成段码
MOV 76H,A ;送显
JNB 0CH,XSDS3 ;滴速显示不需加"." 转
MOV A,#80H ;加"."
ORL 74H,A ;(即将显示段码最高位置为1)
ORL 75H,A
ORL 76H,A
XSDS3: RET
ZCX: MOV TMOD,#11H ;T1,T0均为16位定时方式
MOV IP,#02H ;T0为最高中断优先级
MOV TH0,#0F8H ;T0定时常数
MOV TL0,#30H ;(6MHZ晶振下定时4毫秒)
SETB IT1 ;外部中断EX1为后沿触发
SETB IT0 ;外部中断EX0为后沿触发
CLR A
MOV R0,#20H ;(20H)—(7FH)清零
ZCX1: MOV @R0,A
INC R0
CJNE R0,#80H,ZCX1
SETB 0EH ;0EH=P1.2=1(保持对P1.2映像)
ACALL DFJH ;读分机号
MOV IE,#86H ;允许EX1,ET0中断
SETB TR0 ;启动T0定时
MOV A,5DH ;取分机号
SWAP A ;在第0,1显示位显示分机号
ANL A,#0FH
ACALL DMZH
MOV 70H,A
MOV A,5DH
ANL A,#0FH
ACALL DMZH
MOV 71H,A
ACALL ZJ ;调自检子程序
MOV SCON,#0F0H ;串口方式3,多机通讯,允许接收
MOV 60H,#28H ;予置滴速下限为每分钟40滴(28H)
MOV 61H,#50H ;予置滴速上限为每分钟80滴(50H)
MOV A,61H
CLR 08H ;置报上限标志(08H=0)
ACALL BDS ;报滴速上限
MOV A,60H
SETB 08H ;置报下限标志(08H=1)
ACALL BDS ;报滴速下限
ZCX2: ACALL SJSX ;调时间刷新
ACALL YWJC ;调液位检测
ACALL DS ;调滴速检测
ACALL JCL ;调键处理
AJMP ZCX2 ;转ZCX2循环
TX: CLR RI ;清串口接收标志
MOV A,SBUF ;取接收值(分机号)
XRL A,5DH ;与本机分机号比较
JZ TX1 ;一至,有效 转去响应
RETI ;否则退出
TX1: CLR ES ;禁止串口中断
CLR TB8 ;多机识别位TB8清零
MOV SBUF,5DH ;向主机发送本机分机号
TX2: JNB TI,TX2 ;等待发送完成
CLR TI
MOV SBUF,7FH ;向主机发送输液时间的“时”
TX3: JNB TI,TX3
CLR TI
MOV SBUF,7EH ;向主机发送输液时间的“分”
TX4: JNB TI,TX4
CLR TI
MOV SBUF,62H ;向主机发送当前滴速
TX5: JNB TI,TX5
CLR TI
MOV SBUF,61H ;向主机发送设定滴速上限
TX6: JNB TI,TX6
CLR TI
MOV SBUF,60H ;向主机发送设定滴速下限
TX7: JNB TI,TX7
CLR TI
MOV SBUF,77H ;向主机发送指示灯信息
TX8: JNB TI,TX8
CLR TI
SETB ES ;允许串口中断
RETI
BJ: MOV A,64H ;对设定的报警语音信息不间
CLR C ;断地每5秒重复播报
SUBB A,#05H ;此报警只有关机才可解除
JC BJ ;(64H)是报警间隔定时器,由4MS
MOV 64H,#00H ;中断子程序每秒加1
MOV 5BH,#50H
SETB 0FH
AJMP BJ
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -