PIC16F877A – GSM Interfacing

This article is a continuation of the series of tutorials on the PIC16F877A Microcontroller. The aim of this series is to provide easy and practical examples that anyone can understand. In the previous tutorial, we have interfaced the Keypad with PIC16F877A. In this tutorial, we will see GSM Interfacing with PIC16F877A.

Suggestion to read

Components Required

  • GSM SIM900A module
  • PIC16F877A Development Board

GSM Interfacing with PIC16F877A

Connection

gsm interfacing with pic16f877a

Micro controller’s RX (RC7) is connected to GSM module’s TX and Micro controller’s TX(RC6) is Connected to GSM module’s RX pin.

Code

SMS Sending Code

This code is used to send the sms message to a particular number.

#include<htc.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define NUMBER 9876543210          //Here insert your number where you want to send message
 
void ser_int();
void tx(unsigned char);
unsigned char rx();
void tx_str(unsigned char *);
 
void sms(unsigned char *num1,unsigned char *msg);
void gsm_delay();
 
unsigned int dell;
 
int main()
{
        TRISC6=TRISC7=1;
        ser_int();
        sms(NUMBER, "Welcome to the Embetronicx");
        while(1);
}
 
void sms(unsigned char *num1,unsigned char *msg)
{
	tx_str("AT");
	tx(0x0d);
	gsm_delay();
 
	tx_str("AT+CMGF=1");
	tx(0x0d);
	gsm_delay();
 
	tx_str("AT+CMGS=");
	tx('"');
	while(*num1)
		tx(*num1++);
	tx('"');
	tx(0x0d);
	gsm_delay();
 
	while(*msg)
		tx(*msg++);
	tx(0x1a);
	gsm_delay();
}
 
void gsm_delay()
{
	unsigned long int gsm_del;
	for(gsm_del=0;gsm_del<=50000;gsm_del++);
}
 
void ser_int()
{
	TXSTA=0x20;	//BRGH=0, TXEN = 1, Asynchronous Mode, 8-bit mode
	RCSTA=0b10010000; //Serial Port enabled,8-bit reception
	SPBRG=17;			//9600 baudrate for 11.0592Mhz
	TXIF=RCIF=0;
}
	
void tx(unsigned char a)
{
	TXREG=a;
	while(!TXIF);
	TXIF = 0;
}

unsigned char rx()
{
	while(!RCIF);
	RCIF=0;
	return RCREG;
}

void tx_str(unsigned char *s)
{
	while(*s) {
		tx(*s++);
	}
}

Calling Code

This code is used to Call a particular number.

#include<htc.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define NUMBER 9876543210          //Here insert your number where you want to send message
 
void ser_int();
void tx(unsigned char);
unsigned char rx();
void tx_str(unsigned char *);
 
void call(unsigned char *num2);
void gsm_delay();
 
unsigned int dell;
 
int main()
{
        TRISC6=TRISC7=1;
        ser_int();
        call(NUMBER);
        while(1);
}
 
void call(unsigned char *num2)
{
	tx_str("AT");
	tx(0x0d);
	gsm_delay();
 
	tx_str("AT+CMGF=1");
	tx(0x0d);
	gsm_delay();
 
	tx_str("ATD");
	while(*num2)
		tx(*num2++);
	tx(';');
	tx(0x0d);
	for(dell=0;dell<=30;dell++)
		gsm_delay();
 
	tx_str("ATH");
	tx(0x0d);
	gsm_delay();
}
 
void gsm_delay()
{
	unsigned long int gsm_del;
	for(gsm_del=0;gsm_del<=50000;gsm_del++);
}
 
void ser_int()
{
	TXSTA=0x20;	//BRGH=0, TXEN = 1, Asynchronous Mode, 8-bit mode
	RCSTA=0b10010000; //Serial Port enabled,8-bit reception
	SPBRG=17;			//9600 baudrate for 11.0592Mhz
	TXIF=RCIF=0;
}
	
void tx(unsigned char a)
{
	TXREG=a;
	while(!TXIF);
	TXIF = 0;
}

unsigned char rx()
{
	while(!RCIF);
	RCIF=0;
	return RCREG;
}

void tx_str(unsigned char *s)
{
	while(*s) {
		tx(*s++);
	}
}

That’s all guys… You can use this code to send a message and call a particular number.

In our next tutorial, we will see how to interface the RFID reader with PIC16F877A.

You can also read the below tutorials.

Linux Device Driver TutorialsC Programming Tutorials
FreeRTOS TutorialsNuttX RTOS Tutorials
RTX RTOS TutorialsInterrupts Basics
I2C Protocol – Part 1 (Basics)I2C Protocol – Part 2 (Advanced Topics)
STM32 TutorialsLPC2148 (ARM7) Tutorials
PIC16F877A Tutorials8051 Tutorials
Unit Testing in C TutorialsESP32-IDF Tutorials
Raspberry Pi TutorialsEmbedded Interview Topics
Reset Sequence in ARM Cortex-M4BLE Basics
VIC and NVIC in ARMSPI – Serial Peripheral Interface Protocol
STM32F7 Bootloader TutorialsRaspberry PI Pico Tutorials
STM32F103 Bootloader TutorialsRT-Thread RTOS Tutorials
Zephyr RTOS Tutorials - STM32Zephyr RTOS Tutorials - ESP32
AUTOSAR TutorialsUDS Protocol Tutorials
Product ReviewsSTM32 MikroC Bootloader Tutorial
VHDL Tutorials
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

18 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Table of Contents