EMU8086多级水位与雨量传感器代码故障修复请求
EMU8086 多级水位/雨量传感器代码故障修复
1. 修复80cm水位无法触发Yellow LED的问题
问题原因:水位区间判断逻辑错误,例如将80cm错误划分至Red LED触发区间,或条件判断遗漏了等于80的情况。
修复方案:明确水位区间划分逻辑,确保50-80cm区间触发Yellow LED:
; 假设转换后的水位数值存储在AX寄存器中 CMP AX, 50 JL GREEN_LED ; 水位<50cm,触发Green LED CMP AX, 80 JG RED_LED ; 水位>80cm,触发Red LED JMP YELLOW_LED ; 50cm≤水位≤80cm,触发Yellow LED GREEN_LED: ; Green LED点亮执行代码 JMP END_CHECK YELLOW_LED: ; Yellow LED点亮执行代码 JMP END_CHECK RED_LED: ; Red LED点亮执行代码 END_CHECK:
2. 修复蜂鸣器错误关联雨量状态的问题
问题原因:蜂鸣器触发逻辑绑定了雨量传感器状态,未遵循仅Red LED激活时开启的需求。
修复方案:将蜂鸣器触发代码移至Red LED的激活分支内,其余状态下关闭蜂鸣器:
RED_LED: ; Red LED点亮执行代码 MOV AL, 01H ; 假设蜂鸣器控制端口为01H,输出高电平触发蜂鸣 OUT 01H, AL JMP END_CHECK YELLOW_LED: ; Yellow LED点亮执行代码 MOV AL, 00H ; 关闭蜂鸣器 OUT 01H, AL JMP END_CHECK GREEN_LED: ; Green LED点亮执行代码 MOV AL, 00H ; 关闭蜂鸣器 OUT 01H, AL JMP END_CHECK
3. 修复水位输入读取异常(输入80显示为0)的问题
问题原因:输入读取代码未正确将ASCII字符转换为十进制数值,例如仅读取单个字符、未处理多位数的十位/个位计算。
修复方案:实现多位数ASCII转十进制的逻辑,正确解析输入的水位值:
; 读取2位十进制水位输入并转换为数值 MOV CX, 2 ; 设定输入位数为2 MOV BX, 0 ; BX存储转换后的最终数值 INPUT_LOOP: MOV AH, 01H ; DOS中断01H读取单个输入字符 INT 21H SUB AL, 30H ; ASCII码转十进制数字 MOV AH, 0 XCHG AX, BX MOV DX, 10 MUL DX ; 现有数值×10,处理十位 ADD BX, AX ; 加上当前个位数字 LOOP INPUT_LOOP MOV AX, BX ; AX中存储转换完成的水位数值(如输入80则AX=80)
内容的提问来源于stack exchange,提问作者NUR AQILAH BINTI ISHAR
相关产品推荐
相关产品推荐

