標題: 一個字節(jié)按位依次給到單片機管腳時遇到的問題 [打印本頁]

作者: 屁顛屁顛    時間: 2017-11-12 17:47
標題: 一個字節(jié)按位依次給到單片機管腳時遇到的問題
把一個字節(jié)的數(shù)據(jù)從高位依次間隔賦給單片機的一個管腳。
a=0x05;      // 01010101
sbit led=P1^0;      //單片機管腳
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ù)依次移動到低位啊
求解。

作者: cccc8888    時間: 2017-11-12 20:49
第一個居然是對的,數(shù)據(jù)類型不匹配一個bit一個char類型,居然沒有警告。 漲見識了。
第二個可以改成這樣。
for(i=7;i>=0;i--)
{
        led=(a>>i)%2?1:0;
}
作者: HC6800-ES-V2.0    時間: 2017-11-13 08:33
你自己寫的程序不對!
不是移位問題,是循環(huán)不停。前8個移位沒有問題,但第九次就出問題了。
此時,i=0,再i--,則不會出現(xiàn)負值,而是255,所以你的循環(huán)就成死循環(huán)了!
除非你定義的i變量是有符號的




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1