TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: javirnof en 18 de Marzo de 2014, 19:59:55
-
Hola. Estoy intentando hacer un ejemplo basico con el 18F452 pero cuando activo interrupciones de la UART parece que el PIC se bloquea o algo asi.. Las simulaciones con proteus OK. Si comento la linea de enable_interrupts(INT_RDA) todo funciona Ok y la interrupcion externa funciona bien
#include <18f452.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay (clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8, ERRORS)
#use standard_io(A)
#use standard_io(C)
char dato[25];
#int_EXT1
void EXT1_isr(void){
output_high(PIN_A0); // enciende el LED en el PIN A0
delay_ms( 200 ); // demora de 1 segundo
output_low(PIN_A0); // apaga el LED
}
#int_RDA
void RDA_isr(void){
disable_interrupts(INT_RDA);
output_high(PIN_A0); // enciende el LED en el PIN A0
delay_ms( 200 ); // demora de 1 segundo
output_low(PIN_A0); // apaga el LED
gets(dato);
enable_interrupts(INT_RDA);
}
void main()
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT1);
enable_interrupts(INT_RDA);
printf("HOLA");
output_low(PIN_A0);
while(TRUE)
{
}
}
Si alguien me puede orientar se lo agradeceria....
-
no necesitas desactivar la interrupcion de RDA dentro de la interrupción.
otra cosa es que estas usando gets para leer los datos esta función se queda esperando hasta recibir un salto de linea, si no estas enviando esto tu micro se quedará esperando
-
Además de lo comentado por rivale, agregar que no es recomendable utilizar delays dentro de las rutinas de interrupción.