AVR單片機(jī)UCSRC 和UBRRH 共用地址的問題
UCSRC寄存器結(jié)構(gòu):
UBRRH寄存器結(jié)構(gòu):
AVR單片機(jī)UART的UCSRC和UBRRH兩個(gè)寄存器是共用地址的,通過最高位的URSEL來選擇更新哪個(gè)數(shù)據(jù)。
比如寫UCSRC=0x86,那么0x86的最高位Bit7=1,所以這組數(shù)據(jù)會(huì)更新UCSRC的值
寫UBRRH=0x01,那么0x01的最高位Bit7=0,所以這組數(shù)據(jù)會(huì)更新UBRRH的值
無需專門更新URSEL的值。
如果寫成了UBRRH=0x81,那么就會(huì)去更新UCSRC的值,是自動(dòng)識(shí)別的。
在網(wǎng)上看到有朋友問:為什么在程序中寫UBRRH的時(shí)候沒有先將URSEL置0?
而是直接設(shè)置
UBRRH=BAUD_H;
UBRRL=BAUD_L;
現(xiàn)在大家應(yīng)該明白了吧,只要寫入的BUAD_H的最高位為0,即BAUD_H&0x80==0,就會(huì)自動(dòng)更新UBRRH的值,無需專門設(shè)置URSEL的值。
編輯:admin 最后修改時(shí)間:2018-05-18