在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 軟件延時(shí)的誤區(qū)

            軟件延時(shí)的誤區(qū)

            作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
            通常在大學(xué)里學(xué)習(xí)單片機(jī)編程,老師都是教導(dǎo)要寫程序流程,而且寫出來的流程幾乎是一條長龍偶爾附加點(diǎn)分支判斷。這樣寫出來的程序條理比較清晰、易懂,但是通常問題多多,比如我突然間要加點(diǎn)東西進(jìn)去,發(fā)現(xiàn)系統(tǒng)不正常了。

            往往這些問題都是整個(gè)流程上附加的延時(shí)過多導(dǎo)致的。延時(shí)程序是比較直觀明了的程序,但是也破壞單片機(jī)的整機(jī)性能,因?yàn)檠訒r(shí)單片機(jī)處于全速運(yùn)行狀態(tài)。

            本文引用地址:http://www.biyoush.com/article/201611/316566.htm

            我現(xiàn)在的腦海想起以前寫的流程:初始化->顯示->按鍵->其他功能->結(jié)束。

            1.比如說顯示,肉眼不可分辨是50HZ以上,所以說用4個(gè)數(shù)碼管動(dòng)態(tài)顯示平均每個(gè)顯示是5ms。按照以前的觀點(diǎn)是這樣寫的 第一個(gè)數(shù)碼管點(diǎn)亮->延時(shí)幾毫秒、滅第一個(gè)、點(diǎn)亮第二個(gè)->...->延時(shí)、滅最后個(gè)、點(diǎn)亮第一個(gè)。 如果8個(gè)數(shù)碼管的動(dòng)態(tài)顯示,豈不是得有 8 * 幾毫秒的 延時(shí)。

            2.還有個(gè)按鍵,按鍵得有個(gè)去除抖動(dòng),通常是軟件延時(shí),大約在20ms, 如果在加上顯示的幾十毫秒,那這延時(shí)是相當(dāng)恐怖的。

            3.其他功能函數(shù)也是有附帶延時(shí),特別是驅(qū)動(dòng)程序,比如MAX7279讀取操作都是需要一定延時(shí),但是這種延時(shí)都是在us級(jí)別,對(duì)比與ms級(jí)別可以忽略。

            筆者建議寫程序,特別寫到延時(shí)程序,考慮下你的延時(shí)得多久,如果是ms級(jí)別,考慮用定時(shí)器中斷處理。

            比如說顯示程序。假如8個(gè)數(shù)碼管動(dòng)態(tài)顯示。那么你就得考慮20ms內(nèi)8個(gè)數(shù)碼管刷新一次,那么意味著每個(gè)數(shù)碼管顯示時(shí)間為2.5ms。

            那么程序如下:

            volatile unsigned char time_2500_flag; //2.5ms標(biāo)志

            void TimerA(void) //定時(shí)器初始化

            {

            //初始化,配置為500us中斷一次

            }

            #pragma interrupt_handler TimerA_ISR:NUM
            void Timer1_ISR(void) //中斷服務(wù)程序

            {

            static unsigned char cnt = 0;

            //reload 重新賦值

            if (++cnt > 5)

            {

            cnt = 0;

            time_2500_flag = 1;

            }

            }

            void Display(void)

            {

            ;

            }

            void main(void)

            {

            //初始化

            for (;;)

            {

            if (time_2500_flag == 1)

            {

            time_2500_flag = 0;

            Display();

            }

            }

            }

            程序?qū)懙竭@里。

            顯示程序這里要做特別處理,執(zhí)行一次顯示程序,數(shù)碼管依次點(diǎn)亮就OK。



            關(guān)鍵詞: 軟件延時(shí)誤

            評(píng)論


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

            關(guān)閉