当前位置: 首页 > 编程笔记 >

8085中产生时间延迟

晋坚
2023-03-14
本文向大家介绍8085中产生时间延迟,包括了8085中产生时间延迟的使用技巧和注意事项,需要的朋友参考一下

在本节中,我们将看到如何使用8085程序生成时间延迟。该延迟将在不同的地方使用,以模拟时钟,计数器或其他区域。

当执行延迟子例程时,微处理器不执行其他任务。对于延迟,我们使用指令执行时间。在循环中执行一些指令,会产生延迟。有一些产生延迟的方法。这些方法如下。

  • 使用NOP指令

  • 使用8位寄存器作为计数器

  • 使用16位寄存器对作为计数器。

使用NOT指令

NOP指令的主要用途之一是在延迟生成中。NOP指令需要四个时钟脉冲来进行读取,解码和执行。如果8085 MPU以6MHz时钟频率工作,则内部时钟频率为3MHz。因此,我们可以轻松地确定每个时钟周期为1/3微秒。因此,NOP将在1/3 * 4 = 1.333µs内执行。如果我们将整个存储器与NOP指令一起使用,则将执行64K NOP指令。这样,总的延迟将是2 16 * 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位寄存器对作为计数器

除了使用8位计数器,我们还可以使用16位寄存器对来完成此类任务。使用这种方法可以产生更多的时间延迟。此方法可用于获取超过0.5秒的延迟。让我们来看一个例子。

程序
时间(T-状态)  
             LXI B,FFFFH
循环:DCX B
            MOV A,B
            ORA C
            JNZ循环
            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.5s的延迟。

在不同的程序中,我们需要1s的延迟。在这种情况下,该程序可以执行两次。我们可以调用Delay子例程两次,也可以使用另一个外部循环执行两次。

 类似资料:
  • 问题内容: 我想知道一段时间后如何调用函数。我已经尝试过time.sleep(),但是这会暂停整个脚本。我希望脚本继续进行,但是??? secs之后调用一个函数并同时运行其他脚本 问题答案: 看一看。它在新线程中运行您的函数。

  • 我一直在监视我的微服务应用程序的端到端延迟。每个服务通过ActiveMQ Artemis队列松散耦合。 服务1作为HTTPendpoint侦听并生成队列1。服务2从队列1消费,修改消息,并生成到队列2。服务3从队列2消耗。每个服务在单独的表中向db插入一行。从那里我还可以监视延迟。因此,“端到端”将进入“服务1”,并从“服务3”中出来。 每个服务处理时间保持稳定,并且大多数消息具有几毫秒的合理e2

  • 问题内容: 如何在Python中进行时间延迟? 问题答案: 这是另一个示例,其中某件事大约每分钟运行一次:

  • 问题内容: 我的网站上有这片js可以切换图像,但是第二次单击图像时需要延迟。延迟应为1000ms。因此,您将单击img.jpg,然后将出现img_onclick.jpg。然后,您将单击img_onclick.jpg图像,然后应该有1000ms的延迟,然后才能再次显示img.jpg。 这是代码: 问题答案: 用途 :

  • 我经常看到两个参与者之间有很长的延迟(60+秒),从第一个参与者发送消息到第二个参与者,以及第二个参与者的方法随消息实际调用时。我可以寻找哪些类型的东西来调试这个问题? ActorA的每个实例都使用为ActorB发送一条消息。在ActorA中调用方法并在ActorB的开始处获得另一个时间戳之后,我立即收集了一个毫秒时间戳(使用)。这些时间戳之间的间隔一致为60秒或更长。具体地说,当按时间绘制时,该

  • 本文向大家介绍在生产者中,何时发生QueueFullException?相关面试题,主要包含被问及在生产者中,何时发生QueueFullException?时的应答技巧和注意事项,需要的朋友参考一下 答:每当Kafka生产者试图以代理的身份在当时无法处理的速度发送消息时,通常都会发生QueueFullException。但是,为了协作处理增加的负载,用户需要添加足够的代理,因为生产者不会阻止。