
Zitat von
deko
... Bit zu maskieren und in einer if schleife zu prüfen ... das muss doch auch einfacher gehen? ...
Ich nehme mal an, dass sich die Bitmuster immer wieder mal ändern. In einer Matrix von 10 x 12 LEDs (in einem LED-PingPong-Spiel) hatte ich verschiedene Muster mithilfe von Schleifen an- und ausgeknippst. Für Deine Aufgabe könnte das so aussehen:
Code:
// ........
#define SetBit(ADDR,BIT) ((ADDR) |= (1<<(BIT))) // Setzt Bit
#define ClrBit(ADDR,BIT) ((ADDR) &= ~(1<<(BIT))) // Löscht Bit
#define IsBitSet(ADDR,BIT) (((ADDR) & (1<<BIT))?1:0) // Fragt Bit = 1?
// ........
volatile int8_t Byte_A; //
volatile int8_t portpin; // Pinadressierung (im Port A)
// ........
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ........
// Mal beispielsweise (m)ein Musterbyte für die ersten acht Bits
Byte_A = 0b00110000; // Ist natürlich dasselbe wie Byte_A = 48,
// sieht für mich aber "deutlicher" aus
// ... dabei stehen hier
// das Bit 1 als LSB (gaaanz rechts) und Bit 8 als MSB (gaaanz links)
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ........
// Jetzt fragen wir mal acht bits ab und setzen die Portpins
for (uint8_t loopus = 0; loopus <= 7; loopus++)
{
portpin = 7 - loopus; // Brauchen wir zur Pinadressierung im Port A
ClrBit (PORTA, nmbrbit) // Pinn mal auf low setzen
if (IsBitSet (Byte_A, loopus)) // Abfrage des tatsächlichen Bits und
SetBit (PORTA, nmbrbit) // .. wenn das "1" ist - Pin auf high
} // Ende for (uint8_t loopus ,,,
// ........
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Die Bittabelle wie oben geschrieben:
Bit1 = PA7
Bit2 = PA6
Bit3 = PA5
Bit4 = PA4
Bit5 = PA3
Bit6 = PA2
Bit7 = PA1
Bit8 = PA0
....
Für die einzelnen/anderen Ports ist der Start- und Endwert der Laufvariablen und die Rechenvorschrift für die Pinnummer den Gegebenheiten anzupassen.
Natürlich ist das nix für Leute, die keine Schleifen mögen.
Lesezeichen