Estoy programando un PIC18F67K22 y lo configuré para usar un oscilador RC interno de 16X4Mhz con PLL habilitado.
TIMER0
desbordamientoEntonces, ¿cómo configurar TIMER0
para dar una interrupción en cada segundo?
Es TIMER0
un temporizador de 16 bits, por lo que para configurar la interrupción cada 1 segundo, debe configurar:
Prescaler @ 16
Precarga TMR0 @ 3036
La ecuacion:
Donde:
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
T0CON.PSA = 0
en 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.
Ignacio Vázquez-Abrams
shail korat
connor lobo