打印
[Atmel]

AVR单片机的USART总结

[复制链接]
1959|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
okyouwin|  楼主 | 2015-11-29 08:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

USART数据寄存器UDR:
当对此寄存器进行读的时候,实际就是接收数据缓冲寄存器(RXB)。
当对此寄存器进行写的时候,实际就是发送数据缓冲寄存器(TXB)。
USART控制和状态寄存器A:UCSRA(RXC,TXC,UDRE,FE,DOR,PE,U2X,MPCM)
RXC:USART接受结束。接受缓冲器中仍然有未读出的数据时,RXC置位。如果没有任何需要读的数据时,RXC清零。当接收器禁止时,接收缓冲器刷新,导致RXC清零,RXC标志也可以用来产生接收结束中断。
TXC:USART发送结束。发送移位寄存器中的数据被送出,且当发送缓冲器(UDR/TXB)为空时,TXC置位。执行发送结束中断时TXC标志自动清零。
UDRE:USART数据寄存器空。当UDRE为“1”时,说明缓冲器为空,已准备好进行数据接受。
FE:帧错误。如果接收缓冲器接收到下一个字符有帧错误,即下一个字符的第一个停止位为“0”,那么FE置位。当对USART数据寄存器UDR进行写入时,这一位必须写“0”;
DOR:数据溢出。当接收缓冲器满(包含了两个数据),接收移位寄存器又有数据时,若检测到一个新的起始位,数据溢出就产生了。DOR就置为“1”。当对USART进行写时,DOR要写为“0”。
PE:奇偶校验错误。当奇偶校验使能(UPM = 1),且接收缓冲中所接收的下一个字符有奇偶校验错误,PE置位。对USART进行写时,这一位写为“0”;
U2X:倍速发送。仅仅对异步操作有影响。使用同步操作时把这一位写“0”;
MPCM:设置此位将启动多处理器通信模式。即,USART不再接收那些不包含地址信息的输入帧,发送时USART不受MPCM的影响。
USART控制和状态寄存器B:
UCSRB(RXCIE,TXCIE,UDRIE,RXEN,TXEN,UCSZ2,RXB8,TXB8)
RXCIE:接收结束中断使能。TXCIE:发送结束中断使能;
UDRIE:USART数据寄存器空中断使能;
RXEN:接收使能。置位后将启动USART接收器RxD引脚的通用端口功能被USART功能所取代。
TXEN:发送使能。置位后将启动USART发送器TxD引脚的通用端口功能被USART功能所取代。当该位清零后,并所有数据发送完成后,发送器才能真正禁止。I/O恢复通用功能。



相关下载

相关帖子

沙发
okyouwin|  楼主 | 2015-11-29 08:33 | 只看该作者
UCSZ2:与UCSZ1, UCSZ0,结合在一起确定字符长度。
UCSZ2
UCSZ1
UCSZ0
字符长度
0
0
0
5位
0
0
1
6位
0
1
0
7位
0
1
1
8位
1
0
0
保留
1
0
1
保留
1
1
0
保留
1
1
1
9位
RXB8:对9位串行帧进行操作时,RXB8就是第9个数据位。读取UDR包含的低位数据之前首先要读取RXB8。如果小于9位,则忽略RXB8
TXB8:对9位串行帧进行操作时,TXB8就是第9个数据位。写UDR包含的低位数据之前首先要写TXB8。如果小于9位,则忽略TXB8
USART控制和状态寄存器C:
UCSRC(URSEL,UMSEL,UPM1,UPM0,USBS,UCSZ1,UCSZ0,UCPOL)
URSEL:寄存器选择。通过该位选择访问UCSRC或者UBRRH,当读写UCSRC时,置位。当读写UBRRH时,弄为“0”
UMSEL:USART模式选择,通过这一位来选择同步或者异步工作模式,异步模式时为“0”,同步模式时为“1”。
UPM1:0 奇偶校验模式。如果校验的结果不匹配(有错误)那么就将UCSRA中PE置位。
UPM1
UPM0
奇偶模式
0
0
禁止
0
1
保留
1
0
偶校验
1
1
奇校验
USBS:停止位选择。当为“0”时,一位停止位,当为“1”时,两位停止位。通过这一位可以设置停止位的位数,接收器忽略此位设置。
UCSZ1:0   字符长度。
UCPOL:时钟极性这一位仅仅用于同步工作模式,异步工作模式时清零。
UCPOL
TxD引脚的输出
RxD引脚的输入
0
XCK上升沿
XCK下降沿
1
XCK下降沿
XCK上升沿
USART波特率寄存器
UBRRH(URSEL,-,-,-,UBRR[11:8])和UBRRL(UBRR[7:0])
URSEL:寄存器选择,
UBRRH包含了USART波特率高4位,UBRRL包含了低8位。

传输线路RxD或TxD没有数据传输,线路空闲时必须保持高电平。

时钟工作模式
波特率计算公式
寄存器UBRR值计算公式
普通异步模式
UBRR=
UBRR=
倍速异步模式
BAUD=
UBRR=
主机同步模式
BAUD=
UBRR=



使用特权

评论回复
板凳
okyouwin|  楼主 | 2015-11-29 08:35 | 只看该作者
  • #include<iom128.h>
  • //函数声明
  • void delay(unsigned int time);
  • void USART_Init();
  • void USART_Transmit(unsigned char data);
  • //主函数
  • void main()
  • {
  •   unsigned char i=0;
  •   unsigned char j =0;
  •   //初始化E端口
  •   PORTE = 0x03;
  •   DDRE = 0x02;
  •   //初始化C端口
  •   DDRC = 0xff;      //全为输出方式
  •   PORTC = 0x0f;      //灯全亮
  •   USART_Init();
  •   while(1)
  •   {
  •     USART_Transmit(48+i);
  •     j++;
  •     PORTC = PORTC << 1;
  •     if(j>=4){j = 0;PORTC = 0x0f;}
  •     delay(10000);
  •     if(++i>=10){i=0;}
  •   }
  • }
  • //延时函数
  • void delay(unsigned int time)
  • {
  •   unsigned int j;
  •   for(;time>0;time--)
  •   {
  •     for(j=100;j>0;j--);
  •   }
  • }
  • //初始化串口
  • void USART_Init()
  • {
  •   //波特率设置
  •   UBRR1H = 0x00;
  •   UBRR1L = 0x2f;
  •   UCSR1A = UCSR0A & 0x02;
  •   //UCSR0B = (1<<RXEN0)|(1<<TXEN0);
  •   //UCSR0C = (3<<UCSZ02);
  •   //数据发送设置
  •   UCSR1B = 0x18;
  •   UCSR1C = 0x06;
  • }
  • //数据传输
  • void USART_Transmit(unsigned char data)
  • {
  • // while(!(UCSR0A & (1<<UDRE0)));
  •   while(!(UCSR1A)&0x20);
  •   UDR1 = data;
  • }

使用特权

评论回复
地板
丶tiantian| | 2015-11-29 08:39 | 只看该作者
赞一下。AVR的USART知识。

使用特权

评论回复
5
ddllxxrr| | 2015-11-30 13:10 | 只看该作者
那叫一个顶

使用特权

评论回复
6
IC201505| | 2015-11-30 16:36 | 只看该作者
学习一下

使用特权

评论回复
7
yicole| | 2015-11-30 21:32 | 只看该作者
学习了!

使用特权

评论回复
8
avrmac| | 2016-6-14 16:00 | 只看该作者
不知道楼主还在不在,有个问题,我用串口通讯,异步模式。T0作为计数器,计数外部脉冲。当无脉冲计数时,通讯正常,有脉冲计数以后,通讯中断,上位机(触摸屏)提示接收不到数据(Modbus 485),我调试发现,触摸屏发送数据不对,什么原因?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:把每天当做世界末日、。、

56

主题

765

帖子

3

粉丝