gpt4 book ai didi

assembly - 如何延迟 avr 微 Controller 的组装?

转载 作者:行者123 更新时间:2023-12-05 00:25:42 25 4
gpt4 key购买 nike

我在计算延迟时遇到问题。我想延迟 1 sec当我使用 1MHz我的 atmega128 微 Controller 的时钟速度。

我使用 proteus 进行仿真,使用 avr studio 为 atmel 微 Controller 进行汇编编码。

例如,此代码适用于 8MHz时钟微 Controller

Delay_15mS:                 ; For CLK(CPU) = 8 MHz
LDI dly1, 120 ; One clock cycle;
Delay1:
LDI dly2, 250 ; One clock cycle
Delay2:
DEC dly2 ; One clock cycle
NOP ; One clock cycle
BRNE Delay2 ; Two clock cycles for true 1 clock for false

DEC dly1 ; One clock Cycle
BRNE Delay1 ; Two clock cycles for true 1 clock for false
RET

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

谢谢

最佳答案

要计算延迟,您需要计算周期时间,然后计算达到所需延迟所需的周期数。

在您的情况下,1MHz时钟意味着1000000每秒周期数。所以1周期等于 1/1000000秒或 1us .要获得 1 秒延迟,您需要 1000000 1us 的周期,所以这意味着你必须创建一个 1000000 的算法循环。

以您的示例为基础,1秒延迟 @ 1MHz时钟将是:

Delay_1sec:                 ; For CLK(CPU) = 1 MHz
LDI dly1, 8 ; One clock cycle;
Delay1:
LDI dly2, 125 ; One clock cycle
Delay2:
LDI dly3, 250 ; One clock cycle
Delay3:
DEC dly3 ; One clock cycle
NOP ; One clock cycle
BRNE Delay3 ; Two clock cycles when jumping to Delay3, 1 clock when continuing to DEC

DEC dly2 ; One clock cycle
BRNE Delay2 ; Two clock cycles when jumping to Delay2, 1 clock when continuing to DEC

DEC dly1 ; One clock Cycle
BRNE Delay1 ; Two clock cycles when jumping to Delay1, 1 clock when continuing to RET
RET

在这种情况下,存在内部循环 Delay34周期长,因为 DEC=1 , NOP=1BRNE=2当跳转到 Delay3 时。所以, 4循环重复 250倍( dly3 的值)是 1000周期或 1000us = 1ms .

然后循环 Delay2重复 Delay3 125次( dly2 的值)。所以在这种情况下累积的延迟是 125ms .

最后,循环 Delay1重复 Delay2 8次( dly1 的值)。所以在这种情况下累积的延迟是 1000ms1第二。

注意:这个示例延迟实际上比 1sec 长一点因为我没有考虑 Delay2的说明时间和 Delay1 .影响很小,但对于精确 1sec延迟,必须计算这些指令和 dly1 的值, dly2dly3必须进行调整以保证算法恰好是 1000000周期长。

注意2:使用此算法,微 Controller 在执行延迟时无法执行任何其他操作,因为您正在使用它来计算周期。如果你想在做延迟的同时做其他事情,看看 timers和微 Controller 的中断。

关于assembly - 如何延迟 avr 微 Controller 的组装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24097526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com