AVR单片机 usart串口使用范例

发布者:快乐的舞蹈最新更新时间:2016-10-24 来源: eefocus关键字:AVR单片机  usart串口 手机看文章 扫描二维码
随时随地手机看文章
usart简介:
通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特点为:
全双工操作( 独立的串行接收和发送寄存器)
异步或同步操作
主机或从机提供时钟的同步操作
高精度的波特率发生器
支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位
硬件支持的奇偶校验操作
数据过速检测
帧错误检测
噪声滤波,包括错误的起始位检测,以及数字低通滤波器
三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断
多处理器通讯模式
倍速异步通讯模式

调试结果与实物图

AVR单片机 usart串口使用范例 - lgang315 - lgang315 的博客

串口硬件电路采用的是MAX232cse,硬件连接电路图,详见开发板电路的详细介绍。

AVR单片机 usart串口使用范例 - lgang315 - lgang315 的博客

在labview中用程序调试串口的结果,labview串口使用范例见:http://bbs.avrvi.com/read.php?fid=8&tid=497&toread=1

AVR单片机 usart串口使用范例 - lgang315 - lgang315 的博客

电路图:

AVR单片机 usart串口使用范例 - lgang315 - lgang315 的博客

串口使用一个max232芯片。

数据读写 官方解释

USART的初始化
void USART_Init( unsigned int baud )
{
/* 设置波特率*/
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* 接收器与发送器使能*/
UCSRB = (1< /* 设置帧格式: 8 个数据位, 2 个停止位*/
UCSRC = (1< } 数据发送【发送5 到8 位数据位的帧】
void USART_Transmit( unsigned char data )
{
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1< ;
/* 将数据放入缓冲器,发送数据 */
UDR = data;
} 数据发送【发送9 位数据位的帧】
void USART_Transmit( unsigned int data )
{
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1< ;
/* 将第9 位复制到TXB8 */
UCSRB &= ~(1< if ( data & 0x0100 )
UCSRB |= (1< /* 将数据放入缓冲器,发送数据 */
UDR = data;
} 数据接收【以5 到8 个数据位的方式接收数 据帧】
unsigned char USART_Receive( void )
{
/* 等待接收数据*/
while ( !(UCSRA & (1< ;
/* 从缓冲器中获取并返回数据*/
return UDR;
} 数据接收【以9 个数据位的方式接收帧】
unsigned int USART_Receive( void )
{
unsigned char status, resh, resl;
/* 等待接收数据*/
while ( !(UCSRA & (1< ;
/* 从缓冲器中获得状态、第9 位及数据*/
/* from buffer */
status = UCSRA;
resh = UCSRB;
resl = UDR;
/* 如果出错,返回-1 */
if ( status & (1< return -1;
/* 过滤第9 位数据,然后返回*/
resh = (resh >> 1) & 0x01;
return ((resh << 8) | resl);
}

结构化的驱动程序与范例 下载所有相关文件

首先包含sio.h和相关头文件。 主程序
void main(void)
{
uint8 SIO_buff[4]; //定义串口数据缓冲区
init_devices();
//指示单片机正常开始工作,一亮,二亮,都亮,都灭
PORTA = 0x02; //1脚为高,0脚为低,0脚灯亮
Delay(); //延时
PORTA = 0x01; //0脚为高,1脚为低,1脚灯亮
Delay(); //延时
PORTA = 0x00; //同时亮
Delay(); //延时
PORTA = 0x03; //同时灭

Com_putstring ("ww",2,&RTbuf_UART0); //输出一个字符串到串行口
while(1)
{
if(Com_R_count(&RTbuf_UART0)!=0)
{
Com_getstring (SIO_buff,1,&RTbuf_UART0);
Com_Rbuf_Clear(&RTbuf_UART0); //清空buffer
if(SIO_buff[0]==1) //接收到一个一
{
Com_putstring ("ok!!",4,&RTbuf_UART0); //输出一个字符串到串行口
PORTA = 0x00; //同时亮
Delay(); //延时
PORTA = 0x03; //同时灭
}
} //end of if(Com_R_count(&RTbuf_UART0)!=0)
Delay();//延时
Com_putstring ("ww00",4,&RTbuf_UART0); //输出一个字符串到串行口
}
}

串口调试经验谈:

1、确保你的串口连线正常,有的串口的接法,9针串口线的7针和第八针要交叉,本站最小系统板的V2.3需要交叉,V2.5不需要交叉。

2、确保你的MAX232工作正常,方法:在本开发小板上把跳线JP2的1和3短接,2和4不接,通过串口调试助手发什么数据就可以收到什么数据。

3、最容易出现的一个问题是,晶振的选择,本程序要求晶振是7.3728M外部晶振,为什么使用7.3728的特殊晶振,因为它可以产生标准的波特率,如果你收到的是乱码或者根本无法收到,请检查你的晶振的相关熔丝位设置是否正确,这里看看熔丝位快速入门。

关键字:AVR单片机  usart串口 引用地址:AVR单片机 usart串口使用范例

上一篇:AVR IAR EEPROM 读写
下一篇:发几个关于USART串口通讯的程序

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

AVR单片机之Bootloader技术详解
ATmega128具备引导加载支持的用户程序自编程功能(In-System Programming by On-chipBoot Program),它提供了一个真正的由MCU本身自动下载和更新(采用读/写同时 Read-While-Write 进行的方式)程序代码的系统程序 自编程更新的机制。利用AVR的这个功能,可以实现在应用编程(IAP)以及实现系统程序的远程自动更新的应用。 IAP的本质就是,MCU可以灵活地运行一个常驻Flash的引导加载程序(Boot Loader Program),实现对用户应用程序的在线自编程更新。引导加载程序的设计可以使用任何的可用的数据接口和相关的协议读取代码,或者从程序存储器中读取 代码,然后将
[单片机]
采用AVR单片机控制实现太阳能光伏直流控制器设计
当今世界能源短缺以及环境污染问题日益严重,这些问题迫使人们寻找和使用新的代替能源。随着电子技术、太阳能电池板生产技术的提高,使得太阳能的利用越来越普遍。太阳能具有无地域限制的特点,而我国很多地方仍然处于缺电状态,特别是一些边远地区、旅游景区,由于非常分散,依靠电网供电难度大、成本高,因而选择太阳能供电十分必要,而在太阳能发电系统中,控制器是十分关键的部件之一。 目前市面上一些太阳能控制器提高效率的手段仅仅局限在单一物理量算法研究(比如只对电压、电流的跟踪),效率的提高是很有限的。我们经过多次实际考察与测量,发现发电效率较高的产品往往价格昂贵,且适应性差,一般都用于固定场合,如大型太阳能发电站等;一些低价的控制器为了降低成本,内
[单片机]
采用<font color='red'>AVR单片机</font>控制实现太阳能光伏直流控制器设计
AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—01
四、ATMEGA16的定时/计数器 四—(01)、四位显示秒表试验 首先怀念一下咱们的体育课,再体育课或者田径比赛的时候,老师会经常使用秒表来记录同学们的成绩。在此,来进行一个秒表的设计。( 说实话,这个秒表真的太贵了,不过只是实验,纯属娱乐) 使用INT0键进行计时的开始/停止,使用S1键作为计时值得清楚,并且采用6位数码管的右四位进行显示。 定时器T0被用作扫描4位数码管(采用溢出中断,每1ms中断一次),而定时器T1则用来计时(咱们用的秒表用来显示四位,两位小数,也就是每计时10ms中断溢出一次)。 1、预分频器和多路选择器 ATMEGA16有两个8位定时/计数器(T/C0、T/C2)和一个16位定时/计数器(T/C1)。
[单片机]
<font color='red'>AVR单片机</font>(学习ing)—(四)、ATMEGA16的定时/计数器—01
AVR单片机的BOOT区
BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器。对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾。   使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作。我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序代码写入另外一个区(通常为应用程序区)内。   AVR高档单片机ATmega系列中含有BOOT代码区,即程序引导区,也可称器件自身监控
[单片机]
基于AVR单片机的安全工器具监控系统的实现
众所周知,安全是电力企业一个永恒的主题,而安全工器具的好坏,将直接影响着电力企业在生产过程中的人身和设备安全。笔者提出了一种基于AVR单片机的安全工器具监控系统的设计方案,主要是对安全工器具的离就位状态信息、有效使用期限和安全工器具柜内的温湿度状况等进行监控,可以根据实现安全工器具柜内温湿度的自动调节,能够自动记录安全工器具的相关信息。本文首先阐述了系统的总体结构,然后详细论述了系统的硬件设计和软件设计。 1 安全工器具监控系统的总体结构 1.1 系统结构 本文所设计的安全工器具监控系统主要分为下位机数据采集和上位机数据管理两个部分,两者之间通过网络进行通信。 系统首先通过数据采集板对安全工器具柜的相关量进行采
[单片机]
基于<font color='red'>AVR单片机</font>的安全工器具监控系统的实现
AVR单片机ATmega8内部晶振使用
ATmega8在使用内部晶振的时候,需要进行烧写方式的选择,来选择不同内部晶振大小。 对应UART的波特率设置和使用外部晶振的方式是一样的。 但是一般情况下,不建议使用内部晶振,因为内部晶振的精度不高,会因为温度等外部环境的影响,使得不准确。
[单片机]
AVR单片机上电复位不可靠问题的解决
推荐昨晚在调试AVR 单片机时又有一些心得体会,虽然结论是一个很小的问题造成的,但在此还是写出来给大家参考,避免走弯路。 事件描述: 以前用AVR的芯片也做过好几个设计,从来没有怀疑过ATMEL的芯片的稳定性,以前的几个方案都是很稳定的,当然这跟PCB的设计有很大的关系,如果大家需要PCB相关参考资料的话可以到本站的PCB技术专栏里查找,那里有很多前辈的PCB布板心得。 这次用的ATmega48制作的串口电压表就出现一个很奇怪的现象,电路板是用万能板焊接的,程序里用到ADC功能和串口通讯功能,用的AVR下载工具是STK500,每次下载程序后芯片总是不能正常复位工作,还要读取下芯片的特征字或熔丝位让芯片重新复位下才能工作,这时
[单片机]
<font color='red'>AVR单片机</font>上电复位不可靠问题的解决
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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