TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: el_legal en 14 de Octubre de 2008, 07:20:35
-
Hola:
Estoy haciendo un programa que me perermita comunicar un celular con una PIC y tengo el inconveniente que cuando deshabilito la INT_RDA, no la puedo volver a habilitar.
¿Alguien tuvo este inconveniente? ¿Lo pudo resolver?
Adjunto un codigo de prueba así se dan cuenta de lo que les hablo.
Desde ya muchas gracias.
Luciano
-
Hola.
No tienes un bucle infinito dentro del main.
Saludos
EDITO: No habia visto el goto. De todas maneras, es mejor hacerlo con un ciclo while. Otra cosa: al inico del programa habilita primero la INT_RDA y luego la GLOBAL.
-
hola:
Muchas gracias por las observaciones. Pero alguna de ellas puede hacer que al habilitarlas deje de funcionar?
Porque yo lo estoy simulando con el proteus y un par de virtual terminal y el programa funciona bien hasta que deshabilito la interrupcion y luego al habilitar se setea el bits RCIE pero no ingresa al tratamiento de la misma.
-
Hola.
Hay que tener cuidado en que cuando este deshabilitada la interrupcion RDA no lleguen datos por el serial.
Yo siempre he declarado las cosas en ese orden y asi siempre me han funcionado.
Saludos
-
Hola:
Hay que tener cuidado en que cuando este deshabilitada la interrupcion RDA no lleguen datos por el serial.
Yo quería deshabilitar la int_rda para ignorar los datos que llegan ... Pero parese que no se puede...¿Cual es el impedimento?
Hay alguien que me lo pueda explicar?
Luciano
-
Hola.
Pues no se si a alguien mas le haya pasado (a mi me sucedio hace tiempo y no he vuelto a revisar ese tema). Es mejor ordenar la transmision de los datos cuando se maneja el serial.
Saludos
-
Lo normal es que se te haya llenado el minibuffer de 3 bytes de la USART.
Si te llegan datos y no los lees (en la interrupción o fuera de ella) el PIC ignorará todo dato que siga llegando.
Por tanto, cuando quieras habilitar la interrupción de nuevo, antes tendrás que vacíar el buffer leyendo lo que tenga pendiente la USART.
-
hola: :lol: gracias a MLO_ y Nocturno..... Pude resolver el problema de esta manera:
inicio:
if(input(pin_a1)==1) {output_toggle(PIN_c1);disable_interrupts(int_rda);}
if(input(pin_a2)==1) { output_toggle(PIN_c1);enable_interrupts(int_rda);}
for (j=0;kbhit(); j++){r=getc();}
goto inicio;
de esta manera siempre me activa y desactiva las interrupciones :-/
Nuevamente gracias
saludos luciano
-
Se me ocurre a bote pronto que podrías mejorar un poco el código con:
while(kbhit()) getc();
Un saludo