IDE = MPLABx
Toolchain = HiTech PICC Lite
Target = PIC16f876
Burner = PICkit2
Este es uno nuevo para mí. Tengo tres leds conectados al chip, RC0, RC2 y RC3. Los pulsos RC2 se activan al comienzo del programa (nunca más), los pulsos RC3 continuamente a través del bucle infinito y los pulsos RC0 durante la interrupción. El programa funciona correctamente, como en la interrupción se ejecuta y qué no.
Sin embargo, el chip se está reiniciando. He determinado que el temporizador de vigilancia reinicia el chip. He determinado esto cambiando el preescalador de vigilancia y esto se extiende el tiempo antes de que se reinicie el chip. Pensé que la opción __option WDTE_OFF deshabilitaría el WDT, pero este no parece ser el caso.
Tampoco estoy seguro de por qué el WDT se está activando en primer lugar.
¿Alguien ha tenido este problema o puede indicarme la dirección correcta?
Mi código;
#include"pic16f876.h"
#include "pic.h"
#include "htc.h"
#define XTAL_FREQ 20000000
__CONFIG (FOSC_XT, WDTE_OFF, PWRTE_ON, BOREN_OFF,
LVP_OFF, CPD_OFF, WRT_OFF, DEBUG_OFF);
void setup(void);
int main(void) {
int counter;
int timer;
TRISC=0x00;
for(counter=0;counter<6000;counter++)
RC2=1;
setup();
T0IF=0;
di();
RC2=0;
for(;;){
for(counter=0;counter<6000;counter++)
RC3=0;
for(counter=0;counter<6000;counter++)
RC3=1;
}
}
void setup(void){
//turn off all interrupts
INTCON=0x00;
//for TRISx, 1=input, 0=output
//setup Timer0 as real time interrupt
T0CS=0; //Timer0 set to internal clock cycle
PSA=0; //assign prescale to Timer0
OPTION_REGbits.PS=0b111; //prescale set to 1:256
T0IE=1; //allow RTI
};
void interrupt int_handler(void)
{
int int_counter;
if(T0IF==1){
GIE=0;
T0IE=0;
RC0=1;
for(int_counter=0;int_counter<30000;int_counter++)
RC0=1;
for(int_counter=0;int_counter<30000;int_counter++)
TMR0=0x00;
T0IE=0;
//T0IF=0;
return;
}
}