原创 ATMEGA16A单片机UBRRH和UCSRC说明

2013-1-21 10:55 2573 9 9 分类: MCU/ 嵌入式 文集: MCU

关于ATMEGA16串口,有点要注意,UBRRH和UCSRC这个寄存器使用同一个IO地址,

所以在设置和读取方面要注意,下面给个网友链接,说的很明白了,http://blog.csdn.net/yanpingsz/article/details/5518651,
可以去看看,下面是复制的内容。
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,即AUD_H&0x80==0,就会自动更新UBRRH的值,无需专门设置URSEL的值。

 

下面我给出,我使用的串口初始化代码,很好理解的,结合上面的文字,初始代码设置波特率为115200,我单片机晶振是16MHZ的,UBRR的值,可以在AVR手册上面查到。
24343357_135605623950Pv.jpg

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /3 下一条