Buenos dias, antes de nada gracias por su atención. Estaba intentando con un 16f877 y un sim800L de detectar cuando me llega un sms para luego poder tratarlo pero no logro conseguirlo. El código lo escribo en Pbp y les agradecería si me podrían ayudar en lo que estoy haciendo mal. Les adjunto lo que tengo escrito, en un principio solo esta lo de recibir la palabra +CMTI y que el micro pueda procesarlo, luego ya adelantare con el resto. Les adjunto el código y gracias.
Código:
Define OSC 20
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
A1 VAR BYTE 'creo estas variables para que almacenen la informacion
A2 VAR BYTE 'del texto +CMTI
A3 VAR BYTE
A4 VAR BYTE
A5 VAR BYTE
A6 VAR BYTE
A7 VAR BYTE
A8 VAR BYTE
A9 VAR BYTE
A0 VAR BYTE
Baud con 32 '19200,8,N,1
TX var PORTA.5
RX var PORTA.4
TRISA = %011111
PORTA = 0 : PORTA.5 = 1
;****************************
LCDOut $fe,1,"< RECIBIR SMS >"
Pause 5000
GOTO COMANDO1
COMANDO1:
serout2 tx,baud,["AT",13]
SerIn2 RX,Baud,500,Error1,[wait("OK")]
LCDOut $fe,1," AT OK "
pause 4000
COMANDO2:
serout2 tx,baud,["AT+CMGF=1",13]
SerIn2 RX,Baud,500,Error2,[wait("OK")]
LCDOut $fe,1," Modo texto "
pause 4000
COMANDO3:
SerOut2 TX,Baud,["AT+CNMI=1,1,0,0,0",13]
SerIn2 RX,Baud,1500,ERROR3,[wait("OK")]
LCDOut $fe,1," CNMI OK "
PAUSE 4000
AGUARDA:
serIN2 RX,BAUD,[A1] '+
serIN2 RX,BAUD,[A2] 'C
serIN2 RX,BAUD,[A3] 'M
serIN2 RX,BAUD,[A4] 'T
serIN2 RX,BAUD,[A5] 'I
serIN2 RX,BAUD,[A6] ; VARIABLES QUE ALMACENAN LA INFORMACION DEL
serIN2 RX,BAUD,[A7] ;MISSATGE. CADA CARACTER SE GUARDA EN UNA VARIABLE
serIN2 RX,BAUD,[A8]
serIN2 RX,BAUD,[A9]
serIN2 RX,BAUD,[A0]
pause 100
;*************COMPROVAR SI LLEGA LA PALABRA +CMTI **********************
IF A1= "C" THEN EXIT 'compruevo si la letra c esta guardada en la variable A1
IF A2= "C" THEN EXIT 'compruevo si la letra c esta guardada en la variable A2
IF A3= "C" THEN EXIT 'compruevo si la letra c esta guardada en la variable A3
GOTO AGUARDA
error1:
LCDOut $fe,1," Error sim 1 "
PAUSE 3000
GOTO COMANDO1
error2:
LCDOut $fe,1," Error sim 2 "
PAUSE 3000
GOTO COMANDO2
error3:
LCDOut $fe,1," Error sim 3 "
PAUSE 3000
GOTO COMANDO3
EXIT:
LCDOut $fe,1," LLEGO SMS. "
Pause 5000
end
También lo he intentado con el SERIN Y STR que supongo que es mejor:SMS VAR BYTE
SerIn2 RX,Baud,500,noresponde,[wait("+CMTI:"),STR SMS\8] 'espera una cadena de 8 caracteres y lo guarda en SMS
pause 1000
if (sms[2]="M") then goto exit 'si la segunda letra es M ir a exit
PAUSE 2000