新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > c51的精確延時

        c51的精確延時

        作者: 時間:2016-11-27 來源:網絡 收藏
        用c語言為單片機編程無疑十分節約時間,可在很短的時間內開發出較高效的代碼,對于程序的維護和擴充也較匯編語言方便許多。

        但c語言也有它的不足之處,那就是在時間的精確控制上。要想用c實現精確的延時,只能把c的函數編譯成匯編語言,然后按照匯編語言計算其執行時間。本人就按照這種方法,編寫了幾個51單片機的c語言精確延時函數。

        本文引用地址:http://www.104case.com/article/201611/322200.htm

        注:1.編譯軟件為"Keil uVision3"(Keil uVision2也試用)。用其他編譯軟件的話就不準了。

        2.需要包含頭文件

        3.所有函數的延時時間都是在12Mhz晶振下計算的,如用其他晶振需進行換算。

        4.函數的執行時間為“函數的參數”乘以精確到的時間。例如delayms(unsigned char n)函數,其精確度為1ms,如果寫入語句delayms(4),那就是延時4ms。

        5.計算出來的延時時間不包括函數調用與返回的時間。如果函數的精確度較高,且參數較小,那么實際延時時間就可能與計算的時間差很遠。

        (1)精確到2us的延時(12MHz)

        void delayus(unsigned char n)

        { while(--n);

        }

        (2)精確到100us的延時(12MHz)

        void delay100us(unsigned char n)

        { unsigned char i;
        for(;n;n--)
        { _nop_();
        for(i=46;i;i--);
        }
        }

        (3)精確的半毫秒延時函數(12MHz)

        void delay1_2ms(unsigned char n)

        { unsigned char i;
        for(;n!=0;n--)
        { _nop_();
        for(i=246u;i!=0;i--);
        }
        }

        (4)精確的毫秒延時函數(12MHz)

        void delayms(unsigned char n)

        { unsigned char i;
        for(;n!=0;n--)
        { for(i=248u;i!=0;i--);
        for(i=248u;i!=0;i--);
        }
        }



        關鍵詞: c51精確延

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 洪洞县| 醴陵市| 无锡市| 西青区| 马公市| 财经| 泌阳县| 阳原县| 茂名市| 昌吉市| 包头市| 汝城县| 贵定县| 类乌齐县| 海兴县| 香河县| 锡林浩特市| 罗平县| 揭东县| 海丰县| 东明县| 休宁县| 阜城县| 金阳县| 美姑县| 清水河县| 延安市| 峡江县| 晋州市| 眉山市| 榆树市| 信宜市| 伊通| 安义县| 泾川县| 青河县| 敦化市| 中方县| 若尔盖县| 台北县| 霍山县|