微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机程序的无限循环问题

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

时间:11-23 来源:互联网 点击:
有如下单片机程序,功能是通过串行口向外发送字符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的仿真并不一定能代表真实情况。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top