EOR tut nicht, was ich erwarte

Gast #818608
Lesenswert?

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.
Angehängte Dateien:
Gast #818618
Lesenswert?

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.
Gast #818959
Lesenswert?

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.
#818963
Lesenswert?

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

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