//工作晶振为11.0592MHz,否则出现返回值错误,一个字节的发送
#include<regx52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,flag;
uchar table[]={"very good "};
//-----------初始化定时器和串口-
void inital_timer1()
{
TMOD=0X20; //必须使用定时器1,串口使用规定
TH1=0Xfd; //定时器1,工作方式2,8位自动重装
TL1=0Xfd; //高8位与低8位数值必须相同
TR1=1; //定时器1允许位
REN=1; //串口使能
SM0=0; //串口工作方式设置,工作方式1
SM1=1;
ES=1; //串口中断使能
EA=1; // 总中断使能
}
//----------串口中断---------
void gorpe() interrupt 4
{
RI=0; //接受中断标志位,硬件置1,必须软件置0
a=SBUF; // 特殊功能寄存器
flag=1; // 检测标志位
}
//-----接收数据,并向上位机作出反应(即发送返回数据)---
void display()
{
uchar i;
if(flag==1)
{
ES=0; //关闭串口中断,接下来要发送数据,否则发送完一个数据仍会产生中断,产生死循环
for(i=0;i<10;i++)
{
SBUF=table[i];
while(!TI); //判断是否发送完成
TI=0; //发送中断标志位
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}。