精品丰满熟女一区二区三区_五月天亚洲欧美综合网_亚洲青青青在线观看_国产一区二区精选

  • <menu id="29e66"></menu>

    <bdo id="29e66"><mark id="29e66"><legend id="29e66"></legend></mark></bdo>

  • <pre id="29e66"><tt id="29e66"><rt id="29e66"></rt></tt></pre>

      <label id="29e66"></label><address id="29e66"><mark id="29e66"><strike id="29e66"></strike></mark></address>
      學習啦>學習英語>專業(yè)英語>計算機英語>

      c語言中delay的用法

      時間: 長思709 分享

        C語言作為一門新型高級編程語言,在計算機軟件編程中具有較為廣泛的應用和實現(xiàn)。下面小編就跟你們詳細介紹下c語言中delay的用法,希望對你們有用。

        c語言中delay的用法如下:

        假設(shè)一個延時函數(shù)如下:

        void delay()

        {

        uint i;

        for(i=0;i<20000;i++);

        }

        我們怎么來算呢,先將20000轉(zhuǎn)成16進制,得到4E20,然后將高字節(jié)4E乘以6得到468D,再將468+2=470,然后將470D*20HEX(即32D)=15040;所心這個延時函數(shù)總共要執(zhí)行15040個周期,假設(shè)所用的晶振為12MHZ,則該段函數(shù)總延時:15.04ms。

        有了這個公式我們?nèi)绻胍O(shè)定指定的延時長度就可以用它的己知公式確定。即:總時間=[(6*i值的高8位)+2]*i的低8位。

        例如:設(shè)要延時125ms。

        我們將低字節(jié)先賦值200D*(即:C8),然后再算高低節(jié)的定值,由式中可知125ms=200*((i值的高字節(jié)*6)+2),又可推算出(高低節(jié)*6)+2的總延遲時間應等于625us,將625/6=104.1666,取整數(shù)得到104,將104轉(zhuǎn)成16進制得到68H,再將高字節(jié)和低字節(jié)組合起來即得到了定值,即:68C8HEX,代入函數(shù)即如下:

        void delay()

        {

        uint i;

        for(i=0;i<0x68C8;i++);

        }

        如果寫直進行就要將68C8轉(zhuǎn)成10進制,即:26824,代入后得到:

        void delay()

        {

        uint i;

        for(i=0;i<0x26824;i++);

        在c語言中嵌入一段匯編的延時程序呀,你自己看看書,很簡單的

        用在單片機里的可以C和匯編混合使用,因為用匯編編寫延時要準確些,所以你不妨寫一個匯編程序,然后再調(diào)用它好了,要用C來編精確的延時確實是比較難的哦.呵呵

        誰說C語言不能精確延時,用51單片機的定時/計數(shù)器一或者用定時/計數(shù)器2的工作方式2,自動再裝入8位計數(shù)器,就可以精確延時,別說1MS了就是100um也能精確做到。

        其實很簡單,采用定時器,將需要定時時間算好后寫入單片機中斷程序中即可,這種方法可以實現(xiàn)精確定時,最終的誤差僅由晶振來確定了。

        不錯,用定時器最準確。但是定時器數(shù)量有限,有時候不見得能夠用。比如溫度檢測(尤其是變化比較大、快的),一個定時器就得一直不停檢測。這個時候如果另外一個定時器有正好分配的其他任務,就只有用其他方法延時了。

        空循環(huán)就行了

        如while(i--);根據(jù)i的不同決定了延時長短

        不過C的延時不是非常準確,你得根據(jù)反匯編,看匯編語句的數(shù)量和指令周期來計算時間

        也可以是

        void mDelay(unsigned int Delay) //Delay = 1000 時間為1S

        {

        unsigned int i;

        for(;Delay>0;Delay--)

        {

        for(i=0;i<124;i++)

        {;}

        }

        }

      522739