#include<reg52.h>
 
	#define uchar unsigned char
 
	#define uint unsigned int
 
	Uchar code table[]=“I get ”//空格也算是一个字符
 
	Void init()
 
	{
 
	TMOD=0x20; //设定T1定时器工作方式2
 
	TH1=0xfd;  //T1定时器装初值
 
	TL1=0xfd;
 
	TR1=1;//启动T1
 
	REN=1;  //允许串口接收
 
	SM0=0;
 
	SM1=1;
 
	EA=1;//开总中断
 
	ES=1;//允许串口中断
 
	}
 
 
	Void main()
 
	{
 
	Init();
 
	While(1);//等待中断的发生
 
	{
 
	If(flag==1) //检测标志位是否为1,检测到为1时说明已经执行过串      口中断服务程序,即收到了数据
 
	{
 
	ES=0;//关闭串口中断,若不关闭,仍会进入串口中断,此时检测到的仍为1,则又开始发送
 
	For{i=0;i<6;i++}
 
	{
 
	SBUF=table;//将数组中的字符发送出去
 
	While(!T1); //等待是否发送完毕,发送完成后T1硬件置1
 
	T1=0;  //退出等待
 
	}
 
	SBUF=a;  //发送从中断中读来的数据
 
	while(!TI);
 
	TI=0;
 
	ES=1;
 
	Flag=0;
 
	}
 
	}
 
	}
 
	
 
	Void ser() interrupt 4
 
	{
 
	R1=0;   //RI清0,进入串口中断后必须软件清0
 
	a=SBUF;  //将SBUF中的数据读给a(最重要)
 
	Flag=1;  //将标志位置1
 
	}
 
	 
 
	疑问如下:进入whlie(1)这句程序时,已经执行过串口这段程序a=SBUF,而后关闭串口中断ES=0。那么当执行SBUF=a这句程序时,发送的是串口中a的数据。串口中a的数据为什么也是“i get”?
  |