通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特点为:
全双工操作( 独立的串行接收和发送寄存器)
异步或同步操作
主机或从机提供时钟的同步操作
高精度的波特率发生器
支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位
硬件支持的奇偶校验操作
数据过速检测
帧错误检测
噪声滤波,包括错误的起始位检测,以及数字低通滤波器
三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断
多处理器通讯模式
倍速异步通讯模式
调试结果与实物图
串口硬件电路采用的是MAX232cse,硬件连接电路图,详见开发板电路的详细介绍。
在labview中用程序调试串口的结果,labview串口使用范例见:http://bbs.avrvi.com/read.php?fid=8&tid=497&toread=1
电路图:
串口使用一个max232芯片。
数据读写 官方解释
USART的初始化void USART_Init( unsigned int baud )
{
/* 设置波特率*/
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* 接收器与发送器使能*/
UCSRB = (1<
UCSRC = (1<
void USART_Transmit( unsigned char da
{
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<
/* 将数据放入缓冲器,发送数据 */
UDR = da
} 数据发送【发送9 位数据位的帧】
void USART_Transmit( unsigned int da
{
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<
/* 将第9 位复制到TXB8 */
UCSRB &= ~(1<
UCSRB |= (1<
UDR = da
} 数据接收【以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<
/* 过滤第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 IAR EEPROM 读写
下一篇:发几个关于USART串口通讯的程序
推荐阅读最新更新时间:2024-03-16 15:17