mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EOR tut nicht, was ich erwarte


Autor: Markus W. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
out   DDRB,LEDs
->
out   PORTB,LEDs

Autor: Markus W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus W. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.