【问题标题】:How to make a delay in assembly for 8051 microcontrollers?如何延迟 8051 微控制器的组装?
【发布时间】:2015-06-03 01:02:11
【问题描述】:

我在计算延迟时遇到问题。当我为 8051 微控制器使用 1MHz 时钟速度时,我想延迟 0.5 秒。

我使用 proteus 进行模拟,使用 avr studio 为 atmel 微控制器进行汇编编码。

例如此代码适用于 8MHz 时钟微控制器

Delay_15mS:
LDI dly1,  120  ; 
Delay1:
    LDI  dly2, 250  ;
Delay2:
    DEC     dly2 ; 
    NOP  ; 
    BRNE   Delay2  ; 

    DEC   dly1 ;
    BRNE    Delay1  ; 
RET

你能教我如何计算这个延迟需要的时间吗?所以我可以在 1 MHz 时将 1 设为 0.5 秒延迟

谢谢

【问题讨论】:

  • this answer 中的第一个答案可能会有所帮助。如果您想了解更多信息,请尝试searching

标签: 8051


【解决方案1】:

0,5 s 是微控制器(即使是慢速)生命中的永恒。

您是否意识到在这样的等待中您将无法做任何事情? (称为被动等待)

Phil Wetzel 在其评论中为您提供了一个链接,该链接指向描述中断的帖子。这就是你需要的。

然而,需要阅读数据表才能知道如何配置时钟系统、如何配置定时器、如何设置和写入此定时器的中断...

但是回答你的问题(如果你的代码 sn-p 是正确的(?)): 对于 8 MHz 系统上的 15 ms 超时,您将实现每秒循环 120 次(延迟 2)。

所以现在你的系统慢了 8 倍,但你想等待 0.5/0.015 = 33.33... 倍以上。

所以你会等待 120 / 8 * 0.5 / 0.015 = 500 delay1 循环

但是由于您的 µC 是 8 位的,您不能将这样的值存储在 8 位寄存器中。

所以我担心你的要求是不可能的(除非你编写代码来处理一个 16 位变量)。您也可以创建一个 delay0 循环并等待 2 次 250 个 delay1 循环。

不确定你会得到什么准确度!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-28
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多