需要用到三个软件:KEIL、VSPD XP5(virtual serial ports driver xp5.1虚拟串口软件)、串口调试助手(个人感觉2.1比较好用)。
1、首先在KEIL里编译写好的程序。
2、打开VSPD,界面如下图所示:

左边栏最上面的是电脑自带的物理串口。点右边的add pair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。
3、接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入
MODE COM3 4800,0,8,1(设置串口3的波特率、奇偶校验位、数据位、停止位,打开COM3串口,注意设置的波特率和程序里设置的波特率应该一样)
ASSIGN COM3 <SIN> SOUT(把单片机的串口和COM3绑定到一起。因为我用的单片机是STC89C52,只有一个串口,所以用SIN,SOUT,如果单片机有几个串口,可以选择S0IN,S0OUT,S1IN,S1OUT。)

为了不每次都重新绑定串口,可以建立一个初始化文件debug.ini。初始化文件是一个普通的文本文件,内容就是仿真时需要的命令,按照顺序一行输入一条。如图2所示,建立了一个debug.ini的初始化文件。这样,当每次进入仿真调试状态时,Keil就会自动载入debug.ini 的内容进行初始化。

4.串口调试助手

 可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率4800,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。
现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。
串口调试助手不支持发送发送汉字,回车符等。如需支持可使用usr-tcp232-test(支持汉字),或者超级终端(支持汉字,回车符和Keil串口仿真控件效果一样)。
这种方法的好处是不用硬件就可以调试。这是网上一篇文章介绍的方法.
// 利用VSPD、串口调试助手、Keil串口自发自收程序  
//测试通过  
  
#include<reg52.h>  
#define uchar unsigned char  
#define uint unsigned int  
  
uchar i=0;  
  
//串口初始化程序  
void init_chuankou()  
{  
    TMOD=0x20;  
    TH1=0xfd; //波特率9600  
    TL1=0xfd;  
    SM0=0;  
    SM1=1;  
    REN=1;  
    EA=1;  
    TR1=1;  
    ES=1;  
}  
  
void main()  
{  
    init_chuankou();  
    while(1)  
    {  
          
    }  
}  
  
void es() interrupt 4  
{  
    if(RI)  
    {  
        RI=0;   
        i=SBUF;  
        SBUF=i;  
        while(TI==0);  
        TI=0;     
    }  
//  else  
//  {  
//      TI=0;     
//      SBUF=i;  
//  }     
}