Ich habe angehängten Code zusammengebastelt. Es blinken auch schön die LEDs 0,2,4,6. Aber eigentlich will ich mittels des EOR erreichen, daß immer abwechselnd die LEDs 0,2,4,6 bzw. 1,3,5,7 leuchten. Meine Überlegung: Wenn ich mit 0b11111111 ein exklusives ODER (EOR) durchführe, müßten ja eigentlich alle Bits umgekehrt werden (analog zu COM). Nur passiert das eben nicht. Verwendet wird das ganze auf einem STK500, Ansteuerung der LEDs über Port B eines AT Mega16. Danke und Grüße Markus W.
Aaargh... Danke für den Hinweis - ich habe jetzt ein paar Stunden rumgegrübelt. Kaum macht man es richtig, schon funktioniert es. :-) Das war ein typischer Fall von "wenn zwei und drei sieben sind, dann bleiben sie sieben, wenn man immer wieder darüber liest." Danke und Grüße Markus W.
Nur der Vollständigkeit halber mit dem korrigierten und verfeinerten Code im Anhang. Läuft so auf dem ATmega16 mit dem internen 1MHz-Takt. Markus W.
Auf das Sichern und Wiederherstellen des SREG im Interrupthandler darf man aber nur im Sonderfall einer leeren 'main' verzichten - oder wenn das SREG im betreffenden Handler garantiert nicht verändert wird (dies ist z. B. der Fall, wenn ausschließlich die Instruktionen 'cpse', 'mov', 'ldi', 'sts'/'lds', 'out'/'in' und 'reti' vorkommen). In Deinem Programm erfüllt übrigens auch das 'push temp' und das 'pop temp' im Interrupthandler keine Funktion. 'temp' wird ja sonst nirgendwo benutzt.
Hallo, wenn ich nicht unter akuter Platznot leide, werden bei mir in IRQ-Routinen generell SREG und alle dort benutzten Register gesichert. Hat einen ganz einfachen Grund: ich recycle gern aus anderen meiner Programme und es erspart mir, jedesmal den Fehler zu suchen, weil ich in Programm A temp nicht, in Programm B aber eben TEMP_0 doch benutzte... Ist mit SREG nicht anders, irgendwas eingefügt, daß die Flags ändert und dann ewig Fehler suchen. Kann man sich so durchaus ersparen, wenn man sein eigenes System findet und konsequent einhält. Gruß aus Berlin Michael
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.