#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”?
|