#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,i,t;
uchar StringdData[100];
uchar code table[]="I get ";//字符串用“”,字符用‘’,其他用{}
void init()
{
TMOD=0x20;//0010 0000 T1定时器工作方式2【8位初值自动重装,进入中断后无事可做,无需打开定时器1中断】
TH1=0xFD;
TL1=0xFD;//9600pbs T1定时器装初值 【TCON定时器控制寄存器】
TR1=1; //启动定时器运行控制位
SCON=0x50;
// REN=1;//允许串行接收允许位
// SM0=0; //串口工作方式1
// SM1=1;// 【SCON串行口控制寄存器】
EA=1;//开全局总中断
ES=1; //开串口中断 【IE中断允许寄存器】
}
void main()
{
init();
while(1)//进入大循环一直检测标志位flag是否为1,当检测到为1,说明程序已经执行过(串口中断服务程序),即收到了数据,否则始终检测flag状态
{
if(flag==1)
{
ES=0;//关闭串口中断【为了避免死循环,等发送完数据再打开】
for(i=0;i<6;i++)
{
SBUF=table[i];//发送缓冲器发送数据
while(!TI); //等待发送数据完成,发送中断标志位TI置1,取非,跳出循环
TI=0; //软件清零
}
for(i=0;i<t;i++)
{
SBUF= StringdData[i];//发送缓冲器再发送从(串口中断服务程序)中读回来的数据
while(!TI); //发送中断标志位
TI=0;
}
//SBUF='\n'; //转行
while(!TI); //发送中断标志位
TI=0;
t=0;
flag=0;
ES=1;
}
}
}
void ser()interrupt 4//串口中断服务程序
{
RI=0;//RI(接收中断标志位)硬件置1要清零【既然产生串口中断,肯定是收到或发送了数据,在开始没有发送任何数据,必然是收到了数据】
StringdData[t] =SBUF;//接收缓存器接收数据,a读取接收
t++;
if(StringdData[t]=='\n')
{
flag=1;//方便在主程序中查询是否已经收到数据
}
}
#define uchar unsigned char
#define uint unsigned int
uchar flag,i,t;
uchar StringdData[100];
uchar code table[]="I get ";//字符串用“”,字符用‘’,其他用{}
void init()
{
TMOD=0x20;//0010 0000 T1定时器工作方式2【8位初值自动重装,进入中断后无事可做,无需打开定时器1中断】
TH1=0xFD;
TL1=0xFD;//9600pbs T1定时器装初值 【TCON定时器控制寄存器】
TR1=1; //启动定时器运行控制位
SCON=0x50;
// REN=1;//允许串行接收允许位
// SM0=0; //串口工作方式1
// SM1=1;// 【SCON串行口控制寄存器】
EA=1;//开全局总中断
ES=1; //开串口中断 【IE中断允许寄存器】
}
void main()
{
init();
while(1)//进入大循环一直检测标志位flag是否为1,当检测到为1,说明程序已经执行过(串口中断服务程序),即收到了数据,否则始终检测flag状态
{
if(flag==1)
{
ES=0;//关闭串口中断【为了避免死循环,等发送完数据再打开】
for(i=0;i<6;i++)
{
SBUF=table[i];//发送缓冲器发送数据
while(!TI); //等待发送数据完成,发送中断标志位TI置1,取非,跳出循环
TI=0; //软件清零
}
for(i=0;i<t;i++)
{
SBUF= StringdData[i];//发送缓冲器再发送从(串口中断服务程序)中读回来的数据
while(!TI); //发送中断标志位
TI=0;
}
//SBUF='\n'; //转行
while(!TI); //发送中断标志位
TI=0;
t=0;
flag=0;
ES=1;
}
}
}
void ser()interrupt 4//串口中断服务程序
{
RI=0;//RI(接收中断标志位)硬件置1要清零【既然产生串口中断,肯定是收到或发送了数据,在开始没有发送任何数据,必然是收到了数据】
StringdData[t] =SBUF;//接收缓存器接收数据,a读取接收
t++;
if(StringdData[t]=='\n')
{
flag=1;//方便在主程序中查询是否已经收到数据
}
}