用51单片机串口要求发送一次MSC,但是程序测试出来结果是不停得发MSC,是什么问题?

2025-05-04 17:50:51
推荐回答(3个)
回答1:

if(RI) //判断是接收中断产生
你没有清除中断标志位,所以单片机以为一直发送,所以有你的问题,要加上清除标志位才可以
if(RI) //判断是接收中断产生
RI=0; //标志位清零

回答2:

EA=0;
关掉中断
REN=0;
不允许接收
最后再加一句
while(1);
让他无限循环。

其实允许了中断,没有中断服务程序,C51会自动加上的。不过只有一句话RETI

回答3:

没有编写中断程序,却开放了中断,导致程序飞了。
另外,主程序缺少主循环,也要跑飞。
试试下面的:

void main()
{
uchar i;
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
SCON=0x50;
PCON=0x00;
TR1=1;
while(1) { //加上这行.
i=0;
while(Head[i]!=0x00) {
SBUF=Head[i] ;
while(TI==0);
TI=0;
i++;
}
}
}