¿Cuál es la mejor manera de recibir una respuesta no solicitada de GSM SIM900 en PIC18?

2

Estoy usando PIC18F2520 y trato de comunicarme con GSM SIM900 . Estoy usando la interrupción UART para recibir datos del GSM. Estoy guardando cada byte en rxData. Ahora la mayoría de los comandos terminan con la respuesta OK . Pero hay pocos comandos que no responden con OK como cuando recibimos una notificación de SMS desde GSM, GSM envía la siguiente notificación

 +CMTI: "SM",2

Ahora esta respuesta no tiene ningún OK . Cómo recibir datos en este caso. En mi aplicación necesito verificar los sms recibidos. Estoy usando el siguiente código:

void rx_handler(void)
{
  rxData[index] = ReadUSART();

  if(<some condition>)    //condition to check for sms notification
  {
    rxFlag = 1;        //set flag to process it in main loop

  }
  index++;

PIR1bits.RCIF==0;

}

Me estoy confundiendo sobre cómo verificar la notificación de sms. Hasta ahora para otros comandos, estaba configurando la condición para OK pero esto no tiene ninguna respuesta OK. Por favor ayuda.

    
pregunta S Andrew

1 respuesta

1

Gracias a @Bence Kaulics & @ m.Alin. Resolví el problema al verificar dos veces el \r \n . A continuación se muestra el código que utilicé:

volatile int flag = -1;   
volatile int sFlag = 0; 
volatile int uFlag = 0;

void rx_handler(void)
{
    rxData[index] = ReadUSART();

    if(rxData[index]=='\n' && rxData[index-1]== '\r' )
    {
      flag = flag + 1;

      if(flag == 1)    
      {
         sFlag = 1;
      }
    }

}

index++;

PIR1bits.RCIF==0;

}

He usado un flag = -1 . Entonces, la primera vez que obtuve el valor de \r \n del indicador es 0. Y nuevamente cuando obtuve \r \n , eso significa que hemos detectado un final de línea y esto es lo que estamos esperando, así que establezca sFlag = 1 . Cuando sFlag = 1 significa que hemos recibido los datos y ahora podemos procesarlos.

    
respondido por el S Andrew

Lea otras preguntas en las etiquetas