回覆列表
  • 1 # 我是阿嘛

    C語言程式:

    #include

    void main (void)

    {

    TMOD = 0x10;

    TH1 = (-50000>>8);

    TL1 = -50000;

    TCON = 0x40;

    IE = 0x88;

    while(1);

    }

    void T1_int (void) interrupt 3

    {

    TH1 = (-50000>>8);

    TL1 = -50000;

    }

    彙編程式如下:

    ORG 0000H

    AJMP MAIN

    ORG 001BH

    AJMP T1INT

    ORG 0100H

    MAIN:

    MOV TMOD, #10H

    MOV TH1, #HIGH(-50000)

    MOV TL1, #LOW(-50000)

    MOV TCON, #40H

    MOV IE, #88H

    AJMP $

    T1INT:

    PUSH ACC

    MOV TH1, #HIGH(-50000)

    MOV TL1, #LOW(-50000)

    POP ACC

    RETI

    擴充套件資料:

    Keil C51程式設計中幾種精確延時方法

    延時通常有兩種方法:一種是硬體延時,要用到定時器/計數器,這種方法可以提高CPU的工作效率,也能做到精確延時;另一種是軟體延時,這種方法主要採用迴圈體進行。

    使用定時器/計數器實現精確延時

    微控制器系統一般常選用11.059 2 MHz、12 MHz或6 MHz晶振。第一種更容易產生各種標準的波特率,後兩種的一個機器週期分別為1 μs和2 μs,便於精確延時。

    本程式中假設使用頻率為12 MHz的晶振。最長的延時時間可達216=65 536 μs。若定時器工作在方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重灌定時初值的時間(重灌定時器初值佔用2個機器週期)。

    在實際應用中,定時常採用中斷方式,如進行適當的迴圈可實現幾秒甚至更長時間的延時。使用定時器/計數器延時從程式的執行效率和穩定性兩方面考慮都是最佳的方案。但應該注意,C51編寫的中斷服務程式編譯後會自動加上PUSH ACC、PUSH PSW、POP PSW和POP ACC語句。

    執行時佔用了4個機器週期;如程式中還有計數值加1語句,則又會佔用1個機器週期。這些語句所消耗的時間在計算定時初值時要考慮進去,從初值中減去以達到最小誤差的目的。

  • 中秋節和大豐收的關聯?
  • 我現在用的是iphone 7plus,想換手機nova5pro,p30pro,還是9月蘋果,好糾結,推薦一下可以嗎?