您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机usart串口使用范例 正文
usart串口使用范例

usart串口使用范例

点击数:7994 次   录入时间:03-04 11:57:07   整理:http://www.55dianzi.com   AVR单片机

通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特点为:
全双工操作( 独立的串行接收和发送寄存器)
异步或同步操作
主机或从机提供时钟的同步操作
高精度的波特率发生器
支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位
硬件支持的奇偶校验操作
数据过速检测
帧错误检测
噪声滤波,包括错误的起始位检测,以及数字低通滤波器
三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断
多处理器通讯模式
倍速异步通讯模式
 

串口使用一个max232芯片。

数据读写 官方解释

USART的初始化
void USART_Init( unsigned int baud )
{
/* 设置波特率*/
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* 接收器与发送器使能*/
UCSRB = (1<<RXEN)|(1<<TXEN);
/* 设置帧格式: 8 个数据位, 2 个停止位*/
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
数据发送【发送5 到8 位数据位的帧】
void USART_Transmit( unsigned char data )
{
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<<UDRE)) )
;
/* 将数据放入缓冲器,发送数据 */
UDR = data;
}
数据发送【发送9 位数据位的帧】
void USART_Transmit( unsigned int data )
{
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<<UDRE))) )
;
/* 将第9 位复制到TXB8 */
UCSRB &= ~(1<<TXB8);
if ( data & 0x0100 )
UCSRB |= (1<<TXB8);
/* 将数据放入缓冲器,发送数据 */
UDR = data;
}
数据接收【以5 到8 个数据位的方式接收数 据帧】
unsigned char USART_Receive( void )
{
/* 等待接收数据*/
while ( !(UCSRA & (1<<RXC)) )
;
/* 从缓冲器中获取并返回数据*/
return UDR;
}
数据接收【以9 个数据位的方式接收帧】
unsigned int USART_Receive( void )
{
unsigned char status, resh, resl;
/* 等待接收数据*/
while ( !(UCSRA & (1<<RXC)) )
;
/* 从缓冲器中获得状态、第9 位及数据*/
/* from buffer */
status = UCSRA;
resh = UCSRB;
resl = UDR;
/* 如果出错,返回-1 */
if ( status & (1<<FE)|(1<<DOR)|(1<<PE) )
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的特殊晶振,因为它可以产生标准的波特率,如果你收到的是乱码或者根本无法收到,请检查你的晶振的相关熔丝位设置是否正确通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特点为:
全双工操作( 独立的串行接收和发送寄存器)
异步或同步操作
主机或从机提供时钟的同步操作
高精度的波特率发生器
支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位
硬件支持的奇偶校验操作
数据过速检测
帧错误检测
噪声滤波,包括错误的起始位检测,以及数字低通滤波器
三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断
多处理器通讯模式
倍速异步通讯模式




本文关键字:暂无联系方式AVR单片机单片机-工控设备 - AVR单片机