文档章节

AVR -usart

shanezhou
 shanezhou
发布于 2015/04/02 23:04
字数 1753
阅读 208
收藏 0

USART发送数据缓冲寄存器和 USART接收数据缓冲寄存器共享相同的I/O地址,称为USART数据寄存器 UDR。将数据写入 UDR时,实际操作的是发送数据缓冲器存器(TXB),读 UDR时实际返回的是接收数据缓冲寄存器(RXB)的内容。

USART控制与状态寄存器A(UCSRA)定义如下:

image

(1)Bit7———RXC:USART接收结束。接收缓冲器中有未读出的数据时RXC置位,否则清零。接收器禁止时,接收缓冲器被刷新,导致RXC清零。RXC标志可用来产生接收结束中断。

(2)Bit6———TXC:USART发送结束。发送移位缓冲器中的数据被送出,且当发送缓冲器(UDR)为空时TXC置位。执行发送结束中断时TXC标志自动清零,也可以通过写1进行清除操作。TXC标志可用来产生发送结束中断。

(3)Bit5———UDRE:USART数据寄存器空。UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。UDRE为1说明缓冲器为空,已准备好进行数据接收。UDRE标志可用来产生数据寄存器空中断。复位后UDRE置位,表明发送器已经就绪。

(4)Bit4———FE:帧错误。如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个停止位为0,那么FE置位。这一位一直有效直到接收缓冲器(UDR)被读取。当接收到的停止位为1时,FE标志为0。对 UCSRA进行写入时,这一位要写0。

(5)Bit3———DOR:数据溢出。数据溢出时DOR置位。当接收缓冲器满(包含了两个数据),接收移位寄存器又有数据,若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器(UDR)被读取。对UCSRA进行写入时,这一位要写0。

(6)Bit2———PE:奇偶校验错误。当奇偶校验使能(UPM1=1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时UPE置位。这一位一直有效直到接收缓冲器(UDR)被读取。对UCSRA进行写入时,这一位要写0。

(7)Bit1———U2X:倍速发送。这一位仅对异步操作有影响。使用同步操作时将此位清零。此位置1可将波特率分频因子从16降到8,从而有效地将异步通信模式的传输速率加倍。

USART控制与状态寄存器B(UCSRB)定义如下:

image

(1)Bit7———RXCIE:接收结束中断使能。置位后使能RXC中断。当RXCIE为1,全局中断标志位SREG置位,UCSRA寄存器的RXC亦为1时可以产生USART接收结束中断。

(2)Bit6———TXCIE:发送结束中断使能。置位后使能TXC中断。当TXCIE为1,全局中断标志位SREG置位,UCSRA寄存器的TXC亦为1时可以产生USART发送结束中断。

(3)Bit5———UDRIE:USART数据寄存器空中断使能。置位后使能 UDRE中断。当UDRIE为1,全局中断标志位SREG置位,UCSRA寄存器的 UDRE也为1时可以产生 US-ART数据寄存器空中断。

(4)Bit4———RXEN:接收使能。置位后将启动 USART接收器。RXD引脚的通用端口功能被 USART功能所取代。禁止接收器将刷新接收缓冲器,并使 FE、DOR及PE标志无效。

(5)Bit3———TXEN:发送使能。置位后将启动将启动 USART发送器。TXD引脚的通用端口功能被USART功能所取代。TXEN清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存器与发送缓冲寄存器中没有要传送的数据。发送器禁止后,TXD引脚恢复其通用I/O功能。

(6)Bit2———UCSZ2:字符长度。UCSZ2与 UCSRC寄存器的 UCSZ1:0结合在一起可以设置数据帧所包含的数据位数(字符长度)。

(7)Bit1———RXB8:接收数据位8。对9位串行帧进行操作时,RXB8是第9个数据位。读取UDR包含的低位数据之前首先要读取RXB8。

(8)Bit0———TXB8:发送数据位8。对9位串行帧进行操作时,TXB8是第9个数据位。写UDR之前首先要对它进行写操作。

.USART控制与状态寄存器C

USART控制与状态寄存器C(UCSRC)定义如下:

image

(1)Bit7———URSEL:寄存器选择。通过该位选择访问 UCSRC寄存器或 UBRRH寄存器(UCSRC与UBRRH共用相同的I/O地址)。当读UCSRC时,该位为1;当写 UCSRC时,该位为1。

(2)Bit6———UMSEL:USART模式选择。通过这一位来选择同步或异步工作模式。UMSEL为0时选择异步模式,UMSEL为1时选择同步操作。

(3)Bit5:4———UPM1:0:奇偶校验模式。这两位设置奇偶校验的模式并使能奇偶校验,具体设置情况如表9 1所列。如果使能了奇偶校验,那么在发送数据  
时,发送器会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶值,并与 UPM0所设置的值进行比较。如果不匹配,那么就将 UCSRA中的PE置位。

(4)Bit3———USBS:停止位选择。通过这一位可以设置停止位的位数,USBS为0时,选择1位停止位,USBS为1时,选择2位停止位。接收器  
忽略这一位的设置。

(5)Bit2:1———UCSZ1:0:字符长度。

(6)Bit0———UCPOL:时钟极性

#include<iom16v.h>#include<macros.h>#definefosc    12000000 //晶振12MHz#definebaud    9600 //波特率定义/********端口初始化函数********/voidport_init(void)
{
    PORTA=0xFF; //PA口输出高电平DDRA=0xFF; //PA口设置为输出PORTD=0X00; //USART的发送接收端口分别为PD0和PD1DDRD|=(1﹤﹤PD1); //PD0为接收端口置为输入;PD1为发送端口置为输出}/********串口初始化函数********/voiduart0_init(void)
{
    UCSRB=0x00;
    UCSRA=0x00;
    UCSRC|= (1﹤﹤URSEL)|(1﹤﹤UCSZ1)|(1﹤﹤UCSZ0); //异步,数据格式8,N,1//UCSRC寄存器与UBRRH寄存器共用相同的I/O地址,写UCSRC时,URSEL应设置为1UBRRL=(fosc/16/(baud+1))%256; //设置波特率寄存器UBRRH=(fosc/16/(baud+1))/256;
    UCSRB|= (1﹤﹤RXCIE)|(1﹤﹤TXEN)|(1﹤﹤RXEN);//接收中断使能,发送接收使能}/*********发送数据函数********/voiduart0_send(unsignedchari)
{while(!(UCSRA&(1﹤﹤UDRE))); //只有数据寄存器为空时才能发送数据UDR=i;
}/********主函数********/voidmain(void)
{
    port_init();
    uart0_init();
    SREG=0x80; //使能全局中断//Usart_PutString("顶顶电子");//Usart_PutString("welcometoyou!");while(1);
}/*******接收中断函数********/#pragmainterrupt_handlerUSART_RXC_vect:12voidUSART_RXC_vect(void)
{
    unsignedcharRev;
    Rev=UDR; //从USARTI/O数据寄存器-UDR中读出数据uart0_send(Rev); //将接收到的数据发送}/*********发送字符串函数*********/voidUsart_PutString(unsignedchar*s)
{while(*s)
    {
        uart0_send(*s++);
    }
    uart0_send(0x0D);
    uart0_send(0x0A); //结尾发送回车换行}

 

© 著作权归作者所有

shanezhou
粉丝 3
博文 16
码字总数 8933
作品 0
深圳
后端工程师
私信 提问
【uip移植】在AVR单片机ATMega16A上运行uip协议栈,网卡使用ENC28J60

开发环境:Atmel Studio 7.0 使用的开发板:锐志51单片机开发板+AVR转接座 单片机:40脚直插的ATMega16A Flash容量:16KB SRAM容量:1KB(这个是最紧缺的资源) 晶振:11.0592MHz,熔丝位配置...

zlk1214
2017/04/26
0
0
STM32F1的5个串口使用方法

串口是我们常用的一个数据传输接口,STM32F103系列单片机共有5个串口,其中1-3是通用同步/异步串行接口USART(Universal Synchronous/Asynchronous Receiver/Transmitter),4,、5是通用异步串...

terminaterfxy
2018/03/08
0
0
STM32串口通信程序设计要点

设计要点: 1、要是能串口时钟同时要是能复用总线时钟和对应的IO时钟,如: //使能串口1,PA,AFIO总线 RCCAPB2PeriphClockCmd(RCCAPB2Periph_GPIOA | RCCAPB2PeriphAFIO | RCCAPB2PeriphUSA...

文艺小青年
2017/06/01
0
0
stm32 DMX512核心代码

while (1) { USARTCmd(USART2, DISABLE); GPIOTxNormalConfig(); GPIOResetBits(GPIOD,GPIOPin_5);//低 Delay(100us); //延时至少88us GPIOSetBits(GPIOD,GPIOPin_5); //拉高 USARTinitial()......

cicue
2013/09/05
1K
0
STM32F429 discovery 解决串口打印问题

择CH340G 芯片来实现这个功能,CH340G 是一个USB 总线的转接芯片,实现USB 转 USART、USB 转IrDA 红外或者USB 转打印机接口,我们使用其USB 转USART 功能。具 体电路设计见图 20-11。 我们将...

weixin_40097459
2018/05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部