This project is an extension of interfacing microcontroller with hyperterminal and GSM module. The previous project explained a way to interface a GSM module with 8051 microcontroller where the information response and result codes received by the controller were sent back to computer to display them at HyperTerminal. In this project, the same output is displayed on a 16x2 LCD interface.
This project adds a feature to display the information response and result codes on a 16×2 LCD in response to the AT commands sent through the HyperTerminal of computer. The characters typed at HyperTerminal get transmitted serially through the transmit pin (Tx) of RS232 interface. The overall connection layout is depicted below.

Fig. 2: Block Diagram Of GSM Module with PC and Microcontroller
The microcontroller program involves the following complexities to display data coming from the GSM/GPRS module on LCD.
i. The data coming from the GSM module is stored in a character array. This character array is shifted to left every time character is read and deleted. This is important to maintain room for the incoming data and ensure that no character in an information response or result code is lost.
ii. The information response and the result codes have carriage return and line feed characters in the beginning as well as end. These characters need to be monitored and removed by the controller’s program.
This project is first step towards making and independent system using the GSM module and a microcontroller. Here the HyperTerminal (computer) has been replaced with LCD at the output end. In the next project (MC076), the AT Commands will be transmitted to the GSM module by the microcontroller itself thus avoiding the need of using HyperTerminal entirely.
Project Source Code
###
// Program to interface GSM Module with 8051 microcontroller (AT89C51) using PC and LCD #include<reg51.h> #define port P1 #define dataport P2 // Data port for LCD sbit rs = port^0; sbit rw = port^1; sbit en = port^2; int count,i; unsigned char check,str[15]; bit check_space ; void init_serial() // Initialize serial port { TMOD=0x20; // Mode=2 TH1=0xfd; // 9600 baud SCON=0x50; // Serial mode=1, 8-Bit data, 1 Stop bit, 1 Start bit, Receiving on TR1=1; // Start timer } void delay(unsigned int msec ) // Function for delay { int i,j ; for(i=0;i<msec;i++) for(j=0; j<1275; j++); } void lcd_cmd(unsigned char item) // Function to send command on LCD { dataport = item; rs= 0; rw=0; en=1; delay(1); en=0; return; } void lcd_data(unsigned char item) // Function to display character on LCD { dataport = item; rs= 1; rw=0; en=1; delay(1); en=0; return; } void lcd_data_string(unsigned char *str) // Function to display string on LCD { int i=0; while(str[i]!='