TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: sparta13 en 12 de Marzo de 2014, 16:11:27

Título: comunicacion de 2 RS232 en un PIC18f4550
Publicado 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:
Título: Re: comunicacion de 2 RS232 en un PIC18f4550
Publicado por: BrunoF en 12 de Marzo de 2014, 16:25:21
Hola,

no debería ser:

Código: C#
  1. void main ()
  2. {
  3.   while(TRUE) {
  4.     if (kbhit(PC1)) {
  5.      fgets(cpc1,PC1);
  6.      fputs(cpc1,PC2);
  7.     }
  8.     if (kbhit(PC2)) {
  9.       fgets(cpc2,PC2);
  10.       fputs(cpc2,PC1);
  11.     }        
  12.   }
  13. }

Saludos!
Título: Re: comunicacion de 2 RS232 en un PIC18f4550
Publicado por: camhost1 en 13 de Marzo de 2014, 00:33:18
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
Título: Re: comunicacion de 2 RS232 en un PIC18f4550
Publicado por: sparta13 en 14 de Marzo de 2014, 15:20:08
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...