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
Ich glaub es nicht, ich hab jetzt sicher 4h mit Versuchen, ihr glaubt es nicht, aller Art probiert. Jetzt funktionierts !!!! --->>> anstatt "char", "unsigned char"
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.