Ir al contenido

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. 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. 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. 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. 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. 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. 1. Pseudocódigo
  2. 2. Diagrama de flujo
  3. 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)

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.

Esquema electrónico de LED en RB0 con resistencia de 330 ohm
Montaje básico: RB0 como salida, resistencia 220-330 ohm y LED a tierra. — Práctica 1 LED — UNEXPO
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
END
  1. Por qué se usa TRISB.
  2. Por qué BCF TRISB, 0 convierte RB0 en salida.
  3. Por qué se escribe en LATB y no necesariamente en PORTB.
  4. Por qué el programa termina en un bucle infinito.

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

Para encender un LED en un pin del PIC primero debes…
La resistencia en serie con el LED sirve para…
BCF TRISB, 0 configura RB0 como…
Intermedio Nivel intermedio — Registros 2 preguntas

PORT vs LAT y bucle principal.

0 de 0 respondidas

Se recomienda escribir salidas digitales en…
GOTO bucle al final del programa…
UNEXPO Nivel UNEXPO — Explicación oral 2 preguntas

Explica cada línea del .ASM del primer LED.

0 de 0 respondidas

BSF LATB, 0 con LED cátodo a GND (ánodo a RB0 vía R)…
Para mover el LED a RB1 cambias…

Panel de tutoriales · Ejercicios