找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2549|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

一個字節(jié)按位依次給到單片機(jī)管腳時遇到的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:248661 發(fā)表于 2017-11-12 17:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
把一個字節(jié)的數(shù)據(jù)從高位依次間隔賦給單片機(jī)的一個管腳。
a=0x05;      // 01010101
sbit led=P1^0;      //單片機(jī)管腳
for(i=7;i>=0;i--)        //賦值8次
{
   led=a>>7;   //高位移到低位
   a=a<<1;    //把用過的數(shù)據(jù)移走
}第一次a右移7位就是最高位移到最低位嘛,然后a自己左移一次,第二次實際就是把次高位右移7次。
同理 我像下面這樣寫
for(i=7;i>=0;i--)
{
   led=a>>i;
}為什么這樣不對呢?我把變量i作為移動的次數(shù),7,6,....1.也是相當(dāng)于把數(shù)據(jù)依次移動到低位啊
求解。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:248503 發(fā)表于 2017-11-12 20:49 | 只看該作者
第一個居然是對的,數(shù)據(jù)類型不匹配一個bit一個char類型,居然沒有警告。 漲見識了。
第二個可以改成這樣。
for(i=7;i>=0;i--)
{
        led=(a>>i)%2?1:0;
}
回復(fù)

使用道具 舉報

板凳
ID:164602 發(fā)表于 2017-11-13 08:33 | 只看該作者
你自己寫的程序不對!
不是移位問題,是循環(huán)不停。前8個移位沒有問題,但第九次就出問題了。
此時,i=0,再i--,則不會出現(xiàn)負(fù)值,而是255,所以你的循環(huán)就成死循環(huán)了!
除非你定義的i變量是有符號的
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表