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

Using an Array

Hi I have the following array declared at the start of my program as global:

int number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};

0 1 2 3 4 5 6 7 8 9

It is for a 7 segment display to display the numbers that I need, the array is from 0-9 in that order.

My code to call the array is:

P2 = number[4];

so in this case it should get the 4th number being 0x99

This works fine if i replace the 4 with 0,1 or 2 but anything greater than 2 all it does is return the data for 8 (80)

If anyone can work out why this is doing this please let me know

Thanks

Parents
  • "If I just change the definition to what you suggested should it work?"

    What you wrote originally should have worked, it just wasn't the most efficient use of resources on an 8051. If using Reinhard's code works you still have a problem you need to understand and fix.

    If you declare an array without specifying a memory space it will be created in the default memory space which will be either internal or external RAM. This is pointless as your array is read-only. Using the 'code' specifier causes the array to remain in code space.

    The other issue that was pointed out to you is the fact that you are storing 8 bit values in an array of 16 bit 'slots'. This is also wasteful.

    Reinhard is suggesting that you may have a hardware problem with the RAM which is causing your original declaration not to work properly. There are other possibilities though - what memory model are you using?

Reply
  • "If I just change the definition to what you suggested should it work?"

    What you wrote originally should have worked, it just wasn't the most efficient use of resources on an 8051. If using Reinhard's code works you still have a problem you need to understand and fix.

    If you declare an array without specifying a memory space it will be created in the default memory space which will be either internal or external RAM. This is pointless as your array is read-only. Using the 'code' specifier causes the array to remain in code space.

    The other issue that was pointed out to you is the fact that you are storing 8 bit values in an array of 16 bit 'slots'. This is also wasteful.

    Reinhard is suggesting that you may have a hardware problem with the RAM which is causing your original declaration not to work properly. There are other possibilities though - what memory model are you using?

Children