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