【求助帖】8086汇编硬件实验问题求助
今晚在做一个8255芯片相关的硬件实验:不断扫描开关K0和K1,当开关K0闭合时,点亮偶数的LED灯,其他灯灭;当开关K1闭合时,点亮奇数的LED灯,其他灯灭;当开关K0和K1同时闭合时,所有灯亮;当开关K0和K1同时断开时,所有灯灭。
原本是要根据两个开关的状态组合(一共4种组合)来选择亮灯的情况(4种亮灯情况),但在实验过程中,不管如何选择开关状态,亮灯情况依然不变,应该不是硬件电路(8086最小系统和8055外设)的问题,但在程序中找不到问题所在,特来请教论坛的大佬们。
源程序:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AL,10010000B
MOV DX,206H
OUT DX,AL
COM:
MOV DX,200H
IN AL,DX
CMP AL,00000011B
JNE COM0
MOV DX,202H
MOV AL,00000000B
OUT DX,AL
JMP COM
COM0:
CMP AL,00000000B
JNE COM1
MOV DX,202H
MOV AL,11111111B
OUT DX,AL
JMP COM
COM1:
CMP AL,00000010B
JNE COM2
MOV DX,202H
MOV AL,10101010B
OUT DX,AL
JMP COM
COM2:
MOV DX,202H
MOV AL,01010101B
OUT DX,AL
JMP COM
CODE ENDS
END START
硬件电路如下图所示
用C开中断做过交通灯信号系统,汇编没整过 Proteus 文件也发上来看看 simon77 发表于 2021-6-7 23:14
Proteus 文件也发上来看看
你好,proteus仿真文件我上传到了文叔叔,如果你有空的话,还请劳烦你下载下来看看,指点一下迷津,非常感谢{:1_919:}
https://ws28.cn/f/5msfjplrxxp 复制链接到浏览器打开 simon77 发表于 2021-6-7 23:14
Proteus 文件也发上来看看
破案了,刚刚琢磨了一下,发现是开关状态的判断指令的问题引起的逻辑错误,改用TEST指令来判断,同时调整状态组合的判断顺序(先判断是否全部闭合,接着两个判断时一开一合的组合,最后才是全部断开的判断(但严格来说全部断开这一状态无法判断))
正确源码如下:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AL,10010000B ;控制字
MOV DX,206H ;8255A的控制端口地址
OUT DX,AL
COM:
MOV DX,200H
IN AL,DX
TEST AL,00000011B ;全部断开;
JNE COM0 ;若实际状态与判断状态不同,则跳转
MOV DX,202H
MOV AL,11111111B
OUT DX,AL
JMP COM
COM0:
TEST AL,00000010B ;其中一个断开,另一个闭合
JNE COM1 ;状态不同,跳转
MOV DX,202H
MOV AL,10101010B
OUT DX,AL
JMP COM
COM1:
TEST AL,00000001B ;10
JNE COM2 ;状态不同,跳转
MOV DX,202H
MOV AL,01010101B
OUT DX,AL
JMP COM
COM2:
MOV DX,202H
MOV AL,00000000B
OUT DX,AL
JMP COM ;最后返回初始
CODE ENDS
END START
页:
[1]