UCSRC寄存器結構:
Bit 7 6 5 4 3 2 1 0
URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL
UBRRH寄存器結構:
Bit 7 6 5 4 3 2 1 0
URSEL – – – UBRR[11:8]
AVR單片機UART的UCSRC和UBRRH兩個寄存器是共用地址的,通過最高位的URSEL來選擇更新哪個數據。
比如寫UCSRC=0x86,那麼0x86的最高位Bit7=1,所以這組數據會更新UCSRC的值
寫UBRRH=0x01,那麼0x01的最高位Bit7=0,所以這組數據會更新UBRRH的值
無需專門更新URSEL的值。
如果寫成了UBRRH=0x81,那麼就會去更新UCSRC的值,是自動識別的。
在網上看到有朋友問:爲什麼在程序中寫UBRRH的時候沒有先將URSEL置0?
而是直接設置
UBRRH=BAUD_H;
UBRRL=BAUD_L;
現在大家應該明白了吧,只要寫入的BUAD_H的最高位爲0,即BAUD_H&0x80==0,就會自動更新UBRRH的值,無需專門設置URSEL的值。