借助虚拟串口驱动软件模拟PC端串口调试助手软件与Proteus中51单片机相互通信二

一、借助虚拟串口驱动软件模拟PC端串口调试助手软件与Proteus中51单片机相互通信原理

虚拟终端(比如:Proteus中51单片机)的TXD(发送数据)和RXD(接收数据)分别与虚拟串口驱动软件所模拟出其中一个虚拟串口的TXD(发送数据)和RXD(接收数据)一一对应接通后,再与虚拟串口驱动软件所模拟出另外一个虚拟串口的TXD(发送数据)和RXD(接收数据)交叉对应接通来相互发送和接收数据,从而实现相互通信。

二、借助虚拟串口驱动软件模拟PC端串口调试助手软件与Proteus中51单片机相互通信原理图 

三、虚拟通信串口驱动软件操作

(1)、虚拟通信串口驱动软件所模拟出虚拟串口间通信原理。

 虚拟串口驱动软件所模拟出虚拟串口的TXD(发送数据)和RXD(接收数据)交叉对应接通来相互发送和接收数据,从而实现相互通信。

(2)、虚拟通信串口驱动软件所模拟出虚拟串口间通信原理图。 

(3)、下载虚拟通信串口驱动软件,安装完成后的图标,如下所示。

(4)、双击打开虚拟通信串口驱动软件图标,弹出以下界面。

(5)、在虚拟通信串口驱动软件界面点击“添加端口”,左边Virtual Serial Port Driver栏下Virtual port处出现添加两个虚拟通信串口:COM2与COM3。  

(6)、右键点击电脑上的计算机,在弹出列表中选中属性,会弹出一个关于电脑控制面板的信息界面,点击左上边设备管理器,弹出设备管理器界面,找到端口项点开,出现新增两个虚拟通信串口:COM2->COM3与COM3->COM2。

 

四、PC端串口调试助手软件与Proteus中51单片机相互通信的单片机C语言程序与Proteus仿真电路图

(1)、烧写PC端串口调试助手软件与Proteus中51单片机相互通信的单片机C语言程序

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,a,i,j;
uchar code table0[]="I get ";
uchar code table1[]="\r\n";//回车换行
  void String_Timer2_init()//串口定时器初始化函数
{
   TMOD=0x20;//0010 0000定时器工作方式为方式2,8位自动重装。
   TH1=0xfd;//初始化计数器高8位:1111 1101
   TL1=0xfd;//初始化计数器低8位
   TR1=1;//启动定时器1
   SM0=0;//设定串口工作方式为方式1(10位异步通信)
   SM1=1;//设定串口工作方式
   REN=1;//打开串口中断接收允许
   EA=1;//打开全局中断
   ES=1;//打开串口中断允许位
  }
  void main()
{
   String_Timer2_init();//串口定时器初始化函数
   while(1)//固定循环
 {
    if(flag==1)//判断检测发送数据标志位变量flag是否为1,若为1则运行以下单片机发送数据缓存寄存器给PC端串口调试助手发送数据。
  {
     ES=0;//关闭串口中断允许位,阻止进入串口中断服务程序。为什么要设置ES=0?由于接下来单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束后,TI(即串口发送中断标志位)=1,若ES不设置为0,在TI(即串口发送中断标志位)=1时,会进入串口中断服务程序执行flag=1,又得回来再次判断if(flag==1),从而无法运行下面的程序。          
     for(i=0;i<6;i++)//循环发送数据个数
   {
      SBUF=table0[i];//将table0数组中的数据存入单片机发送数据缓存寄存器
      while(!TI);//判断串口发送中断标志位是否为1,若为1则单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束。为什么在此编写while(!TI)?由于需要把单片机发送数据缓存寄存器保存的数据发送给PC端串口调试助手。
      TI=0;//TI(即串口发送中断标志位)=0,表示单片机发送数据缓存寄存器可重新给PC端串口调试助手发送数据。
     }
     SBUF=a;//表示单片机接收数据缓存寄存器把从串口中断服务程序获取的某数据(用数值变量a表示)赋给单片机发送数据缓存寄存器。为什么?由于串口定时器初始化函数中REN(串口中断接收允许)=1与ES(串口中断允许位)=1被初始化后,就可以进入串口中断服务程序获取PC端串口调试助手给单片机发送某数据,然后单片机接收数据缓存寄存器接收PC端串口调试助手发来的某数据。       
     while(!TI);//判断串口发送中断标志位是否为1,若为1则单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束。为什么在此编写while(!TI)?由于需要把单片机发送数据缓存寄存器保存的数据发送给PC端串口调试助手。
     TI=0; //TI(即串口发送中断标志位)=0,表示单片机发送数据缓存寄存器可重新给PC端串口调试助手发送数据。
     for(j=0;j<3;j++)//循环发送数据个数
   {
      SBUF=table1[j];//将table1数组中的数据存入单片机发送数据缓存寄存器
      while(!TI);//判断串口发送中断标志位是否为1,若为1则单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束。为什么在此编写while(!TI)?由于需要把单片机发送数据缓存寄存器保存的数据发送给PC端串口调试助手。
      TI=0;//TI(即串口发送中断标志位)=0,表示单片机发送数据缓存寄存器可重新给PC端串口调试助手发送数据。
     }
     ES=1;//打开串口中断允许位,允许进入串口中断服务程序。
     flag=0;//判断检测发送数据标志位变量flag是否为0,若为0则跳出运行单片机发送数据缓存寄存器给PC端串口调试助手发送数据。
   } 
  }
 }
  void string() interrupt 4//串口中断服务程序(函数)
{
   RI=0;//表示单片机接收数据缓存寄存器可重新接收PC端串口调试助手发送数据。
   a=SBUF;//表示PC端串口调试助手给单片机接收数据缓存寄存器发送某数据,然后单片机接收数据缓存寄存器接收PC端串口调试助手发来的某数据,并赋给数值变量a。
   flag=1;//置检测发送数据标志位变量flag为1,运行单片机发送数据缓存寄存器给PC端串口调试助手发送数据。
  }

(2)、PC端串口调试助手软件与Proteus中51单片机相互通信的Proteus仿真电路图

(3)、右键点击Proteus仿真电路图中的Virtual Terminal元件,在弹出列表中选中编辑属性,此时弹出一个编辑元件的信息界面,在Baud Rate将2400改为9600,其它不变,之后点击确定。

(4)、右键点击Proteus仿真电路图中的COMPIM元件,在弹出列表中选中编辑属性,会弹出一个编辑元件的信息界面,在Physical port处将通信串口COM1改为通信串口COM3,在Physical Baud Rate将4800改为9600,在Virtual Baud Rate处将4800改为9600,其它不变,之后点击确定。

五、PC端串口调试助手软件操作

(1)、下载PC端串口调试助手软件,安装完成后的图标,如下所示。

(2)、双击打开PC端串口调试助手软件图标,弹出以下界面。

(3)、在PC端串口调试助手软件界面串口处将通信串口COM1改为通信串口COM2,在波特率处将4800改为9600,点击“打开串口”。

(4)、在PC端串口调试助手软件界面点击“打开串口”弹出的界面

(5)、回到虚拟串口驱动软件界面,Virtual Serial Port Driver栏下Virtual port处的通信串口COM2出现[9600-N-8-1],表示PC端串口调试助手的通信串口COM2已激活。

 

(6)、回到PC端串口调试助手软件与Proteus中51单片机相互通信的Proteus仿真电路图界面,启动Proteus仿真电路。

(7)、再次回到虚拟串口驱动软件界面,Virtual Serial Port Driver栏下Virtual port处的通信串口COM3出现[9600-N-8-1],表示Proteus仿真电路图中51单片机借助COMPIM元件(RS-232串口(即9针端口)与MAX232芯片结合体)激活通信串口COM3。

六、PC端串口调试助手软件与Proteus中51单片机相互通信(注意:先启动PC端串口调试助手软件中的串口,再运行Proteus仿真电路,否则PC端串口调试助手软件与Proteus中51单片机无法相互通信。

(1)、在PC端串口调试助手软件界面的“发送的字符/数据”右边长条输入框输入发送给Proteus仿真电路图中51单片机的数据。

(2)、Proteus中51单片机未接到PC端串口调试助手软件发送数据的初始状态。

(3)、在PC端串口调试助手软件界面的“发送的字符/数据”右边长条输入框输入发送给Proteus中51单片机的数据后,点击PC端串口调试助手软件界面中的“手动发送”,让PC端串口调试助手软件给Proteus中51单片机发送数据。

(4)、Proteus中51单片机接收到PC端串口调试助手软件发送的数据,用Proteus中虚拟终端Virtaul Teminal来显示接收到PC端串口调试助手软件发送的数据。

(5)、在Proteus中51单片机接收到PC端串口调试助手软件发送数据的同时,PC端串口调试助手软件也接收了Proteus中51单片机给PC端串口调试助手软件发送的数据和PC端串口调试助手软件给Proteus中51单片机发送的数据。

(6)、再次在PC端串口调试助手软件界面的“发送的字符/数据”右边长条输入框输入发送给Proteus中51单片机的数据。

(7)、Proteus中51单片机未接到PC端串口调试助手软件发送数据的初始状态。

(8)、再次在PC端串口调试助手软件界面的“发送的字符/数据”右边长条输入框输入发送给Proteus中51单片机的数据后,点击PC端串口调试助手软件界面中的“手动发送”,再次让PC端串口调试助手软件给Proteus中51单片机发送数据。

(9)、Proteus中51单片机再次接收到PC端串口调试助手软件发送的数据,用Proteus中虚拟终端Virtaul Teminal来显示接收到PC端串口调试助手软件发送的数据。

(10)、在Proteus中51单片机接收到PC端串口调试助手软件再次发送数据的同时,PC端串口调试助手软件也接收了Proteus中51单片机发送的数据。

 

 

 

 

 

 

 

 

 

posted @ 2020-07-06 11:06  吃不了就兜着走  阅读(995)  评论(0编辑  收藏  举报