单片机c程序问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 12:49:17
#include<reg51.h>
#define uchar unsigned char

void main()
{
char i,t,ff;
while(1)
{
// t=P1;
// i=P1&0x0f;

i=P1&0x0f;
switch(i)
{
case 0: P0=0x00; break;
case 1: P0=0x10; break;
default: break;
}
while(P1==0xef);

}
}

如果在keil中能正常编译,但在调试时;i值不变化,我把switch语句修改后;
i=P1&0x0f;
switch(i)
变成 switch(i=P1&0x0f)
程序能正常运行,请高手指点;如果问题解决,再追加分数;

我觉得你第一种写法没有错啊!i不变化是不是因为P1口没有变化啊?

如果你能看懂汇编程序,建议你看看编译后产生的汇编的程序。
因为整个程序只有一个用到的临时变量i,编译后并没有一个具体的RAM地址来指向这个变量i,而是用的累加器A来代替。你如果改i为全局变量就不存在问题了。或者把其它的变量t,ff的值也用来起,例如:
t=ff+i;

i=P1&0x0f;
因为此时有多个变量了,不可能全用A来代替,就不存在问题。
最后的建议:平时多看看编译后的汇编程序。这样才能写出更简短,更可靠的程序。