我知道這可能是錯誤的部分,但我的問題是微控制器編程特定(主要是AVR)!在AVR中的位和字節解釋C
我發送兩個AVR之間的字節ATmega8的使用的Uart其中在字節的每一位代表的東西,只有一個位是在每個字節1發送
所以,如果我要檢查,例如說,第5位在接收的字節那麼如果把它寫成如下:
short byte=UDR;
if(byte&(1<<5))
{
// do stuff for bit 5
}
然後它總是罰款
,但如果我寫它,因爲這:
short byte=UDR;
if(byte==0b00100000)
OR
short byte=UDR;
if(byte==0x20)
然後它不會工作,如果我使用Switch-case而不是if-else,它也會失敗 我無法理解問題,編譯器是否將它解釋爲signed no和第7 Bit作爲符號? 還是別的? 編譯器會從AVR Studio的5
AVR-GNU如果有人問我也有上顯示接收到的字節 ,所以我知道收到的字節是正確的,但由於某種原因,我不能爲條件比較它的接收器的LED!還是會有一些噪聲導致位被Uart誤解,從而改變接收到的實際字節?
幫助!
看出來這裏EVERY ONE
東西就像PARANORMAL
最後,我已經走投無路的問題區域
我加了8個LED代表接收的字節位,這裏是我的發現:
的LED指示燈代表(1 < < 5)0b00100000爲我送
沒關係10但是
在接收0b00100000時分配給發光的其他LED(不包括8)不發光!
FTW MAN!
我該死的肯定接收到的字節是正確的..但什麼是錯用的if-else和開關的情況下比較
不應該'短字節;'是'uint8_t byte;' - 這是我能想象得最多的。除此之外,這沒有多大意義。 – 2013-01-14 13:20:04
@ H2CO3是的,我只是注意到並刪除了我的評論.. –