Re: [問題] 基本語法問題

作者: maxpower (先)   2014-12-30 00:36:44
剛才舉的例子
while ( !( UCSR0A & (1<<UDRE0)) );
目的只是檢查UCSR0A 第n個Bit是否等於1
假設UDRE0 = 5
1<<UDRE0的意思就是0x01左移5次(0b00100000)
寫成下面這樣也是可以的
while ( !( UCSR0A & 0x20) );
只是習慣罷了
作者: papaya125 (都你說就好了)   2014-12-30 08:12:00
很感謝您的解答!!!!!再請教一下,若改成 2<<UDRE0是否就是 0x02開始左移呢??
作者: maxpower (先)   2014-12-30 13:06:00
是阿,我自己對這種寫法有點反感,但人家都建好了,那就拿來用吧,不用太糾結知道他在寫什麼就好
作者: papaya125 (都你說就好了)   2014-12-30 13:49:00
非常感謝再請教一個問題 當我知道 UCSR0A & (1<<UDRE0)就是指 UCSR0A的某位元 那While(!(UCSR0A某bit))!要如何判斷 原先是1或是0呢?? 不好意思 初學者Q__QUDRE0 初值為1所以 他是直接判斷該位初始值,然後若初始值變動 就執行請問這樣說法對嗎?
作者: maxpower (先)   2014-12-30 20:34:00
要如何判斷1或0,請先去查一下AND的真值表和0做AND運算,出來的結果一定等於0只有1 AND 1 結果才會等於1假如UCSR0A = 0xAA ( 0b10101010 )UCSR0A & 0x20 = 0x20 ( 0b00100000 )假如UCSR0A = 0x55 ( 0b01010101 )UCSR0A & 0x20 = 0 ( 0b00000000 )
作者: papaya125 (都你說就好了)   2014-12-31 13:53:00
m大我還是不太懂耶!!!意思就是主要是看datasheet然後找UCSR0A的初值來看嗎?UCSR0A的初值是 0b00100000又 UDRE0是 bit5 所以他就會知道 UCSR0A&(1<<UDRE0)為1應該是這樣哦!!!感謝m大讓我撥雲見日阿!!!

Links booklink

Contact Us: admin [ a t ] ucptt.com