Ir al contenido

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 INTCONno 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.

  1. Reemplaza el RETURN vacio de init_timer0 por las lineas del bloque resaltado (T0CON, TMR0H, TMR0L).
  2. No enciendas TMR0ON ni GIE todavia — solo deja el timer configurado.
  3. Compila sin errores.
  4. Opcional: compara T0CON con la tabla en Timer 0.
						        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
					
						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
					
  • 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.