TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: sparta13 en 12 de Marzo de 2014, 16:11:27
-
Bien...que tal gente del foro, he trabajado con microcontroladores como por un mes, realizo un proyecto el cual es comunicar con un microcontrolador PIC18F4550 2 puertos seriales usando 2 RS232...la cuestion es que deseo comunicar cadenas por lo cual uso la funcion fgets de esta forma:
#include <18f4550.h>
#FUSES INTHS,MCLR,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT, CPUDIV1, PLL1
#use delay(internal=4MHZ)
//#use fixed_io(A_outputs=pin_A0)
#include <stdio.h>
#use rs232(baud=9600,xmit=pin_c6, rcv=pin_c7,stream=PC1)
#use rs232(baud=9600,xmit=pin_b1, rcv=pin_b0,stream=PC2)
char cpc1[10],cpc2[10];
//char datos;
void main ()
{
while(TRUE) {
if (kbhit(PC1)) {
fgets(cpc1,PC1);
fputs(cpc1,PC2);
}
else
{
fgets(cpc2,PC2);
fputs(cpc2,PC1);
}
}
}
bien la comunicacion funciona bien al solo declarar :
void main ()
{
while(TRUE) {
fgets(cpc1,PC1);
fputs(cpc1,PC2);
fgets(cpc2,PC2);
fputs(cpc2,PC1);
}
}
pero solo lo realiza una sola vez de una pc hacia la otra primero en PC1 y luego en PC2 y al querer introducir 2 cadenas consecutivas no lo hace, lo que deseo es que lo realice consecutivamente ...si introcusco 5 cadenas diferentes en PC1 las 5 las trasmita a PC2, y en su defecto al irnos a PC2 a trasmitir lo realice de igual manera
se que puede ser una cosa muy secilla pero ya estoy como en blanco agradeciendo su ayuda por adelantado espero puadan ayudarma. :oops:
-
Hola,
no debería ser:
void main ()
{
while(TRUE) {
if (kbhit(PC1)) {
fgets(cpc1,PC1);
fputs(cpc1,PC2);
}
if (kbhit(PC2)) {
fgets(cpc2,PC2);
fputs(cpc2,PC1);
}
}
}
Saludos!
-
Hola amigo te sugiero que utilices interrupciones para la captura de las cadenas, realice algo similar link (http://www.youtube.com/watch?v=Zq1or_rNHrA), la diferencia era que solo capturaba caracteres, aunque con algunas modificaciones se puede obtener el resultado que esperas. Saludos
-
ha...sabia que era algo no tan dificil gracias BrunoF y camhos1 el link es bueno pero no entiendo que diferencia hay entre usar las interrupciones y no usarlas???... bueno la cuestion continua... algo que no comprendia bien era la utilizacion del fputs la funcion manda un cr y lf al final lo que me probocaba un salto de linea no deseado bueno a lo que entinedo... a si que comense a trabajar en el problema y estoy atorado en esto:
#include <18f4550.h>
#FUSES INTHS,MCLR,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT, CPUDIV1, PLL1
#use delay(internal=4MHZ)
#include <stdio.h>
#use rs232(baud=9600,xmit=pin_c6, rcv=pin_c7,stream=PC1)
#use rs232(baud=9600,xmit=pin_b1, rcv=pin_b0,stream=PC2)
char cpc1[100],cpc2[100];
char contPC1,contPC2;
int longitudPC1,longitudPC2;
void main ()
{
while (true)
{
if (kbhit(PC1) )
{
fgets(cpc1,PC1);
longitudPC1=strlen(cpc1);
for (contPC1=0;contPC1<=(longitudPC1-1);)
{
fputc(cpc1[contPC1],PC2);
contPC1++;
}
}
if (kbhit(PC2) )
{
fgets(cpc2,PC2);
longitudPC2=strlen(cpc2);
for (contPC2=0;contPC2<=(longitudPC2);)
{
fputc(cpc2[contPC2],PC1);
contPC2++;
}
}
}
}
ahora bien... de PC1 hacia PC2 la comunicacion es correcta ya no tengo el cl y lf agregados y mi comunicacion es esperada... pero en caso contrario de PC2 a PC1 no lo hace bien ahora no me manda el lf solo un cr y si cominezo con CP1 lo hace bien pero luego ya no reaciona PC2 no se que ocurra...me he buelto atorar en lo mismo :cry: desculpen las molestias y espero puedan ayudarme. muy agradecido...