您的位置 首页 资料

单片机程序的无限循环问题

有如下单片机程序,功能是通过串行口向外发送字符0、1、2、3、4、5、6、7、8、9,波特率:9600,无校验位,8位数据位,1位停止位。include

有如下单片机程序,功用是经过串行口向外发送字符0、1、2、3、4、5、6、7、8、9,波特率:9600,无校验位,8位数据位,1位中止位。

#include
void Send(char signal)//数据发送函数
{
SBUF=signal;
while(TI==0);
TI=0;
}

void main(void) //主函数
{

int i;
char a[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //字符表
TMOD=0x20;
SCON=0x40;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TR1=1;
for(i=0;i<10;i++)
{
Send(a[i]); //顺次发送字符
}
}

经过阅读程序可知,在执行时,单片机会向外发送一遍0—9共十个字符,用Keil仿真的成果也是这样,可是将程序写入开发板实践运行时,就变成一遍遍地发送字符0—9,形成了死循环——很难解说为什么会这样。

为了纠正这种现象,不得不在程序结尾加上一句while(1),这样才正常起来。

改后程序如下:

#include
void Send(char signal)//数据发送函数
{
SBUF=signal;
while(TI==0);
TI=0;
}

void main(void) //主函数
{

int i;
char a[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //字符表
TMOD=0x20;
SCON=0x40;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TR1=1;
for(i=0;i<10;i++)
{
Send(a[i]); //顺次发送字符
}
while(1);
}

最少经过这一现象能够知道,Keil的仿真并不一定能代表真实情况。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/261041.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部