Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

PIC 18F4550 interfacing with GSM

Status
Not open for further replies.

khattak

New Member
I am trying to interface GSM SIM 900 with pic18f4550, but i am not able to do so. the code is given, could any body help me with this.

#include<p18f4550.h>
#include<delays.h>

# pragma config WDT=OFF
# pragma config LVP=OFF
# pragma config FOSC=HS
# pragma config IESO=OFF
# pragma config MCLRE=ON
# pragma config PBADEN=OFF



unsigned char value=0;
int i=0, k=0,j=0;

unsigned char *at_cmd="AT";
unsigned char *sms_format="AT+CMGF=1";
unsigned char *sms_write="AT+CMGS=\"03006464297\"";
unsigned char *sms="Hello";
unsigned char enter=0x0D;
unsigned char *data;

#define FREQ 11059200
#define baud 9600
#define spbrg_value (((FREQ/64)/baud)-1)
unsigned char rx_data(void);

void tx_data(unsigned char serial_data) ;
void gsm_cmd(unsigned char *);
int check(unsigned char *);




void main()
{

TRISB=0;
LATB=0;


TRISC=0xC0;






//BAUDCONbits.WUE=1;

TXSTAbits.SYNC=0;
BAUDCONbits.BRG16=0;
SPBRG=spbrg_value; // Fill SPBRG register to set the baud rate






INTCONbits.GIE=1; // Enable Global interrupt
INTCONbits.PEIE=1; // Enable Peripheral interrupt



RCSTAbits.SPEN=1; // To activate serial port (Tx and Rx pins)
PIE1bits.RCIE=1; // Enable Reception interrupt
RCSTAbits.RX9=0;

RCSTAbits.CREN=1; // Activate Reception



PIE1bits.TXIE=1;
PIE1bits.RCIE=1;
TXSTAbits.TX9=0;
TXSTAbits.TXEN=1; // Activate Transmissiom
RCSTAbits.RX9=1;


while (1)
{
{
PORTBbits.RB0=1;
gsm_cmd(at_cmd);
Delay10TCYx(500);
i=0;
while(i<2)
{
data=rx_data();
i++;
}
if (check(data))
{
PORTBbits.RB1=1;

gsm_cmd(sms_format);
Delay10TCYx(500);
i=0;
while(i<2)
{
data=rx_data();
i++;
}
if (check(data))
{
PORTBbits.RB2=1;
gsm_cmd(sms_write);
Delay10TCYx(500);


PORTBbits.RB3=1;
gsm_cmd(sms);

tx_data(0x1A);
Delay10TCYx(500);




}
}
}
}
}




unsigned char rx_data(void)
{
while(PIR1bits.RCIF==0); // Wait until RCIF gets low
return RCREG; // Retrieve data from reception register
}

void tx_data(unsigned char serial_data) // Transmit data function
{
TXREG=serial_data;
while(PIR1bits.TXIF==0);
}


void gsm_cmd(unsigned char *string)
{
i=0,j=0;
while(string!='\0')
{
tx_data(string);
i++;
}
tx_data(enter);
}



int check(unsigned char *string)
{
int i=0;
if(string=='O')
{
i++;
if(string=='K')
{return 1;
}
else
return 0;
}
else
return 0;

}
 
Could you please re-post your code at www.pastebin.com to preserve the spacing? It makes it a lot easier to read.

Also, we need the specs of your GSM.

Matt
 
Status
Not open for further replies.

Latest threads

Back
Top