OR Verknüpfung

Gast #15440
Lesenswert?

Hallo

- Die Software hab ich für den 89C51RD2 im uVision geschrieben.
- An P0 (8-Bit Ausgang) hab ich 8 Dioden die bei einem log.Low brennen.
- Falls das Programm so durchläuft leuchten die Dioden 8,7,6, was meiner 
Meinung nach richtig ist, wenn ich nun aber das CtrlByte auf 0xA0 ändere 
leuchtet nur die 8., wieso nicht auch die 6. ??
Es läuft darauf hinaus dass wenn immer die if-Bedinung nicht zutrifft, 
die restlichen Abfragen "ignoriert" werden, d.h. immer dann wenn im 
CtrlByte das erste 0 kommt werden die 1 dahinter nicht mehr ausgewertet, 
wieso ???

char mask=0x80, CtrlByte=0xF0, test=0x00, i;
void main ()
{
  while (1)
  {
    if (mask == (mask & CtrlByte))
      test = (mask | test);
    mask = (mask >> 1);

    if (mask == (mask & CtrlByte))
      test = (mask | test);
    mask = (mask >> 1);

    if (mask == (mask & CtrlByte))
      test = (mask | test);

    mask = 0x80;
    P0 = ~test;
    test = 0x00;
     }
}

Vielen Dank
Dani
#15442
Lesenswert?

Bei logischen Operationen wie SHIFT, AND und OR usw. sollte man immer 
unsigned nehmen.

Sonst ergeben sich z.B. mask = 0x80; für jedes mask >>= 1; folgende 
Werte:

0x80
0xC0
0xE0
0xF0
0xF8
0xFC
0xFE
0xFF

Vermute mal, daß war so nicht geplant.

0x80 wird nämlich als negative Zahl interpretiert und dann wird das 
Vorzeichenbit beibehalten.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren