avr单片机USART串口通讯初始化配置及说明

发布者:sokaku最新更新时间:2016-09-14 来源: eefocus关键字:avr单片机  USART  串口通讯  初始化配置 手机看文章 扫描二维码
随时随地手机看文章
avr atmega16 单片机通用同步和异步串行接收器和转发器 (USART) 是一个高度灵活的串行通讯设备,其工作模式及其初始化,寄存器说明如下。

//*****************************USART 控制和状态寄存器A(UCSRA)********************************
/*USART 控制和状态寄存器A(UCSRA)

bit7          bit6      bit5        bit4      bit3         bit2      bit1       bit0

RXC       TXC       UDRE       FE       DOR        PE       U2X      MPCM

RXC: USART 接收结束

    接收缓冲器中有未读出的数据时RXC 置位,否则清零。接收器禁止时,接收缓冲器被刷

    新,导致RXC 清零。RXC 标志可用来产生接收结束中断

TXC: USART 发送结束

    发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时TXC 置位。执行发送

    结束中断时TXC 标志自动清零,也可以通过写0进行清除操作。TXC 标志可用来产生发

    送结束中断( 见对TXCIE 位的描述)。

UDRE: USART 数据寄存器空

     UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。UDRE为1说明缓冲器为空,已

     准备好进行数据接收。UDRE标志可用来产生数据寄存器空中断

     复位后UDRE 置位,表明发送器已经就绪。

FE: 帧错误

    如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个

    停止位为0,那么FE 置位。这一位一直有效直到接收缓冲器(UDR) 被读取。当接收到的

    停止位为1 时, FE 标志为0。对UCSRA 进行写入时,这一位要写0。

DOR: 数据溢出

    数据溢出时DOR 置位。当接收缓冲器满( 包含了两个数据),接收移位寄存器又有数据,

    若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器

    (UDR) 被读取。对UCSRA 进行写入时,这一位要写0。

PE: 奇偶校验错误

    当奇偶校验使能(UPM1 1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时

    UPE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。对UCSRA 进行写入时,这

    一位要写0。

U2X: 倍速发送

     这一位仅对异步操作有影响。使用同步操作时将此位清零。此位置1可将波特率分频因

     子从16降到8,从而有效的将异步通信模式的传输速率加倍。

MPCM: 多处理器通信模式

     设置此位将启动多处理器通信模式。MPCM置位后,USART 接收器接收到的那些不包含

     地址信息的输入帧都将被忽略。发送器不受MPCM设置的影响。

*/

 

 

//***************************USART控制和状态寄存器 B(UCSRB)*******************

/* USART控制和状态寄存器 B(UCSRB)

bit7       bit6          bit5         bit4         bit3       bit2         bit1      bit0

RXCIE     TXCIE     UDRIE      RXEN      TXEN     UCSZ2      RXB8      TXB8

RXCIE: 接收结束中断使能

       置位后使能RXC中断。当RXCIE为1,全局中断标志位SREG置位,UCSRA寄存器的RXC

       亦为1时可以产生USART接收结束中断。

TXCIE: 发送结束中断使能

       置位后使能TXC中断。当TXCIE为1,全局中断标志位SREG置位,UCSRA寄存器的TXC

       亦为1时可以产生USART发送结束中断。

UDRIE: USART 数据寄存器空中断使能

       置位后使能UDRE中断。当UDRIE 为1,全局中断标志位SREG置位,UCSRA寄存器的UDRE

       亦为1时可以产生USART数据寄存器空中断。

RXEN: 接收使能

       置位后将启动USART接收器。RxD 引脚的通用端口功能被USART功能所取代。禁止接

       收器将刷新接收缓冲器,并使 FE、DOR及PE标志无效。

TXEN: 发送使能

       置位后将启动将启动USART发送器。TxD引脚的通用端口功能被USART功能所取代。

       TXEN 清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位

       寄存器与发送缓冲寄存器中没有要传送的数据。发送器禁止后,TxD引脚恢复其通用

       I/O功能。

UCSZ2: 字符长度

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

       长度)。

RXB8: 接收数据位8

      对9位串行帧进行操作时,RXB8 是第9个数据位。读取UDR包含的低位数据之前首先

      要读取RXB8。

TXB8: 发送数据位8

       对9位串行帧进行操作时,TXB8是第9个数据位。写UDR之前首先要对它进行写操作。


*/   
//****************************状态寄存器 C(UCSRC)*****************************
/* 状态寄存器 C(UCSRC)

   bit7           bit6           bit5         bit4         bit3        bit2         bit1          bit0

URSEL     UMSEL      UPM1      UPM0      USBS     UCSZ1     UCSZ0     UCPOL

UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问。
URSEL: 寄存器选择

        通过该位选择访问UCSRC寄存器或UBRRH寄存器。 当读UCSRC时,该位为1 ;当写UCSRC

        时,URSEL为1。 URSEL 为 0 ,对UBRRH 值更新; 若 URSEL 为 1 ,对UCSRC 设置更新

UMSEL: USART 模式选择

        通过这一位来选择同步或异步工作模式。

                                   UMSEL设置

                UMSEL                                    模式

                  0                                    异步操作

                  1                                    同步操作

UPM1:0: 奇偶校验模式

        这两位设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,那么在发送数

        据,发送器都会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会

        产生一奇偶值,并与UPM0 所设置的值进行比较。如果不匹配,那么就将UCSRA 中

        的PE 置位。

                                   UPM 设置

     UPM1                       UPM0                     奇偶模式

            0                          0                        禁止

            0                          1                        保留

            1                          0                       偶校验

            1                          1                       奇校验

USBS: 停止位选择

       通过这一位可以设置停止位的位数。接收器忽略这一位的设置。

                                   USBS 设置

                 USBS                                 停止位位数

                  0                                        1

                  1                                        2

UCSZ1:0: 字符长度

        UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据位数(字

        符长度)。

                                   UCSZ 设置

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

UCPOL: 时钟极性

       这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出

       数据的改变和输入数据采样,以及同步时钟XCK 之间的关系。

                                  UCPOL 设置

UCPOL    发送数据的改变(TxD引脚的输出)                  接收数据的采样(RxD 引脚的输入)

   0              XCK上升沿XCK                             下降沿

   1              XCK 下降沿XCK                            上升沿

*///*********************************USART波特率寄存器(UBRRL和UBRRH)*************************


/* USART波特率寄存器(UBRRL和UBRRH)

bit15     bit14     bit13     bit12     bit11     bit10      bit9     bit8

URSEL       –         –         –                    UBRR[11:8]

                                  UBRR[7:0]

UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问。

URSEL: 寄存器选择

       通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UBRRH时,该位为0;当写

       UBRRH时, URSEL为0。

Bit 14:12 – 保留位

       这些位是为以后的使用而保留的。为了与以后的器件兼容,写UBRRH时将这些位清零。

UBRR11:0: USART 波特率寄存器

       这个12位的寄存器包含了USART的波特率信息。其中UBRRH包含了USART波特率高4

      位,UBRRL包含了低8位。波特率的改变将造成正在进行的数据传输受到破坏。写UBRRL

      将立即更新波特率分频器。


*/


/*
波特率定义为每秒的位传输速度 (bps) 
BAUD   波特率 ( bps) 
fOSC   系统时钟频率 
UBRR   UBRRH 与 UBRRL 的数值 (0-4095)

异步正常模式 (U2X = 0)                                                 
                     FOSC                              FOSC 
BAUD = --------------           UBRR = ------------    -1 
             16( UBRR+ 1)                      16BAUD 
异步倍速模式 (U2X = 1)                                                 
                    fOSC                               fOSC 
BAUD   = --------------         UBRR =   ------------    -1 
                  8(UBRR+ 1)                     8BAUD 
同步主机模式                      
                   fOSC                               fOSC 
BAUD   = ---------------       UBRR = ------------   -1 
                2(UBRR+ 1)                       2BAUD
*/ 
#include
#include
#pragma interrupt_handler UDR_empty:iv_USART_UDRE
#pragma interrupt_handler RXC_END:iv_USART_DRE
#pragma interrupt_handler TXC_END:iv_USART_TX

unsigned char UASART_DATA=0;
void USART_Init( unsigned int baud,unsigned char digit,unsigned char mode,unsigned char checkout)//详细初始化模式
{ SREG&=0x7F;
UCSRC&=~(1< /* 设置波特率 */ 
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* 接收器与发送器使能 */ 
UCSRB = (1< /*UDR数据寄存器为空时中断使能 */
UCSRB = (1<


switch(mode)//异同模式选择
{
case 0:UCSRB&=~(1< case 1:UCSRB|=1< default :UCSRB&=~(1< }
UCSRC|=1< /* 如果发送9位数据的数据帧(UCSZ = 7),
应先将数据的第9位写入寄存器UCSRB的TXB8,
然后再将低8位数据写入发送数据寄存器UDR, */
switch(digit)//// 设置帧格式 : digit数据位5-9,
{
case 5:UCSRB&=~(1< case 6:UCSRB&=~(1< case 7:UCSRB&=~(1< case 8:UCSRB&=~(1< case 9:UCSRB|=1< default:UCSRB&=~(1< }
switch(checkout)//checkout校验模式
{
case 0:UCSRC&=~(1< case 2:UCSRC|=1< case 3:UCSRC|=(3< default:UCSRC&=~(1< }
UCSRC|=1< //UCSRC&=~(1< UCSRC&=~(1< //***************
//UCSRA|=1< //UCSRA|=1< SREG|=0x80;//使能全局中断
}

 


/************UBRR的baud设置参数表*****************************/
//U2X=0;8mhz晶振9600:UBRR=51;误差:0.2%。4800:UBRR=103;误差:0.2%.2400:UBRR=207;误差:0.2%
//U2X=1;8mhz晶振9600:UBRR=103;误差:0.2%。4800:UBRR=207;误差:0.2%.2400:UBRR=416;误差:-0.1%
//U2X=0;11.0592mhz晶振9600:UBRR=71;误差:0.0%。4800:UBRR=143;误差:0.0%.2400:UBRR=287;误差:0.0%
//U2X=1;11.0592mhz晶振9600:UBRR=143;误差:0.0%。4800:UBRR=287;误差:0.0%.2400:UBRR=575;误差:0.0%

void USART_Init_commonage(unsigned int baud)//通用初始化

{/* 设置波特率 */

SREG&=0x7F;
UBRRH = (unsigned char)(baud>>8); 
UBRRL = (unsigned char)baud; 
/* 接收器与发送器使能 数据寄存器空使能禁止*/ 
UCSRB = (1< /* 设置帧格式 : 8个数据位 , 2个停止位 ,禁止校验,XCK上升沿发送数据下降沿接收数据,异步模式*/ 
UCSRC = (1< //UCSRA=0;单机处理模式。中断标志清零,波特率的普通模式(非加倍,倍速模式)
SREG|=0x80;//使能全局中断


}

/*
USART数据寄存器空标志UDRE及传输结束标志TXC,两个标志位都可以产生中断。
*/
void UDR_empty()
//使能要求:全局中断使能,数据寄存器空中断使能位 UDRIE置位。 UDRE 被置位(自动)。
//对寄存器 UDR 执行写操作将清零 UDRE
{unsigned char data;
UDR = data;
//add your code here
                             
}
void TXC_END()
{UDR =UASART_DATA;

//add your code here
}
void RXC_END()
{

UASART_DATA=UDR;

//add your code here
}

void USART_Transmit5_8( unsigned char data )//对 UDRE 标志采用轮询方式发送数据(发送5-8位数据)
{ /* 等待发送缓冲器为空 */ 
while ( !( UCSRA & (1< /* 将数据放入缓冲器,发送数据 */ 
UDR = data; 
}
void USART_Transmit_9( unsigned int data )//用查询法发送9位数据的数据帧
{ /* 等待发送缓冲器为空 */ 
while ( !( UCSRA & (1< /* 将第 9 位复制到 TXB8 */ 
UCSRB &= ~(1< if ( data & 0x0100 ) 
UCSRB |= (1< /* 将数据放入缓冲器,发送数据 */ 
UDR = data; 
}

unsigned char USART_Receive5_8( void )//用查询RXC接受5-8位的数据
{
/*等待接收数据*/
while ( !(UCSRA & (1< /* 从缓冲器获得数据并返回数据*/
return UDR;
}
unsigned int USART_Receive_9( void )//接受9位的数据帧
{
unsigned char status, resh, resl;
/*等待接收数据 */
while ( !(UCSRA & (1< /*从缓冲器获得状态及其第九位数据*/ 
/* from buffer */
status = UCSRA;
resh = UCSRB;
resl = UDR;
/* 如果出错返回*/
if ( status & (1< return 255;
/* 过滤第九位数据然后返回*/
resh = (resh >> 1) & 0x01;
return ((resh << 8) | resl);
}

 

/*
禁止接收器时缓冲器 FIFO 被刷新,缓冲器被清空。导致未读出的数据丢失。如果由于出错而必须在正常操作下刷新缓冲器?
则需要一直读取 UDR 直到 RXC 标志清零。
*/
void USART_Flush( void )

{
unsigned char dummy;
while ( UCSRA & (1< }

关键字:avr单片机  USART  串口通讯  初始化配置 引用地址:avr单片机USART串口通讯初始化配置及说明

上一篇:avr单片机SPI串行外设接口初始化配置及说明
下一篇:avr单片机外部中断0,1,2初始化配置及说明

推荐阅读最新更新时间:2024-03-16 15:10

基于ATmega8单片机的125 kHz简易RFID阅读器设计
0 引言 无线射频识别(Radio Frequency Identification,RFID)是利用感应、电磁场或电磁波为传输手段,完成非接触式双向通信、获取相关数据的一种自动识别技术。该技术完成识别工作时无须人工干预,易于实现自动化且不易损坏,可识别高速运动物体并可同时识别多个射频卡,操作快捷方便,已经得到了广泛的应用。 目前存在的一些读卡器,都需要读卡芯片作为基站,成本较高。本文介绍了一种采用分立元件构成的125 kHz RFID阅读器,电路结构简单,成本极低,用于读取EM4100型ID卡。 1 RFID系统的分类 RFID系统的分类方法有很多,在通常应用中都是根据频率来分,根据不同的工作频率,可将其分为以下四
[单片机]
基于ATmega8单片机的125 kHz简易RFID阅读器设计
AVR单片机读卡器程序设计
#include #include #define uchar unsigned char #define uint unsigned int //**********定义全局变量*******************// //查表0 1 2 3 4 5 6 7 8 9 E F P OFF uchar table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x79,0x71,0x73,0x00}; uchar ICcode ;//定义IC卡复位时读出的4字节代码; uchar ICcontent ;//定义IC卡有效信息; uchar Money
[单片机]
51串口通讯 中断注意
首先是自己遇到了问题,然后在同事的帮助下解决了,然后上网一查有这样的注意文章,就转过来了 一、深入了解字符串的问题 char str11 = a ; P1=strlen(str11); 上面的一个是一个测试字符个数的实例,用仿真就可以看到结果。结果是1。也就是说字符’’是不会被计入的。那么我们就可以通过此函数来分辩是否是字符和字符串。当然如果字符串是一个字符的话,那么就是我们上面的那个情况了,会直接被当做一个数看待。 注:上位机发过来的数据全部是字符串格式的。 二、串口中断问题 先看下面的程序。 void UART_SendByte(unsigned char dat) { SBUF=dat; while(!T
[单片机]
stm32的USART_IT_TXE和USART_IT_TC
一般来说,串口的发送中断传输数据,对于我目前的应用来说,应用的要求并不是很高,因此,因此就一直没有对其进行一个比较好的实验与认识。然而,在一次串口程序升级(IAP)升级实验中,发现有人使用了这个发送中断方式进行的,所以特别的进行了一个个步骤的实验来进一步知道其运行机理。 首先,串口发送数据,可以使用的方式有: 1、 发送一个数据,然后读取USART_IT_TXE或者USART_IT_TC寄存器的状态。 2、 使用串口发送中断 3、 使用dma发送完成中断 在效率上,肯定是3比较好。其次是2。 网上关于USART_IT_TXE和USART_IT_TC是怎么个用法,各家有各家的言论,在我这里只通过实验来了解
[单片机]
STM32F103--(三) USART实践
GPIO的后面很容易想到的应该就是通用同步/异步接受发送器(USART) 了。对于比较复杂点的程序而言,用led来调试显然是有点不太科学。所以,把USART口调试好后,有助于之后其它部分的调试。(把USART当成是调试输出口来用 ) 调试USART花了我一些时间,其实问题主要出现在一些很小的细节方面。比如发现发送的数据中夹杂这乱码,后来通过数据的二进制分析发现是奇偶校验位不小心打开了。如果排除这些小问题的话,整个工作应该是很容易的。 先上例程,然后标注,最后分析 USART的初始化 void UartInit(void) { USART_InitTypeDef USART_InitStructure;//声明一个USART初
[单片机]
单键开关电路在AVR单片机中的应用
 1 引 言   单键开关电路已经广泛应用于PDA、手机和电子词典等数码产品中,其实现方式多种多样。一般可采用RS触发器、计数器以及采用555集成电路等等。在单片机的一些实际应用中,以上的实现方式会增加整个电路的复杂度,不能达到简洁、实用的效果。本文将介绍一种可以在单片机应用中实现的,简易、稳定的轻触式单键开关电路。    2 电路原理   如图1所示,DC-DC为一个带有关断控制端的直流稳压电源芯片,MCU是一个单片机。当按下S1时,Q1和D1导通,稳压芯片工作,为单片机供电。单片机马上将相应的I/O引脚置为输出高,这时Q1和Q2导通,整个电路进入工作状态。而后单片机再将这个I/O引脚设置为输入,由于上拉电阻R4的存在,Q
[单片机]
单键开关电路在<font color='red'>AVR单片机</font>中的应用
通过采用AVR单片机ATXmega128A1进行便携式仪表的设计
1.引言 工业化仪表,因其集信息的获取.转换.存储.传输.分析.处理及显示于一体而成为工业控制领域的基础和核心之一.随着计算机技术.微电子技术的发展,工业化仪表已逐渐发展成为具有微处理器系统的智能化仪表.便携式智能仪表因其携带方便.操作方便.界面友好.人机接口丰富.功耗低等特性,使得其在当今生活中越来越普及. AVR XMEGA是8/16位AVR微处理器的升级版本.其采用Atmel picoPower技术,所有器件均可使用1.6V工作电压.MCU具有5霺唤醒时间和100nA的业界极低耗电量,其内部增加集成了全速USB?高速高精度模拟系统.DMA控制器和创新的事件系统,最大限度的提升了数据吞吐量和实时性能,并有效减轻了处理器负载
[单片机]
通过采用<font color='red'>AVR单片机</font>ATXmega128A1进行便携式仪表的设计
STM32f103的数电采集电路的USART的使用与蓝牙的连接的程序
STM32 的串口资源相当丰富的,功能也相当强劲。本项目所使用的 STM32F103C8T6 最多可提供 3 路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、 支持调制解调器操作、 智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA等。 串口设置的一般步骤可以总结为如下几个步骤: 1.串口时钟使能,GPIO 时钟使能 2.串口复位 3.GPIO 端口模式设置 4.串口参数初始化 5.开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤) 6.使能串口 7.编写中断处理函数 HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作模式和自动连接工作模式,在自动连
[单片机]
STM32f103的数电采集电路的<font color='red'>USART</font>的使用与蓝牙的连接的程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved