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