Paso 5 de 11
Configurar Timer0 (sin ISR todavia)
Objetivo
Programar Timer0 en modo 16 bit con prescaler 1:256 y valor inicial para ~2 s @ 20 MHz.
Timer0 es la fuente de interrupcion mas usada al empezar. Sus banderas TMR0IE y TMR0IF estan en INTCON — no en PIE1/PIR1.
Importante: Timer0 no necesita PEIE. La cadena es: configurar T0CON + TMR0H/L → luego (paso 5) habilitar TMR0IE y GIE.
Los valores 0x676A vienen del Timer 0 — ejemplo 2 s.
Sigue estos pasos
- Reemplaza el
RETURNvacio deinit_timer0por las lineas del bloque resaltado (T0CON, TMR0H, TMR0L). - No enciendas TMR0ON ni GIE todavia — solo deja el timer configurado.
- Compila sin errores.
- Opcional: compara T0CON con la tabla en Timer 0.
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
GOTO isr_alta
ORG 0x0018
GOTO isr_baja
CBLOCK 0x20
temp_w
temp_status
ENDC
init_gpio:
BCF TRISB, 0
BCF LATB, 0
RETURN
init_timer0:
MOVLW B'00000111' ; 16 bit, interno, prescaler 1:256
MOVWF T0CON
MOVLW B'01100111' ; TMR0H = 0x67
MOVWF TMR0H
MOVLW B'01101010' ; TMR0L = 0x6A (~2 s @ 20 MHz)
MOVWF TMR0L
RETURN
isr_alta:
RETFIE
isr_baja:
RETFIE
inicio:
CALL init_gpio
CALL init_timer0
bucle:
GOTO bucle
END
Lo que agregas en este paso
init_timer0:
MOVLW B'00000111' ; 16 bit, interno, prescaler 1:256
MOVWF T0CON
MOVLW B'01100111' ; TMR0H = 0x67
MOVWF TMR0H
MOVLW B'01101010' ; TMR0L = 0x6A
MOVWF TMR0L
RETURN
Lista antes de continuar
- init_timer0 carga T0CON y los valores iniciales de TMR0H/L.
- Entiendo que Timer0 no usa PEIE.
- Compila sin errores.
Consejo: PEIE es para Timer1/2/3, UART, ADC… — no para Timer0.