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 while using external RAM

Hi,

I am stuck up a peculiar problem while using 8051 external RAM.

I am declaring a variable:
unsigned int xdata x _at_ 0xA004;

then I equate:
x=6;

and i display this value on the hyperterminal (RS232) window using the function:

serial_num(x+0x30);

every thing goes fine and the value 6 is diaplayed on the hyper terminal window.

PROBLEM:

when i equate the value x to another variable *p and try to display the value *p i am unable to get the value on the hyper terminal window.

unsigned int xdata *p _at_ 0xA008;

x=6;
p=&x;
serial_num(*p+0x30);

when I try to display this on the hyper terminal (RS232) window I get garbage values displayed on the screen.

Here is the code that was developed.

#pragma LARGE
#include<reg52.h>
#include<string.h>
#include<absacc.h>
#include<intrins.h>
#include<ctype.h>

sbit RXD_pin=P3^0;
sbit TXD_pin=P3^1;
sbit INT0_pin=P3^2;
sbit INT1_pin=P3^3;
sbit WRITE_pin=P3^6;
sbit READ_pin=P3^7;

unsigned int xdata read_byte _at_ 0xA001, write_byte _at_ 0xA003;
unsigned int xdata count _at_ 0xA005, *p _at_ 0xA007 , x _at_ 0xA009;
unsigned int idata i;
unsigned char xdata CS5_enable _at_ 0XA000;
//CS5_enable is the variable declared to chip select the external RAM. Static RAM used is HY6264. 8K RAM
unsigned char xdata CS2_enable _at_ 0x4000;

void read_ram(void);
void write_ram(void);
void serial_init(void);
void serial_num(unsigned char);
void delay(void);

void main(void)
{ serial_init();
while(1)
{ write_ram();
x=6;
p=&x;
write_ram();
write_byte=*p;//write value to external ram location
read_ram();
read_byte=write_byte;//read value from external ram location
serial_num(read_byte+0x30); //display on hyper terminal window screen
} }

void read_ram(void)
{ CS5_enable=1;
WRITE_pin=1;
READ_pin=1;
}

void write_ram(void)
{ CS5_enable=0;
WRITE_pin=0;
}

void serial_num(unsigned char s)
{ SBUF=s;
while(TI==0);
TI=0;
}

void serial_init(void)
{ TMOD=0x20;
SCON=0x50;
TH1=0xcc;
TR1=1;
}

0