I wasn’t completely sure how to word the subject, so I’ll first elaborate on what it is I’m trying to do. I have several dozen 74LS189 IC’s. These are 64-BIT RAM chips that are organized as 16-word by 4-bit arrays. What I’m trying to do is to cycle through each of the 16 memory locations (4 BITS) so that I can test the 16 words (8 BITS).
If that isn’t completely clear, don’t worry. Here’s the simpler version of what I’m trying to do.
A for loop will count from 0 to 15 in order to iterate through the 16 memory locations. When count is 0, I am at memory location 0000. When count is 1, I am at memory location 0001. When count is 2, I am at memory location 0010, and so on until the count is 15, at which point I would be at memory location 1111.
When I am at a given memory location, I am doing a digitalWrite(PIN, [HIGH/LOW]) where HIGH/LOW depends on whether or not a given BIT is ON or OFF.
So for example, when count is 0 and I am at memory location 0000, the code needs to do this:
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
- Where A0, A1, A2, and A3 have been previously defined for a particular PIN#.
Likewise, when I’m at say count 9, I am at memory location 1001, so the code needs to do this:
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, HIGH);
So my question is…
How can I use the value of count to determine whether or not a given PIN should be HIGH or LOW? I know that (count % 2) will work for the least significant bit, 20. So when count is 0, (count % 2) will be 0 which is correct for the 20 bit. And when count is 1, (count % 2) will be 1 which is again correct for the 20 bit. And (count % 2) works for the 20 bit no matter how high count becomes.
So with that in mind, I can use this code instead:
digitalWrite(A0, (count % 2);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, HIGH);
But I can’t figure out what I need to do for bits 21, 22, and 23.
So right now, I have a huge list of if then else statements, but I know it can be condensed to 4 lines if I can figure out how to write a formula for the various bits.
int count;
int data_count;
for (count = 0 ; count <= 15 ; count++ ) {
if (count == 0) {
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
} else if (count == 1) {
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
} else if (count == 2) {
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
} else if (count == 3) {
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
} else if (count == 4) {
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
digitalWrite(A3, LOW);
} else if (count == 5) {
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
digitalWrite(A3, LOW);
} else if (count == 6) {
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, LOW);
} else if (count == 7) {
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, LOW);
} else if (count == 8) {
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, HIGH);
} else if (count == 9) {
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, HIGH);
} else if (count == 10) {
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(A3, HIGH);
} else if (count == 11) {
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(A3, HIGH);
} else if (count == 12) {
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
} else if (count == 13) {
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
} else if (count == 14) {
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
} else if (count == 15) {
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
}
Hopefully my explanation was clear, and I thank you for taking the time to read my post.