TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: asriel506 en 09 de Julio de 2011, 16:45:28
-
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
-
Seguro es un problema del simulador... Lo único raro que se ve es setup_oscillator(OSC_NORMAL), no debería estar si estas usando oscilador externo.
Saludos!
-
En la interrupción no debes colocar el
return; el compilador lo hace solo.