解釋一下這兩句:1) UCSR0A&(1<<UDRE0)2)value+=(8<<ADCH)說明:這個事avr單片機里的程序,<<不是移位運算么?但是上面兩句看不大懂現(xiàn)在不管原始問題的第二問,只看第一個問題,第一個問題的全部代碼是:1)void putc(char c){while(!UCSR0A&(1<<UDRE0))UDR0=c;}說明:UCSR0A是一個寄存器(8位,編號0-7),UDRE0是其中的第5位(bit5),我感覺的意思就是如果UDRE0是1的話,UDR0=c,但是上面那種表示搞不明白為什么?!冒?,在說的詳細點,1)代碼就是一個簡單的函數(shù),UDR0是USART(也就是串口)數(shù)據(jù)寄存器,UCSR0A是USART的控制和狀態(tài)寄存器,其中,bit-5是UDRE0,UDRE0的作用是標志發(fā)送緩沖器UDR0是否準備好接受。----------------------------------------------------------------我知道<<是移位操作,但是有一點不懂的是UDRE0是一位啊,也就是說要么是0要么是1那UCSR0A要么與0x1,要么與0x2,但是UCSR0A的最后兩位并不是與此函數(shù)功能相關(guān)的位
3 回答

鴻蒙傳說
TA貢獻1865條經(jīng)驗 獲得超7個贊
ADCH應(yīng)該是個宏,最終對應(yīng)一個整數(shù),
8<<ADCH可理解為把8乘了ADCH次2,再加到value里。
用移位來做乘2或者除以2操作比直接乘除快很多。
哦,這么回事呀。那么我猜是這樣:
UCSR0A中的第UDRE0位表示發(fā)送緩沖器UDR0是否就緒。
因為函數(shù)名叫putc(我理解是向UDR0對應(yīng)的設(shè)備輸出一個字符)
while(!UCSR0A&(1<<UDRE0)持續(xù)的檢查UDR0是否已經(jīng)就緒了。
若就緒,就把字符c傳入UDR0中(就是寫入設(shè)備)

炎炎設(shè)計
TA貢獻1808條經(jīng)驗 獲得超4個贊
你給了這么多代碼,不知道給你解釋哪個
就按照你最初的問題解釋吧
我沒有做過AVR單片機,只是按照代碼給你解釋
(1)當(dāng)UDRE0為0時 UCSR0A與上0x01
當(dāng)UDRE0為1時 UCSR0A與上0x02,
(2)value=value+(0x08左移ADCH位的值)
比如ADCH為0時 (0x08左移ADCH位的值)是0x08
比如ADCH為1時 (0x08左移ADCH位的值)是0x10
比如ADCH為2時 (0x08左移ADCH位的值)是0x20
- 3 回答
- 0 關(guān)注
- 126 瀏覽
添加回答
舉報
0/150
提交
取消