TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fidodido18 en 30 de Noviembre de 2009, 21:37:13

Título: RS232 SOFT y HARD al mismo tiempo, ayuda
Publicado por: fidodido18 en 30 de Noviembre de 2009, 21:37:13
Disculpen si este tema existe pero no encontré en el buscador.
Estoy intentando usar 2 rs232 en un mismo PIC, uno por hardware y otro soft.
Mi problema es que el que trabaja por soft quiero que espere datos de un lector de código de barras y luego los almacene en un buffer y lo entregue al PC por rs232.

mi problema es que se queda esperando que el rs232 por soft envie algo y no lo lee y cuando no envia nada se queda esperando y el tiempo no corre.

Código: [Seleccionar]
#use rs232 (baud=9600,XMIT=PIN_C6,RCV=PIN_C7)
void enviar(void){
  for(j=0;j<41;j++)
      putc(BM[j]);
}

#use rs232 (baud=9600,RCV=PIN_D0,FORCE_SW)

void bandamagnetica(void){
   unsigned int16 timeout;
   int j;
   char t0[]="Deslizar Tarjeta";
   char t1[]="No se pudo leer dato";
     
      borrarlcd;
      imprimir(1,1,t0,1,1);
   
   while(!kbhit()&&(++timeout<50000)) delay_us(10);

   if(kbhit()){
      for(j=0;j<41;j++)
      getc(BM[j]);
   }

   else {
      borrarlcd;
      imprimir(1,1,t1,1,1);
   }

}

en el programa principal sencillamente mando a bandamagnetica primero y despues a enviar, no se que pasa pero se queda esperando el pic a que envien algo... estoy omitiendo algun campo?
Título: Re: RS232 SOFT y HARD al mismo tiempo, ayuda
Publicado por: Suky en 01 de Diciembre de 2009, 01:11:08
Debes asignar a cada bus de comunicación un nombre (stream), cuando escribas o leas un Bus debes indicarlo con el nombre. Fíjate que en la ayuda del CCS da la sintaxis de los 2 casos, por ejemplo para fputc(data, stream);


Saludos!
Título: Re: RS232 SOFT y HARD al mismo tiempo, ayuda
Publicado por: Nocturno en 01 de Diciembre de 2009, 02:50:05
Para optimizar tu programa, podrías implementar la recepción por software mediante un Timer. (http://www.todopic.com.ar/foros/index.php?topic=28397.0)
Título: Re: RS232 SOFT y HARD al mismo tiempo, ayuda
Publicado por: fidodido18 en 01 de Diciembre de 2009, 11:08:25
Debes asignar a cada bus de comunicación un nombre (stream), cuando escribas o leas un Bus debes indicarlo con el nombre. Fíjate que en la ayuda del CCS da la sintaxis de los 2 casos, por ejemplo para fputc(data, stream);


Saludos!

Gracias por sus respuestas!

si le doy un stream a cada comunicacion rs232 no importa si pongo las dos lineas de #use rs232 de seguido, es decir:
Código: [Seleccionar]
#use rs232 (baud=9600,XMIT=PIN_C6,RCV=PIN_C7,STREAM=com1)
#use rs232 (baud=9600,RCV=PIN_D0,FORCE_SW,STREAM=com2)

void main(){
dato=fgetc(com2);
fputc(dato,com1);
}

y solucionado el problema?

Para optimizar tu programa, podrías implementar la recepción por software mediante un Timer. (http://www.todopic.com.ar/foros/index.php?topic=28397.0)

gracias por el dato lo revisare..

Título: Re: RS232 SOFT y HARD al mismo tiempo, ayuda
Publicado por: Suky en 01 de Diciembre de 2009, 12:04:46
Gracias por sus respuestas!

si le doy un stream a cada comunicacion rs232 no importa si pongo las dos lineas de #use rs232 de seguido, es decir:
Código: [Seleccionar]
#use rs232 (baud=9600,XMIT=PIN_C6,RCV=PIN_C7,STREAM=com1)
#use rs232 (baud=9600,RCV=PIN_D0,FORCE_SW,STREAM=com2)

void main(){
dato=fgetc(com2);
fputc(dato,com1);
}

y solucionado el problema?

Exacto, es asignarle un nombre al Bus para saber cual vas a utilizar en cada caso.

Saludos!
Título: Re: RS232 SOFT y HARD al mismo tiempo, ayuda
Publicado por: fidodido18 en 01 de Diciembre de 2009, 18:29:22
y cuando quiero preguntar si tengo un bit por recibir?

por ejemplo:

while(!kbhit(COM2)).....



Título: Re: RS232 SOFT y HARD al mismo tiempo, ayuda
Publicado por: Suky en 01 de Diciembre de 2009, 18:34:43
Así como lo colocas está bien, revisa la ayuda de CCS, que da las sintaxis.


Saludos!