找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1822|回复: 2
收起左侧

一个字节按位依次给到单片机管脚时遇到的问题

[复制链接]
ID:248661 发表于 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.也是相当于把数据依次移动到低位啊
求解。
回复

使用道具 举报

ID:248503 发表于 2017-11-12 20:49 | 显示全部楼层
第一个居然是对的,数据类型不匹配一个bit一个char类型,居然没有警告。 涨见识了。
第二个可以改成这样。
for(i=7;i>=0;i--)
{
        led=(a>>i)%2?1:0;
}
回复

使用道具 举报

ID:164602 发表于 2017-11-13 08:33 | 显示全部楼层
你自己写的程序不对!
不是移位问题,是循环不停。前8个移位没有问题,但第九次就出问题了。
此时,i=0,再i--,则不会出现负值,而是255,所以你的循环就成死循环了!
除非你定义的i变量是有符号的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表