首页 > 酒店新闻 > 酒店行业动态

AG旗舰厅·(中国)官方网站|AVR USART串口程序

发布时间:2025-03-10 17:34:49    次浏览

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