为什么我的单片机重新上电或复位的时候会触发串口中断,并进入串口中断服务函数?
#include <reg52.h>
unsigned char flag,a=2,i;
unsigned char code table[]="I CAN ";
void init()
{
TMOD=0x20;
TH1=0xfd; TL1=0xfd;
TR1=1;//TCON register中设置定时器的运行方式
REN=1;//允许串行接收位 发送默认允许
SM0=0;SM1=1;
RI=0;TI=0;
EA=1;ES=1;
}
int main()
{
RI=0;TI=0;
while(RI);
init();
while(1)
{
if(flag==1)
{
ES=0; //发送和接收完成都会进入中断服务函数所以此时关闭串口中断使能
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI)//串行发送停止位的中间时由内部硬件置1,由软件清零
;
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void recive()interrupt 4
{
if(RI)
{
RI=0;
a=SBUF;
flag=1;
}
}![](http://imgsrc.baidu.com/forum/w%3D580/sign=0898237a0f087bf47dec57e1c2d3575e/54e8c9ea15ce36d3c0349f0137f33a87e950b1af.jpg)
#include <reg52.h>
unsigned char flag,a=2,i;
unsigned char code table[]="I CAN ";
void init()
{
TMOD=0x20;
TH1=0xfd; TL1=0xfd;
TR1=1;//TCON register中设置定时器的运行方式
REN=1;//允许串行接收位 发送默认允许
SM0=0;SM1=1;
RI=0;TI=0;
EA=1;ES=1;
}
int main()
{
RI=0;TI=0;
while(RI);
init();
while(1)
{
if(flag==1)
{
ES=0; //发送和接收完成都会进入中断服务函数所以此时关闭串口中断使能
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI)//串行发送停止位的中间时由内部硬件置1,由软件清零
;
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void recive()interrupt 4
{
if(RI)
{
RI=0;
a=SBUF;
flag=1;
}
}
![](http://imgsrc.baidu.com/forum/w%3D580/sign=0898237a0f087bf47dec57e1c2d3575e/54e8c9ea15ce36d3c0349f0137f33a87e950b1af.jpg)