微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PC与单片机RS-232串口的通讯和控制

PC与单片机RS-232串口的通讯和控制

时间:12-03 来源:互联网 点击:

l Basic 6.0。具体如何操作运用,网上有很多教程,也很容易上手。

打开VB6.0,新建一个工程,也就是要建立一个新的程序。

这是个标准的VB6.0界面,我们要进行串口的操作需要添加一个串口控件MSCOMM32.OCX,或许你的机子上有,也许没有,没有的在网上搜了下一个装在你c:\winnt\system32\ 。然后你用鼠标右键点击VB界面左侧的工具箱,弹出菜单后选部件,或者在上部的主菜单上点“工程”--“部件”,就会弹出如下界面:

在列出的项里找到Microsoft Comm Control 6.0。在前面的小方框里点上钩。注意看下面的提示栏里就告诉你这个控件的文件名和所在的目录。点“确定”钮,这时在VB主界面的工具箱里就会多出个小电话的控件图标了:

接下来点击这个控件图标,然后在Form1的窗口上拉出个框(或者双击小电话图标)把图标放到Form1窗口上去。如下图:

如果你的图标放不上去并弹出如下提示框:

就说明你的VB6.0是简化版,不是正式安装的。解决方法如下:
首先把MSComm32.OCX拷进C:\WINNT\SYSTEM32\ (我的机器一开始并没有这个控件,我去网上下了一个,机器里面有此控件的此步不做!)(注:路径以我机器的winXP系统为例)
然后点击 开始>运行>regsvr32 c:\winnt\system32\mscomm32.ocx 成功后,开始>运行>regedit,进入注册表,找到HKEY_CLASSES_ROOT\Licenses,然后新建一个项,命名为:“4250E830-6AC2-11cf-8ADB-00AA00C00905”,值为:“kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun”。一切就OK了。

VB6.0设置正常后,我由简入繁地进行程序的编写。在窗体上先放上一个串口控件,一个文本框,一个按钮,一个定时器。如下图:

串口控件是单片机串口和PC串口进行通讯的桥梁;文本框用来显示我们收到的数据,按钮用来启动这个接收,定时器用来定时检查每一小段时间检查是否有串口数据收到。
我们先对串口控件进行属性设置,Commport是串口号设置,一般设置为1,Settings是对串口的波特率、有无奇偶校验,数据位数,停止位数进行设置,因为我的单片机程序上用的波特率是19200,所以在这儿我只对波特率进行调整,其它都是都用默认值。如下图:

对按钮控键进行设置:只是将“Caption”标题属性改为“接收数据”。
对定时器进行设置,将“Interval”间歇时间改为400。这样就是每400毫秒检查一次有无数据收到。
对文本框进行设置:将“MultiLine”多行显示设为“True”允许。
控件的属性设置完了,下面我们为程序写代码,先双击“接收数据”按钮。会弹出代码窗口,我了如下代码,如图:

上面就是我们编写的按钮事件代码。写完后我们在键盘上按“Shift”+“F7”,回到对象窗口。再双击那个定时器控件,界面就切换到定时器的代码窗口,我们写程序如下图:

现在我们的这个VB程序就写好了。接着就试着运行一下这个程序,且慢!我们还是要先启动串口调试器看看单片机是否还在不断的发送着“hello world!”,确认它还是在不停地显示着那行“hello world!”,就可以关了串口调试器。然后在VB6.0的主界面点击那个小三角的播放钮。我的程序就运行如下了:

第二项任务完成!我自己接管了接收的数据。点菜单的保存这项工程。

第三项任务:掌握单片机端如何发送字符和数值数据。

接下来我要做的是对AT89S52内串行数据的发送进行解和掌握,以便我们能随心所欲地将单片机获得的数值数据或字符数据发送给PC机进行处理或存储。

先来看看原来我写的AT89S52不断发送“hello world!”的那段程序。

#include
#include
void delay(void) //定义一个延时子程序
{
unsigned int i;
for (i=65535;i>0;i--);
}

void main(void) //主程序
{
SCON=0x50; //串口方式1
TMOD=0x20; //定时器1,定时方式为2
PCON=0x80; //设定串口工作方式为1
TCON=0x40; //设定时器1开始计数
TH1=0xfd; //设定波特率为19200
TL1=0xfd; //
TI=1;
TR1=1; //启动定时器
while(1)
{
printf("hello world!\n"); //向串口送出数据
delay(); //调用延时
delay();
}

}

上面的程序中除了设置串口的语句和延时语句外,负责向串口发送的语句只有一行,即“printf("helleo world!\n")”。学习过编程的一般都知道,print语句的作用是输出字符串的,但我们如果从单片机的A/D模块上获得了数据想发送到PC,应该怎么做呢?虽然你也可以先将这些数据转换成数字字符串,例如我们从一个8位的A/D模块上获得的数据是个数值从0-255的8

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top