Hi m1cha,
hoffentlich treffe ich Dein Problem.
Ich hatte das in meinen PingPong-Projekten gemacht - Bits abfragen, setzen und löschen. Ungefähr so:... Zeile1aus z.B. 32Bit lang ... Buchstabe 8Bit und ... an eine ganz bestimmte Stelle schreiben ...
Sind nicht sooo lange LED-Bitmuster wie bei Dir, aber das System sollte passen.Code:// - - - - - - - - - - - - - - - //#define SetL (xk,y) ( L[xk] |= ((uint16_t)1 << (y)) // Setzt Bit volatile uint16_t L[20]; // LED-Reihe 1 bis 10, Rest ist Dummy // ... // - - - - - - - - - - - - - - - // Jetzt altes Rack links löschen und neues setzen cli(); // lPr = RKL_POSa ; // Positioniere auf alten LED-Platz L[lPr] &= ~((uint16_t)1<<15); // Lösche LEDBit lPr (rechtes Poti) L[lPr-1] &= ~((uint16_t)1<<15); // Lösche LEDBit lPr-1 // - - - - - - - - - - - - - - - lPr = RKL_POSn + 12; // Unterkante NEUES, rechtes Rack L[lPr] |= ((uint16_t)1<<15); // Setze LEDBit lPr (rechtes Poti) L[lPr-1] |= ((uint16_t)1<<15); // Setze LEDBit lPr-1 RKL_POSa = lPr; // Neuwert ist bereits alt sei(); //// ... // - - - - - - - - - - - - - - -
Dazu könne man natürlich z.B. mit den Defines
das "Schiebegeschäft" bequem und übersichtlich erledigen. ABER - meine Laufschrift ist wegen anderer Projekte in den Kinderschuhen stecken geblieben.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? #define IsBitClr(ADDR,BIT) ((!(ADDR) & ~(1<<BIT))) // Fragt Bit = 0







Zitieren


Lesezeichen