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+ 次浏览

启动您的职业生涯

完成课程后获得认证

开始
广告