Interfacing SIM300
Driver for interfacing sim300 to send and read sms
#use rs232(baud=19200,xmit=pin_C6,rcv=pin_C7,parity=n,bits=8,stop=1,stream=GSM,timeout=100)
int8 sms_buffer[40],ph_number[15];
void sync()
{
fprintf(GSM,"AT\n\r");
delay_ms(100);
fprintf(GSM,"AT\n\r");
delay_ms(100);
fprintf(GSM,"AT\n\r");
delay_ms(100);
fprintf(GSM,"AT\n\r");
delay_ms(100);
}
void dial_modem()
{
int8 i=0;
fputc('A',GSM);
fputc('T',GSM);
fputc('D',GSM);
fputc(' ',GSM);
while(ph_number[i] !='\0' && i<16)
{
fputc(ph_number[i],GSM);
i++;
}
fputc(';',GSM);
fputc(0x0D,GSM);
fputc(0x0A,GSM);
}
void hang_call()
{
fputc('A',GSM);
fputc('T',GSM);
fputc('H',GSM);
fputc(0x0D,GSM);
fputc(0x0A,GSM);
}
void set_text_mode()
{
sync();
fprintf(GSM,"AT+CMGF=1\n\r");
}
int1 get_sms(int8 intex_no)
{
int8 count=0;
set_text_mode();
delay_ms(100);
fprintf(GSM,"AT+CMGR=%u\n\r",intex_no);
while(fgetc(GSM)!=0x0A);
if(fgetc(GSM)=='+')
{
while(fgetc(GSM)!='"');
while(fgetc(GSM)!='"');
while(fgetc(GSM)!='"');
do
{
ph_number[count]=fgetc(GSM);
count++;
}while(ph_number[count-1] !='"' && count<15);
ph_number[count-1]='\0';
while(fgetc(GSM)!=0x0A);
count=0;
do
{
sms_buffer[count]=fgetc(GSM);
count++;
}while(sms_buffer[count-1] !=0x0D && count<24);
sms_buffer[count-1]='\0';
delay_ms(500);
sync();
fprintf(GSM,"AT+CMGD=%u\n\r",intex_no);//delete sms
}
else
{
count=24;
}
if(count>=24)
return 0;
else
{
return 1;
}
}
void send_sms()
{
int8 array_index;
set_text_mode();
delay_ms(100);
fprintf(GSM,"AT+CMGS=");
fputc('"',GSM);
array_index=0;
while(ph_number[array_index] !='\0')
{
fputc(ph_number[array_index],GSM);
array_index++;
}
fputc('"',GSM);
fputc(0x0D,GSM);
fputc(0x0A,GSM);
while(fgetc(GSM) !=' ');
array_index=0;
while(sms_buffer[array_index] !='\0')
{
fputc(sms_buffer[array_index],GSM);
array_index++;
}
fputc(0x1A,GSM);// Ctrl-Z
delay_ms(100);
}
int8 read_strength()
{
int8 rssi[3],rssi_byte;
//output_low(PIN_A5);
fprintf(GSM,"AT+CSQ\n\r");
while(fgetc(GSM) !=' ');
//output_high(PIN_A5);
rssi[0]=fgetc(GSM) & 0x0F;
rssi[1]=fgetc(GSM) & 0x0F;
rssi_byte=rssi[0]*10;
rssi_byte=rssi_byte+rssi[1];
return rssi_byte;
}