Autor Tema: comunicacion serial con PIC18f4550 string  (Leído 3855 veces)

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

Desconectado sparta13

  • PIC10
  • *
  • Mensajes: 7
comunicacion serial con PIC18f4550 string
« en: 21 de Febrero de 2014, 22:28:22 »
buenas...
estoy trabajando con el micro controlador PIC18f4550, no tiene mucho que me he introducido en este tema y lo que quiero hacer es comunicar mediante puerto serial al PIC con mi pc, bueno que al introducir cadenas como "ledon" y "ledoff" se habiliten o deshabiliten pines del micro mi idea va por aquí espero contar con su ayuda a gradeciendo por adelantado...
#include <18f4550.h>
#include <string.h>                                                           
#FUSES INTHS,MCLR,PUT,NOBROWNOUT, CPUDIV1, PLL1                                 
                                                                               
#use delay(INTERNAL=4MHZ)                                                       
#use rs232 (BAUD=9600 , XMIT=PIN_c6 , RCV=PIN_c7, bits=8, parity=N, STOP=1)
#use standard_io(a)

void main ()
{
 int resultado;
 char string
 char string2

for (;;)
{
gets (string);
 strcpy (string,"ledon");
 resultado=strcmp(string,string2);
 
 if (resultado==1)
 {
 output_high(PIN_A0);
 }
 if (resultado==0)
 {
 output_low(PIN_A0);
        }
     }
}
           

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: comunicacion serial con PIC18f4550 string
« Respuesta #1 en: 21 de Febrero de 2014, 23:57:39 »
no necesiyas enviar una cadena completa para lograr lo que quieres, podría funcionar con solo un caracter, por ejemplo, 'a' para encender y 'b' para apagar.

algunos comenarios sobre tu código asi como lo tienes:

--string y string2 deber ser vectores, es decir:

char string[15];

--te falta activar la interrupion por recepción de rs232 (Int_rda)

--para usar el oscilador interno usa el fuse INTRC_IO
"Nada es imposible, no si puedes imaginarlo"

Desconectado sparta13

  • PIC10
  • *
  • Mensajes: 7
Re: comunicacion serial con PIC18f4550 string
« Respuesta #2 en: 22 de Febrero de 2014, 15:18:48 »
ha, ok lo de los vectores error mío, al poner el ejemplo si lo he colocado bien, ammm si ya se que se puede mandar con solo una sola letra con función getchar ya lo he conseguido de la forma siguiente:

#include <18f4550.h>
#FUSES  INTHS,MCLR,PUT,NOBROWNOUT, CPUDIV1, PLL1                                 
#use delay(INTERNAL=8MHZ)

#use rs232 (BAUD=9600 , XMIT=PIN_c6 , RCV=PIN_c7, bits=8)
#use fixed_io(A_outputs=PIN_A0,PIN_A1,PIN_A2,PIN_A3)
//#use standard_io(a)
       

///PROGRAMA
void main()
{   
   puts("Interaccion PC->PIC       ");   
   puts("¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨");
   puts("   VeRDE1->Led on Verde");
   puts("   RoJO2->Led on Rojo");
   puts("   VeRDE3->Led on Verde");             
   
  while(1)
  {
 
      switch(getch())
      { 
         case 'a': 
         {  output_high(PIN_A0);   //se activa el pin a 0 led verde
                  delay_ms(300);
                  output_low(PIN_A0);   ///se apaga el led verde
         }
         break;
         case 'b': 
         {
         output_high(PIN_A1);   //led on rojo
                  delay_ms(300);
                  output_low(PIN_A1);   ///se apaga
         }
         break;
         case 'c':
         {
         output_high(PIN_A2);   //led on verde
                  delay_ms(300);
                  output_low(PIN_A2);
         }
                  break;
 
         }
      }      //...infinito
}




pero ahora deseo mandar cadenas como lo mencione, por lo que entiendo se usa la función gets ya lo he intentado de esta forma pero no hacepta mas de un carácter 'a' y no me lo reconoce "ledon" no se si puedas ayudarme con esto ?????

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: comunicacion serial con PIC18f4550 string
« Respuesta #3 en: 22 de Febrero de 2014, 16:05:41 »
buenas...
estoy trabajando con el micro controlador PIC18f4550, no tiene mucho que me he introducido en este tema y lo que quiero hacer es comunicar mediante puerto serial al PIC con mi pc, bueno que al introducir cadenas como "ledon" y "ledoff" se habiliten o deshabiliten pines del micro mi idea va por aquí espero contar con su ayuda a gradeciendo por adelantado...
#include <18f4550.h>
#include <string.h>                                                           
#FUSES INTHS,MCLR,PUT,NOBROWNOUT, CPUDIV1, PLL1                                 
                                                                               
#use delay(INTERNAL=4MHZ)                                                       
#use rs232 (BAUD=9600 , XMIT=PIN_c6 , RCV=PIN_c7, bits=8, parity=N, STOP=1)
#use standard_io(a)

void main ()
{
 int resultado;
 char string
 char string2

for (;;)
{
gets (string);
 strcpy (string,"ledon");
 resultado=strcmp(string,string2);
 
 if (resultado==1)
 {
 output_high(PIN_A0);
 }
 if (resultado==0)
 {
 output_low(PIN_A0);
        }
     }
}
           


  Debes tener en cuenta que gets() recibirá una cadena terminada con el caracter decimal 13 (el correspondiente al enter del teclado).

  Recibes la cadena y la almacenas en la variable string. Pero luego almacenas el valor "ledon" en la variable string, por lo tanto pierdes el valor recibido. Tendrías que almacenar el valor "ledon" en la variable string2.

  rivale, no creo que sea necesario activar la interrupción puesto que está utilizando la función gets() en el bloque principal.

De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: comunicacion serial con PIC18f4550 string
« Respuesta #4 en: 22 de Febrero de 2014, 17:17:16 »
como te comenta AngelGris la cadena la terminas con un \n.

lo de la interrupción lo comentaba para que no tengas que estar leyendo constantemente dentro del main, también podrias checar con el kbhit para saber si hay datos en el buffer, y solo leer en ese momento

saludos
"Nada es imposible, no si puedes imaginarlo"