Tutorial — Primer LED
Aprende programando: sigue cada paso, escribe tu propio codigo y valida con las preguntas y el examen del laboratorio. Adapta pines y rutinas a tu placa cuando haga falta.
Lo que vas a construir
Un programa en ensamblador que configura RB0 como salida y enciende un LED. Es la base de casi todo lo demas en el curso.
-
1 Crea el proyecto en MPLAB
Abre MPLAB IDE 8.88 → File → New Project. Elige PIC18F4550, compilador MPASM, y tu programador (PICkit 2/3) o Simulator si aún no tienes placa. Crea un archivo `.asm` en el proyecto.Consejo: Guía de instalación: /fundamentos/mplab-proteus/
-
2 Escribe las directivas CONFIG
Al inicio del archivo declara el procesador y desactiva el watchdog. Con cristal de 20 MHz usa `FOSC = HS`. Estas líneas no generan código ejecutable: le dicen al ensamblador cómo configurar el PIC al grabar.LIST P=18F4550 #include <P18F4550.INC> CONFIG FOSC = HS CONFIG WDT = OFF CONFIG LVP = OFF -
3 Configura RB0 como salida
`TRISB` define dirección: bit `1` = entrada, bit `0` = salida. Para encender un LED en RB0 necesitas ese pin como salida. Usa `BCF TRISB, 0` (pone el bit 0 en 0). Limpia `LATB` antes para un estado conocido.inicio: CLRF LATB ; Apaga todas las salidas de PORTB BCF TRISB, 0 ; RB0 como salida -
4 Enciende el LED escribiendo en LATB
Escribe en `LATB`, no en `PORTB`, para fijar el nivel de salida. `BSF LATB, 0` pone RB0 en alto. Si tu LED va de RB0 → resistencia → cátodo a tierra, debería encenderse.BSF LATB, 0 ; RB0 en alto — LED encendido bucle: GOTO bucle ; El PIC no debe “terminar” -
5 Simula en Proteus y adapta a tu montaje
Importa el PIC18F4550, cristal 20 MHz, LED en RB0 con resistencia 220–330 Ω. Compila en MPLAB → carga el `.hex` en Proteus. Adapta el pin si tu placa usa otro puerto: cambia `TRISB`/`LATB` y el bit correspondiente.Consejo: Ejercicio: mueve el LED a RB1. ¿Qué dos líneas cambian?
Antes de programar — pre-laboratorio
Pre-laboratorio — investigación de referencia
Introducción al primer programa en ensamblador: salidas digitales en GPIO. Base antes de las prácticas formales UNEXPO.
P 1 ¿Qué hace el registro TRISB?
TRISB configura la dirección de cada pin del puerto B:
- Bit = 1 → pin configurado como entrada (alta impedancia).
- Bit = 0 → pin configurado como salida (controlado por LATB/PORTB).
Para encender un LED en RB0 necesitas `BCF TRISB, 0` (bit 0 en 0 = salida). Sin configurar TRIS, el pin puede quedar en entrada y el LED no responde.
P 2 Diferencia entre PORTB y LATB al escribir
En salidas digitales se recomienda escribir en LATB (*latch*): el valor queda en el registro de salida sin leer accidentalmente el nivel del pin (lectura-modificación-escritura en PORT puede fallar si el pin lee el nivel externo).
`BSF LATB, 0` pone RB0 en alto (LED encendido si cátodo a tierra con resistencia). `BCF LATB, 0` lo apaga.
P 3 Montaje del LED con resistencia
Montaje típico: RB0 → resistencia 220–330 Ω → ánodo LED → cátodo LED → GND.
La resistencia limita la corriente (~10–15 mA) para no dañar el LED ni exceder la corriente máxima del pin del PIC (~25 mA por pin, menos es mejor).
Esta práctica es más corta pero usa el mismo flujo de diseño (pseudocódigo, flujo, examen).
Disena tu solucion
Diseño antes del código
La guía oficial pide pseudocódigo y diagrama de flujo antes del .ASM. Escribe los tuyos primero; después desbloqueas la guía de referencia.
- 1. Pseudocódigo
- 2. Diagrama de flujo
- 3. Guía de referencia
Escribe tu pseudocódigo
Incluye: CLRF LATB, BCF TRISB,0, BSF LATB,0 y bucle infinito.
0 caracteres (mínimo 80)
Describe tu diagrama de flujo
En papel o aquí: lista cada símbolo en orden. Tu informe necesita óvalos, rectángulos, rombos y el bucle principal.
0 caracteres (mínimo 60)
Mi borrador de pseudocódigo
Mi borrador de diagrama de flujo
Pseudocódigo de referencia
INICIO
LATB ← 0
TRISB.0 ← 0 ; RB0 salida
LATB.0 ← 1 ; encender LED
REPITIR SIEMPRE
; (futuro: parpadeo con retardo)
FIN REPITIR Diagrama de flujo de referencia
Construye y adapta el codigo
Practica · Inicial
Encender un LED en RB0
Objetivo: configurar RB0 como salida y escribir un nivel alto para encender un LED conectado correctamente con su resistencia.
Código completo de referencia
Sección titulada «Código completo de referencia» LIST P=18F4550 #include <P18F4550.INC>
CONFIG FOSC = HS CONFIG WDT = OFF CONFIG LVP = OFF
ORG 0x0000 GOTO inicio
inicio: CLRF LATB ; Limpia salidas del puerto B BCF TRISB, 0 ; RB0 como salida BSF LATB, 0 ; RB0 en alto
bucle: GOTO bucle
ENDQué debes poder explicar
Sección titulada «Qué debes poder explicar»- Por qué se usa
TRISB. - Por qué
BCF TRISB, 0convierteRB0en salida. - Por qué se escribe en
LATBy no necesariamente enPORTB. - Por qué el programa termina en un bucle infinito.
Ejercicio
Sección titulada «Ejercicio»Modifica el programa para que el LED esté en RB1. Luego explica qué líneas cambiaron y por qué.
Despues de programar — post-laboratorio
Post-laboratorio — investigación de referencia
Reflexión tras compilar y simular el primer programa.
P 1 ¿Por qué el programa termina en un bucle infinito (`GOTO bucle`)?
Un microcontrolador no tiene sistema operativo que retenga el control: tras `inicio` el hardware sigue ejecutando instrucciones. Si el programa "terminara" sin bucle, ejecutaría memoria no inicializada. El `GOTO bucle` mantiene el LED en el estado deseado hasta reset o nueva programación.
P 2 ¿Qué cambiarías para parpadear el LED cada 500 ms?
Necesitas alternar LATB.0 periódicamente con un retardo (~500 ms con bucles anidados o Timer0). Pseudocódigo:
`bucle: toggle RB0 → esperar 500ms → goto bucle`
Esto introduce temporización, tema del curso en Timer0.
Prueba el ejercicio de mover el LED a RB1 y documenta los cambios.
Comprueba lo aprendido
Exámenes por nivel de dificultad
Abre cada nivel cuando estés listo. El básico es público; intermedio y UNEXPO requieren cuenta CALETAS para calificar respuestas.
Básico Nivel básico — GPIO 3 preguntas
TRIS, LAT y montaje del LED.
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETASIntermedio Nivel intermedio — Registros 2 preguntas
PORT vs LAT y bucle principal.
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETASUNEXPO Nivel UNEXPO — Explicación oral 2 preguntas
Explica cada línea del .ASM del primer LED.
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETAS