FOTO: ¿cómo configurar timer0 para dar una interrupción cada 1 segundo?

Estoy programando un PIC18F67K22 y lo configuré para usar un oscilador RC interno de 16X4Mhz con PLL habilitado.

  • Interrupción de alto nivel en TIMER0desbordamiento
  • Estoy usando el compilador MCC18.

Entonces, ¿cómo configurar TIMER0para dar una interrupción en cada segundo?

Déle un período que sea ligeramente superior a 1 s, luego use CTC para ajustarlo a 1 s.
No entiendo lo que dices. Por favor, ¿puedes explicarlo brevemente?
¿Entiendes cómo funcionan los módulos del temporizador?

Respuestas (1)

Es TIMER0un temporizador de 16 bits, por lo que para configurar la interrupción cada 1 segundo, debe configurar:

  • Prescaler @ 16

  • Precarga TMR0 @ 3036

La ecuacion:

T = ( 4 F o s C ) PAG r mi s C ( R mi s o yo tu t i o norte PAG r mi yo o a d )

Donde:

  • T = Período = 1s
  • Fosc = Frecuencia del oscilador = 4MHz
  • Presc = Prescaler = 16
  • Resolución = 2 16 = 65535
  • Precarga = 3036

Código de muestra:

// Timer0 Registers:16-Bit Mode; Prescaler=1:16; TMRH Preset=$BD; 
//                  TMRL Preset=$DC; Freq=1,00Hz; Period=1,00 s
T0CON.TMR0ON = 1;  // Timer0 On/Off Control bit: 1=Enables Timer0 / 0=Stops Timer0
T0CON.T08BIT = 0;  // Timer0 8-bit/16-bit Control bit: 1=8-bit timer/counter / 0=16-bit timer/counter
T0CON.T0CS   = 0;  // TMR0 Clock Source Select bit: 0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
T0CON.T0SE   = 0;  // TMR0 Source Edge Select bit: 0=low/high / 1=high/low
T0CON.PSA    = 0;  // Prescaler Assignment bit: 0=Prescaler is assigned; 1=NOT assigned/bypassed
T0CON.T0PS2  = 0;  // bits 2-0  PS2:PS0: Prescaler Select bits
T0CON.T0PS1  = 1;
T0CON.T0PS0  = 1;
TMR0H = $BD;        // preset for Timer0 MSB register
TMR0L = $DC;        // preset for Timer0 LSB register
Solo quería hacerle saber que un usuario anónimo tenía un comentario sobre la configuración T0CON.PSA = 0en lugar de T0CON.PSA = 1. Intentaron editar su respuesta en lugar de publicar un comentario para llamar su atención sobre el problema, que fue rechazado. Su comentario fue el siguiente, en caso de que no puedas acceder al enlace de arriba:PSA must be zero for the prescaler to be considered. This code functions improperly when this bit is set to 1.