首先,你串口中断里面这一行代码不能注释掉
//RI = 0;//清除接收中断标志位
其次,不推荐你在串口里重新发数据,数据量少还没多大的问题,一旦数据量比较大就问题就比较严重
#include<reg52.h>
#define uchar unsigned char
sbit p=P1^0;
uchar i=0;
void delay(uchar a)
{
uchar b;
for(a;a>0;a--)
for(b=124;b>0;b--);
}
void csh()
{
SCON =0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD:timer 1, mode 2, 8-bit 重装
TH1 =TL1= 0xFD; // TH1: 重装值9600 波特率 晶振 11.0592MHz
TR1 =1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
PCON=0;
}
void main()
{
csh();
while(1);
}
void a() interrupt 4
{
uchar k=0;
while(RI==1)
{
RI=0;
k=SBUF;
i=k;
SBUF=k;
while(TI==0);
TI=0;
delay(200);
}
if(i=='a')
p=1;
else
p=0;
}
上面是在中断里面发送数据量不大就可以,建议还是放在外面
#include<reg52.h>
#define uchar unsigned char
sbit p=P1^0;
uchar i=0;
void delay(uchar a)
{
uchar b;
for(a;a>0;a--)
for(b=124;b>0;b--);
}
void csh()
{
SCON =0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD:timer 1, mode 2, 8-bit 重装
TH1 =TL1= 0xFD; // TH1: 重装值9600 波特率 晶振 11.0592MHz
TR1 =1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
PCON=0;
}
void main()
{
csh();
while(1)
{
if(i == 1)
{
i = 0;
SBUF=k;
while(TI==0);
TI=0;
}
}
}
void a() interrupt 4
{
uchar k=0;
while(RI==1)
{
RI=0;
i=1;
k=SBUF;
}
}
|