Autor Tema: Control de Recepción RDA  (Leído 103 veces)

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

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 162
Control de Recepción RDA
« en: 14 de Marzo de 2019, 16:49:47 »
Hola, tengo este "problema",

Estoy manejando un modulo GPRS, no tengo problema, envío un comando y luego busco la respuesta, pero esto tarde mucho tiempo...
Para optimizar quiero saber cuando tengo una respuesta al comando desde la interrupción

Tengo esta tabla de posibles respuestas:

Código: [Seleccionar]
AT{0D} {0D}{0A}OK {0D}{0A}
AT+CGSN{0D} {0D}{0A}861445030295583 {0D}{0A}{0D}{0A}OK {0D}{0A}
AT+CPIN?{0D} {0D}{0A}+CPIN: READY {0D}{0A}{0D}{0A}OK {0D}{0A}
AT+CSQ{0D} {0D}{0A}+CSQ: 26,0 {0D}{0A}{0D}{0A}OK {0D}{0A}
AT+CREG?{0D} {0D}{0A}+CREG: 0,1          {0D}{0A}{0D}{0A}OK {0D}{0A}
AT+CIFSR{0D} {0D}{0A}10.140.148.116 {0D}{0A}
AT+CBC{0D} {0D}{0A}+CBC: 0,100,4202 {0D}{0A}{0D}{0A}OK {0D}{0A}

Una vez que se envíe el comando AT, el modem responde  0x0D y 0x0A ... respuesta del comando ...nuevamente 0x0D y0x0A, aquí esta el problema, se vuelve a enviar el mismo inicio y como se ve en la tabla , dependiendo del comando varia la cantidad de 0D y 0A.

Cuando el comando tiene dos respuestas, ( la respuesta al comando  + una respuesta de OKERROR también") envía doble {0D}{0A}

Alguna sugerencia?


Siempre uso esta forma en otros modulo el cual  no tiene ningún carácter de inicio a final de cada respuesta es siempre {0D}{0A}.

Código: C
  1. #int_rda
  2. void rda_isr(){
  3.            bufferByte = getchar(MODEM);
  4.         // See what we got
  5.         if (bufferByte == 0x0D){
  6.             moduleResonseBuffer[moduleBufferIndex] = 0x00;   // Add Null terminator
  7.             messageReady=1;                                     // Message Ready
  8.             moduleBufferIndex = 0;                           // Prepare index for next message
  9.         }
  10.         else if ( (bufferByte == 0x00) || (bufferByte == 0x0A) )
  11.         {
  12.             // Do nothing
  13.         }
  14.         else
  15.         {
  16.             moduleResonseBuffer[moduleBufferIndex++] = bufferByte; // Add Byte to Buffer
  17.         }
  18. }


 

anything