新聞中心

        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://www.104case.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的仿真并不一定能代表真實情況。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 项城市| 四川省| 祁东县| 德阳市| 金门县| 盐山县| 闽侯县| 腾冲县| 囊谦县| 嘉义县| 连云港市| 勐海县| 岐山县| 海淀区| 东乌珠穆沁旗| 称多县| 邢台县| 木兰县| 通山县| 哈尔滨市| 泗水县| 龙海市| 博乐市| 澄江县| 巴彦县| 九寨沟县| 改则县| 海伦市| 枣阳市| 迁安市| 佛山市| 临西县| 高青县| 黔西县| 平凉市| 高阳县| 苍南县| 宁津县| 苍溪县| 金阳县| 凌云县|