作者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/cn.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