Autor Tema: Funciones para puerto Serie CCS  (Leído 2981 veces)

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

Desconectado rogeliogamberro

  • PIC10
  • *
  • Mensajes: 34
Funciones para puerto Serie CCS
« en: 16 de Febrero de 2010, 15:45:25 »
Hola Foro!

Estoy haciendo una pruebas en un 18f4620 con ccs, glcd timers, ad y otros donde estoy un poco jugado con los tiempos. Decompile las funciones putc y printf y veo que estas quedan haciendo pooling hasta que el dato fue enviado y como mi trama puede ser muy larga pierdo muchisiiiiimooo tiempo... Les agradeceria un consejo de como solucionar mi problema... Les cuento que recibo del pc entre 3 y 10 bytes pero puede llegar a enviar 100 bytes o mas en un caso y debo mantener el refresco de la pantalla y leds... Gracias a todos por su ayuda y saludos.... :D

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones para puerto Serie CCS
« Respuesta #1 en: 16 de Febrero de 2010, 15:54:13 »
Podes usar interrupción para controlar cuando se ha enviado un dato. No podrás usar printf, tendrás que realizar otra función que en conjunto con la interrupción puedas ir mandando los datos.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado rogeliogamberro

  • PIC10
  • *
  • Mensajes: 34
Re: Funciones para puerto Serie CCS
« Respuesta #2 en: 16 de Febrero de 2010, 16:34:01 »
Gracias por responder!!!

Ya lo he hecho de todas las maneras posibles. creo o que es o un error de concepto mio o debo hacer una nueva funcion putc y getc. Por ejemplo, por interrupciones, pongo una bandera y luego en el principal lo recibo... pero tengo el problema que al tener que refrecar la pantalla glcd y otros y, ademas, las funciones putc hacen pooling, se quedan trabadas hasta terminar de enviar el programa no funciona correctamente perdiendo datos, o trabandose el refresco... que me aconsejan que haga... las tramas de transmision pueden ser muy largas y no hay otra... como me aconsejan que modifique putc? uso buffers circulares? gracias totales...
« Última modificación: 16 de Febrero de 2010, 16:38:28 por rogeliogamberro »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones para puerto Serie CCS
« Respuesta #3 en: 16 de Febrero de 2010, 19:27:28 »
La función debería leer un buffer y debe tener un puntero local como static, de esa manera se controla que byte enviar del buffer sin que se inicialice al ingresar a la función. La función cargaría un dato al registro TXREG y saldría. La interrupción setearía una bandera que será consultada por el main mediante un if, no un while porque sería los mismo que usar putc.

El GLCD si tenes la posibilidad de trabajarlo en modo fast creo que ayudaría también.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado rogeliogamberro

  • PIC10
  • *
  • Mensajes: 34
Re: Funciones para puerto Serie CCS
« Respuesta #4 en: 16 de Febrero de 2010, 21:02:12 »
Muchas gracias Suki por tu respuesta... creo que entendi... voy a probar.... No sabia que se podia acceder a TXREG desde CCS... Voy a intentar esto: Cargar el dato en TXREG verificar pulsadores y actualizar pantalla y luego hacer el pooling manual si sobro tiempo... que os parece?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones para puerto Serie CCS
« Respuesta #5 en: 16 de Febrero de 2010, 23:11:41 »
Para acceder al registro debes definirlo:

Código: C
  1. #byte TXREG=0x95

Puse 0x95 por poner algo, pero ahí va la dirección del registro según el microcontrolador que estés usando.


Saludos!
No contesto mensajes privados, las consultas en el foro