我正试图让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的代码应该可以正常工作,如果我运行没有循环$的代码,LED保持关闭状态,当我使用此循环运行代码时,LED非常暗淡
答案 0 :(得分:2)
首先,让我们简化一下代码。少分支应该更容易看到它实际上是三个循环:
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
,以延迟延迟。