NIMITIZ 发表于 2021-6-7 21:35

【求助帖】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
硬件电路如下图所示

sam喵喵 发表于 2021-6-7 22:49

用C开中断做过交通灯信号系统,汇编没整过

simon77 发表于 2021-6-7 23:14

Proteus 文件也发上来看看

NIMITIZ 发表于 2021-6-10 17:43

simon77 发表于 2021-6-7 23:14
Proteus 文件也发上来看看

你好,proteus仿真文件我上传到了文叔叔,如果你有空的话,还请劳烦你下载下来看看,指点一下迷津,非常感谢{:1_919:}

https://ws28.cn/f/5msfjplrxxp 复制链接到浏览器打开

NIMITIZ 发表于 2021-6-10 22:12

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]
查看完整版本: 【求助帖】8086汇编硬件实验问题求助