8085 中的時間延遲產生


在本節中,我們將學習如何使用 8085 程式生成時間延遲。延遲將用於模擬時鐘、計數器或其他一些領域的不同位置。

當執行延遲子程式時,微處理器不會執行其他任務。對於延遲,我們使用指令執行時間。在迴圈中執行一些指令,從而產生延遲。有一些生成延遲的方法。這些方法如下所示。

  • 使用 NOP 指令

  • 使用 8 位暫存器作為計數器

  • 使用 16 位暫存器對作為計數器。

使用 NOT 指令:

NOP 指令的主要用途之一是生成延遲。NOP 指令需要四個時鐘脈衝來完成取指、解碼和執行。如果 8085 MPU 工作在 6MHz 時鐘頻率下,則內部時鐘頻率為 3MHz。因此,我們可以很容易地確定每個時鐘週期為 1/3 微秒。因此,NOP 將在 1/3 * 4 = 1.333µs 內執行。如果我們使用整個記憶體和 NOP 指令,則將執行 64K NOP 指令。然後總延遲將為 216 * 1.333µs = 87359.488µs,儘管時間並不大,但程式大小也很大。因此,這種型別的 NOP 指令可用於生成幾毫秒的短時間延遲。

使用 8 位暫存器作為計數器:

計數器是另一種生成時間延遲的方法。在這種情況下,程式大小更小。因此,在這種方法中,我們可以在較小的空間內生成更多的時間延遲。以下程式將演示使用 8 位計數器的時間延遲。

      MVI B,FFH
LOOP: DCR B
      JNZ LOOP
      RET

這裡,第一條指令將執行一次,它將花費 7 個 T 狀態。DCR C 指令花費 4 個 T 狀態。這將執行 255 (FF) 次。當 JNZ 指令跳轉時,它將花費 10 個 T 狀態(它跳轉 254 次),否則它將花費 7 個 T 狀態。RET 指令花費 10 個 T 狀態。

7 + ((4*255) + (10*254)) + 7 + 10 = 3584。因此,時間延遲將為 3584 * 1/3µs = 1194.66µs。因此,當我們需要一些小的延遲時,我們可以使用此技術,並在 FF 的位置使用其他值。

此技術也可以使用一些巢狀迴圈來獲得更大的延遲。以下程式碼顯示瞭如何在一個迴圈中將一些延遲放入其他迴圈中。

    MVI B,FFH
L1: MVI C,FFH
L2: DCR C
    JNZ L2
    DCR B
    JNZ L1
    RET

從此程式碼塊中,如果我們計算延遲,它將大約為 305µs 延遲。它延長了延遲時間。

使用 16 位暫存器對作為計數器:

我們可以使用 16 位暫存器對來完成使用 8 位計數器的那種任務。使用這種方法可以生成更多的時間延遲。此方法可用於獲得超過 0.5 秒的延遲。讓我們來看一個例子。

程式
時間 (T 狀態)
LXI B,FFFFH
LOOP: DCX B
MOV A,B
ORA C
JNZ LOOP
RET
10
6
4
4
10(跳轉),7(跳過)
10

在上表中,我們放置了 T 狀態。從該表中,如果我們計算時間延遲,它將是這樣的

10 + (6 + 4 + 4 + 10) * 65535H – 3 + 10 = 17 + 24 * 65535H = 1572857。因此,時間延遲將為 1572857 * 1/3µs = 0.52428s。這裡我們得到了大約 0.5 秒的延遲。

在不同的程式中,我們需要 1 秒的延遲。在這種情況下,此程式可以執行兩次。我們可以呼叫 Delay 子程式兩次,或者使用另一個外部迴圈來執行兩次。

更新於:2019-07-30

26K+ 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.