亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我覺得這個<<不代表移位操作,是什么意思還不懂。誰能給說明白點?

我覺得這個<<不代表移位操作,是什么意思還不懂。誰能給說明白點?

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

3 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

ADCH應該是個宏,最終對應一個整數,
8<<ADCH可理解為把8乘了ADCH次2,再加到value里。
用移位來做乘2或者除以2操作比直接乘除快很多。

哦,這么回事呀。那么我猜是這樣:
UCSR0A中的第UDRE0位表示發送緩沖器UDR0是否就緒。
因為函數名叫putc(我理解是向UDR0對應的設備輸出一個字符)
while(!UCSR0A&(1<<UDRE0)持續的檢查UDR0是否已經就緒了。
若就緒,就把字符c傳入UDR0中(就是寫入設備)

查看完整回答
反對 回復 2022-10-06
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

你給了這么多代碼,不知道給你解釋哪個
就按照你最初的問題解釋吧
我沒有做過AVR單片機,只是按照代碼給你解釋
(1)當UDRE0為0時 UCSR0A與上0x01
當UDRE0為1時 UCSR0A與上0x02,

(2)value=value+(0x08左移ADCH位的值)
比如ADCH為0時 (0x08左移ADCH位的值)是0x08
比如ADCH為1時 (0x08左移ADCH位的值)是0x10
比如ADCH為2時 (0x08左移ADCH位的值)是0x20


查看完整回答
反對 回復 2022-10-06
?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

UCSR0A&(1<<UDRE0)
這一句的意思是如果UCSR0A的第UDRE0位為1的話,整句的結果就為UDRE0

查看完整回答
反對 回復 2022-10-06
  • 3 回答
  • 0 關注
  • 131 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號