TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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.
#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?
-
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!
-
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)
-
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:
#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..
-
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:
#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!
-
y cuando quiero preguntar si tengo un bit por recibir?
por ejemplo:
while(!kbhit(COM2)).....
-
Así como lo colocas está bien, revisa la ayuda de CCS, que da las sintaxis.
Saludos!