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.

[PIC] PIC16F877A ,GSM, LCD16x2,MPLAB IDE

Status
Not open for further replies.

Vivz Boonchi

Newbie level 2
Joined
Sep 15, 2013
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
22
Code:
#include<htc.h>
__CONFIG(FOSC_HS&WDTE_OFF&PWRTE_OFF&BOREN_OFF&LVP_OFF);
#define _XTAL_FREQ 20000000
#define ON RB0	
#define OFF RB1
#define PIR RB2 	
#define MAG RB3		
#define LCD_rs RA2
#define LCD_en RA3
#define LCD_data PORTD
#define BUZZER RC3
#define AUTOLOCK RC4
#define LED_ON RB6
#define LED_OFF RB7
#define LED2 RB5

void LCD_sendcommand(unsigned char cmd)
{
	LCD_data=cmd;
	LCD_rs=0;
	LCD_en=1;
	__delay_ms(1);
	LCD_en=0;
	__delay_ms(2);
}

void LCD_senddata(unsigned char data)
{
	LCD_data=data;
	LCD_rs=1;
	LCD_en=1;
	__delay_ms(1);
	LCD_en=0;
	__delay_ms(2);
}

void LCD_sendstringdata(unsigned char* data)
{
	while(*data!='\0')
	{
		LCD_senddata(*data);
		data++;
	}
}

void LCD_init()
{
__delay_ms(15);
LCD_sendcommand(0x38);
LCD_sendcommand(0x0F);
LCD_sendcommand(0x00);
LCD_sendcommand(0x06);
}


void UART_Init()
{
	BRGH = 1;
    SPBRG = 64;
    SYNC = 0;
    SPEN = 1;
    TRISC = 0b10000000; 
    CREN = 1;
    TXEN = 1;
     
}

char UART_TX_Empty()
{
  return TRMT;
}

char UART_Data_Ready()
{
   return RCIF;
}
char UART_Read()
{
 
  while(!RCIF);
  return RCREG;
}

void UART_Read_Text(char *Output, unsigned int length)
{
   int i;
   for(int i=0;i<length;i++)
      Output[i] = UART_Read();
}

void UART_Write(char data)
{
  while(!TRMT);
  TXREG = data;
}

void UART_Write_Text(char *text)
{
  int i;
  for(i=0;text[i]!='\0';i++)
     UART_Write(text[i]);
}


//**********************AT commands initialization**************
char AT[]="AT";
char noecho[]="ATE0";
char mode_text[]="AT+CMGF=1";
char mobile_no[]="AT+CMGS="+60142107184"";
char terminator=0x1A;
char text[]="intruder!!";


//********************String transmit function****************
void send_to_modem(char *s)
{
while(*s)			
{
UART_Write(*s++);
}
UART_Write(0X0D);
}

void send_to_modem1(char *s)
{
while(*s)
UART_Write(*s++);
}
void send_sms()
{
send_to_modem(text);
__delay_ms(1000);			
UART_Write(terminator);
__delay_ms(1000);
}


void main()
{
TRISB=0b00001111;
PORTB=0X00;
TRISA=0X00;
PORTA=0X00;
TRISC=0X00;
PORTC=0X00;
TRISD=0X00;
PORTD=0X00;
LCD_init();
ADCON1=0x06;
UART_Init(19200);		

while(1)
{ 
{
if (ON==1)
	{
	 RB6=1;
	 RB7=0;
	}
else if (OFF==1)
	{
	RB7=1;
	RB6=0;
	AUTOLOCK=0;
	BUZZER=0;
	LED2=0;
	LCD_sendcommand(0x08);

	}

if(PIR==1)
	{
	AUTOLOCK=1;
	BUZZER=1;
	LED2=1;
	LCD_sendcommand(0x80);
	LCD_sendstringdata("shutup");
	send_to_modem(AT);
	__delay_ms(1000);
	send_to_modem(noecho);
	__delay_ms(1000);
	send_to_modem(mode_text);
	__delay_ms(1000);
	send_to_modem(mobile_no);
	__delay_ms(1000);
	send_sms(); 
	__delay_ms(10000); 
	}
else if(MAG==1)
	{
	AUTOLOCK=1;
	BUZZER=1;
	LED2=1;
	LCD_sendcommand(0x80);
	LCD_sendstringdata("Intruders!!!!!!");
	send_to_modem(AT);
	__delay_ms(1000);
	send_to_modem(noecho);
	__delay_ms(1000);
	send_to_modem(mode_text);
	__delay_ms(1000);
	send_to_modem(mobile_no);
	__delay_ms(1000);
	send_sms(); 
	__delay_ms(10000); 
	}	


}
}
}

With coding above,LCD cant display correctly and GSM cant send message.
Please help!
Thanks.:smile:
 
Last edited by a moderator:

Can anyone show me how to connect sim900a with pic16f877a?
I cant find any datasheet.
Thanks.
 

Hi you need to use a level shifter between SIM900 and PIC. See the attachment.
 

Attachments

  • SIM900_Serial Port_Application Note_V1.03.pdf
    284.2 KB · Views: 80

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top