标题: 一个字节按位依次给到单片机管脚时遇到的问题 [打印本页]

作者: 屁颠屁颠    时间: 2017-11-12 17:47
标题: 一个字节按位依次给到单片机管脚时遇到的问题
把一个字节的数据从高位依次间隔赋给单片机的一个管脚。
a=0x05;      // 01010101
sbit led=P1^0;      //单片机管脚
for(i=7;i>=0;i--)        //赋值8次
{
   led=a>>7;   //高位移到低位
   a=a<<1;    //把用过的数据移走
}第一次a右移7位就是最高位移到最低位嘛,然后a自己左移一次,第二次实际就是把次高位右移7次。
同理 我像下面这样写
for(i=7;i>=0;i--)
{
   led=a>>i;
}为什么这样不对呢?我把变量i作为移动的次数,7,6,....1.也是相当于把数据依次移动到低位啊
求解。

作者: cccc8888    时间: 2017-11-12 20:49
第一个居然是对的,数据类型不匹配一个bit一个char类型,居然没有警告。 涨见识了。
第二个可以改成这样。
for(i=7;i>=0;i--)
{
        led=(a>>i)%2?1:0;
}
作者: HC6800-ES-V2.0    时间: 2017-11-13 08:33
你自己写的程序不对!
不是移位问题,是循环不停。前8个移位没有问题,但第九次就出问题了。
此时,i=0,再i--,则不会出现负值,而是255,所以你的循环就成死循环了!
除非你定义的i变量是有符号的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1