TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: el_legal en 14 de Octubre de 2008, 07:20:35

Título: problema con disable_interrupts(int_rda)
Publicado 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
Título: Re: problema con disable_interrupts(int_rda)
Publicado por: MLO__ en 14 de Octubre de 2008, 14:17:11
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.
Título: Re: problema con disable_interrupts(int_rda)
Publicado por: el_legal en 14 de Octubre de 2008, 14:59:28
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.
Título: Re: problema con disable_interrupts(int_rda)
Publicado por: MLO__ en 14 de Octubre de 2008, 15:04:04
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
Título: Re: problema con disable_interrupts(int_rda)
Publicado por: el_legal en 14 de Octubre de 2008, 22:51:13
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
Título: Re: problema con disable_interrupts(int_rda)
Publicado por: MLO__ en 14 de Octubre de 2008, 23:09:46
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
Título: Re: problema con disable_interrupts(int_rda)
Publicado por: Nocturno en 15 de Octubre de 2008, 01:57:34
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.
Título: Re: problema con disable_interrupts(int_rda)
Publicado por: el_legal en 15 de Octubre de 2008, 07:39:47
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
Título: Re: problema con disable_interrupts(int_rda)
Publicado por: jfh900 en 15 de Octubre de 2008, 20:41:07
Se me ocurre a bote pronto que podrías mejorar un poco el código con:

while(kbhit()) getc();

Un saludo