久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機程序的無限循環問題

單片機程序的無限循環問題

作者: 時間:2016-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;
}

本文引用地址:http://cqxgywz.com/article/201611/320208.htm

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的仿真并不一定能代表真實情況。



評論


技術專區

關閉