Hi m1cha,

hoffentlich treffe ich Dein Problem.
... Zeile1aus z.B. 32Bit lang ... Buchstabe 8Bit und ... an eine ganz bestimmte Stelle schreiben ...
Ich hatte das in meinen PingPong-Projekten gemacht - Bits abfragen, setzen und löschen. Ungefähr so:
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();                    //// ...
// - - - - - - - - - - - - - - -
Sind nicht sooo lange LED-Bitmuster wie bei Dir, aber das System sollte passen.

Dazu könne man natürlich z.B. mit den Defines
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
das "Schiebegeschäft" bequem und übersichtlich erledigen. ABER - meine Laufschrift ist wegen anderer Projekte in den Kinderschuhen stecken geblieben.