程序集零错误 - 切换语句

时间:2016-05-15 06:45:39

标签: c assembly 8051

我应该使用Dallas 8051芯片制作多路复用器。 p1.0,p1.1和p1.2是输入。 P1.3是使能线,输出为P2.0至p2.3。除了所有输入均为零且启用为1时,所有输出均可在调试时正常工作。 (在Keil调试器视图的输出中只应该为零,但情况并非如此)。

#include<reg51.h>

sbit input0 = p1^0;
sbit input1 = p1^1;
sbit input2 = p1^2;
sbit enable = p1^3;
sbit output0 = p2^0;
sbit output1= p2^1;
sbit output2 = p2^2;
sbit output3 = p2^3;
sbit output4 = p2^4;
sbit output4 = p2^5;
sbit output6 = p2^6;
sbit output7 = p2^7;

void main (void) {
    P2 = 0x00;

    if (enable==1)
    {
        P1&=0x07;
        switch(P1)

        {
            case 1: output1=1; break;
            case 2: output2=1; break;
            case 3: output3=1; break;
            case 4: output4=1; break;
            case 5: output5=1; break;
            case 6: output6=1; break;
            case 7: output7=1; break;
            default: output0 =1; break;
        }

    }

    else {P2&=0x07;}

}

1 个答案:

答案 0 :(得分:2)


你问为什么当所有输入都为零并且启用为1时,它不起作用。 对不起,我在代码中看不到这种行为的原因,但我有一些问题和建议。

在哪里停止调试器读取输出?你确定在之前执行了设置output0的语句吗?

P2&amp; = 0x07的原因是什么?在其他部分?

你想用P1&amp; = 0x07做什么;在开关之前?
如果要屏蔽位4..7,最好直接在switch语句中执行此操作。 你现在做什么取决于P1的0..3位输入信号。如果其中一个为0,则在P1的该位上写入0 8051的端口可以双向使用。如果写入1,则引脚仅通过弱电阻驱动为1。但是如果你写一个0,它将被输出晶体管驱动为0,输出晶体管可以驱动几个mA。 0将强制8051的引脚为输出。

因此我建议更换

P1&=0x07;
switch(P1)

switch(P1 & 0x07)

祝福,祝你好运。

赫尔穆特