khattak.seecs
Newbie level 1
i am facing problems in interfacing gsm sim 900 with pic18f4550. the code seems to have nothing wrong with it, could any one help me with it.
#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;
}
#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;
}