最新單片機c語言延時程序實用

字號:

    無論是身處學校還是步入社會,大家都嘗試過寫作吧,借助寫作也可以提高我們的語言組織能力。范文書寫有哪些要求呢?我們怎樣才能寫好一篇范文呢?下面是小編為大家收集的優(yōu)秀范文,供大家參考借鑒,希望可以幫助到有需要的朋友。
    單片機c語言延時程序篇一
    c語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。那么用單片機c語言精確延時(定時)的方法都是怎樣的呢?以下僅供參考!
    由于單片機c語言下利用軟件延時不容易做到精確的定時,所以很多人在編寫延時子程序的時候不能好好的把握延時的具體時間。c語言下,延時程序主要有以下幾種:
    void delay(unsigned char k)
    {
    unsigned char i,k; //定義變量
    for(i=0;i<k;i++); //for循環(huán)語句
    }
    該程序在keil環(huán)境下,會先將c語言轉化成匯編語言,那么我們就可以根據匯編語言來計算出精確的`時間,轉化具體步驟如下:
    clr a ;指令1
    mov r7,a ;指令2
    loop:
    inc r7 ;指令3
    cjne r7,k,loop ;指令4
    這里,指令1,指令2和指令3各消耗1個機器周期,指令4消耗兩個機器周期(可查文末附錄表),而在12m的晶振下一個機器周期是1us,在這個過程中,指令1和指令2分別執(zhí)行1次,即消耗1+1us,而指令3和指令4分別執(zhí)行了k次,那么這樣加起來,這個延時子程序所消耗的具體時間就是t=1+1+(1+2)*k=3k+2us。
    呵呵,這樣說來,如果我們定義的k為100的話,這個延時子程序的精確時間就是302us。
    void delay(unsigned char i)
    {
    while(--i)
    {;}
    }
    同樣的道理,將其反匯編,可以看到,只有一條語句:djnz i,$;
    該語句消耗2us,一共執(zhí)行i次,所以總共消耗時間t=i*2us。
    下面的將形參換為整形int,這樣的話,反匯編所執(zhí)行的語句完全不同,用個具體的數字做例子:
    void delay()
    {
    unsigned int i=10000;
    while(--i)
    ;
    }
    反匯編后:
    4: unsigned int i=10000;
    c:0x0003 7f10 mov r7,#0x10
    c:0x0005 7e27 mov r6,#0x27
    5: while(--i)
    6: ;
    c:0x0007 ef mov a,r7
    c:0x0008 1f dec r7
    c:0x0009 7001 jnz c:000c
    c:0x000b 1e dec r6
    c:0x000c 14 dec a
    c:0x000d 4e orl a,r6
    c:0x000e 70f7 jnz c:0007
    1.r7經過10h(16)次循環(huán)減為0:
    t1=10h*(1+1+2+1+1+2)
    2.r6經過27h*256次循環(huán)減為0:
    t2=27h*256*(1+1+2+1+1+2)+27h*1
    3.最后r7的是變?yōu)?55,因此還要多出255次的循環(huán):
    t3=255*(1+1+2+1+1+2)
    4.加上之前消耗的2us,總消耗時間:
    t=2+10h*(1+1+2+1+1+2)+27h*256*(1+1+2+1+1+2)+27h*1+255*(1+1+2+1+1+2)
    =2+16*7+39*256*7+39*1+255*7
    =71826us
    大約為72ms吧
    如果定義一個unsigned int i,那么延時計算公式為t=2+(i%256)*7+(i/256)*256*7+i/256+255*7
    關于其他類型的延時程序都可以按照這個方法對時間進行較為精確的計算。
    s("content_relate");
    【用單片機c語言精確延時(定時)的方法】相關文章:
    單片機c語言的好處
    11-26
    如何優(yōu)化c語言(單片機)
    10-04
    如何提高單片機c語言代碼效率
    12-04
    c語言輸出菱形的方法
    11-24
    c語言的reduce方法應用
    11-20
    c語言的冒泡排序方法
    10-04
    c語言高效編程的方法
    11-25
    c語言的記憶方法指導
    11-10
    c語言數組方法
    10-06