單片機中C語言延時函數

2021-01-12 電子產品世界

單片機C語言延時程序計算2009-11-02 22:15單片機C語言延時程序用C語言寫出來程序非常的簡練,它是一種模塊化的語言,一種比彙編更高級的語言,但是就是這樣一種語言也還是有它不足之處:它的延時很不好控制,我們常常很難知道一段延時程序它的精確延時到底是多少,這和彙編延時程序沒法比。但有時後寫程序又不得不要用到比較精確的延時,雖然說可以用混合編程的方式解決,但這種方式不是每個人都能掌握,且寫起來也麻煩。所以,通過測試我給大家提供一個延時子程序模塊,並以此給一個出我們經常用到的延時的數據表格。(注意:表格中的數據只適合我的延時模塊,對其他的延時程序不適用,切忌!!!!!!!!別到時候延時不對來罵我)

延時模塊:其中問號代表要填的數,要延時多少,到表格中去找數據,然後填上就OK!切忌3條FOR語句不能顛倒順序

本文引用地址:http://www.eepw.com.cn/article/201611/318536.htm

void Delay()
{
unsigned char a,b,c;
for(a=0;a;a++)
for(b=0;b;b++)
for(c=0;c;c++);
}

數據表如下
//
延時時間 a的值 b的值 c的值 延時誤差(us)
10us 1 1 1 -0.5
20us 1 1 8 0
30us 1 1 15 +0.5
40us 2 1 9 0
50us 1 1 28 0
60us 1 1 35 +0.5
70us 1 1 42 +1
80us 1 1 48 0
90us 1 1 55 +0.5
100us 1 1 61 -0.5
200us 1 1 128 0
300us 3 1 63 +1.5
400us 2 1 129 0
500us 5 1 63 +0.5
600us 6 1 63 0
700us 7 1 63 -0.5
800us 1 3 175 +0.5
900us 9 1 63 -1.5
1ms 1 3 219 -1.5
2ms 2 3 220 +3
3ms 3 3 220 +3
Xms X 3 220 +3
(X的範圍為2到255)

基本上我們平時用到的延時都在這裡了,每種延時的誤差都很小,最大也不過3us,有的甚至沒有誤差,已經很精確了,如果想延時1秒鐘,你可以連續調用延時250ms的程序4次,總共延時誤差12us,這樣的誤差已經不算誤差了,用彙編語言編寫還達不到這個程度。

現在你不再為延時不精確擔憂了,參照表中的數據寫延時,想延時多少就能延時多少。

再次重申:此表格是根據我的延時模塊編寫,這也是大多數朋友都習慣用的一個模塊,如果你用其他模塊或是改動了我的模塊,延時都不準的,不信大家可以試試!!!


相關焦點

  • 51單片機C語言延時函數
    C程序中可使用不同類型的變量來進行延時設計。經實驗測試,使用unsigned char類型具有比unsigned int更優化的代碼,在使用時應該使用unsigned char作為延時變量。
  • 單片機C語言精確延時值的計算
    關於單片機C語言的精確延時,網上很多都是大約給出延時值沒有準確那值是多少,也就沒有達到精確高的要求,而51hei給出的本函數克服了以上缺點,能夠精確計數出要延時值且精確達到1us,本舉例所用CPU為STC12C5412系列12倍速的單片機,只要修改一下參數值其它系例單片機也通用
  • 單片機C語言延時分析
    標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在彙編語言中很容易實現,寫幾個nop就行了。
  • 單片機c語言中nop函數的使用方法和延時計算
    標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在彙編語言中很容易實現,寫幾個nop就行了。本文引用地址:http://www.eepw.com.cn/article/201611/318535.htm在keil C51中,直接調用庫函數:#include // 聲明了void _nop_(void);_nop_(); // 產生一條NOP指令 作用:對於延時很短的,要求在us級的,採用「_nop_」函數,
  • 單片機提高C語言代碼效率的方法
    #i ncludereg52.h>//包含頭文件sbit led=P2^0;//定義位變量led,使其關聯單片機管腳P2.0void Delayms(unsigned int t);//定義延時函數int main(void)//主函數(C語言程序入口函數)
  • 單片機C語言中的空語句
    標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在彙編語言中很容易實現,寫幾個nop就行了。
  • 關於51單片機中C語言編寫的精確延時函數
    有些特殊的應用會用到比較精確的延時(比如DS18B20等),而C不像彙編,延時精準度不好算。本人經過反覆調試,對照KEIL編譯後的彙編源文件,得出了以下幾條精確延時的語句(絕對精確!
  • 單片機C語言模塊化編程方法
    .h文件中給出模塊的接口.在上面的例子中,向LCD寫入字符函數:wr_lcd (uchar dat_comm,uchar content)就是一個接口函數,因為其它模塊會調用它,那麼.h文件中就必須將這個函數聲明為外部函數(使用extrun關鍵字修飾),另一個延時函數:void delay (uint us)只是在本模塊中使用(本地函數,用static關鍵字修飾),因此它是不需要放到
  • PIC單片機C語言程序實例
    編者按:為了幫助具有PIC單片機彙編語言知識的技術人員或工程師,快速掌握利用C語言編寫PIC單片機程序的方法,本刊特推出《PIC單片機C語言程序設計》系列連載文章。丈中給出的C語言程序實例,均是可執行的,讀者可以放心引用。      一、彙編語言與C語言      早期的單片機程序多採用彙編語言編寫。
  • 51單片機教程之基礎編(基於C語言)
    很多初學者有很多的疑惑,我究竟是先學C語言,還是彙編語言?其實我告訴你,本人認為,先學C語言!為什麼呢?C語言是目前使用最廣泛的中級語言,就連現在的windows7也是C語言編寫的,C語言易讀性好,無需對單片機內部結構十分熟悉即會編程,可移植性高,便於維護。C語言只有32個關鍵字,9種控制語句,而且編譯器提供了很多函數庫,使用十分方便。
  • PIC單片機C語言程序設計(2)
    五、C語言的標識符和關鍵字本文引用地址:http://www.eepw.com.cn/article/171168.htm  一個完整的PIC單片機C語言程序,通常由包含文件(即頭文件1,變量定義、變量說明、函數定義、函數體和注釋等六部分等組成。
  • 用C51編寫單片機延時函數
    參考了51單片機 Keil C 延時程序的簡單研究,自己也親身測試和計算了一些已有的延時函數。這裡假定單片機是時鐘頻率為12MHz,則一個機器周期為:1us.
  • 單片機C語言知識點全攻略(三)
    第八課、運算符和表達式(位運算符)  學過彙編的朋友都知道彙編對位的處理能力是很強的,但是單片機C語言也能對運算對象進行按位操作,從而使單片機C語言也能具有一定的對硬體直接進行操作的能力。位運算符的作用是按位對變量進行運算,但是並不改變參與運算的變量的值。如果要求按位改變變量的值,則要利用相應的賦值運算。
  • 編寫延時函數的簡單方法
    如果從keil裡看了c語言的反彙編代碼然後根據晶振和指令計算延時的時間這樣雖然非常的準確但是相當的麻煩而且容易搞錯,我這裡介紹一個最簡單的方法.可以驗證你的延時函數這裡用一個例程詳細介紹一下。此過程中需要注意,單片機晶振的選擇,因為for循環裡指令的執行時間和晶振有直接關係,本例中晶振使用11.0592M。
  • 單片機c語言教程:建立你的第一個KeilC51項目
    KEIL uVISION2 是眾多單片機應用開發軟體中優秀的軟體之一,它支持眾多不一樣公司的MCS51架構的晶片,它集編輯,編譯,仿真等於一體,同時還支持,PLM,彙編和C語言的程序設計,它的界面和常用的微軟 VC++的界面相似,界面友好,易學易用,在調試程序,軟體仿真方面也有很強大的功能。本站提供的單片機c語言教程都是基於keilc51的。
  • 單片機延時程序經驗
    標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在彙編語言中很容易實現,寫幾個nop就行了。
  • 單片機C語言程序設計:LED 模擬交通燈
    sbit GREEN_A=P0^2;sbit RED_B=P0^3; //南北向燈sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;uchar Flash_Count=0,Operation_Type=1; //閃爍次數,操作類型變量//延時
  • 單片機程序C語言與彙編語言混合編程
    中C語言與彙編語言混合編程本文引用地址:http://www.eepw.com.cn/article/201611/322505.htm1.C語言函數和彙編語言函數相互調用在這個示例中C語言函數main()調用彙編語言函數get_rand()以得到一個隨機數;彙編語言函數get_rand()首先調用C語言的標準庫函數rand()得到一個整型隨機值,然後用調用C語言函數mult()的方法把這個隨機值乘以main()函數傳遞給自己的實參,並把乘積值返回給
  • 單片機c語言教程:C51數據類型
    每寫一個程序,總離不開數據的應用,在學習 c51 語言的過程中掌握理解數據類型也是 很關鍵的。先看表 3-1,表中列出了 KEIL uVision2 單片機c語言編譯器所支持的數據類型。在標準C語言中基本的數據類型為 char,int,short,long,float 和 double,而在c51編譯器中int 和 short 相同,float 和 double 相同,這裡就不列出說明了。
  • 51單片機C語言教程(四) 數據類型
    先來簡單說說C語言的標識符和關鍵字。標識符是用來標識源程序中某個對象的名字的,這些對象可以是語句、數據類型、函數、變量、數組等等。C語言是大小字敏感的一種高級語言,如果我們要定義一個定時器1,可以寫做"Timer1",如果程序中有"TIMER1",那麼這兩個是完全不同定義的標識符。