Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2294069
  • 博文数量: 187
  • 博客积分: 1457
  • 博客等级: 上尉
  • 技术积分: 2423
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-13 09:41
个人简介

如需要绘制PCB,设计电路可以和我联系。sunhenu@163.com.

文章分类

全部博文(187)

文章存档

2017年(2)

2016年(2)

2015年(7)

2014年(13)

2013年(80)

2012年(83)

分类: LINUX

2012-12-21 10:07:09

关于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手册上面查到。

阅读(5047) | 评论(0) | 转发(0) |
0

上一篇:TL1838红外接收应用

下一篇:AVR timer1PWM设置

给主人留下些什么吧!~~