AVR USART串口程序
2016-10-18 来源:eefocus
usart简介:
进入单片机查看更多内容>>
- 通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特点为:
全双工操作( 独立的串行接收和发送寄存器)
异步或同步操作
主机或从机提供时钟的同步操作
高精度的波特率发生器
支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位
硬件支持的奇偶校验操作
数据过速检测
帧错误检测
噪声滤波,包括错误的起始位检测,以及数字低通滤波器
三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断
多处理器通讯模式
倍速异步通讯模式
数据读写 官方解释
- 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和相关头文件。
- 调用Com_init(); //串行口初始化
- 主程序
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 IAP功能
相关文章
- 基于 Microchip AVR DA MCU 的带加热 HoD 离手检测+触摸多功能方向盘方案
- Microchip推出AVR® DU系列USB单片机,支持增强型代码保护和高达15W 的 功率输出
- 贸泽电子开售面向工业和汽车应用的Microchip Technology AVR64EA 8位AVR MCU
- 天龙DENON AVR-1507功放机内部拆解
- AVR32 MCU上的ABDAC外设音频播放设计
- AVR基础知识:ATMEGA的SPI总线 - 第1部分
- AVR基础知识:ATMEGA的SPI总线 - 第2部分
- 使用AVR微控制器控制GSM模块实现发送和接收短信
- 如何使用USBASP烧写器和Atmel Studio 7.0对AVR微控制器进行编程
- 使用AVR微控制器Atmega16连接伺服电机的方法