This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Problem in using Xdata Memory

Hi all...
I have a very small issue....
i have written a code to send messages through SIM800 using SST89E516RD2 microcontroller.
code is:-

#include <sst89e516rd2.h>
sbit row0=P2^4;
sbit row1=P2^5;
sbit row2=P2^6;
sbit row3=P2^7;
sfr COL=0xA0;

unsigned char *message = "Hi Everybody ";   // Content of the message to be sent

int keypad();
void sendsms();
void puts(unsigned char* ptr);
void putc(unsigned char chr);
void initialize();

unsigned char CTRLZ = 0x1A;

unsigned char  xdata phoneno[10]; //Array to store the phone no.

void main()                                             // MAIN STARTS HERE
{
unsigned int i,j;
 while(1)
   {
     for(j=0;j<10;j++)
        {
        phoneno[i]=keypad();   // Entering new company phone no
        LCD_putc(phoneno[i]);
        i++;
        }
        i=0;
        initialize();
        msdelay(1000);
        sendsms();
    }
}

void sendsms()
{
 puts("ATE0\r");
 msdelay(1000);
 puts("AT\r");
 msdelay(1000);
 puts("AT+CMGF=1\r");
 msdelay(1000);
 puts("AT+CMGS=\"");
 puts(phoneno);
 puts("\"");
 puts("\r");
 msdelay(1000);
 puts(message);
 msdelay(1000);
 putc(CTRLZ);
}

int keypad()
 {
   unsigned char dat[4][4]={'1','2','3','A',     // assigning key matrix
                            '4','5','6','B',
                            '7','8','9','-',
                            '*','0','#','+',
                                                               };
 unsigned char colloc,rowloc;
 COL=0xFF;
 row0=0;
 row1=0;
 row2=0;
 row3=0;
  while(1)
   do
   {
    row0=0;
    row1=0;
    row2=0;
    row3=0;
    colloc=COL;
    colloc&=0x0F;
    }
    while(colloc!=0x0F);
    do
     {
      do
        {
        msdelay(10);
        colloc=COL;
        colloc&=0x0F;
        }
     while(colloc==0x0F);
     msdelay(10);
     colloc=COL;
     colloc&=0x0F;
    }
  while(colloc==0x0F);
  while(1)
   {
     row0=0;
     row1=1;
     row2=1;
     row3=1;
     msdelay(5);
     colloc=COL;
     colloc&=0x0F;
     if(colloc!=0x0F)
      {
        rowloc=0;
        break;
      }
     row0=1;
     row1=0;
     row2=1;
     row3=1;
     msdelay(5);
     colloc=COL;
     colloc&=0x0F;
   if(colloc!=0x0F)
    {
    rowloc=1;
    break;
    }
   row0=1;
   row1=1;
   row2=0;
   row3=1;
   msdelay(5);
   colloc=COL;
   colloc&=0x0F;
  if(colloc!=0x0F)
   {
    rowloc=2;
    break;
   }
   row0=1;
   row1=1;
   row2=1;
   row3=0;
  msdelay(5);
  colloc=COL;
  colloc&=0x0F;
if(colloc!=0x0F)
  {
      rowloc=3;
      break;
  }
 }
   if(colloc==0x0E)
   return(dat[rowloc][0]);
   else if(colloc==0x0D)
   return(dat[rowloc][1]);
   else if(colloc==0x0B)
   return(dat[rowloc][2]);
   else
   return(dat[rowloc][3]);
}
}

void puts(char* p)
{
 char *temp = p;          /*temp pointer so that the actual pointer is not displaced */
 while(*temp != 0x00)
 {
  putc(*temp);
  temp++;
 }
}

void putc(unsigned char chr)
{
 SBUF = chr;
 while(TI==0);            /*Wait until the character is completely sent */
 TI=0;                    /*Reset the flag */
}
                                                                // MAIN ENDS HERE
void initialize()
{
 SCON  = 0x50;   /*SCON: mode 1, 8-bit UART, enable receive      */
 TMOD |= 0x20;   /*TMOD: timer 1, mode 2, 8-bit                  */
 TH1   = 0xFD;   /*TH1:  for 9600 baud                           */
 TR1   = 1;      /*TR1:  timer 1 run                             */
}

void msdelay(unsigned int value)
{
 unsigned int i,j;
 for(i=0;i<value;i++)
 for(j=0;j<100;j++);
}

Now my problem is when i change
unsigned char Xdata phone[10]; to unsigned char phoneno[10];
i GSM module send me the messages...
but if i write
unsigned char Xdata phoneno[10];
the GSM modem does not send any messages.
the system only works and sends messages when array phoneno[10] is stores in DATA instead of XDATA.
why does this happen....
can you please help me....

Parents
  • And also i have created many other arrays which i store in xdata and which i can access it without configuring the processor.
    I Also have xdata arrays which store passwords and then the same password are again used to store the datas like RTC date and time to eeprom without configuring the processor....
    So how does they work.

Reply
  • And also i have created many other arrays which i store in xdata and which i can access it without configuring the processor.
    I Also have xdata arrays which store passwords and then the same password are again used to store the datas like RTC date and time to eeprom without configuring the processor....
    So how does they work.

Children
No data