【问题标题】:Assembly: Delay using loops组装:使用循环延迟
【发布时间】:2014-06-12 17:46:38
【问题描述】:

我正在尝试让 Raspberry Pi 上的 LED 以时间间隔打开/关闭。我知道有一个关于如何做到这一点的教程,但有人告诉我这对于程序的手段来说太复杂了。

所以我的一个朋友给了我这段代码并告诉我这会延迟执行:

    /* using 3 loops for delay*/
for_i:
    mov r2, #0

next_i:
    cmp r2, #1000
    bge endfor    

for_j:
    mov r3, #0

next_j:
    cmp r3, #1000
    bge fin_i    

for_k:
    mov r4, #0
    cmp r4, #1000
    bge fin_j
    add r4, #1
    b for_k

fin_j:
    add r3, #1
    b next_j

fint_i:
    add r2, #1
    b next_i

endfor:

据我了解,本质上是 3 个嵌套的 for 循环。

我要插入延迟的程序如下所示:

loop$:

/*turn LED on*/
mov r5,#1
lsl r5,#16
str r5,[r4,#40]

*/insert delay*/

/*turn LED off*/
mov r5, #1
lsl r5,#16
str r5, [r4, #28]

*/insert delay*/

b loop$ 

当我毫无头绪地试图在代码中的某处插入循环时,LED 就一直亮着。 老实说,我不知道如何插入这段代码以使程序延迟,或者即使 3 个循环足以注意到间隔。

打开/关闭 LED 的代码应该可以正常工作,如果我在没有 loop$ 的情况下运行代码,LED 会保持关闭状态,而当我使用这个循环运行代码时,LED 会非常暗

【问题讨论】:

    标签: assembly raspberry-pi delay gpio


    【解决方案1】:

    首先,让我们稍微简化一下代码。少一点分支应该更容易看出它实际上是三个循环:

        mov r2, #0
    next_i:
        mov r3, #0
    next_j:
        mov r4, #0
    next_k:
        add r4, #1
        cmp r4, #1000
        blt next_k
        add r3, #1
        cmp r3, #1000
        blt next_j
        add r2, #1
        cmp r2, #1000
        blt next_i
    

    您可以将其粘贴到您想要延迟的代码中。

    如果 LED 指示灯变暗,则表明环路太短。快速打开和关闭 LED 可使其以不同的强度发光。

    尝试将#1000 之一更改为#10000 以延长延迟时间。

    【讨论】:

    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 2023-04-06
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2012-09-19
    相关资源
    最近更新 更多