entonces una ves lo tengas conectado la midad del trabajo ya esta hecho
cuando se hace una machina de estado para comunicarse con un modem hay que tener en cuenta los tiempos de respuesta del modem
por esto siempre hay que probar bien el modem atreves de el puerto serie de tu PC
una vez tengas las ideas claras sobre como comunicarte con el puedes trasladar el código a tu PIC
no es una tarea compleja y empezare por pasarte algo de código porque te hagas una idea
estos son los comandos basicos para iniciar configurar y enviar un SMS
#define GSM_CMD_AT (0x8000) //AT
#define GSM_CMD_DEFAULT (0x8201) //AT&F (Default configuration)
#define GSM_CMD_SAVE (0x8202) //AT&W (save the configuration)
#define GSM_CMD_RESET (0x8407) //AT$RESET (Reset Stack Module)
#define GSM_RQST_GSMREG_STATUS (0xA103) //AT+CREG? (status GSM registration)
#define GSM_SET_GSMREG_STATUS (0x9103) //AT+CREG=x (status GSM registration)
#define GSM_SETNUM_SMS (0x9104) //AT+CMGS="xx" (set SMS number)
#define GSM_WRITE_SMS (0x5000) //xxx ^z (write SMS text + send)
#define GSM_SERVICE_NR (0x9109) //AT+CSCA="xxx.."(set service number)
#define GSM_ECHO_OFF (0x8005) //ATE0 (ECHO OFF COMMAND)
#define GSM_SEARCH_SIM (0xA106) //AT+CPIN? (REQUEST PIN MODE)
#define GSM_SET_PIN (0x9106) //AT+CPIN="XXXX" (SEND PIN VALUE)
#define GSM_IMEI (0x8108) //AT+GSN (REQUEST IMEI NUMBER)
UInt16 maskATcmd[8]={ 0x8000,
0x0100,
0x0200,
0x0400,
0x0800,
0x1000,
0x2000,
0x4000};
//80 01 02 02 08 10 20 40
const char *GSMstaticSet[7]={"AT","+","&&","$","%","=","?"};
const char *GSMmacro[10]={"\0", //00
"F\0", //01
"W\0", //02
"CREG\0", //03
"CMGS\0", //04
"E0\0", //05
"CPIN\0", //06
"RESET\0", //07
"GSN\0", //08
"CSCA\0" //09
};
const char *GSMmacroIn[8]={" \0", //00
"OK\0", //01
"ERROR\0", //02
"SIM PIN\0", //03
"READY\0", //04
"+CREG:\0", //05
"SIM\0", //06
"PIN\0" //07
};
este es el sintetizador de comandos es un methodo que uso en mis maquinas
void GSMsendCmd(UInt16 cmd, UInt16 delay, Pointer value, UInt8 len,Bool isStr)
{
char _tempStr[200]={0x0};
UInt8 _tempIdx=0;
UInt8 ix=0;
Byte _idxMacro=0;
Pointer _tempChar=0;
Pointer _savePointer1= (Pointer) GSMstaticSet;
breakpoint();
ResetGSMallqueueList();
if(cmd & maskATcmd[GSM_IDXCMD1])
{//AT
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD1];
_tempStr[_tempIdx++]=*_savePointer1++;
_tempStr[_tempIdx++]=*_savePointer1++;
}
if(cmd & maskATcmd[GSM_IDXCMD2])
{ //+
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD2];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(cmd & maskATcmd[GSM_IDXCMD3])
{//&
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD3];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(cmd & maskATcmd[GSM_IDXCMD4])
{//$
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD4];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(cmd & maskATcmd[GSM_IDXCMD5])
{//%
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD5];
_tempStr[_tempIdx++]=*_savePointer1;
}
_idxMacro = (Byte)cmd & 0x00FF;
if(_idxMacro)
{
_tempChar = (Pointer) GSMmacro[_idxMacro];
for(ix=0;ix<6;ix++)
{
if(isPrint(*_tempChar))
_tempStr[_tempIdx++]=*_tempChar++;
else break;
}
}
if(cmd & maskATcmd[GSM_IDXCMD6])
{
if(!(cmd & maskATcmd[GSM_IDXCMD8]))
{//=
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD6];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(isStr)_tempStr[_tempIdx++]='"';
while(len--)//import value
{
if(isPrint(*value))
_tempStr[_tempIdx++]=*value++;
}
if(isStr)_tempStr[_tempIdx++]='"';
}
breakpoint();
if(cmd & maskATcmd[GSM_IDXCMD7])
{//?
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD7];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(cmd & maskATcmd[GSM_IDXCMD8])//^z
_tempStr[_tempIdx++]=GSM_SUB;
else
_tempStr[_tempIdx++]=GSM_CR;//\r
breakpoint();
#if defined (_GSMDEBUG_)
DputsRS485(_tempStr);
#endif
GSM_CTS(1);
putsUART2(_tempStr);
while(BusyUART2());
GSM_CTS(0);
secureON=False;
if(delay)DelayMs(delay);
breakpoint();
}
y con añadir una pequeña machina de estado puedes enviar los comandos que quieres a tu modem
aqui un ejemplo de envio sms
GSMsendCmd(GSM_SETNUM_SMS,0,"00391112223344",14,True);
GSMsendCmd(GSM_WRITE_SMS,0,"hola soy yo",11,False);
asi de simple
veras que una vez conectado tu modem y siguiendo los pasos de el manual consigues en pocos minutos enviar tu sms
saludos