Paso 10 de 11
Vista previa: interrupcion RB4–RB7 (teclado)
Objetivo
Entender como se habilita RBIE para el teclado matricial — puente hacia Practica 2.
El mismo archivo ya funciona con Timer0. Para teclado matricial (Practica 2) agregaras otra fuente en la misma isr_alta:
- RBIE en INTCON — interrupcion por cambio en RB4–RB7
- Pull-ups en columnas (BCF INTCON2, RBPU si usas internos)
- En la ISR: escanear filas, antirrebote, y limpiar RBIF leyendo PORTB (requerimiento del hardware)
No es obligatorio probarlo ahora; es la siguiente aplicacion de interrupciones en el curso.
Sigue estos pasos
- Lee el bloque de codigo RBIE de abajo — no hace falta integrarlo si tu LED ya parpadea.
- Compara con la seccion RB4–RB7 de la teoria.
- Guarda
guia-interrupciones.asmcomo plantilla para practicas. - Marca todos los pasos 0–8 en el rastreador.
Tu archivo hasta ahora
LIST P=18F4550
#include <P18F4550.INC>
CONFIG FOSC = HS
CONFIG WDT = OFF
CONFIG LVP = OFF
CONFIG PBADEN = OFF
ORG 0x0000
GOTO inicio
ORG 0x0008 ; alta prioridad (08H)
GOTO isr_alta
ORG 0x0018 ; baja prioridad (18H)
GOTO isr_baja
CBLOCK 0x20
temp_w
temp_status
ENDC
init_gpio:
BCF TRISB, 0 ; RB0 salida (LED)
BCF LATB, 0
RETURN
init_timer0:
MOVLW B'00000111' ; 16 bit, interno, PS 1:256
MOVWF T0CON
MOVLW B'01100111'
MOVWF TMR0H
MOVLW B'01101010'
MOVWF TMR0L
RETURN
isr_alta:
BTFSS INTCON, TMR0IF
GOTO fin_isr
; guardar contexto minimo
MOVWF temp_w
SWAPF STATUS, W
MOVWF temp_status
BCF T0CON, TMR0ON
BCF INTCON, TMR0IF
MOVLW B'01100111' ; recarga Timer0 (~2 s)
MOVWF TMR0H
MOVLW B'01101010'
MOVWF TMR0L
BSF T0CON, TMR0ON
; toggle LED en RB0
BTFSC LATB, 0
GOTO apagar_led
BSF LATB, 0
GOTO restaurar
apagar_led:
BCF LATB, 0
restaurar:
SWAPF temp_status, W
MOVWF STATUS
MOVF temp_w, W
fin_isr:
RETFIE
isr_baja:
RETFIE
inicio:
CALL init_gpio
CALL init_timer0
BCF INTCON, TMR0IF
BSF INTCON, TMR0IE
BSF INTCON, GIE
BSF T0CON, TMR0ON
bucle:
GOTO bucle
END
Lo que agregas en este paso
; --- Agregar en inicio (ademas de Timer0) para teclado ---
BCF INTCON2, RBPU ; pull-ups PORTB (segun practica)
BSF INTCON, RBIE ; cambio en RB4-RB7
; --- Dentro de isr_alta, despues de atender Timer0 ---
BTFSS INTCON, RBIF
GOTO fin_rb
; escanear teclado, antirrebote...
MOVF PORTB, W ; limpia RBIF (obligatorio)
fin_rb:
Lista antes de continuar
- Mi programa Timer0 + ISR funciona y esta guardado.
- Entiendo para que sirve RBIE y por que hay que leer PORTB.
- Se que Practica 2 y 5 usan estas ideas.