EngineersGarage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise
You are here: Home / Replies / Hi. I have had similar

Hi. I have had similar

|

Microcontroller › PIC › problem while compiling program of pic 18f4550 interfacing with gsm › Hi. I have had similar

January 12, 2014 at 10:16 am #10837
Ian
Participant

Hi.

 

I have had similar problems with this project and identical errors when compiling.

 

I have made a couple of changes to the code to get it to compile but I am still struggling to get the project to work.

 

Some of the changes are:

 

1) where there is “RCSTA.SPEN=1” for instance I have needed to change this to “RCSTAbits.SPEN=1” this needs to be done wherever there is a register.port command

2) needed to include the correct “.h” file otherwise commands which use LATA and PORTA etc give errors

3) Also there is no “Delay_ms” function even though it is referred to in the code – not sure if maybe other versions of the compiler has this as a standard function. I have just made my own delay function

4) The checking of the Port D input pins makes no sense to me and it gives an error. So I have changed them – see the code below.

 

Like I said I’m still battling to get this project working and I am by no means an expert in these matters – but maybe the author can respond to some of these suggested changes.

 

Code below. Cheers.

 

#include <p18f4550.h>
#include <timers.h>
//Program to interface GSM Modem with PIC18F4550 Microcontroller
//This code takes four choices as four inputs
//Choice 1 : Test the simple AT Command.
//Choice 2 : Find out the IMEI number of the GSM Modem.
//Choice 3 : Connect a call to a GSM mobile number.
//Choice 4 : Send a text message to a mobile number.
#define FREQ 12000000
#define baud 9600
#define spbrg_value (((FREQ/64)/baud)-1)
// #define rs LATA.F0
// #define rw LATA.F1
// #define en LATA.F2
//LCD Control pins

#define rs PORTBbits.RB4
#define rw PORTBbits.RB3
#define en PORTBbits.RB2

#define lcdport LATB
void tx_data(unsigned char);
unsigned char rx_data();
void lcd_ini(void);
void lcdcmd(unsigned char);
void lcddata(unsigned char);
void gsm_cmd(unsigned char *);
void output(void);
void Delay_ms ( int delay );
unsigned char value=0;
int i=0,j,k,temp,flag,choice;
unsigned char *starting_text=”Enter choice=”;
unsigned char *dial_text=”Dialing…”;
unsigned char *at_cmd=”AT”;
unsigned char *imei_cmd=”AT+GSN”;
unsigned char *call_cmd=”ATD9xxxxxxxxx;”;   // Provide a 10-Digit Mobile Number
unsigned char *sms_format=”AT+CMGF=1″;
unsigned char *sms_write=”AT+CMGS=”xxxxxxxxxx””;  // 10-Digit Mobile Number
unsigned char *sms=”Hello”;
unsigned char *sms_report=”SMS Sent…”;
unsigned char sms_terminate=0x1A;
unsigned char enter=0x0D;
unsigned char *data;

void main()
{
    TRISB=0;                // Set Port B as output port
    LATB=0;
    TRISA=0;
    LATA=0;
    TRISD=0xFF;
    LATD=0;
    SPBRG=spbrg_value;            // Fill SPBRG register to set the baud rate
    RCSTAbits.SPEN=1;                // To activate serial port (Tx and Rx pins)
    TXSTAbits.TXEN=1;                // Activate Transmissiom
    RCSTAbits.CREN=1;                // Activate Reception
    PIE1bits.RCIE=1;                // Enable Reception interrupt
    INTCONbits.GIE=1;                // Enable Global interrupt
    INTCONbits.PEIE=1;                // Enable Peripheral interrupt
   
    lcd_ini();
    while(1)
    {
        k=0;
        lcdcmd(0x80);
        while(starting_text[k]!=’’)
        {
            lcddata(starting_text[k]);
            k++;
        }
       
        //Check inputs
//Choice 1
        if(PORTD=0xfe)
        {
            gsm_cmd(at_cmd);
            output();
            Delay_ms(1000);
        }

        //Choice 2
        if(PORTD=0xfd)
        {
            gsm_cmd(imei_cmd);
            output();
            Delay_ms(1000);
        }

        //Choice 3       
        if(PORTD=0xfb)
        {
            gsm_cmd(call_cmd);
            output();
            Delay_ms(1000);
        }
//Choice 4
        if(PORTD=0xf7)
        {
            gsm_cmd(sms_format);
            output();
            Delay_ms(1000);
gsm_cmd(sms_write);
            output();
            Delay_ms(1000);
gsm_cmd(sms);
            output();
            tx_data(0x1A);
            Delay_ms(1000);
        }
}
}
void gsm_cmd(unsigned char *string)
{
    i=0;j=0;
    while(string!=’’)
    {
        temp=0;
        if(string
==0x5C)        // Not to send ” cahracter
        i++;
        tx_data(string
);        // Send by serial communication
        i++;
        while(temp!=1);
    }
    temp=0;
    tx_data(enter);                // Send ASCII code for ‘Enter’ key
    while(temp!=1);
}
void output(void)                // To print data on LCD
{
    lcdcmd(0x01);
    i=-1;flag=0;
    while(i<j)
    {
        if(flag>1)
        {
            flag=0;
            Delay_ms(500);
            lcdcmd(0x01);
            lcdcmd(0x80);
        }
        if(data
==0x0A)        // This condition is to avoid double Enter
// during execution of a command
        {
            flag++;
            lcdcmd(0xc0);
        }
        if(data
==’>’||data=='”‘)    // Not to print this character
        {
            i++;
            lcdcmd(0xc0);
        }
        if(data
!=0x0D&&data!=0x0A&&data!=0x1A)      // Condition to print the data
                            // except ‘Enter’,’New line’ and ‘Submit’
       
        {
            lcddata(data
);
            i++;
        }
        else
            i++;
        Delay_ms(300);
    }
    lcdcmd(0x01);
}
void tx_data(unsigned char serial_data)        // Transmit data function
{
    TXREG=serial_data;
    while(PIR1bits.TXIF==0);
}

void interrupt()
{
    data[j]=RCREG;            // Store the data into array when Reception interrupt occurs
    value=RCREG;
    j++;
    temp=1;
}
void lcd_ini(void)
{
    lcdcmd(0x38);        // Configure the LCD in 8-bit mode, 2 line and 5×7 font
    lcdcmd(0x0C);        // Display On and Cursor Off
    lcdcmd(0x01);        // Clear display screen
    lcdcmd(0x06);        // Increment cursor
    lcdcmd(0x80);        // Set cursor position to 1st line, 1st column
}
void lcdcmd(unsigned char cmdout)
{
    lcdport=cmdout;        //Send command to lcdport=PORTB
    rs=0;                       
    rw=0;
    en=1;
    Delay_ms(10);
    en=0;
}
void lcddata(unsigned char dataout)
{
    lcdport=dataout;    //Send data to lcdport=PORTB
    rs=1;
    rw=0;
    en=1;
    Delay_ms(10);
    en=0;
}

void Delay_ms ( int delay )
{
int ms, x;

for ( ms = 0; ms< delay; ms ++ )
for ( x = 0; x < 70; x ++ );
}

 

 

RSS Recent Posts

  • Failure of polypropylene motor-run capacitors June 16, 2025
  • Siemens large industrial PLC parts June 16, 2025
  • Wideband matching an electrically short bowtie antenna; 50 ohm, 434 MHz June 16, 2025
  • Curved lines in PCB design June 16, 2025
  • using a RTC in SF basic June 15, 2025

Stay Up To Date

Newsletter Signup
EngineersGarage

Copyright © 2025 WTWH Media LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of WTWH Media
Privacy Policy | Advertising | About Us

Search Engineers Garage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise