TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jnavarro en 27 de Febrero de 2008, 09:17:34
-
Hola,
Sabe alguien si se pueden definir distintos canales RS232 en diferentes pines, ¿pero poder utilizar interrupciones con cada uno?
Yo defino 3 canales con
#use rs232 (baud=115200 ........ rcv=PIN_C7, stream=canal1)
#use rs232 (baud=38400 ........ rcv=PIN_B0, stream=canal2)
#use rs232 (baud=9600 ........ rcv=PIN_B3, stream=canal3)
Segun llevo leido, la interrupcion por serie,
#int_rda
void serial_isr()
Haría referencia al canal 1 (PIN C7)
Y por interrupcion externa por RB0 mediante,
#int_ext
Haría referencia al canal 2 (PIN B0)
¿Pero al canal 3? ¿Como le pongo interrupcion?
-
El canal cuyos pines coincidan con los del hardware de la USART será el único que interrumpa y ejecute la rutina serial_isr() de #INT_RDA
El canal que interrumpe usando la #INT_EXT va a interrumpir cada vez que llegue un flanco de subida (o de bajada según esté configurado) de cada bit que se reciba y que implique un cambio de estado ... no está pensada para eso y adaptarla tiene mas complicaciones que beneficios.
La única solución posible es usar la #INT_RDA para el canal serie "estándar" y los otros meterlos en el while infinito de main() intentando que por el kbhit(canalx) se pase el mayor número de veces y los mas frecuentemente que se pueda.
Aunque los canales alternativos, por software, pueden leer y escribir correctamente es uso normal el dedicar esos canales para transmisión de datos, debug y asuntos secundarios, y dejar a la USART por Hardware el trabajo crítico de las comunicaciones.
Espero haberte dado una imagen clara del tema. :mrgreen:
-
Tambien puede utilizar la interrupcion de teclado para los pines B0 y B3, discriminando dentro de la misma cual de ellos es... :mrgreen:
-
Gracias RedPIC, me queda más que claro el asunto, excelente explicación :-) deberé de amoldarme a los recursos que dispone el PIC.
MGLSOFT con lo de interrupciones de teclado, ¿Te refieres a la interrupción #INT_EXT?
Un salu2 y gracias por contestar