Ir al contenido

Paso 9 de 11

PORT: el pulsador controla el LED

Objetivo

Mover la logica al bucle: leer RB1 con PORTB y escribir el LED con LATB.

Quita el BSF LATB,0 fijo de inicio (deja BCF LATB,0 tras init). En bucle, PORT lee el pulsador y LAT actualiza el LED.

Pulsador NA + pull-up: RB1 = 1 suelto, 0 presionado. Presionas → LED enciende.

  1. Borra BSF LATB, 0 de inicio (manten BCF LATB, 0 y CALL init_gpio).
  2. Reemplaza el GOTO bucle vacio por las 4 instrucciones del bloque resaltado + GOTO bucle.
  3. Compila, recarga el HEX en Proteus.
  4. Prueba: presionar pulsador → LED on; soltar → LED off. Repite 3 veces para confirmar.
						        LIST    P=18F4550
        #include <P18F4550.INC>

        CONFIG  FOSC = HS
        CONFIG  WDT = OFF
        CONFIG  LVP = OFF
        CONFIG  PBADEN = OFF

        ORG     0x0000
        GOTO    inicio

init_gpio:
        BCF     TRISB, 0
        BSF     TRISB, 1
        RETURN

inicio:
        CALL    init_gpio
        BCF     LATB, 0
bucle:
        BTFSC   PORTB, 1      ; RB1 alto = pulsador suelto
        BCF     LATB, 0
        BTFSS   PORTB, 1      ; RB1 bajo = pulsador presionado
        BSF     LATB, 0
        GOTO    bucle

        END
					
						bucle:
        BTFSC   PORTB, 1      ; RB1 alto = pulsador suelto
        BCF     LATB, 0
        BTFSS   PORTB, 1      ; RB1 bajo = pulsador presionado
        BSF     LATB, 0
        GOTO    bucle
					
  • El bucle usa PORTB para leer y LATB para escribir.
  • Probé pulsador y LED al menos 3 veces — funciona.