AVR單片機UCSRC 和UBRRH 共用地址的問題

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的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章