Forum: Mikrocontroller und Digitale Elektronik Bitmaskierung


von Alex K. (derheld2k1)


Lesenswert?

Hallo zusammen,

ich hab grad irgendwie ein Denkproblem.
Wie kann ich folgendes elegant in einer Schleife ausdrücken?
1
  if(data & 0x80)             //output '1'
2
    LCD_PORT |= (1<<SER);
3
  else                        //output '0'
4
    LCD_PORT &= ~(1<<SER);
5
  high_pulse_sck();  
6
    
7
  if(data & 0x40)             //output '1'
8
    LCD_PORT |= (1<<SER);
9
  else                        //output '0'
10
    LCD_PORT &= ~(1<<SER);  
11
  high_pulse_sck();
12
  
13
  if(data & 0x20)             //output '1'
14
    LCD_PORT |= (1<<SER);
15
  else                        //output '0'
16
    LCD_PORT &= ~(1<<SER);
17
  high_pulse_sck();  
18
    
19
  if(data & 0x10)             //output '1'
20
    LCD_PORT |= (1<<SER);
21
  else                        //output '0'
22
    LCD_PORT &= ~(1<<SER);    
23
  high_pulse_sck();

Ich schäm mich jetzt schon, danke schonmal für eure Antworten,
Alex

von Tobi (Gast)


Lesenswert?

Wenn ich so spontan nix übersehen habe.
1
int8_t i;
2
3
for(i = 3; i >= 0; i--)
4
{
5
  if(data & (1<<(i+4)))
6
    LCD_PORT |= (1<<SER);
7
  else
8
    LCD_PORT &= ~(1<<SER);
9
  high_pulse_sck();  
10
}

von Stefan E. (sternst)


Lesenswert?

1
for (uint8_t mask = 0x80; mask & 0xf0; mask >>= 1) {
2
  if(data & mask)             //output '1'
3
    LCD_PORT |= (1<<SER);
4
  else                        //output '0'
5
    LCD_PORT &= ~(1<<SER);
6
  high_pulse_sck();  
7
}

von Alex K. (derheld2k1)


Lesenswert?

Danke

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.