Quiero usar el oscilador interno en PIC16F616 en una configuración de 8 MHz y tengo el I Función / O 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 aumentar cada 500 ns, y debería crear una interrupción cuando se desborda de "0xFF" a "0x00".
Sin embargo, RA4
pin alterna cada 20 usuarios.
De la hoja de datos:
5.1.1
MODO TEMPORIZADOR DE 8 BITS
Cuando se usa como temporizador, el módulo Timer0 incrementar cada ciclo de instrucción (sin precalificación).
El modo de temporizador se selecciona borrando el bit T0CS de la OPCION registrarse en ‘0’.
También;
Nota: el valor escrito en el registro TMR0 puede ajustarse, para tener en cuenta las dos instrucción ciclo de retraso cuando TMR0 es escrito.
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);
}