Estoy usando PIC18F2520
y tratando 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 algunos comandos que no responden OK
como cuando recibimos una notificación de SMS de GSM, GSM envía la siguiente notificación
+CMTI: "SM",2
Ahora bien, 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.
Gracias a @Bence Kaulics y @m.Alin. He resuelto el problema comprobando dos veces el archivo \r \n
. El siguiente es el código que usé:
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, cuando obtuve \r \n
el valor de la bandera por primera vez, es 0. Y nuevamente, cuando obtuve \r \n
eso, significa que hemos detectado un final de línea y esto es lo que esperamos, así que configure sFlag = 1
. Cuando sFlag = 1
eso significa que hemos recibido los datos y ahora podemos procesarlos.
m.alin
Andrés
\r \n
pero lo que sucede es que digamos que envío,AT\r
por lo que se detiene después de este comando y no espera una respuesta. Revisé el búfer durante la depuración y descubrí que almacena `AT \r \r \n`, por lo que debido a lo último se\r \n
detiene después de enviar el comando y no espera la respuesta de sim900m.alin
Andrés
AT+CMGF?\r
el comando enviar. Después del comando agrega\r \n
. Entonces, si lo verifico,\r\n
se detendrá aquí solo y no continuaré.m.alin
\r\n
y busca el segundo par que\r\n
recibes.Bence Kaulics
\r\n
secuencias, reconoce la primera y detente y la segunda como te ha dicho Alin.Bence Kaulics
Andrés
\r\n
o esos comandos solo responderán con\r\n
solo.Bence Kaulics
Andrés