Quiero utilizar el oscilador interno en PIC16F616 en configuración de 8 MHz y tener la función de E/S en RA4
y RA5
. He leído la hoja de datos y no encuentro lo que estoy haciendo mal.
Por lo que entiendo de la siguiente información, TMR0
debería incrementarse cada 500 ns, y debería crear una interrupción cuando se desborde de "0xFF" a "0x00". Sin embargo, RA4
el pasador cambia cada 20 us.
De la hoja de datos:
5.1.1
MODO DE TEMPORIZADOR DE 8 BITS
Cuando se utiliza como temporizador, el módulo Timer0 incrementa cada ciclo de instrucción (sin preescalador).
El modo de temporizador se selecciona borrando el bit T0CS del registro registro OPTION a "0".
También;
Nota: El valor escrito en el registro TMR0 puede ajustarse para tener en cuenta el retraso de dos retraso del ciclo de instrucción cuando se escribe TMR0 se escribe.
Aquí está mi código, mi compilador es MPLAB XC8. :
#include <xc.h>
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & IOSCFS_8MHZ & BOREN_ON);
void interrupt myInterrupt(void)
{
if (T0IE && T0IF)
{
RA4 = ~RA4;
TMR0 = 254;
T0IF = 0;
}
}
void main()
{
TRISA = 0;
ANSEL = 0;
PSA = 1; // Prescaler Assignment bit : 1 = Prescaler is assigned to the WDT, 0 = Prescaler is assigned to the Timer0 module
T0CS = 0; // T0CS: TMR0 Clock Source Select bit : 0 = Internal instruction cycle clock (FOSC/4), 1 = Transition on T0CKI pin
T0IE = 1; //T0IE: Timer0 Overflow Interrupt Enable bit
GIE = 1; //GIE: Global Interrupt Enable bit
while (1);
}