Autor Tema: Ayuda: Cómo manejar paquetes seriales de longitud variable  (Leído 1253 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado THX1138

  • PIC10
  • *
  • Mensajes: 3
Ayuda: Cómo manejar paquetes seriales de longitud variable
« en: 06 de Junio de 2007, 18:16:12 »
Hola:

·Estoy tratando de comunicar el PIC con un dispositivo que envía paquetes de largo variable vía RS-232 a 1200 bps, con un retardo de varios segundos entre cada paquete. Necesito saber cuándo un paquete está listo para procesarlo. Se me ocurre usar un flag de timeout; por ejemplo, si no llega ningún byte dentro de un segundo, setear el flag, y así indicar que hay datos para procesar. Los paquetes tienen una cabecera conocida de 6 bytes, pero no hay una secuencia de término, así que no puedo saber que el paquete fue recibido completamente por observación.

·Mi idea hasta ahora es habilitar una interrupción de timer junto con la interrupción de recepción serial, contar cuántas veces se dispara la interrupción de timer después de un evento int_rda, y si dicha cuenta supera cierto valor, setear un flag. Lo que me complica es que generalmente sólo uso interrupción serial, y temo que 2 interrupciones puedan interferirse mutuamente.

·Hasta ahora no he pasado mi idea a código, y no tengo certeza de que funcione. Podrían ayudarme con este problemilla?

Atte.
THX1138

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Ayuda: Cómo manejar paquetes seriales de longitud variable
« Respuesta #1 en: 06 de Junio de 2007, 18:30:48 »
primero,... que pic piensas usar, ya lo tienes definido? pues depende mucho de eso para el juego de interrupciones. para esa aplicacion donde el timer determina el fin de un paquete (asi entendi por el timeout) la puedes hacer en un 16F de manera que tienes habilatada la interrupcion del timer0 (por ejemplo) y cada vez que pase un segundo que ponga a 1 un banderin, mientras tambien tienes activada la interrupcion del USART; otra seria con la gama 18FXXX donde pones como prioridad alta a la USART y con prioridad baja al timer0. entonces cuando este en la interrupction del timer el modulo EUSART puede interrumpir a esata interrupcion por sera de mayor jerarquia.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com


 

anything