MEL PICBASIC Forum - Bits, Bytes Words and Arrays

• # Bits, Bytes Words and Arrays

1. How can I reference a BIT in a BYTE?
2. How can I reference a BIT in a WORD?
3. How can I reference a BIT in a BYTE ARRAY?
4. How can I reference a BIT in a WORD ARRAY?
5. How can I reference a BYTE in a WORD ARRAY?

We all know theres eight Bits in a Byte, and sixteen Bits in a Word. Sometimes however we need to access a Bit in a Byte, or a Word, or in an Array by using an intermediate VARIABLE rather than a constant.

1. How can I reference a BIT in a BYTE?

We know that MyByte.0 references Bit 0 of MyByte, all the way up to MyByte.7 referencing Bit 7 of MyByte but theres another way of accessing the bits in a Byte (MyVar is a BYTE variable)

MyByte.0(MyVar)

When MyVar is in the range 0-7, it will access Bits 0-7 of MyByte.

Example to display all eight BITS of a BYTE sequentially, Bit at a time

For MyVar=0 to 7
MyBit=MyByte.0(MyVar)
LCDOut \$FE,1,"Bit ",#MyVar,"=",#MyBit
Pause 2000
Next MyVar

2. How can I reference a BIT in a WORD?

We know that Myword.0 references Bit 0 of Myword, all the way up to MyWord.15 referencing Bit 15 of MyWord but theres another way of accessing the bits in a word (MyVar is a BYTE variable)

MyWord.0(MyVar)

When MyVar is in the range 0-15, it will access Bits 0-15 of MyWord.

Example to display all sixteen BITS of a WORD sequentially, Bit at a time

For MyVar=0 to 15
MyBit=MyWord.0(MyVar)
LCDOut \$FE,1,"Bit ",#MyVar,"=",MyBit
Pause 2000
Next MyVar

3. How can I reference a BIT in a BYTE ARRAY?

Arrays are arranged in memory in BIT ORDER from the LEAST SIGNIFICANT BIT of the first Byte at the bottom end, to the MOST SIGNIFICANT BIT of the last Byte at the top end. Consider this

MyByteArray var BYTE 

There are 40 Bytes in this array (0-39), each with eight Bits. That means this array has a total of 320 Bits (numbered 0-319 sequentially). All the Bits in this Byte Array can be referenced individually like so

MyByteArray.0(MyVar)

Where MyVar in this instance is a WORD (because theres more than 256 Bits in the array). When

MyVar=0 it references Bit 0 of MyByteArray(0)
MyVar=7 it references Bit 7 of MyByteArray(0)
MyVar=8 it references Bit 0 of MyByteArray(1)
MyVar=15 it references Bit 7 of MyByteArray(1)
All the way, when
MyVar=312 it references Bit 0 of MyByteArray(39)
MyVar=319 it references Bit 7 of MyByteArray(39)

If MyVar was a BYTE rather than a WORD, you will only be able to access Bits 0-255.

4. How can I reference a BIT in a WORD ARRAY?

Just like the Byte Arrays, Word Arrays are arranged in memory in BIT ORDER from the LEAST SIGNIFICANT BIT of the first Word at the bottom end, to the MOST SIGNIFICANT BIT of the last Word at the top end. Consider this

MyWordArray var WORD 

There are 25 WORDS in this array (0-24), each with sixteen Bits. That means this array has a total of 400 Bits (numbered 0-399 sequentially). All the Bits in this Byte Array can be referenced individually like so

MyWordArray.0(MyVar)

Where MyVar in this instance is a WORD (because theres more than 256 Bits in the array). When

MyVar=0 it references Bit 0 of MyWordArray(0)
MyVar=15 it references Bit 15 of MyWordArray(0)
MyVar=16 it references Bit 0 of MyWordArray(1)
MyVar=31 it references Bit 15 of MyWordArray(1)
All the way, when
MyVar=384 it references Bit 0 of MyWordArray(24)
MyVar=399 it references Bit 15 of MyWordArray(24)

If MyVar was a BYTE rather than a WORD, you will only be able to access Bits 0-255.

5. How can I reference a BYTE in a WORD ARRAY?

As can be previously seen, all the bits in an array are stored sequentially in memory. It follows that the BYTES in a WORD ARRAY also follow sequentially. This means we can easily extract any BYTE we want to out of a WORD Array in a similar manner. Consider again

MyWordArray var WORD 

There are actually 50 Bytes in this array (0-49). The first byte (0) being the LOWBYTE of MywordArray(0), and the last byte (49) being the HIGHBYTE of MyWordArray(24). Using a similar manner to Bit access, we can access all fifty Bytes of this Word array like so

MyWordArray.Lowbyte(MyVar)

Where MyVar is in the range 0-49 for my previously defined example Array of 25 Words.