Toll-Free Customer Support 24/7

Gsm modem atmel code



/*
 * Project name:
    GSM sim900 MODEM
 * Copyright
     (c) Researchdesignlab.com
 * Description:
    
 * Test configuration:
     MCU:             AT89S52
     Dev.Board:       8051
     Oscillator:      11.0592 MHz
     Software:        Keil uVision3

*/


#include<reg51.h>  

#define LCD_PORT P2                    // LCD D0-D7 PINS connected P2
sbit rs=P3^5;                        // LCD RS PIN connected P3.5
sbit en=P3^7;                        // LCD EN PIN connected P3.7
sbit D7=P2^7;
sbit rw=P3^6;                         // LCD RW PIN connected P3.6


#define CR 0X0A
#define LF 0X0D
#define EOM 0X1A




void RX_REPLY_2_SEND_MSG();
void SEND_CMD(unsigned char *BASE_ADD,unsigned char COUNT);
void SEND_CRLF(unsigned char);
unsigned char recv_byte    (void);
void READ_SMS(void);
void DELETE_SMS(void);
void RX_REPLY();
void ENTER(void);
void DELAY();

void SEND_MSG(unsigned char *,unsigned char);
void RX_REPLY_2_SEND_MSG();

void busy();                          //LCD busy
void CMD_WRT(unsigned char);           //To write the commands to the LCD
void DATA_WRT(unsigned char);         //To write the data to the LCD
void LCD_WRT(unsigned char *);
void DELAY();
void TRANSMIT(unsigned char *);
void transmit_byte(unsigned char );
unsigned char SCI_ReceiveByte( void );
    unsigned char byt,i;

     unsigned char flag12=0,count12,message[50];

 void main()
  {
    unsigned char CMD[]={0x38,0x0f,0x01,0x06,0x80},TEMP1,a, next=0;
    
    unsigned char code CMD_1[]="AT";
    
    unsigned char code CMD_3[]="AT+CMGF=1";
    unsigned char code CMD_4[]="AT+CMGD=1";
    unsigned char code MSG[]="MESSAGE RECIVED";



    for(i=0;i<5;i++)
    {
    TEMP1=CMD[i];                         //write the commands to the LCD
    CMD_WRT(TEMP1);
    }

    TMOD=0X20;                              //TIMER 1 , MODE 2
    TH1=0XFD;                              //9600 BAURD RATE            //SERAIL INIT
       SCON=0X50;
    TR1=1;                                  //TIMER1 ON
    DELAY();
    DELAY();
    DELAY();                               //DELAY
    DELAY();

 
    
    CMD_WRT(0X01);
          CMD_WRT(0X80);
 LCD_WRT("  welcome");
 
      DELAY();
       DELAY();
       SEND_CMD(CMD_1,2);
     ENTER();
    RX_REPLY();

    DELAY();

    SEND_CMD(CMD_3,9);
    ENTER();
    RX_REPLY();

    DELAY();


       
 while(1)
 {           
 
        
        DELAY();
        
        SEND_CMD(CMD_4,9);        // DELET THE MSSG
        ENTER();    
        RX_REPLY();    
        DELAY();       
        DELAY();
        
        DELAY();
        
        recv_byte();
        recv_byte();
        
        DELAY();
        DELAY();
        
        READ_SMS();                       // READ THE MSSG
        
        DELAY();
        DELAY();
        
        DELAY();
        CMD_WRT(0X01);
        CMD_WRT(0X80);
        DELAY();
        DELAY();
        
        
        
        CMD_WRT(0X01);
        CMD_WRT(0X80);
        
        for(a=0;a<count12;a++)
        {
        DATA_WRT(message[a]);
        next++;
        if(next==0X0f)
        {                                  // DISPLAY MSG IN LCD
        next=0;
        CMD_WRT(0XC0);
        }
        
        }
        next=0;

          DELAY();
        DELAY();

       SEND_MSG(MSG,15);                  //SEND THE MSG
           DELAY();
        DELAY();
            DELAY();
        DELAY();

 }
 }
    

    
    void busy()
    {
    D7=1;
    rs=0;                             //cmd mode
    rw=1;                             //read
    while(D7!=0)                    //wait till LCD is ready
    {
    en=0;
    en=1;                            // low to high latch
    }
    }
    
    
    
    void CMD_WRT(unsigned char val)
    {
    busy();
    LCD_PORT=val;                   //write cmd to P2
    rs=0;                           //cmd mode
    rw=0;                           //write
    en=1;
    en=0;                           //high to low latch
    }
    
    
    void DATA_WRT(unsigned char ch)
    {
    busy();
    LCD_PORT = ch;                  //write cmd to P2
    rs=1;                          //data mode
    rw=0;                          //write
    en=1;
    en=0;                          //high to low latch
    }
    
    void LCD_WRT(unsigned char *string)
{
    while(*string)
        DATA_WRT(*string++);
}
/*    void transmit_byte(unsigned char  byte)       // TRANSIMITT SERIAL DATA
    {
    SBUF=byte;                                  //TRANSMIT DATA FROM  BYTE TO SBUF
    while(!TI);                                   // WAIT TILL DTA GET TRANSMITTED
    TI=0;
    }
    
    void TRANSMIT(unsigned char *string)
    {
    while(*string)
    transmit_byte(*string++);
    }
    
    unsigned char SCI_ReceiveByte( void )
    {                                            // RECIVING SERIAL DATA
    unsigned char byte;
    //    RI=0;
    while(RI!=1);                                // WAIT TILL RI IS HIGH
    byte = SBUF;                                //RECIVE DATA FROM SBUF TO BYTE
    RI=0;
    return byte;                                 // RETURN THE DATA
    }
     */
void DELAY()
{
    unsigned int X=6000000,Y=60000000;
    while(X--);
    while(Y--);
}

 void ENTER(void)    
 {
    SEND_CRLF(CR);
    SEND_CRLF(LF);
 }

 void SEND_CMD(unsigned char *BASE_ADD,unsigned char COUNT)
 {
    unsigned char I;
    for(I=0;I<COUNT;I++)
    {
      SBUF=*BASE_ADD;
      while(TI!=1);
      TI=0;
      BASE_ADD++;
    }
 }


 void RX_REPLY()
 {
    unsigned char RX=0;
    while(RX!='O')
    {
      while(RI!=1);
      RX=SBUF;
      RI=0;
    
    }
 }

 void SEND_CRLF(unsigned char CRLF)
 {
   SBUF=CRLF;
   while(TI!=1);
   TI=0;    
 }

void READ_SMS(void)
 {
  unsigned char code CMD_5[]="AT+CMGR=1";
  unsigned char byte,i=0, flag=0;
          CMD_WRT(0X01);
          CMD_WRT(0X80);
   SEND_CMD(CMD_5,9);
   ENTER();
    
    while(byte != CR)
    {    
     byte=recv_byte();        
    }    
    
    while(byte != LF)
    {    
     byte=recv_byte();    
    }
        
       while(byte != CR)
    {    
     byte=recv_byte();        
    }

    while(byte != LF)
    {    
     byte=recv_byte();    
    }    


     while(byte != LF)
    {    
     byte=recv_byte();
     message[count12]= byte;
     count12++;    
    
    }    




          
  }

 unsigned char recv_byte()
  {
    unsigned char c;
    while(RI!=1);
    c = SBUF;                        
    RI = 0;
    return(c);
  }
 
   void SEND_MSG(unsigned char *BASE_ADDR,unsigned char COUNT)
{
       unsigned char code CMD_9[]="AT+CMGS=\"1234567890\"";
    unsigned char I;
    SEND_CMD(CMD_9,20);
    ENTER();


    RX_REPLY_2_SEND_MSG();

    for(I=0;I<COUNT;I++)
    {
        SBUF=*BASE_ADDR;
        while(TI!=1);
        TI=0;
    
        BASE_ADDR++;
          
    }
        
    SBUF=EOM;
    while(TI!=1);
    TI=0;
    
}

 void RX_REPLY_2_SEND_MSG()
{    
    unsigned char RX;
    
    RX=0;
    while(RX!='>')
    {
        while(RI!=1);
        RX=SBUF;
        RI=0;
            
    }
}

 

Back to top