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 子程式兩次,或者使用另一個外部迴圈來執行兩次。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP