Advertisement
Cyre

Práctica 2 EC.s

Oct 20th, 2014
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. /*******************************************************************
  2. * Enciende alternativamente, de uno en uno, todos los LEDS rojos.
  3. * Primero va hacia la izquierda comenzando por el LED 0. Cuando se
  4. * pulse el botón 1 la dirección del movimiento cambiará hacia la derecha
  5. * y cuando se pulse el botón 2 cambiará de nuevo a la izquierda.
  6. *******************************************************************/
  7. .global _start
  8. _start:
  9. movia r2, 0x10000000 /* carga base LEDS rojos */
  10. movia r3, 0x10000050 /* carga base botones(pushbuttons) */
  11. addi r6,r0,0x1 /* carga valor inicial LEDS */
  12. add r7, r7, r0 /* inicializa contador de los LEDs */
  13. addi r9,r0,0x12 /* carga la cte 18 (12 en hexadecimal) en r9, para el tope superior */
  14. LEFT:
  15. stwio r6,0(r2) /* Enciende el LED */
  16. slli r6, r6, 1 /* Mueve el LED a la izquierda */
  17. addi r7,r7,1 /* Aumenta el contador */
  18. ldwio r4, 0(r3) /* lee estado de los botones */
  19. addi r5, r0, 2 /* Carga el valor del Botón 1 en r5 */
  20. beq r4, r5, RIGHT /* Si está pulsado el Botón 1, se pasa al bucle de la derecha */
  21. beq r7,r9, RIGHT /* Si el contador llega al tope superior (18), cambia de dirección */
  22. addi r8,r0,0x50000 /* Inicializa el contador del retardo (El retardo óptimo es 0x50000) */
  23. RETARDO_L:
  24. subi r8, r8, 1
  25. beq r8, r0, LEFT
  26. br RETARDO_L /* Termina el retardo */
  27.  
  28. br LEFT
  29. RIGHT:
  30. stwio r6,0(r2) /* Enciende el LED */
  31. srli r6,r6,1 /* Mueve el LED a la derecha */
  32. subi r7,r7,1 /* Disminuye el contador */
  33. ldwio r4, 0(r3) /* lee el estado de los botones */
  34. addi r5, r0, 4 /* Carga el valor del Botón 2 en r5 */
  35. beq r4, r5, LEFT /* Si está pulsado el Botón 2, se pasa al bucle de la izquierda */
  36. beq r7,r0,LEFT /* Si el contador llega al tope inferior (0), cambia de dirección */
  37. addi r8,r0,0x50000 /* Inicializa el contador del retardo (El retardo óptimo es 0x50000) */
  38. RETARDO_R:
  39. subi r8,r8,1
  40. beq r8, r0, RIGHT
  41. br RETARDO_R /* Termina el retardo */
  42.  
  43. srli r6,r6,1 /* Mueve el LED a la derecha */
  44. subi r7,r7,1 /* Disminuye el contador */
  45. br RIGHT
  46. .end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement