# ============================================================
# Universidad: [Nombre]
# Carrera: [Carrera]
# Materia: Arquitectura de Computadoras / Ensamblador
# Práctica No: [X]
# Nombre: [Alumno]
# Fecha: [dd/mm/aaaa]
#
# Dispositivo: Raspberry Pi Pico W (RP2040)
# Entorno: Wokwi + MicroPython
#
# Descripción:
# [Explicar qué hace el programa]
#
# Pseudocódigo (C/C++):
# [Lógica en alto nivel]
# ============================================================
import micropython
from machine import Pin
import utime
# ------------------------------------------------------------
# CONFIGURACIÓN DEL MICROCONTROLADOR
# ------------------------------------------------------------
# LED interno del Pico W (GPIO 25)
led = Pin(25, Pin.OUT)
# ------------------------------------------------------------
# FUNCIONES EN ENSAMBLADOR (ARM THUMB - Cortex-M0+)
# ------------------------------------------------------------
@micropython.asm_thumb
def funcion_base(r0, r1):
# --------------------------------------------------------
# Descripción:
# r0 = argumento 1
# r1 = argumento 2
#
# retorno en r0
# --------------------------------------------------------
# Ejemplo: suma
add(r0, r0, r1)
# Retorno
bx(lr)
# ------------------------------------------------------------
# PROGRAMA PRINCIPAL
# ------------------------------------------------------------
def main():
print("=== INICIO DE PRÁCTICA ===")
# ========================================================
# EJERCICIO 1
# ========================================================
a = 8
b = 4
resultado = funcion_base(a, b)
print("Ejercicio 1 (suma):", resultado)
# ========================================================
# EJERCICIO 2 (PLANTILLA)
# ========================================================
# x = 0
# y = 0
# resultado2 = funcion2(x, y)
# print("Ejercicio 2:", resultado2)
# ========================================================
# INDICADOR VISUAL (VALIDACIÓN)
# ========================================================
for i in range(5):
led.toggle()
utime.sleep(0.2)
print("=== FIN DE PRÁCTICA ===")
# ------------------------------------------------------------
# PUNTO DE ENTRADA
# ------------------------------------------------------------
if __name__ == "__main__":
main()El RP2040 usa:
- ARM Cortex-M0+
- Instrucciones Thumb (16 bits)
- NO es ARM64, es ARM32 el mismo de las exposiciones.
👉 Por eso usamos:
@micropython.asm_thumb| Registro | Uso |
|---|---|
| r0 | argumento 1 / retorno |
| r1 | argumento 2 |
| r2–r7 | auxiliares |
Esto coincide con prácticas formales de ensamblador ARM en sistemas embebidos .
Siempre debe existir:
bx(lr)Sin esto: ❌ El programa falla o se cuelga
| Sección | Propósito |
|---|---|
| ASM | lógica de bajo nivel |
| Python | control, pruebas, IO |
El LED sirve como:
- ✔ Indicador de ejecución correcta
- ✔ Debug visual en hardware embebido
Agregar otra función:
@micropython.asm_thumb
def resta(r0, r1):
sub(r0, r0, r1)
bx(lr)Uso:
print("Resta:", resta(10, 3))| Criterio | Valor |
|---|---|
| Encabezado completo | ✔ |
| Uso correcto de registros | ✔ |
| Función ASM funcional | ✔ |
| Pruebas en main() | ✔ |
| Orden y claridad | ✔ |
🧪 Uso de Wokwi antes de trabajar con electrónica real
Wokwi es un simulador en línea que permite desarrollar y probar sistemas embebidos sin necesidad de hardware físico.
🎯 ¿Por qué usar Wokwi primero?
Antes de conectar componentes reales, Wokwi permite:
⚙️ ¿Cómo se usa?
Crear un proyecto desde:
https://wokwi.com/projects/new/micropython-pi-pico-w
Escribir el programa en
main.pyEjecutar la simulación▶️
Observar resultados en consola y componentes virtuales
🧠 Enfoque académico
El uso de simulación es una práctica recomendada, ya que permite validar el comportamiento del sistema antes de implementarlo físicamente, reduciendo errores y mejorando la comprensión del funcionamiento interno.
Wokwi es una herramienta fundamental para:
Enlace de proyectos:
https://wokwi.com/projects/new/micropython-pi-pico-w