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.

PIC18F4550 C code for GPS and GSM module.

Status
Not open for further replies.

srk.amt

Newbie level 6
Joined
Dec 19, 2011
Messages
14
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,372
Hi friends,

I am working on tracking project. I want C code for PIC18F4550 which is interfaced with GPS and GSM module.
This PIC has to read data from GPS and send this data to GSM with AT commands for sending SMS.
Please help.
 

Friends i have written the code, please check it once.
Please let me know if there are any corrections.
Thanks in advance.


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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#define FREQ 12000000
#define baud 9600
#define spbrg_value (((FREQ/64)/baud)-1)
unsigned char rx_data();
unsigned char *gps_data;
unsigned char single_data;
unsigned int i=0;
unsigned char *at_cmd="AT";
unsigned char *sms_format="AT+CMGF=1";
unsigned char *sms_write="AT+CMGS=\"+919665479959\"";
unsigned char enter=0x0D;
unsigned char *data;
 
void main()
{
    TRISB=0;            // Set Port B as output port
    LATB=0;
    TRISA=0;
    LATA=0;
    SPBRG=spbrg_value;    // Fill SPBRG reg to set the baud rate
    RCSTA.SPEN=1;       // To activate serial port (Tx and Rx pins)                                    
    RCSTA.CREN=1;           // To enable continuous reception
    TXSTA.TXEN=1;              // Activate Transmissiom
    PIE1.RCIE=1;           // Enable Reception interrupt
    INTCON.GIE=1;          // Enable Global interrupt
    INTCON.PEIE=1;     // Enable Peripheral interrupt
    
    gsm_cmd(at_cmd);
 
    while(1)
    {
        single_data=rx_data();     // Check the string '$GPGGA,'
        if(data=='$')
        {
        single_data=rx_data();
        for(i=0;single_data!='$';i++)
            {
            single_data=rx_data();
            gps_data[i]=single_data;  // Store the data
            }
                 gsm_cmd(sms_format);
            Delay_ms(1000);
            gsm_cmd(sms_write);
            Delay_ms(1000);
            gsm_cmd(gps_data);
            tx_data(0x1A);
            Delay_ms(1000);
 
        }
        }
 
unsigned char rx_data(void)
{
    while(PIR1.RCIF==0);        // Wait until RCIF gets low
    return RCREG;           // Store data in Reception register
}
void gsm_cmd(unsigned char *string)
{
    i=0;j=0;
    while(string[i]!='\0')
    {
        temp=0;
        if(string[i]==0x5C)     // Not to send '\' cahracter
        i++;
        tx_data(string[i]);     // Send by serial comm.
        i++;
        while(temp!=1);
    }
    temp=0;
    tx_data(enter);     // Send ASCII code for 'Enter' key
    while(temp!=1);
}
void tx_data(unsigned char serial_data) // Transmit data function
{
    TXREG=serial_data;
    while(PIR1.TXIF==0);
}
 
void interrupt()
{
    data[j]=RCREG;   // Store the data into array when Reception 
    value=RCREG;           interrupt occurs.
    j++;
    temp=1;
}

 
Last edited by a moderator:

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top