Electronic – the best way to receive unsolicited response from GSM SIM900 in PIC18

cmicrocontrollerpicsim900

I am using PIC18F2520 and trying to communicate with GSM SIM900. I am using UART interrupt to receive data from the GSM. I am saving each byte in rxData. Now most of the commands ends with response OK. But there are few commands which does not respond with OK like when we receive sms notification from GSM, GSM send following notification

 +CMTI: "SM",2

Now this response doesn't have any OK. How to receive data in this case. In my application I need to check for the received sms. I am using following code:

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;

}

I am getting confused on how to check for the sms notification. Till now for other commands, I was setting condition for OK but this doesnt have any OK response. Please help.

enter image description here

Best Answer

Thanks to @Bence Kaulics & @m.Alin. I have solved the issue by double checking the \r \n. Following is the code I used:

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;

}

I have used a flag = -1. So when I first got \r \n value of flag is 0. And again when I got \r \n that means we have detected a line end and this is what we are expecting so set sFlag = 1. When sFlag = 1 that means we have received the data and now we can process it.

Related Topic