利用VSPD、串口调试助手、Keil做串口调试

下面详细介绍下如何用虚拟串口调试串口发送接收程序。

需要用到三个软件: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串口仿真控件效果一样)。

这种方法的好处是不用硬件就可以调试。这是网上一篇文章介绍的方法.

 

  1. // 利用VSPD、串口调试助手、Keil串口自发自收程序  
  2. //测试通过  
  3.   
  4. #include<reg52.h>  
  5. #define uchar unsigned char  
  6. #define uint unsigned int  
  7.   
  8. uchar i=0;  
  9.   
  10. //串口初始化程序  
  11. void init_chuankou()  
  12. {  
  13.     TMOD=0x20;  
  14.     TH1=0xfd; //波特率9600  
  15.     TL1=0xfd;  
  16.     SM0=0;  
  17.     SM1=1;  
  18.     REN=1;  
  19.     EA=1;  
  20.     TR1=1;  
  21.     ES=1;  
  22. }  
  23.   
  24. void main()  
  25. {  
  26.     init_chuankou();  
  27.     while(1)  
  28.     {  
  29.           
  30.     }  
  31. }  
  32.   
  33. void es() interrupt 4  
  34. {  
  35.     if(RI)  
  36.     {  
  37.         RI=0;   
  38.         i=SBUF;  
  39.         SBUF=i;  
  40.         while(TI==0);  
  41.         TI=0;     
  42.     }  
  43. //  else  
  44. //  {  
  45. //      TI=0;     
  46. //      SBUF=i;  
  47. //  }     
  48. }     
save_snippets.png
// 利用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;
//	}	
}	


 

 

展开阅读全文

没有更多推荐了,返回首页