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; }