Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

gsm modem receive sms+interrupt+pic16f877a

Status
Not open for further replies.

coolvasanth07

Member level 1
Joined
Sep 25, 2012
Messages
37
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,286
Activity points
1,506
sir,
i am doing my project gsm modem interfacing with pic 16f877a+hitech c...i have done to sending sms,,but now problam with receiving sms...so plz help me....how to i receive sms using interruts...this is my code...


Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void main()
{
    serial_init();
    gsm_init();
    while(1);
}
void gsm_init()
{
    delay();
    serial_string(cmd_AT);
    delay();
    serial_string(cmd_CMGF);
    delay();
    serial_string(cmd_CNMI);
    delay();
    serial_string(cmd_CMGS);
    delay();
    serial_string(msg);
    delay();
    while(TXIF==0);
    TXREG=0x1A;
}
void serial_init()
{
    TXSTA=0x20;
    RCSTA=0x90;
    SPBRG=15;
    SPEN=1;
    RCIE=1;
    GIE=1;
    PEIE=1;
}
void serial_string(unsigned char name[])
{
unsigned char i=0;
while(name[i]!='\0')
{
while(TXIF==0);
TXREG=name[i];
i++;
}
}
void interrupt isr(void)
{               
    if (RCIF==1);         
    Read_msg();
} 
void Read_msg(void)
{
    unsigned char res_char;
    res_char=RCREG;
    RCIE=0;
    serial_string(cmd_CMGR);
    delay();
    RCIE=1;
    
}


thanks in advance..........
 
Last edited by a moderator:

Code:
//Project: GSM Modem Lesson
//Programmer: Shahrulnizam Mat Rejab
//PIC: PIC16F877A, PIC16F887, PIC18F4550
//Crystal Frequency: 20MHz
//Compiler: HI-TECH C for PIC10/12/16 V9.83, PIC18 V9.65
//Last Modified: 8 August 2012
//Website: http://shahrulnizam.com

#define	UART
#define	HD44780
//#define	PCD8544
//#define	_74HC4052
#if defined (_74HC4052)
	#define	SELECT_GSM	0
#endif

#include "LibraryHardware.h"
#include "LibraryPeripheral.h"
#if defined (PCD8544)
	#include "LibraryChar.h"
#endif
#include "LibraryUniversalDisplay.h"

void pic_init(void);

unsigned char data[90],z;
unsigned int counter;

static void interrupt isr(void)
{
if(RCIF==1){
	counter=0;
	data[z]=RCREG;
	if(z<88) z++;}
if(TMR0IF==1){
	TMR0IF=0;
	if(counter<200) counter++;
	else z=0;
}
}

main()
{int i,j;
pic_init();								//initialize PIC
uart_init(9600);						//initialize UART
#if defined (HD44780)
	lcd_init();							//initialize LCD
#endif
#if defined (PCD8544)
	glcd_init();						//initialize GLCD
#endif
#if defined (HD44780)
	lcd_goto(0,0);						//select first line
	lcd_string("   GSM MODEM    ");		//display string
	lcd_goto(0,1);						//select second line
	lcd_string("    EXAMPLE     ");		//display string
#endif
#if defined (PCD8544)
	glcd_goto(0,0);
	glcd_string("              ");		//display string
	glcd_string("              ");		//display string
	glcd_string("  GSM MODEM   ");		//display string
	glcd_string("   EXAMPLE    ");		//display string
	glcd_string("              ");		//display string
	glcd_string("              ");		//display string
#endif
delay(5000);
#if defined (_74HC4052)
	uart_select(SELECT_GSM);
#endif
for(;;){
	for(i=0;i<=89;i++) data[i]=' ';
	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("AT+CGMI         ");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("AT+CGMI       ");		//display string
	#endif
	uart_string("AT+CGMI");					//Manufacturer identification
	uart_write(0x0D);
	#if defined (HD44780)
		for(j=0;j<3000;j++){
			lcd_goto(0,1);					//select second line
			for(i=0;i<=15;i++) lcd_write(data[i]);}
	#endif
	#if defined (PCD8544)
		for(j=0;j<300;j++){
			glcd_goto(0,1);
			for(i=0;i<42;i++) glcd_char(data[i]);}
	#endif

	for(i=0;i<=89;i++) data[i]=' ';
	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("AT+CGMM         ");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("AT+CGMM       ");		//display string
	#endif
	uart_string("AT+CGMM");					//Model identification
	uart_write(0x0D);
	#if defined (HD44780)
		for(j=0;j<3000;j++){
			lcd_goto(0,1);					//select second line
			for(i=0;i<=15;i++) lcd_write(data[i]);}
	#endif
	#if defined (PCD8544)
		for(j=0;j<300;j++){
			glcd_goto(0,1);
			for(i=0;i<42;i++) glcd_char(data[i]);}
	#endif

	for(i=0;i<=89;i++) data[i]=' ';
	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("AT+CGMR        ");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("AT+CGMR       ");		//display string
	#endif
	uart_string("AT+CGMR");					//Software version
	uart_write(0x0D);
	#if defined (HD44780)
		for(j=0;j<3000;j++){
			lcd_goto(0,1);					//select second line
			for(i=0;i<=15;i++) lcd_write(data[i]);}
	#endif
	#if defined (PCD8544)
		for(j=0;j<300;j++){
			glcd_goto(0,1);
			for(i=0;i<42;i++) glcd_char(data[i]);}
	#endif

	for(i=0;i<=89;i++) data[i]=' ';
	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("AT+CGSN        ");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("AT+CGSN       ");		//display string
	#endif
	uart_string("AT+CGSN");					//IMEI number
	uart_write(0x0D);
	#if defined (HD44780)
		for(j=0;j<3000;j++){
			lcd_goto(0,1);					//select second line
			for(i=0;i<=15;i++) lcd_write(data[i]);}
	#endif
	#if defined (PCD8544)
		for(j=0;j<300;j++){
			glcd_goto(0,1);
			for(i=0;i<42;i++) glcd_char(data[i]);}
	#endif

	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("ATD            ");		//display string
		lcd_goto(0,1);						//select second line
		lcd_string("CALLING         ");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("ATD           ");		//display string
		glcd_string("CALLING       ");		//display string
		glcd_string("              ");		//display string
		glcd_string("              ");		//display string
	#endif
	uart_string("ATD+60136289844;");		//Calling
	uart_write(0x0D);
	delay(8000);

	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("ATH            ");		//display string
		lcd_goto(0,1);						//select second line
		lcd_string("HANG UP        ");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("ATH           ");		//display string
		glcd_string("HANG UP       ");		//display string
		glcd_string("              ");		//display string
		glcd_string("              ");		//display string
	#endif
	uart_string("ATH");						//Hang Up
	uart_write(0x0D);
	delay(2000);

	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("AT+CMGF=1      ");		//display string
		lcd_goto(0,1);						//select second line
		lcd_string("TEXT MODE       ");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("AT+CMGF=1     ");		//display string
		glcd_string("TEXT MODE     ");		//display string
		glcd_string("              ");		//display string
		glcd_string("              ");		//display string
	#endif
	uart_string("AT+CMGF=1");				//Set text mode
	uart_write(0x0D);
	delay(2000);

	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("AT+CMGS        ");		//display string
		lcd_goto(0,1);						//select second line
		lcd_string("SENT MESSAGE    ");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("AT+CMGS       ");		//display string
		glcd_string("SENT MESSAGE  ");		//display string
		glcd_string("              ");		//display string
		glcd_string("              ");		//display string
	#endif
	uart_string("AT+CMGS=");				//Send message
	uart_write(0x22);						//"
	uart_string("+60136289844");			//Phone no
	uart_write(0x22);						//"
	uart_write(0x0D);						//Enter
	uart_string("Hi, I'm PIC16F887");		//Text message
	uart_write(0x0D);						//Enter
	uart_string("Reply, if you receive this message");
	uart_write(0x1A);
	delay(2000);

	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("WAITING REPLY   ");		//display string
		lcd_goto(0,1);						//select second line
		lcd_string("                ");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("WAITING REPLY ");		//display string
		glcd_string("              ");		//display string
		glcd_string("              ");		//display string
		glcd_string("              ");		//display string
	#endif

	while(1){
		i=0;
		if(data[2]=='+') i++;
		if(data[3]=='C') i++;
		if(data[4]=='M') i++;
		if(data[5]=='T') i++;
		if(data[6]=='I') i++;
		if(i==5) break;}

	#if defined (HD44780)
		lcd_goto(0,0);						//select first line
		lcd_string("MESSAGE RECEIVE ");		//display string
		lcd_goto(0,1);						//select second line
		lcd_string("SHAHRULNIZAM.COM");		//display string
	#endif
	#if defined (PCD8544)
		glcd_goto(0,0);
		glcd_string("   MESSAGE    ");		//display string
		glcd_string("   RECEIVE    ");		//display string
		glcd_string("              ");		//display string
		glcd_string(" SHAHRULNIZAM ");		//display string
		glcd_string("   DOT COM    ");		//display string
		glcd_string("              ");		//display string
	#endif

	while(1);
}}

void pic_init(void)
{
TRISA=0b00000000;
TRISB=0b00000000;
TRISC=0b10000000;
TRISD=0b00000000;
TRISE=0b00000000;
set_digital();	
#if defined (_16F877A) || defined (_16F887)
	OPTION_REG=0b00000000;
#elif defined (_18F4550)
	T0CON=0b11000000;
#endif			
INTCON=0b11100000;
PIE1=0b00100000;			
PORTA=0b00010000;
PORTB=0b00000000;
PORTC=0b00000000;
PORTD=0b00000000;
PORTE=0b00000000;
}
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top