Hello, I have an 8051 custom processor, this have a memory mapped like this: 16 banks of eeprom external memory of 32kB each one. The page 0 is mapped: 0x0000-0x7FFF. The other ones: 0x8000-0xFFFF. The page number is selected via a PAGE_REG. Also I have a block of extended ram which is mapped from 0x1000-0x1FFF. And I have two RAMs more: internal ram (indirect and direct address), and external ram, of 256B amount (from 0x00 to 0xFF). Memory access from C, I do this: For eeprom:
//... select mem_page ... unsigned char pdata *ptr; ptr = address; *ptr = dat;
For extended ram:
unsigned char xdata *ptr; ptr = address // 0x1000 <= address <= 0x1FFF *ptr= dat;
For internal ram:
unsigned char idata *ptr; ptr = address; *ptr = dat;
The extended ram, and internal ram works, but the eeprom access doesn't. Someone can guide me? Thanks a lot.
g.
The 8052 has several non overlaping memory areas. As far a paging you have code and XData. the question is what did bank and how is it banked. Did you read the banking instructions in the manual? you need you supply the paging functions for the compiler to use.
Thanks for your answer. Now I'm able to tell you the solution adopted. I have addressing the ram as pdata, and the extram and e2rom as xdata,in this case, the processor is able to determine the memory mapped with the address provided.