利用“串口调试助手”等软件调试 PROTEUS 环境中 51单片机 的串行通信

在前面的博文“利用 PROTEUS 软件调试串口通信最简单实用的方法”中,做而论道介绍了利用 Virtual Terminal(虚拟终端)调试串口通信的方法。
详细内容可见:http://hi.baidu.com/do_sermon/item/06a1304de5619be61281da74。

老版的、已经失效的链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/ef2c24cbf555e24bf31fe7ea.html。


但是 Virtual Terminal 有一定的局限性,只是适合于调试使用键盘输入少量数据的情况。如果是需要利用 PC 机器的串行口,和其它的软件进行串行通信,Virtual Terminal 就办不到了。


下面,做而论道将介绍两种另外两种仿真调试串口通信的方法。


1、利用 COMPIM 组件


在 PROTEUS 软件中,可以找到一个 COMPIM 组件,它的图形、以及默认属性可见下图:


利用“串口调试助手”等软件调试 PROTEUS 环境中 51单片机 的串行通信_第1张图片
图片链接:http://img.bimg.126.net/photo/Wqrw-HOEGCpr7LrqZBjH3w==/4854317448369104989.jpg。

http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/e1d788f5d774199af3d385af.html


把 COMPIM 放在仿真电路图中,当仿真运行起来之后,送到 COMPIM 3 号引脚的串行数据,将会通过 PC 机的 COM1 串行口输出,如果在 PC 机的 COM1 串行口外接一条电缆,可将串行数据送到其它的硬件设备上。


同样道理,其它的硬件设备送到 PC 机的 COM1 的串行数据,也会在 COMPIM 的2号引脚出现,送到仿真电路里面。


COMPIM 组件内部,自带 RS-232-TTL 的电平转换功能,因此不需要再使用电平转换芯片。


利用 COMPIM,就可以用一台 PC 机,仿真带有串行口的单片机系统,通过外接的电缆,和另外一台 PC 机进行全双工的串行通信。十分轻松的就实现了对远程测量、控制系统进行仿真调试。


2、利用 Virtual Serial Port Driver 软件


上述的调试方法,可以说是很完备的了,但是还是必须在两个串行口之间连接一条串行通信电缆。为了省去这条电缆,就应该看看虚拟串口软件。
Virtual Serial Port Driver 软件可以为 PC 机增加一些两两连接的虚拟串行口。

该软件运行起来如下图所示:


利用“串口调试助手”等软件调试 PROTEUS 环境中 51单片机 的串行通信_第2张图片
图片链接:http://img.bimg.126.net/photo/hrN23e30wVbf36lWver6Uw==/3721380667108704365.jpg。


在图中可以看到,COM1、COM2 就是“一对连接好虚拟串行口”;PC 机原来就有的实际的串行口,称为物理串行口,为 COM3。
在图中的下部,是 WINODWS 的设备管理器,从中也可以看到新添加的串行口信息。


有了这两两连接的虚拟串行口,就可以在同一台 PC 机上,进行两个软件的全双工串行通信了,并且不需要使用通信电缆。
-------------------
在前面提到的博文中,是利用 Virtual Terminal 调试单片机系统,现在就可以使用 COMPIM 组件和虚拟串口软件来调试了。


仿真调试的画面如下:

利用“串口调试助手”等软件调试 PROTEUS 环境中 51单片机 的串行通信_第3张图片
图片链接:http://img.bimg.126.net/photo/JeV0iEkVL8agytX1JPCLRQ==/5429089350812238456.jpg。


图中,PROTEUS 仿真的单片机系统使用 COM1,“串口调试助手”使用 COM2。
这里用的“串口调试助手”,是 STC 单片机下载软件中带的,使用其它的“串口助手”软件,也是完全可以的。


当通信的双方都运行起来后,在“串口调试助手”发送'1'、'2'...就可以控制单片机的工作,图中的 'Hello!'、'yeah' 等都是单片机送回来的信息。

图中单片机使用的程序如下:
//======================================
#include 
#define uchar unsigned char
#define uint unsigned int
uchar a;
sbit d = P3^7;
//--------------------------------------
say_CR_LF()
{
     SBUF = 13; while (TI == 0); TI = 0;
     SBUF = 10; while (TI == 0); TI = 0;
}
//--------------------------------------
say_yeah()
{
     SBUF = a;    while (TI == 0); TI = 0;
     SBUF = ','; while (TI == 0); TI = 0;
     SBUF = ' '; while (TI == 0); TI = 0;
     SBUF = 'y'; while (TI == 0); TI = 0;
     SBUF = 'e'; while (TI == 0); TI = 0;
     SBUF = 'a'; while (TI == 0); TI = 0;
     SBUF = 'h'; while (TI == 0); TI = 0;
     SBUF = '!'; while (TI == 0); TI = 0;
     say_CR_LF();
}
//--------------------------------------
say_hello()
{
     SBUF = 'H'; while (TI == 0); TI = 0;
     SBUF = 'e'; while (TI == 0); TI = 0;
     SBUF = 'l'; while (TI == 0); TI = 0;
     SBUF = 'l'; while (TI == 0); TI = 0;
     SBUF = 'o'; while (TI == 0); TI = 0;
     SBUF = '!'; while (TI == 0); TI = 0;
     say_CR_LF();
}
//--------------------------------------
void init()
{
     SCON = 0x50;     //设置串口通信方式1, 允许接收
     PCON &= 0x7F;
     TMOD = 0x20;     //设置T1定时方式2
     TH1 = 0xfd;      // 9600bps @ 11.0592MHz
     TL1 = 0xfd;
     TR1 = 1;         //启动T1

     ES = 1;          //开串口中断.
     EA = 1;          //开总中断.
     say_hello();
}
//--------------------------------------
void delay(uint z)
{
     uint x, y;
     for(x = z; x > 0; x--) for(y = 110; y > 0; y--);
}
//--------------------------------------
void main()
{
     init();
     TI = 1;
     a = '4';
     while(1) {
       if(a == '1') { 
         d = 0; delay(400);
         d = 1; delay(400);
       }
       else if(a == '2') {
         d = 0; delay(200);
         d = 1; delay(200);
       }
       else if(a == '3') {
         d = 0; delay(100);
         d = 1; delay(100);
       }
       else if(a == '4') {
         d = 1;
}    } }
//--------------------------------------
void ser() interrupt 4
{
     if (TI == 1) TI = 0;
     if (RI == 1) {
       RI = 0;
       P0 = SBUF;
       a = SBUF;           //中间变量.
       say_yeah();
}    }
//======================================

你可能感兴趣的:(串口通信)