新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)程序的無限循環(huán)問題

單片機(jī)程序的無限循環(huán)問題

作者: 時(shí)間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
有如下單片機(jī)程序,功能是通過串行口向外發(fā)送字符0、1、2、3、4、5、6、7、8、9,波特率:9600,無校驗(yàn)位,8位數(shù)據(jù)位,1位停止位。

#include
void Send(char signal)//數(shù)據(jù)發(fā)送函數(shù)
{
SBUF=signal;
while(TI==0);
TI=0;
}

本文引用地址:http://butianyuan.cn/article/201611/320208.htm

void main(void) //主函數(shù)
{

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]); //依次發(fā)送字符
}
}

通過閱讀程序可知,在執(zhí)行時(shí),單片機(jī)會(huì)向外發(fā)送一遍0—9共十個(gè)字符,用Keil仿真的結(jié)果也是這樣,但是將程序?qū)懭腴_發(fā)板實(shí)際運(yùn)行時(shí),就變成一遍遍地發(fā)送字符0—9,形成了死循環(huán)——很難解釋為什么會(huì)這樣。

為了糾正這種現(xiàn)象,不得不在程序末尾加上一句while(1),這樣才正常起來。

改后程序如下:

#include
void Send(char signal)//數(shù)據(jù)發(fā)送函數(shù)
{
SBUF=signal;
while(TI==0);
TI=0;
}

void main(void) //主函數(shù)
{

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]); //依次發(fā)送字符
}
while(1);
}

起碼通過這一現(xiàn)象可以知道,Keil的仿真并不一定能代表真實(shí)情況。



關(guān)鍵詞: 單片機(jī)程序無限循

評(píng)論


技術(shù)專區(qū)

關(guān)閉