Autor Tema: ayudaaaa con gps + pic + pc + lcd  (Leído 1805 veces)

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

Desconectado kricena

  • PIC10
  • *
  • Mensajes: 3
ayudaaaa con gps + pic + pc + lcd
« en: 07 de Marzo de 2012, 12:28:32 »
mi problema es el siguiente ;intento capturar una trama que me envia el gps para luego mostarrala en un lcd y en programa hyperterminal para eso uso un pic16f886  que solo cuenta con un modulo usart  me han dicho que en ccs puedo "crear" un usart adicional pero nose como es...
saludos

Desconectado wannaky

  • PIC12
  • **
  • Mensajes: 92
Re: ayudaaaa con gps + pic + pc + lcd
« Respuesta #1 en: 08 de Marzo de 2012, 13:48:10 »
Buenas kricena, si que se puede, mira como lo hago yo con un 16F877

Código: [Seleccionar]
#use RS232 (baud=9600, bits=8, parity=N, xmit=PIN_C6, rcv=PIN_C7,STREAM=PUERTO_PC) // Usart por hardware
#use RS232 (baud=4800, bits=8, parity=N, xmit=PIN_B1, rcv=PIN_B0,STREAM=PUERTO_RF,FORCE_SW) //Usart por software

la clave está en utilizar la interrupción externa configurada por flanco de bajada como pin de RX de la usart por software, de forma que cuando se reciba el starbit de la comunicación, entre en la rutina de la interrupción...

te adjunto la interrupción que yo utilizo tanto por la usart de hardware como la de software.

Interrupción usart hardware
Código: [Seleccionar]
#int_RDA // Recepción del puerto PC
void RDA_isr()
{
   if (kbhit(PUERTO_PC))
   {
      dato_rx=fgetc(PUERTO_PC);
      if(dato_rx==0x5A)  //mira si el dato recibido es una 'Z' de final de trama
      {
         flag_pc=1;
         cadena_rx[incremento_cadena]=dato_rx;
         incremento_cadena=0;
      }
      else
      {
         cadena_rx[incremento_cadena]=dato_rx;
         incremento_cadena++;
      }
   }
}

Interrupción usart por software
Código: [Seleccionar]
#int_EXT //Recepción del puerto RF
void ext_isr()
{
   dato_rx=fgetc(PUERTO_RF);
   if(dato_rx==0x5A)  //mira si el dato recibido es una 'Z' de final de trama
   {
      cadena_rx[incremento_cadena]=dato_rx;
      incremento_cadena=0;
      flag_rf=1;
   }
   else
   {
      cadena_rx[incremento_cadena]=dato_rx;
      incremento_cadena++;
   }
}

y las configuraciones siguientes...
Código: [Seleccionar]
   SET_TRIS_B(0x01);//b0->in, b1->out
   SET_TRIS_C(0x80);//c6->out, c7->in
   enable_interrupts(INT_RDA); //Interrupción USART1
   enable_interrupts(INT_EXT); //Interrupción externa USART2
   ext_int_edge(H_TO_L); //Flanco de bajada para int. ext
   enable_interrupts(GLOBAL); //Habilitarmos interrupciones

Si no me he explicado bien me comentas... espero que te sea de utilidad...

un saludo,
Wannaky

Desconectado wannaky

  • PIC12
  • **
  • Mensajes: 92
Re: ayudaaaa con gps + pic + pc + lcd
« Respuesta #2 en: 08 de Marzo de 2012, 13:51:18 »
por cierto, hay muchas variables que son de mi programa, que a ti no te van a hacer falta... pero el concepto es ese...

Saludos,
Wannaky