8085中产生时间延迟
在本节中,我们将看到如何使用8085程序生成时间延迟。该延迟将在不同的地方使用,以模拟时钟,计数器或其他区域。
当执行延迟子例程时,微处理器不执行其他任务。对于延迟,我们使用指令执行时间。在循环中执行一些指令,会产生延迟。有一些产生延迟的方法。这些方法如下。
使用NOP指令
使用8位寄存器作为计数器
使用16位寄存器对作为计数器。
使用NOT指令:
NOP指令的主要用途之一是在延迟生成中。NOP指令需要四个时钟脉冲来进行读取,解码和执行。如果8085MPU以6MHz时钟频率工作,则内部时钟频率为3MHz。因此,我们可以轻松地确定每个时钟周期为1/3微秒。因此,NOP将在1/3*4=1.333µs内执行。如果我们将整个存储器与NOP指令一起使用,则将执行64KNOP指令。这样,总的延迟将是216*1.333µs=87359.488µs,尽管时间不是很长,程序大小也很大。因此,这种类型的NOP指令可用于生成几毫秒的短时间延迟。
使用8位寄存器作为计数器:
计数器是另一种产生时间延迟的方法。在这种情况下,程序大小较小。因此,通过这种方法,我们可以在更少的空间中产生更多的时间延迟。以下程序将演示使用8位计数器的时间延迟。
MVI B,FFH LOOP: DCR B JNZ LOOP RET
在这里,第一条指令将执行一次,它将占用7个T状态。DCRC指令采用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位寄存器对作为计数器:
除了使用8位计数器,我们还可以使用16位寄存器对来完成此类任务。使用这种方法可以产生更多的时间延迟。此方法可用于获取超过0.5秒的延迟。让我们来看一个例子。
循环:DCXB
MOVA,B
ORAC
JNZ循环
RET
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.5s的延迟。
在不同的程序中,我们需要1s的延迟。在这种情况下,该程序可以执行两次。我们可以调用Delay子例程两次,也可以使用另一个外部循环执行两次。