单片机中if(temp=0xff)是错误的吗?

来源:百度知道 编辑:UC知道 时间:2024/06/18 14:57:14
比如
char temp;
void main()
{
temp=0xbf;
while(1)
{
P1=temp;
temp=temp>>1;
if(temp==0xff)
{
temp=0xbf;
}
}
}
这个函数中的if(temp=0xff)并不能使temp进入if语句
我调试过了,temp依次等于0xbf,0xdf,0xef,0xf7,oxfb,0xfd,0xfe,0xff 。。
而且if(P1==0xff)能让temp进入if,但是if(temp==0xff)就不好使 ,我想问的就是if(temp==0xff)错误的原因

我刚才在Keil里调试了一下,确实进不去。
改成if(temp^0xff==0) 就可以。
C51里把0X表示的16进制数默认为无符号数,而此题中TEMP是有符号数,所以总是不相等。
P1是按无符号数处理的。

首先你要说明你的这个程序是要做什么.你没有说明,也不太好分析.
temp=0xbf;
while(1)
{
P1=temp; //P1 =10111111
temp=temp>>1; //temp=11011111
if(temp==0xff) //如果temp=111111
上面这句程序好像你是要等待P1成为0xff?那应该是
if(P1==0xff) 才对.如果你是if(temp==0xff)这个temp的值永远都不会变的.怎么能进入if语句呢?
{
temp=0xbf;//temp=10111111
}
}
好好的学一下C语言之后再编程.