Estoy programando una aplicación simple para la que necesito contadores que me hagan interrupciones a los siguientes intervalos:
-1s
-1ms
-1us
El programa debe alternar el estado de un pin cada vez que se da una interrupción del contador, pero desgraciadamente no me sale porque me está dando un overflow stack al simularlo en el Proteus.
Estoy trabajando con un cristal de 10MHz y tengo activado el PLLx4 para alcanzar una frecuencia de 40MHz.
Aquí adjunto el código, en este caso sólo estoy usando un timer por simplicidad.
Estoy trabajando en CCS
#include "main2.h"
#include <LCD.C>
#define Bobina_apertura PIN_E0
#int_TIMER0
void TIMER0_isr(){//tiempo de pulso de la bobina en us
disable_interrupts(GLOBAL);
if(input(Bobina_apertura))output_low(Bobina_apertura);
else if(~input(Bobina_apertura))output_high(Bobina_apertura);
enable_interrupts(GLOBAL);
set_timer0(26473);
// set_timer1(65536);
return;
}
void main(){
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);//configuración para contar 1s
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);//configuración para contar 1us
setup_timer_2(T2_DIV_BY_4,250,1);//configuración para contar 1ms
setup_timer_3(T3_INTERNAL|T3_DIV_BY_8);//configuración para contar hasta 40ms
setup_low_volt_detect(FALSE);
setup_oscillator(OSC_NORMAL);
set_tris_e(0x00);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
set_timer0(26473);
//set_timer1(65536);
output_high(Bobina_apertura);
while(1);
}
Gracias de antemano