mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Können Register auch anderweitig durch irgendwelche Prozeduren geändert werden?


Autor: Thomas Frosch (tfreal10)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ein Programm in Hex Code im AVR Studio geöffnet. Dieses soll 
eigentlich IR-Signale erkennen und per USB an den PC melden! Ich möchte 
mir dieses Programm umschreiben um direkt (ohne USB) Ausgänge am µC zu 
schalten!

Bin noch ganz am Anfang was µC angeht!

So wie ich dass beobachten konnte wird in diesem Programm anfangs ein 
paar einstellungen vorgenommen wie Pullup Widerstände einschalten und 
solche Sachen. Anschließend wartet das Program sozusagen darauf dass R16 
den Wert 2 oder 3 annimmt


+0000006F:   9BB0        SBIS    0x16,0           Skip if bit in I/O 
register set
+00000070:   C005        RJMP    PC+0x0006        Relative jump
+00000071:   3002        CPI     R16,0x02         Compare with immediate
+00000072:   F069        BREQ    PC+0x0E          Branch if equal
+00000073:   3003        CPI     R16,0x03         Compare with immediate
+00000074:   F041        BREQ    PC+0x09          Branch if equal
+00000075:   CFF9        RJMP    PC-0x0006        Relative jump
+00000076:   EF4F        SER     R20              Set Register
+00000077:   99B0        SBIC    0x16,0           Skip if bit in I/O 
register cleared
+00000078:   CFF6        RJMP    PC-0x0009        Relative jump
+00000079:   954A        DEC     R20              Decrement
+0000007A:   F7E1        BRNE    PC-0x03


allerdings verstehe ich nicht warum das abgefragt wird der wert in R16 
kann sich doch nicht einfach so ändern wenn ständig nur dieser 
Programmteil ausgeführt wird.

Eigentliche Frage:
können Register auch noch anderweitig beschrieben werden? Ohne dass im 
Programm direkt durch Programmieren etwas in R16 geschrieben wird? Also 
ich stell mir dass jetzt so vor: Irgendeine Schnittstelle empfängt was 
und schreibt dann eben in R16 was rein. Ist dies so? Wenn ja welche und 
warum?!?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
solche Bruchstücke (Recompilate) sagen nicht allzuviel aus.
Allerdings kann sich der Wert von r16 natürlich durch eine 
Interruptfunktion geändert werden.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ja. Zum Beispiel in Interrupt-Routinen. Interrupts unterbrechen das 
laufende Programm, führen die Interrupt-Routine aus, und kehren dann an 
die Stelle zurück, an der das Programm unterbrochen wurde. Innerhalb der 
ISR können natürlich Register geändert werden. Auf diese Änderung kann 
das Hauptprogramm beispielsweise reagieren.

MfG Spess

Autor: Thomas Frosch (tfreal10)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh super

und was genau führt nun zur Änderung? Bzw. wo kann ich nachsehen welche 
Interrupt Routinen auf welche Register zugreifen und was und warum sie 
dort was wie machen?

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Im Datenblatt des Controllers ist die Interruptsprungtabelle enthalten, 
die am Anfang des Programms steht. Von dort springt das Programm in die 
entsprechenden Routinen. Interruptroutinen enden immer mit einem 'reti'.

MfG Spess

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.