2014-06-12 7 views
1

나는 시간 간격으로 켜기/끄기 위해 Raspberry Pi의 LED를 얻으려고합니다. 정확히 어떻게하는지에 대한 자습서가 있다는 것을 알고 있지만 프로그램의 수단으로는 너무 복잡하다고 들었습니다. 조립 : 루프를 사용하여 지연

그래서 내 친구가 나에게이 코드를 포기하고있다가 실행을 지연 할 수있는 나에게 말했다 : 지금까지 내가 이해 기본적으로 3

/* 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: 

가-루프 중첩을.

내가 지연을 삽입 할 프로그램의 비트는 다음과 같습니다 : 나는 cluelessly LED가 단지에 머물렀다 코드 어딘가에 루프를 삽입하려고

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$ 

. 솔직히 말하자면,이 코드를 삽입하여 프로그램을 지연 시키거나 3 개의 루프가 간격을 알아 차릴지라도 삽입하는 방법을 알지 못합니다.

코드

가 나는 루프 $하지 않고 코드를 실행하면, 완벽하게 잘 작동합니다에 온/오프 LED를 켜려면 LED가 꺼져, 나는이 루프를 사용하여 코드를 실행하면, LED가 매우 희미

답변

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으로 변경해보십시오.

+0

고맙습니다. 1000은 3 루프에 대해 꽤 높습니다. 이제 작동합니다. 그 루프를 * 메소드 *로 사용하여 코드에서 호출하는 방법을 제안하는 방법이 있습니까? – akalikin

+0

@ user2407413 : 서브 루틴을 만들 수 있습니다. http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/Cihcfigg.html – Guffa