0% found this document useful (0 votes)
70 views18 pages

Code

code

Uploaded by

BilalHassan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
70 views18 pages

Code

code

Uploaded by

BilalHassan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 18

#include <htc.

h>
#include <ctype.h>

#include "delay.h"
#include "usart.h"



#define Response 0
#define Data 1

#define TX_ToModem RC0
#define TX_ToPC RC1
#define RX_ToModem RC3
#define RX_ToPC RC2

#define LCD_RS RD5
#define LCD_RW RD6
#define LCD_EN RD7
#define LCD_DATA PORTB

#define PLAY RD4

#define AC RD0
#define UPS RD1
#define GEN RD2



void lcd_cmd(unsigned char);
void lcd_data(unsigned char);
void lcd_string(const unsigned char*);

void config();
void LcdInitialize();
void ReadStatus();
void configTimer();
void InterruptSetting(void);
void WithGSM();
void WithPC();


unsigned char RxS;
unsigned char RxH;
unsigned char ModemRxStr[100];
unsigned char TerminalRxStr[50];
unsigned char ModemSendString[4]={'\0','\0','\0','\0'};
unsigned char LFCount=0;
unsigned char i=0,j=0,k=0;
unsigned char RxLineCount;
unsigned char Mode;
unsigned char SendMsg=0;
unsigned char MakeCallFlag=0;
unsigned int Timer3Counter=0;
unsigned char RegularSMSSendFlag=1;
unsigned char attempts=1;

void main()
{
config();
LcdInitialize();
configTimer();
WithGSM();
USARTSetup(9600);
USARTInterrupts(TxIntDisable,RxIntEnable); //transmit interrupts disable and recieve interrupts
enable
InterruptSetting(); //enable all interrupts
DelayMs(10);
Mode=Response;
lcd_cmd(0x1);
DelayMs(20);
lcd_cmd(0x80);
DelayMs(20);
lcd_string("Response Sec");
DelayMs(20);
TransmitString("AT\r");
DelayMs(200);
TransmitString("AT\r");
DelayMs(200);
TransmitString("AT\r");
DelayMs(200);
TransmitString("AT+CMGF=1\r");
DelayMs(200);
TransmitString("AT+CNMI=1,2,0,0,0\r");
DelayMs(200);
ClearOverRunError();
lcd_cmd(0x1);
DelayMs(20);
lcd_cmd(0x80);
DelayMs(20);
lcd_string("Data Sec");
Mode=Data;


while(1)
{
ReadStatus();

if(RegularSMSSendFlag)
{
TMR3IE = 0;
RegularSMSSendFlag=0;
lcd_cmd(0x1);
DelayMs(20);
lcd_cmd(0x80);
DelayMs(20);
lcd_string("AC: ");
DelayMs(20);
lcd_data(ModemSendString[0]);
DelayMs(20);
lcd_string(" UPS: ");
DelayMs(20);
lcd_data(ModemSendString[1]);
DelayMs(20);
lcd_cmd(0xC0);
DelayMs(20);
lcd_string("GEN: ");
DelayMs(20);
lcd_data(ModemSendString[2]);
DelayMs(20);

CREN = 0;
TransmitString("AT+CMGS=\"+923135848502\"\r");
DelayMs(200);
TransmitString("Status is: AC= ");
DelayMs(100);
Transmit(ModemSendString[0]);
DelayMs(100);
TransmitString(",UPS= ");
DelayMs(100);
Transmit(ModemSendString[1]);
DelayMs(100);
TransmitString(",GEN= ");
DelayMs(100);
Transmit(ModemSendString[2]);
DelayMs(100);
Transmit(0x1A);
DelayMs(150);
SendMsg=0;
Mode=Data;
k=0;
CREN = 1;

TMR3IE = 1;

}

if(MakeCallFlag && attempts)
{
TMR3IE = 0;

MakeCallFlag=0;
attempts=0;
lcd_cmd(0x1);
DelayMs(20);
lcd_cmd(0x80);
DelayMs(20);
lcd_string("Calling");
CREN = 0;
TransmitString("ATD+923135848502");
Transmit(';');
DelayMs(250);
Transmit('\r');
CREN=1;
TMR3IE = 1;
}
if(SendMsg)
{
TMR3IE = 0;

lcd_cmd(0x1);
DelayMs(20);
lcd_cmd(0x80);
DelayMs(20);
lcd_string("Trans Sec");
CREN = 0;
TransmitString("AT+CMGS=\"+923135848502\"\r");
DelayMs(200);
TransmitString("Status is: AC= ");
DelayMs(100);
Transmit(ModemSendString[0]);
DelayMs(100);
TransmitString(",UPS= ");
DelayMs(100);
Transmit(ModemSendString[1]);
DelayMs(100);
TransmitString(",GEN= ");
DelayMs(100);
Transmit(ModemSendString[2]);
DelayMs(100);
Transmit(0x1A);
DelayMs(150);
SendMsg=0;
Mode=Data;
k=0;
CREN = 1;
lcd_cmd(0x1);
DelayMs(20);
lcd_cmd(0x80);
DelayMs(20);
lcd_string("Wait Sec");
DelayS(1);

lcd_cmd(0x1);
DelayMs(20);
lcd_cmd(0x80);
DelayMs(20);
lcd_string("AC: ");
DelayMs(20);
lcd_data(ModemSendString[0]);
DelayMs(20);
lcd_string(" UPS: ");
DelayMs(20);
lcd_data(ModemSendString[1]);
DelayMs(20);
lcd_cmd(0xC0);
DelayMs(20);
lcd_string("GEN: ");
DelayMs(20);
lcd_data(ModemSendString[2]);
DelayMs(20);

TMR3IE = 1;
}
}
}

void config()
{
TRISB=0x00;
TRISD=0x0F;
PORTB=0x00;
PORTD=0x08;
TRISC=0x80;
}

void configTimer()
{
T3CON = 0xB0;

TMR3H = 0;
TMR3L = 0;

TMR3IF=0;
PEIE=1;
GIE=1;

TMR3IE=1;
TMR3ON=1;

}
void LcdInitialize()
{
lcd_cmd(0x38);
DelayMs(10);
lcd_cmd(0x0E);
DelayMs(10);
lcd_cmd(0x80);
DelayMs(10);
lcd_cmd(0x01);
DelayMs(10);
}

void ReadStatus()
{

if(AC==0 && UPS ==0 && GEN==0)
{
ModemSendString[0]='1';
ModemSendString[1]='1';
ModemSendString[2]='1';
}
if(AC==0 && UPS ==0 && GEN==1)
{
ModemSendString[0]='1';
ModemSendString[1]='1';
ModemSendString[2]='0';
}
if(AC==0 && UPS ==1 && GEN==0)
{
ModemSendString[0]='1';
ModemSendString[1]='0';
ModemSendString[2]='1';
}
if(AC==0 && UPS ==1 && GEN==1)
{
ModemSendString[0]='1';
ModemSendString[1]='0';
ModemSendString[2]='0';
}
if(AC==1 && UPS ==0 && GEN==0)
{
ModemSendString[0]='0';
ModemSendString[1]='1';
ModemSendString[2]='1';
}
if(AC==1 && UPS ==0 && GEN==1)
{
ModemSendString[0]='0';
ModemSendString[1]='1';
ModemSendString[2]='0';
}
if(AC==1 && UPS ==1 && GEN==0)
{
ModemSendString[0]='0';
ModemSendString[1]='0';
ModemSendString[2]='1';
}
if(AC==1 && UPS ==1 && GEN==1)
{
MakeCallFlag=1;
}

}
void interrupt ISR(void)
{
if(TMR3IE && TMR3IF)
{
TMR3IF=0;
Timer3Counter++;
if(Timer3Counter == 200) // 2860 for 5 min, 1718 for 3 min
{
Timer3Counter=0;
RegularSMSSendFlag=1;
}
}

if(RCIF)
{
di();
RCIF=0;
RxH=RCREG;
ClearOverRunError();

if(Mode==Response)
{

if(RxH=='\n')
{
LFCount++;

}
if(LFCount<2 && RxH!='\r' && RxH!='\n')
{
ModemRxStr[j++]=RxH;
}
if(LFCount==2 )
{
ModemRxStr[j]='\0';
j=0;
LFCount=0;
}
else
NOP();

RCIF=0;
ei();
}
if(Mode==Data)
{
if(RxH!='\n' && RxH!='#')
{
ModemRxStr[k++]=RxH;
}
if(RxH=='#')
{
ModemRxStr[k]='\0';
k=0;
SendMsg=1;



}
RCIF=0;
ei();

}

}
}

void InterruptSetting(void)
{
PEIE=1;
GIE=1;
}

void WithGSM()
{
TX_ToModem=1;
TX_ToPC=0;
RX_ToModem=1;
RX_ToPC=0;

}

void WithPC()
{
TX_ToModem=0;
TX_ToPC=1;
RX_ToModem=0;
RX_ToPC=1;

}

// LCD COMMAND SENDING FUNCTION
void lcd_cmd(unsigned char item)
{
LCD_DATA = item;
LCD_RS= 0;
LCD_RW=0;
LCD_EN=1;
DelayMs(1);
LCD_EN=0;
return;
}
// LCD DATA SENDING FUNCTION
void lcd_data(unsigned char item)
{
LCD_DATA = item;
LCD_RS= 1;
LCD_RW=0;
LCD_EN=1;
DelayMs(1);
LCD_EN=0;
return;
}
// LCD STRING SENDING FUNCTION
void lcd_string(const unsigned char *str)
{

while(*str)
{
lcd_data(*str++);
DelayMs(10);
}
return;
}

You might also like