Soy bastante nuevo en los microcontroladores, especialmente en la serie Pic. Tengo una pregunta sobre el TMR0 del pic16F877A.
Soy consciente de que TMR0 es un temporizador de 8 bits, que toma un total de 256 tics hasta que se produce un desbordamiento. Mi configuración se ejecuta en un cristal de cuarzo de 4MHZ, por lo tanto, cada tic es igual a 1us. Un tiempo total de 256us causará un desbordamiento teniendo en cuenta que el prescaler se elige en 1: 1.
Después de simular este retardo estableciendo el bit RB1 igual a (ALTO), se midió un retardo total de 265 us usando proteus 7. ¿De dónde viene esta discrepancia? Gracias por adelantado.
Código:
#include <xc.h>
#define _XTAL_FREQ 4000000
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = ON
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF
void main()
{
TRISBbits.TRISB1=0;
PORTBbits.RB1=0;
TMR0IE=0;
TMR0IF=0;
T0SE=0;
T0CS=0;
PSA=1;
TMR0=0;
while(1)
{
while(TMR0IF!=1);
PORTBbits.RB1=1;
TMR0IF=0; //I assume it takes 1us
TMR0=0; // Also 1us?
while(TMR0IF!=1);
PORTBbits.RB1=0;
TMR0IF=0;
TMR0=0;
}
}