No creo q el problema sea en los fusibles, mas bien parece ser q es la ecuacion.
Dime, esto:
setup_timer_0(RTCC_DIV_128|RTCC_INTERNAL);
Es esto: ??
tiempo = Fosc*4*Preescaler*(255-valor de timer)*veces interrupción (s)
Bueno, nose como configurar esa ecuacion para el cristal q yo uso (4mhz), haber si me podrias ayudar en eso :?
#include <18f452.h> // include del PIC a usar
#fuses XT,NOWDT,NOLVP,PUT,NOBROWNOUT //los fuses necesarios
#use delay(clock=4000000) // mi reloj HS
int x,count=0; // variables que se usarán
#INT_TIMER0 // declaracion de la rutina de interrupcion por tmr0
tmr_handler() // funcion a ejecutar cuando ocurra la interrupcion por desborde de tmr0
{
count++; // incremento un contador cada vez que ocurre la interrupción
if(count==250) //125 si el numero de interrupciones llego a 125 ha transcurido un segundo
{
x^=1; //cuando pase un segundo cambio de estado la variable x
count=0; // reestablezco el contador
}
set_timer0(130); // fijo mi timer0 para empezar en 130
}
void main() // programa principal
{
set_tris_b(0xfd); //ef RB4 es la única salida
setup_adc_ports(NO_ANALOGS); // portA es digital
setup_timer_0(RTCC_DIV_32|RTCC_INTERNAL); // fijo el preescaler del timer0 en 128 y qeu su reloj será interno
SET_TIMER0(130); // fijo mi timer0 para empezar en 130
enable_interrupts(INT_TIMER0); // habilito interrupción por desborde en timer0
enable_interrupts(GLOBAL); // habilito interrupcion global
do // ciclo de trabajo
{
if (x==1) // si x esta en 1
output_high(PIN_B1); // enciendo el led en RB4
else
output_low(PIN_B1); // si esta x es 0 entonces apago RB4
} while (1);
}
#include <18f452.h> // include del PIC a usar
#fuses XT,NOWDT,NOLVP,PUT,NOBROWNOUT //los fuses necesarios
#use delay(clock=4000000) // mi reloj HS
#include <lcd_f452.c>
#include <string.h>
int x,count=0; // variables que se usarán
int32 segundos=0,i;
char var[20];
#INT_TIMER0 // declaracion de la rutina de interrupcion por tmr0
tmr_handler() // funcion a ejecutar cuando ocurra la interrupcion por desborde de tmr0
{
count++; // incremento un contador cada vez que ocurre la interrupción
if(count==250) //125 si el numero de interrupciones llego a 125 ha transcurido un segundo
{
if(x==0){x=1;}else{x=0;}
//x^=1; //cuando pase un segundo cambio de estado la variable x
count=0; // reestablezco el contador
segundos++;
}
set_timer0(130); // fijo mi timer0 para empezar en 130
}
void main() // programa principal
{
lcd_init();
set_tris_b(0xfd); //ef RB4 es la única salida
setup_adc_ports(NO_ANALOGS); // portA es digital
setup_timer_0(RTCC_DIV_32|RTCC_INTERNAL|RTCC_8_BIT); // fijo el preescaler del timer0 en 128 y qeu su reloj será interno
SET_TIMER0(130); // fijo mi timer0 para empezar en 130
enable_interrupts(INT_TIMER0); // habilito interrupción por desborde en timer0
enable_interrupts(GLOBAL); // habilito interrupcion global
do // ciclo de trabajo
{
lcd_putc("\i");
sprintf(var,"%lu",segundos);
for(i=0;i<strlen(var);i++)
{lcd_putc(var[i]);}
if (x==1) // si x esta en 1
output_high(PIN_B1); // enciendo el led en RB4
else
output_low(PIN_B1); // si esta x es 0 entonces apago RB4
} while (1);
}