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

External memory

hello,
i've declared an external memory mapped at address 8000H, and load data into it :

unsigned char xdata xdisp[15][24] _at_ 0x8000;
unsigned char i;
for (i = 0; i < 16; i++) {
   xdisp[i][0] = i;
   xdisp[i][1] = i + 1;
   xdisp[i][2] = i + 2;
   xdisp[i][3] = i + 3;
   xdisp[i][4] = i + 4;
   xdisp[i][5] = i + 5;
 }

for (i = 0; i < 16; i++) {
  P1 = xdisp[i][0];
  }

the result in P1 is the address of xdisp[i][0] and not the value in it.
how can i use a pointer or something else to recieve the values.

thanks

Parents
  • i didn't mention the hardware but it's working fine.

    unsigned char array[] = {
    0x00,0x01,0x02,0x03,0x04....,0x15};
    while (1){
    for (i=0;i<16;i++){
      P1 = array[i];
      int_1=0;int_1=1; // latch the displat
      }
    }
    


    now instead of array[] i want to use xdisp[16][24]
    the address of 6264 is 0x8000.
    i've notice that i receive this values, which are the address of the array, in the dot display:
    row1 - 00 which is the address of 0x8000
    row2 - 18 which is the address of 0x8018
    row3 - 30 which is the address of 0x8030
    row4 - 48 which is the address of 0x8048
    row5 - 60 which is the address of 0x8060
    row6 - 78 which is the address of 0x8078
    row7 - 90 which is the address of 0x8090
    . row16 - 38 which is the address of 0x8138

    i guess that when i want the recieve the data from the address e.g 0x8018 the uC latch the address and after 'x' time he reads the data with RD through P1 AD0-AD7.
    so what happen is that the 6264 dont send the data out, and the lower byte of the address 0x8018 remains in PORT0, WHY?
    i add a delay and still Nothing.
    and do i need to set values in KEIL 'off chip xdata memory' or can i leave it blank?
    and do i need to set values in STARTUP.A51 or leave it's default values ?

Reply
  • i didn't mention the hardware but it's working fine.

    unsigned char array[] = {
    0x00,0x01,0x02,0x03,0x04....,0x15};
    while (1){
    for (i=0;i<16;i++){
      P1 = array[i];
      int_1=0;int_1=1; // latch the displat
      }
    }
    


    now instead of array[] i want to use xdisp[16][24]
    the address of 6264 is 0x8000.
    i've notice that i receive this values, which are the address of the array, in the dot display:
    row1 - 00 which is the address of 0x8000
    row2 - 18 which is the address of 0x8018
    row3 - 30 which is the address of 0x8030
    row4 - 48 which is the address of 0x8048
    row5 - 60 which is the address of 0x8060
    row6 - 78 which is the address of 0x8078
    row7 - 90 which is the address of 0x8090
    . row16 - 38 which is the address of 0x8138

    i guess that when i want the recieve the data from the address e.g 0x8018 the uC latch the address and after 'x' time he reads the data with RD through P1 AD0-AD7.
    so what happen is that the 6264 dont send the data out, and the lower byte of the address 0x8018 remains in PORT0, WHY?
    i add a delay and still Nothing.
    and do i need to set values in KEIL 'off chip xdata memory' or can i leave it blank?
    and do i need to set values in STARTUP.A51 or leave it's default values ?

Children
  • Now I'm a bit confused.

    You say that the display shows the address of the RAM memory, and speculate that the memory address remains on PORT0.

    But are the display listening on PORT0? Isn't it listening on P1, since your code tries to emit data on P1?

    Have you verified that if you only emit data directly from your code to the display, the display shows correct data?

    Have you verified that if you write data to the external RAM, you can read it back correctly (and in another order than you wrote it)?

  • i didn't mention the hardware but it's working fine.

    Nonsense. It's clearly not working. Or do you call that:

    so what happen is that the 6264 dont send the data out, and the lower byte of the address 0x8018 remains in PORT0, WHY?

    properly working hardware? Your hardware behaves as if that RAM chip just didn't exist.

    and do i need to set values in STARTUP.A51 or leave it's default values ?

    How is anybody supposed to know --- you haven't told what your actual hardware is. What microcontroller, in particular, at what clock frequency.