AVR -usart

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); //结尾发送回车换行}

 

转载于:https://my.oschina.net/shanezhou/blog/395433

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值