www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problemlösung Assembler Programm


Autor: Asm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend

mein Programm soll bei aufruf der Interrupt Routine beim ersten aufruf 
ein 0b00000101 in temp laden.
Beim nächsten ISR Aufruf soll dann ein 0b00000000 geladen werden.
Bei der nächsten ISR wieder der erste Wert...
So soll das immer hin und her wechseln und ich steh gerade aufm schlauch 
wie ich das machen soll :(

Ich hatte mir gedacht bei jedem Funktionsaufruf eine register zu 
inkrementieren.
Wenn Register=2, dann temp=0x00.
Aber das muss doch noch einfacher gehen, oder?

Könnte mir da wer einen Tipp geben?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Es gibt ein T-Flag in SREG. Das steht zu deiner alleinigen Verfügung. Es 
gibt Befehle das Flag zu Setzen, Löschen und für Sprünge in Abhängigkeit 
vom T-Flag  ->Instruction Set oder AVR-Studio Assembler Hilfe.

MfG Spess

Autor: Asm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich dachte ständiges springen währe schlecht...
Denn mit BRTS und BRTC springe ich dann ja wieder ein label an...

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Na und?

Andere Möglichkeit: Bei jedem Aufruf 'tmp eor 0b00000101'. '0b00000101' 
muss aber in ein Register geladen werden.

MfG Spess

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
    subi temp, 5
    neg  temp 

Warum das funktioniert, kannst Du Dir selbst überlegen.

(
Lösung:
Die einfachste Funktion, die 0 auf 5 (= 0b00000101), und 5 auf 0 
abbildet, ist f(temp) = 5 - temp = -(temp - 5).
)

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder wenn Du es über das T-Flag machen willst, wäre das eine Lösung:
    com  temp
    andi temp, 1
    bst  temp, 0
    bld  temp, 2

Wie Du siehst, gehts auch ohne Springereien.

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.