Forum: Mikrocontroller und Digitale Elektronik 16 Bit Variable in 2x 8 Bit Variable aufteilen und Bits verschieben


von Christian W. (christian_w)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich denke der Titel sagt es schon, was ich machen möchte.

Ich habe eine Platine mit einem ATMega8, einem MCP2515 und einem 
MCP2551. Programmiert wird über AVR Studio und AVR-GCC in "C".

Ich würd gerne eine 16-Bit Variable in zwei 8-Bit Register klopfen, so 
wie auf der Grafik... Und dann müssen noch beim rechten Register 3 Bits 
verschoben werden, der Rest der bestehenden Daten (Fragezeichen) darf 
nicht überschrieben werden... Nur ich bekomms nicht hin.

Hat jemand einen Tip wo ich da anfangen soll?

Danke

Christian

von PIC N. (eigo) Benutzerseite


Lesenswert?

Hi Christian,
könnte es nicht so klappen(?):
1
TXB0SIDH = ((16-Bit Variable>>3) & 0xFF);
2
TXB0SIDL = TXB0SIDL + ((16-Bit Variable<<6) & 0xE0);

von Sam .. (sam1994)


Lesenswert?

Nicolas M. schrieb:
> TXB0SIDL + (16-Bit Variable<<6) & 0xE0

TXB0SIDL & 0x1F | (16-Bit Variable<<5);

Eher so würde ich sagen.

Und das 0xFF kann man auch weglassen.

von Yagan Ζ. D. (yagan)


Lesenswert?

Christian,

zuerst die 16-Bit-Variable 3 Bits nach rechts in TXB0SIDL 
hineinschieben:
1
int16 v16bit; // 16-Bit-Variable.
2
3
int i;
4
for ( i=0; i<3; i++ )
5
   {
6
   TXB0SIDL >>= 1; // Ein Bit nach rechts schieben
7
   if ( v16bit & 1 ) == 1 ) // Bit0 ist 1.
8
      {
9
      TXB0SIDL |= 0x80;  // Bit7 setzen.
10
   else  // Bit ist 0.
11
      {
12
      TXB0SIDL &= 0x7F;  // Bit7 löschen.
13
      }
14
   v16bit >>=1;
15
   }
16
17
// anchliessend den Rest in TXB0SIDH kopieren:
18
TXB0SIDH = v16bit & 0xFF;

Ciao, Yagan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.