單片機C語言延時程序計算2009-11-02 22:15單片機C語言延時程序用C語言寫出來程序非常的簡練,它是一種模塊化的語言,一種比匯編更高級的語言,但是就是這樣一種語言也還是有它不足之處:它的延時很不好控制,我們常常很難知道一段延時程序它的精確延時到底是多少,這和匯編延時程序沒法比。但有時後寫程序又不得不要用到比較精確的延時,雖然說可以用混合編程的方式解決,但這種方式不是每個人都能掌握,且寫起來也麻煩。所以,通過測試我給大家提供一個延時子程序模塊,並以此給一個出我們經常用到的延時的數據表格。(注意:表格中的數據只適合我的延時模塊,對其他的延時程序不適用,切忌!!!!!!!!別到時候延時不對來罵我)
延時模塊:其中問號代表要填的數,要延時多少,到表格中去找數據,然後填上就OK!切忌3條FOR語句不能顛倒順序
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,這樣的誤差已經不算誤差了,用匯編語言編寫還達不到這個程度。
現在你不再為延時不精確擔憂了,參照表中的數據寫延時,想延時多少就能延時多少。
再次重申:此表格是根據我的延時模塊編寫,這也是大多數朋友都習慣用的一個模塊,如果你用其他模塊或是改動了我的模塊,延時都不准的,不信大家可以試試!