Autor Tema: cadena de caracteres por la uart del pic 18f4620  (Leído 2765 veces)

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

Desconectado marisela

  • PIC10
  • *
  • Mensajes: 5
cadena de caracteres por la uart del pic 18f4620
« en: 09 de Mayo de 2006, 15:57:45 »
hola a todos nuevamente tengo un problema enviando cadena  de caracteres ya estuve en el foro y logre enviar un caracter y pense que de ahi era facil enviar una palabra como tal!! pero nada el caso es que tengo 3 pic que envian señales por rf (modulos) y estos hacen bien el envio pero  el receptor no lo hace bien, aqui les envio el codigo pero que no da :(. espero que me ayuden si ven el error hagamelo saber.Gracias de antemano!!


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <18F4620.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, NOPUT, NOCPD, NOSTVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, NOFCMEN, NOXINST, NOPBADEN, NOLPT1OSC, NOMCLR
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <stdio.h>
#include <string.h>
#ZERO_RAM

void main()
{

  char var[8], m1[8]="modulo1", m2[8]="modulo2", m3[8]="modulo3";

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

while (input(PIN_A0)==1)   //interruptor de encendido
{
   
while(1){

      if (kbhit())                      // Espera a que haya algo en la UART
      {

       gets(var);                    // Recibe lo que entra por la UART (RF)

       if (strcmp(var,m1) ==0) // MODULO 1
                                     
       {

             while(!input(PIN_C0))
             {

                  output_bit (PIN_B0,1);  // prende el led

                  output_bit (PIN_B3,1);  //prende el motor

              };

              delay_ms(100);

              if (input(PIN_C0)==1)      // interruptor de apagado
              {

                   output_b(0x00);

                   delay_ms(200);

                   puts("apagar");     //apaga el envio.

                   delay_ms(600);

               }

        }

        if (strcmp(var,m2)==0)               // MODULO 2
        {

             while(!input(PIN_C0))
             {

                  output_bit (PIN_B1,1);  // prende el led

                  output_bit (PIN_B3,1);  //prende el motor

              };

              delay_ms(100);

               if (input(PIN_C0)==1)     // interruptor de apagado
               {

                   output_b(0x00);

   delay_ms(200);

                   puts("apagar");

                   delay_ms(600);

               }
         }


        if (strcmp(var,m3)==0)               // MODULO 3

        {

             while(!input(PIN_C0))
             {

                  output_bit (PIN_B2,1);  // prende el led

                  output_bit (PIN_B3,1);  //prende el motor

              };

              delay_ms(100);

               if (input(PIN_C0)==1)     // interruptor de apagado
               {

                   output_b(0x00);

   delay_ms(200);

                   puts("apagar");

                   delay_ms(600);

   }
         }

      }

   }
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7


estuve intentando por la interrupcion  RDA_isr pero no llegue a nada solo tengo la idea..... :?
« Última modificación: 09 de Mayo de 2006, 16:13:43 por marisela »

Desconectado Hidalgork

  • PIC10
  • *
  • Mensajes: 7
Re: cadena de caracteres por la uart del pic 18f4620
« Respuesta #1 en: 09 de Mayo de 2006, 18:43:28 »
#include <18F4620.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, NOPUT, NOCPD, NOSTVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, NOFCMEN, NOXINST, NOPBADEN, NOLPT1OSC, NOMCLR
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <stdio.h>
#include <string.h>
#ZERO_RAM

#int_RDA
RDA_isr()//Interrupcion
{
  //Tu Codigo
}

void main()
{

   char m1[8]="modulo1", m2[8]="modulo2", m3[8]="modulo3";

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(GLOBAL);//Permito las interrupciones
   enable_interrupts(INT_RDA);//Habilito la interrupcion serial

  //Tu Codigo
}


Hola, esto deberia ser suficiente para activar la interrupcion serial
revisare tu codigo
 :)


 

anything