作者maxpower (先)
看板ASM
標題Re: [問題] 基本語法問題
時間Tue Dec 30 00:36:44 2014
剛才舉的例子
while ( !( UCSR0A & (1<<UDRE0)) );
目的只是檢查UCSR0A 第n個Bit是否等於1
假設UDRE0 = 5
1<<UDRE0的意思就是0x01左移5次(0b00100000)
寫成下面這樣也是可以的
while ( !( UCSR0A & 0x20) );
只是習慣罷了
----------------------------------------------
EX:
#define Flag0 0x01<<0 //0b00000001
#define Flag1 0x01<<1 //0b00000010
#define Flag2 0x01<<2 //0b00000100
#define Flag3 0x01<<3 //0b00001000
#define Flag4 0x01<<4 //0b00010000
#define Flag0 0x01
#define Flag1 0x02
#define Flag2 0x04
#define Flag3 0x08
#define Flag4 0x10
----------------------------------------------
※ 引述《papaya125 (都你說就好了)》之銘言:
: 各位好
: 請教一下
: 目前學習AVR中,經常看到 1<<A 這樣的語句
: EX:
: while ( !( UCSR0A & (1<<UDRE0)) );
: 翻書跟GOOGLE都查詢過了....不知是不是太基本都沒有說明
: 如果是A>>1 , 那就是右移1格
: 但是反過來呢?? 是指 UDRE0至位1嗎??
: 懇請幫忙解惑~~~
--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.7.173
※ 文章網址: http://webptt.com/m.aspx?n=bbs/ASM/M.1419871007.A.CE2.html
1F:推 papaya125: 很感謝您的解答!!!!! 12/30 08:12
2F:→ papaya125: 再請教一下,若改成 2<<UDRE0 12/30 08:13
3F:→ papaya125: 是否就是 0x02開始左移呢?? 12/30 08:14
4F:→ maxpower: 是阿,我自己對這種寫法有點反感,但人家都建好了,那就拿 12/30 13:06
5F:→ maxpower: 來用吧,不用太糾結 12/30 13:07
6F:→ maxpower: 知道他在寫什麼就好 12/30 13:08
7F:推 papaya125: 非常感謝 12/30 13:49
8F:推 papaya125: 再請教一個問題 當我知道 UCSR0A & (1<<UDRE0) 12/30 16:33
9F:→ papaya125: 就是指 UCSR0A的某位元 那While(!(UCSR0A某bit)) 12/30 16:35
10F:→ papaya125: !要如何判斷 原先是1或是0呢?? 不好意思 初學者Q__Q 12/30 16:36
11F:→ papaya125: UDRE0 初值為1 12/30 16:38
12F:→ papaya125: 所以 他是直接判斷該位初始值,然後若初始值變動 就執行 12/30 16:40
13F:→ papaya125: 請問這樣說法對嗎? 12/30 16:40
14F:→ maxpower: 要如何判斷1或0,請先去查一下AND的真值表 12/30 20:34
15F:→ maxpower: 和0做AND運算,出來的結果一定等於0 12/30 20:35
16F:→ maxpower: 只有1 AND 1 結果才會等於1 12/30 20:35
17F:→ maxpower: 假如UCSR0A = 0xAA ( 0b10101010 ) 12/30 20:35
18F:→ maxpower: UCSR0A & 0x20 = 0x20 ( 0b00100000 ) 12/30 20:36
19F:→ maxpower: 假如UCSR0A = 0x55 ( 0b01010101 ) 12/30 20:36
20F:→ maxpower: UCSR0A & 0x20 = 0 ( 0b00000000 ) 12/30 20:36
21F:推 papaya125: m大我還是不太懂耶!!! 12/31 13:53
22F:推 papaya125: 意思就是主要是看datasheet然後找UCSR0A的初值來看嗎? 12/31 14:03
23F:→ papaya125: UCSR0A的初值是 0b00100000 12/31 14:04
24F:→ papaya125: 又 UDRE0是 bit5 所以他就會知道 UCSR0A&(1<<UDRE0)為1 12/31 14:07
25F:→ papaya125: 應該是這樣哦!!!感謝m大讓我撥雲見日阿!!! 12/31 14:09