基於 51 個微控制器的定時器設計

發布 科技 2024-03-27
5個回答
  1. 匿名使用者2024-02-07

    上面的答案很好。

  2. 匿名使用者2024-02-06

    使用定時器方法1時,(65536-x)的計算值超過256,即定時器的16位定時模式,因此需要向th0傳送高8位,向tl0傳送低位,因此要計算(65536-x)的高8位和低8位,(65536-x)256就是計算高8位, 而 (65536-x)%256 是計算低 8 位,所以寫成。

    th0 = (65536-x) 256(或 th1)。

    tl0 = (65536-x)%256(或 tl1)。

  3. 匿名使用者2024-02-05

    這其實很簡單,你只需要知道乙個條件:晶振頻率。

    因為51微控制器的機器週期計算公式是12晶振頻率MHz,如果晶體振盪器是12MHz,那麼機器週期是12(12 10 6)=1us,也就是說計數器一次不算1us。

    一般來說,在12MHz晶體振盪器下,16位定時器的滿數為65536次,每次1us,最大可以定時,則65536減去多少定時,如(65536-x)256,即定時x微秒。

    所以如果晶體振盪器不是12MHz,將上面的x乘以12個晶體振盪器,得到的值就是時序持續時間。 原理是一樣的。

    如果您不明白什麼,請隨時回覆我。

  4. 匿名使用者2024-02-04

    沒錯。 雖然定時器定時比程式延遲更準確,但這並不意味著沒有錯誤。 無論如何,錯誤總是客觀的。 以下是另外兩點:

    1.原始程式有錯誤。 定時器模式0的最大計數值為2 13=8192us,初始安裝值為e018h=57368us,即定時的初始載入值遠大於最大計數值。

    如果要在模式 0 下計時 1ms=1000us,初始安裝值應為 8192-1000=7192=1c18h,其他語句的執行可以忽略不計,因為它是 2 3us 級別(因子中斷程式中的三個語句只需要 6us)。 你可能會問:為什麼不把這些時間轉換成計時器的初始值呢?

    答案是沒有必要。 無論如何轉換,都有誤差,更不用說機器週期的時間也是估計的。

    2.如果要更準確,可以使用方法2(自動重新載入初始值)。

  5. 匿名使用者2024-02-03

    你對你的理解是對的。

    關於51定時器的重新載入,典型的解決方案是動態重新載入。 也就是說,當您續訂計數的初始值時,您應該從要載入的總數中減去該計數,該計數是從上乙個溢位準備好執行重新載入的初始值的時間開始的。

    例如,如果中斷間隔為 1000 次計數,則重新載入的初始值為 -1000。 在中斷中,-1000不能直接重灌,而是-(1000-th tl),即過載值為-1000+th tl。

    isr_t0:

    push psw

    clr tr0

    xch a, tl0

    add a, #low(-1000+7)

    xch a, tl0

    xch a, th0

    位址 A,高(1000+7) tr0 已暫停 7 個週期,需要新增。

    xch a, th0

    set tr0

    CPL 可以執行使用者想要執行的事件,但持續時間太長。

    pop psw

    當然,也不能完全說這本書是錯的,只能說書中的例子不嚴謹。

相關回答
6個回答2024-03-27

2] 籃球比賽得分手系列。

1]紅外線無線遙控籃球比賽記分員。 >>>More

5個回答2024-03-27

採用DDS晶元AD9850 10元乙個,程式控制。

16個回答2024-03-27

定時中斷,外部中斷?

12個回答2024-03-27

如果定時器計數值不夠,可以先設定1的總和數,如1ms,再加乙個數字到10到100ms,得到1s時間。

8個回答2024-03-27

你好! 看看你想做什麼?