Toll-Free Customer Support 24/7

GSM Interfacing with MSP430

 

/*   create file  named called   gsm.c  and paste below given program

/*

 * Project name:

    GSM

 * Copyright

     (c) Researchdesignlab.com

 * Test configuration:

     MCU:             MSP430G2553

     Dev.Board:       TI LAUNCHPAD

     Oscillator:      16 MHz

     Software:        CCS STUDIO V.5

 

*/

#include "msp430g2553.h"

#include "uart.h" // ATTACH THE UART FILE WITH THE MAIN CODE

 

 

void gsm();//FUNCTION PROTOTYPE

 

 

int main(void)

{

    WDTCTL = WDTPW + WDTHOLD;// STOP WATCHDOG TIMER

    BCSCTL1 = CALBC1_8MHZ;// MAKE THE FREQUNCY AS PER THE LAUNCHPAD 8MHZ

    DCOCTL = CALDCO_8MHZ;

 

    uart_init(); // CALL THE UART INIT FUNCTION WHICH IS AVAILAIBLE IN THE FILE

    __enable_interrupt();// ENABLE INTERRUPT

 

    __delay_cycles(100000);

 

 

 

 

    gsm();// CALL THE GSM FUNCTION

 

}

 

 

void gsm()

{

 

 

      uart_puts((char *)"AT"); // COMMAND FOR INITIALIZING GSM

      uart_putc(0x0A);//ENTER

      uart_putc(0x0D);//CARRIAGE RETURN

 

      __delay_cycles(10000000);//DELAY...WAIT FOR OK FROM GSM

      uart_puts((char *)"AT+CMGF=1");//COMMUNICATION

      uart_putc(0x0A);

      uart_putc(0x0D);

 

     __delay_cycles(10000000);//WAIT FOR OK

      uart_puts((char *)"AT+CMGS=\"8123902188\"");//SEND A MESSAGE TO PARTICULAR NUMBER

      uart_putc(0x0A);

      uart_putc(0x0D);

      uart_puts((char *)"hello");//SEND HELLO

         uart_putc(0x1A);//CTRL Z

      //AFTER HARDWARE CONFIGURATION THE MESSAGE WILL GET SEND

     //ATTACH THE UART FILES OR WRITE THE CODE FOR INIT AND SENDING MESSAGE IN THE SAME FILE...

}

 

 

 

// end of gsm.c file

//………………………………………………………………………………………………………………………………………………………

 

/*   create file  named called   urat.c  and paste below given program

/*

 *This is a uart.c file of the UART Hardware demo using USCI on the MSP430G2553 microcontroller.

 *Set your baud rate in your terminal to 9600 8N1.

 *When using your TI MSP-430 LaunchPad you will need to cross the TXD and RXD jumpers.

*/

 

#include "msp430g2553.h"

#include "uart.h"

 

#define LED BIT0

#define RXD BIT1

#define TXD BIT2

 

 

volatile unsigned int tx_flag;             //Mailbox Flag for the tx_char.

volatile unsigned char tx_char;            //This char is the most current char to go into the UART

 

volatile unsigned int rx_flag;             //Mailbox Flag for the rx_char.

volatile unsigned char rx_char;            //This char is the most current char to come out of the UART

 

/*uart_init

* Sets up the UART interface via USCI

* INPUT: None

* RETURN: None

*/

void uart_init(void)

{

     P1SEL = RXD + TXD;                         //Setup the I/O

     P1SEL2 = RXD + TXD;

 

    P1DIR |= LED;                               //P1.0 red LED. Toggle when char received.

    P1OUT |= LED;                               //LED off

 

     UCA0CTL1 |= UCSSEL_2;                      //SMCLK

                                                     //8,000,000Hz, 9600Baud, UCBRx=52, UCBRSx=0, UCBRFx=1

     UCA0BR0 = 52;                        //8MHz, OSC16, 9600

     UCA0BR1 = 0;                         //((8MHz/9600)/16) = 52.08333

     UCA0MCTL = 0x10|UCOS16;              //UCBRFx=1,UCBRSx=0, UCOS16=1

     UCA0CTL1 &= ~UCSWRST;                      //USCI state machine

     IE2 |= UCA0RXIE;                           //Enable USCI_A0 RX interrupt

 

     rx_flag = 0;                               //Set rx_flag to 0

     tx_flag = 0;                               //Set tx_flag to 0

 

     return;

}

 

/*uart_getc

* Get a char from the UART. Waits till it gets one

* INPUT: None

* RETURN: Char from UART

*/

unsigned char uart_getc()                  //Waits for a valid char from the UART

{

     while (rx_flag == 0);                //Wait for rx_flag to be set

     rx_flag = 0;                               //ACK rx_flag

    return rx_char;

}

 

/*uart_gets

* Get a string of known length from the UART. Strings terminate when enter is pressed or string buffer fills

* Will return when all the chars are received or a carriage return (\r) is received. Waits for the data.

* INPUT: Array pointer and length

* RETURN: None

*/

void uart_gets(char* Array, int length)

{

     unsigned int i = 0;

 

     while((i < length))                        //Grab data till the array fills

     {

           Array[i] = uart_getc();

           if(Array[i] == '\r')                 //If we receive a \r the master wants to end

           {

                for( ; i < length ; i++)        //fill the rest of the string with \0 nul. Overwrites the \r with \0

                {

                     Array[i] = '\0';

                }

                break;

           }

           i++;

     }

 

    return;

}

 

/*uart_putc

* Sends a char to the UART. Will wait if the UART is busy

* INPUT: Char to send

* RETURN: None

*/

void uart_putc(unsigned char c)

{

     tx_char = c;                               //Put the char into the tx_char

     IE2 |= UCA0TXIE;                           //Enable USCI_A0 TX interrupt

     while(tx_flag == 1);                 //Have to wait for the TX buffer

     tx_flag = 1;                               //Reset the tx_flag

     return;

}

 

/*uart_puts

* Sends a string to the UART. Will wait if the UART is busy

* INPUT: Pointer to String to send

* RETURN: None

*/

void uart_puts(char *str)                  //Sends a String to the UART.

{

     while(*str) uart_putc(*str++);        //Advance though string till end

     return;

}

 

#pragma vector = USCIAB0TX_VECTOR          //UART TX USCI Interrupt

__interrupt void USCI0TX_ISR(void)

{

     UCA0TXBUF = tx_char;                 //Copy char to the TX Buffer

     tx_flag = 0;                               //ACK the tx_flag

     IE2 &= ~UCA0TXIE;                          //Turn off the interrupt to save CPU

}

 

#pragma vector = USCIAB0RX_VECTOR          //UART RX USCI Interrupt. This triggers when the USCI receives a char.

__interrupt void USCI0RX_ISR(void)

{

     rx_char = UCA0RXBUF;                 //Copy from RX buffer, in doing so we ACK the interrupt as well

     rx_flag = 1;                               //Set the rx_flag to 1

 

     P1OUT ^= LED;                              //Notify that we received a char by toggling LED

}

 

 

 

// end of urat.c file

//………………………………………………………………………………………………………………………………………………………

 

/*   create file  named called   urat.h  and paste below given program

/*

 *This is a uart.h file of the UART Hardware demo using USCI on the MSP430G2553 microcontroller.

 *Set your baud rate in your terminal to 9600 8N1.

 *When using your TI MSP-430 LaunchPad you will need to cross the TXD and RXD jumpers.

*/

 

 

/*rx_flag

* This flag is to be used by other modules to check and see if a new transmission has happened.

* This is READ ONLY. Do not write to it or the UART may crash.

*/

extern volatile unsigned int rx_flag;

 

/*uart_init

* Sets up the UART interface via USCI

* INPUT: None

* RETURN: None

*/

void uart_init(void);

 

/*uart_getc

* Get a char from the UART. Waits till it gets one

* INPUT: None

* RETURN: Char from UART

*/

unsigned char uart_getc();

 

/*uart_gets

* Get a string of known length from the UART. Strings terminate when enter is pressed or string buffer fills

* Will return when all the chars are received or a carriage return (\r) is received. Waits for the data.

* INPUT: Array pointer and length

* RETURN: None

*/

void uart_gets();

 

/*uart_putc

* Sends a char to the UART. Will wait if the UART is busy

* INPUT: Char to send

* RETURN: None

*/

void uart_putc(unsigned char c);

 

/*uart_puts

* Sends a string to the UART. Will wait if the UART is busy

* INPUT: Pointer to String to send

* RETURN: None

*/

void uart_puts(char *str);

// end of urat.h file

//………………………………………………………………………………………………………………………………………………………

 

Back to top