📄 usart串口使用范例.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0044)http://www.avrvi.com/avr_examples/usart.html -->
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>usart串口使用范例</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="AVR 新手入门 单片机 AVR与虚拟仪器网站提供" name=description>
<META content="古欣 guxin[at]mail.sdu.edu.cn" name=author>
<META content="AVR 单片机 新手入门 手把手教程 avr程序 avr范例" name=keywords>
<STYLE title=css_design_by_guxin type=text/css media=all>@import url( ../inc/article.css );
</STYLE>
<LINK media=all href="usart串口使用范例.files/article.css" type=text/css
rel=stylesheet>
<META content="MSHTML 6.00.2900.3199" name=GENERATOR></HEAD>
<BODY>
<DIV class=m>
<H1 class=c>AVR与虚拟仪器 www.avrvi.com</H1></DIV>
<DIV class=m>
<DIV id=head>
<P class=c>AVR与虚拟仪器致力于提供最优质的AVR和labview技术服务,最全的技术资料,最好的开发板方案。</P>
<P class=c>我们将以AVR DB-CORE Ver2.3 Atmega16开发板为平台,一步一步,教会大家AVR单片机编程。</P>
<P class=c>本站所有范例都采用ICC编写,ICC编译器加AVR Studio下载调试,下载器为JTAG&ISP下载编程器。
</P></DIV></DIV>
<DIV class=m>
<DIV id=now>你现在的位置:<A href="http://www.avrvi.com/">AVR与虚拟仪器</A>>><A
href="http://www.avrvi.com/index_avr_examples.html">AVR使用范例</A>>>usart串口使用范例<SPAN><A
title=AVR与虚拟仪器论坛 href="http://bbs.avrvi.com/">论坛</A></SPAN></DIV></DIV>
<DIV class=m>
<H3>AVR使用范例--usart串口使用范例</H3>
<DIV class=pad10>
<P>本页关键词:usart 什么是usart usb usart usart接口 usb to usart usb usart 驱动 usb usart tx
line usart串口 usart 芯片 </P>
<P>下载<A
href="http://www.avrvi.com/down.php?file=software/chuankou.exe">超好用的串口调试助手</A>【绿色免安装版】,下载<A
href="http://www.avrvi.com/down.php?file=examples/usart.rar">结构化的uart驱动程序与范例</A></P>
<P class=title>usart简介:</P>
<UL>
<LI>通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特点为:<BR>全双工操作(
独立的串行接收和发送寄存器)<BR>异步或同步操作<BR>主机或从机提供时钟的同步操作<BR>高精度的波特率发生器<BR>支持5, 6, 7, 8, 或9
个数据位和1 个或2
个停止位<BR>硬件支持的奇偶校验操作<BR>数据过速检测<BR>帧错误检测<BR>噪声滤波,包括错误的起始位检测,以及数字低通滤波器<BR>三个独立的中断:发送结束中断,
发送数据寄存器空中断,以及接收结束中断<BR>多处理器通讯模式<BR>倍速异步通讯模式 </LI></UL>
<P class=title>调试结果与实物图</P>
<P class=c><IMG height=447 alt=使用调试助手调试的结果 src="usart串口使用范例.files/uart_2.jpg"
width=641></P>
<P class=c> </P>
<P>串口硬件电路采用的是MAX232cse,硬件连接电路图,<A
href="http://www.avrvi.com/start/guide_avr_hardware_design.html">详见开发板电路的详细介绍</A>。</P>
<P class=c><IMG height=321 alt=AVR开发板实物图 src="usart串口使用范例.files/uart_1.jpg"
width=675></P>
<P>在labview中用程序调试串口的结果,labview串口使用范例见:<A
href="http://bbs.avrvi.com/read.php?fid=8&tid=497&toread=1">http://bbs.avrvi.com/read.php?fid=8&tid=497&toread=1</A></P>
<P class=c><IMG height=413 alt=labview调试的结果 src="usart串口使用范例.files/uart_3.jpg"
width=444></P>
<P class=c> </P>
<P class=title>电路图:</P>
<P class=c><IMG height=402 alt=MAX232应用电路
src="usart串口使用范例.files/avrdb_core_05.jpg" width=775></P>
<P>串口使用一个max232芯片。</P>
<P class=title>数据读写 官方解释</P>
<UL>
<LI>USART的初始化<BR>void USART_Init( unsigned int baud )<BR>{<BR>/*
设置波特率*/<BR>UBRRH = (unsigned char)(baud>>8);<BR>UBRRL = (unsigned
char)baud;<BR>/* 接收器与发送器使能*/<BR>UCSRB = (1<<RXEN)|(1<<TXEN);<BR>/*
设置帧格式: 8 个数据位, 2 个停止位*/<BR>UCSRC =
(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);<BR>}
<LI>数据发送【发送5 到8 位数据位的帧】<BR>void USART_Transmit( unsigned char data
)<BR>{<BR>/* 等待发送缓冲器为空 */<BR>while ( !( UCSRA & (1<<UDRE))
)<BR>;<BR>/* 将数据放入缓冲器,发送数据 */<BR>UDR = data;<BR>}
<LI>数据发送【发送9 位数据位的帧】<BR>void USART_Transmit( unsigned int data )<BR>{<BR>/*
等待发送缓冲器为空 */<BR>while ( !( UCSRA & (1<<UDRE))) )<BR>;<BR>/* 将第9
位复制到TXB8 */<BR>UCSRB &= ~(1<<TXB8);<BR>if ( data & 0x0100
)<BR>UCSRB |= (1<<TXB8);<BR>/* 将数据放入缓冲器,发送数据 */<BR>UDR = data;<BR>}
<LI>数据接收【以5 到8 个数据位的方式接收数 据帧】<BR>unsigned char USART_Receive( void
)<BR>{<BR>/* 等待接收数据*/<BR>while ( !(UCSRA & (1<<RXC)) )<BR>;<BR>/*
从缓冲器中获取并返回数据*/<BR>return UDR;<BR>}
<LI>数据接收【以9 个数据位的方式接收帧】<BR>unsigned int USART_Receive( void )<BR>{<BR>unsigned
char status, resh, resl;<BR>/* 等待接收数据*/<BR>while ( !(UCSRA &
(1<<RXC)) )<BR>;<BR>/* 从缓冲器中获得状态、第9 位及数据*/<BR>/* from buffer
*/<BR>status = UCSRA;<BR>resh = UCSRB;<BR>resl = UDR;<BR>/* 如果出错,返回-1 */<BR>if
( status & (1<<FE)|(1<<DOR)|(1<<PE) )<BR>return
-1;<BR>/* 过滤第9 位数据,然后返回*/<BR>resh = (resh >> 1) & 0x01;<BR>return
((resh << 8) | resl);<BR>} </LI></UL>
<P class=title>结构化的驱动程序与范例 <A
href="http://www.avrvi.com/down.php?file=examples/usart.rar">下载所有相关文件</A></P>
<UL>
<LI>首先包含sio.h和相关头文件。
<LI>调用<SPAN class=red>Com_init()</SPAN>; //串行口初始化
<LI>主程序<BR>void main(void)<BR>{<BR>uint8 SIO_buff[4];
//定义串口数据缓冲区<BR>init_devices();<BR>//指示单片机正常开始工作,一亮,二亮,都亮,都灭<BR>PORTA = 0x02;
//1脚为高,0脚为低,0脚灯亮<BR>Delay(); //延时<BR>PORTA = 0x01;
//0脚为高,1脚为低,1脚灯亮<BR>Delay(); //延时<BR>PORTA = 0x00; //同时亮<BR>Delay();
//延时<BR>PORTA = 0x03; //同时灭<BR><BR>Com_putstring ("ww",2,&RTbuf_UART0);
//输出一个字符串到串行口<BR>while(1)<BR>{<BR>if(Com_R_count(&RTbuf_UART0)!=0)<BR>{<BR>Com_getstring
(SIO_buff,1,&RTbuf_UART0);<BR>Com_Rbuf_Clear(&RTbuf_UART0);
//清空buffer<BR>if(SIO_buff[0]==1) //接收到一个一<BR>{<BR>Com_putstring
("ok!!",4,&RTbuf_UART0); //输出一个字符串到串行口<BR>PORTA = 0x00; //同时亮<BR>Delay();
//延时<BR>PORTA = 0x03; //同时灭<BR>}<BR>} //end of
if(Com_R_count(&RTbuf_UART0)!=0)<BR>Delay();//延时<BR>Com_putstring
("ww00",4,&RTbuf_UART0); //输出一个字符串到串行口<BR>}<BR>} </LI></UL>
<P>串口调试经验谈:</P>
<P>1、确保你的串口连线正常,有的串口的接法,9针串口线的7针和第八针要交叉,本站最小系统板的V2.3需要交叉,V2.5不需要交叉。</P>
<P>2、确保你的MAX232工作正常,方法:在本开发小板上把跳线JP2的1和3短接,2和4不接,通过串口调试助手发什么数据就可以收到什么数据。</P>
<P>3、最容易出现的一个问题是,晶振的选择,本程序要求晶振是7.3728M外部晶振,为什么使用7.3728的特殊晶振,因为它可以产生标准的波特率,如果你收到的是乱码或者根本无法收到,请检查你的晶振的相关熔丝位设置是否正确,这里看看<A
href="http://www.avrvi.com/start/guide_fuse.html">熔丝位快速入门</A>。</P></DIV></DIV>
<DIV class=m>
<H4 id=link><A href="http://www.avrvi.com/">AVR 与虚拟仪器</A>欢迎交换链接,请与小古联系
avrvi【at】163.com </H4>
<SCRIPT src="usart串口使用范例.files/links.js" type=text/javascript></SCRIPT>
<SCRIPT src="usart串口使用范例.files/footer.js" type=text/javascript></SCRIPT>
</DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -