首先,你串口中斷里面這一行代碼不能注釋掉
//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;
}
}
|