Intefacing SIM900 GSM module with 8051 in C language

 Interfacing the SIM900 GSM/GPRS module with the 8051 microcontroller using C programming language is possible by using the serial communication protocol (UART). Here are the general steps for interfacing the SIM900 with the 8051:

Connect the SIM900 module to the 8051 microcontroller using the UART pins (RX and TX).

Configure the UART on the 8051 microcontroller using the C programming language. This involves setting the baud rate, number of data bits, parity, and stop bits.

Send AT commands to the SIM900 module using the UART. The SIM900 module requires AT commands to perform various functions, such as making calls, sending SMS messages, and connecting to the internet.

Receive data from the SIM900 module using the UART. The SIM900 module will send responses to the AT commands in the form of text strings.

Parse the data received from the SIM900 module to determine the result of the AT command.

Use the AT commands and parsed data to control the SIM900 module and perform the desired functions.

It's important to note that the SIM900 module requires a SIM card to function and to have mobile network coverage. Additionally, you will need to have a good understanding of the SIM900 module's AT commands and the UART protocol to be able to properly interface it with the 8051 microcontroller. It's also recommended to test your code and the connection by communicating with the module using a serial terminal before integrating it with your final project.


C code for interfacing sim900 with 8051

#include <reg51.h>


#define SIM900_RX P3_0 // RX pin of SIM900 module

#define SIM900_TX P3_1 // TX pin of SIM900 module


void UART_init() {

    // configure baud rate, data bits, parity, and stop bits

    TMOD = 0x20; 

    TH1 = 0xFD;

    SCON = 0x50;

    TR1 = 1;

}


void UART_send(unsigned char data) {

    // send data through UART

    SBUF = data;

    while(TI==0);

    TI = 0;

}


unsigned char UART_receive() {

    // receive data through UART

    while(RI==0);

    RI = 0;

    return SBUF;

}


void send_AT_command(char *command) {

    // send AT command to SIM900 module

    int i;

    for(i=0; command[i] != '\0'; i++) {

        UART_send(command[i]);

    }

    UART_send('\r');

    UART_send('\n');

}


void main() {

    UART_init();

    send_AT_command("AT"); // send AT command to check if SIM900 is responding

    while(1) {

        // receive response from SIM900

        if(UART_receive() == 'O') {

            if(UART_receive() == 'K') {

                // SIM900 is responding

                // perform other AT commands and operations here

                send_AT_command("AT+CMGF=1"); // set text mode for sending SMS

                // ...

            }

        }

    }

}

//------------------------------------------
you may modifie your code as required for more options and commands.