Que tal compañeros foreros, vengo con unas dudas tremendas con el timer 0 en un PIC 18f4520, ya que no lo he manejado y he leído sobre como realizarlo pero en pics de la familia 16f, y todos incluyen unas cosas mas otras menos, y quisiera que me pudieran explicar como realizarlo, ya que hice uno y lo simule en proteus, pero difiere el tiempo que he establecido de 500us hasta 682.92us, el cristal que uso es de 12Mhz, el código es:
#include <18f4520.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP //Configuramos los fuses
#use delay (clock=12000000) //Oscilador a 12Mhz
#use fast_io(b) //Optimizamos E/S del PORTB
#define LED1 PIN_B0 //Llamamos al PIN_B0 como Led1
//——Variables——————-
//——Funciones——————-
#int_TIMER0
void TIMER0_isr(void)
{
output_toggle(LED1); //Cambiamos el estado del Led1
}
void config(){ //Configuración del dispositivo
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);
enable_interrupts(INT_TIMER0); //Habilita la interrupción
enable_interrupts(GLOBAL); //Activa las interrupciones anterriores
set_tris_b (0x00); //Puerto b como salidas
output_b(0x00); //Limpiamos el puerto b enviando “0?
}
//——Programa principal———-
void main(void) {
config(); //Configuración del dispositivo
set_TIMER0(67); //inicializa el timer0
//el bucle infinito es necesario para no entrar en modo sleep
while(true);
}
}
El código lo encontré en internet, lo implemente y lo probe en proteus, el resultado fue:
Espero me puedan ayudar, si tengo algún error en el código háganme saber por favor....