02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Avr-Asm-Tutorial S. 48<br />

9 Steuerung <strong>de</strong>s Programmablaufes in AVR Assembler<br />

Hier wer<strong>de</strong>n alle Vorgänge erläutert, die mit <strong>de</strong>m Programmablauf zu tun haben und diesen beeinflussen,<br />

also die Vorgänge beim Starten <strong>de</strong>s Prozessors, Sprünge und Verzweigungen, Unterbrechungen,<br />

etc.<br />

9.1 Was passiert beim Reset?<br />

Beim Anlegen <strong>de</strong>r Betriebsspannung, also beim Start <strong>de</strong>s Prozessors, wird über die Hardware <strong>de</strong>s<br />

Prozessors ein sogenannter Reset ausgelöst. Dabei wird <strong>de</strong>r Zähler für die Programmschritte auf<br />

Null gesetzt. An dieser Stelle <strong>de</strong>s Programmes wird die Verarbeitung also immer begonnen. Ab hier<br />

muss <strong>de</strong>r Programm-Co<strong>de</strong> stehen, <strong>de</strong>r ausgeführt wer<strong>de</strong>n soll. Aber nicht nur beim Start wird <strong>de</strong>r<br />

Zähler auf diese Adresse zurückgesetzt, son<strong>de</strong>rn auch bei<br />

• externem Rücksetzen am Eingangs-Pin Reset durch die Hardware,<br />

• Ablauf <strong>de</strong>r Wachhund-Zeit (Watchdog-Reset), einer internen Überwachungsuhr,<br />

• direkten Sprüngen an die Adresse Null (Sprünge siehe unten).<br />

Die dritte Möglichkeit ist aber gar kein richtiger Reset, <strong>de</strong>nn das beim Reset automatisch ablaufen<strong>de</strong><br />

Rücksetzen von Register- und Port-Werten auf <strong>de</strong>n jeweils <strong>de</strong>finierten Standardwert (Default)<br />

wird hierbei nicht durchgeführt. Vergessen wir also besser die 3.Möglichkeit, sie ist unzuverlässig.<br />

Die zweite Möglichkeit, nämlich <strong>de</strong>r eingebaute Wachhund, muss erst explizit von <strong>de</strong>r Leine gelassen<br />

wer<strong>de</strong>n, durch Setzen seiner entsprechen<strong>de</strong>n Port-Bits. Wenn er dann nicht gelegentlich mit Hilfe<br />

<strong>de</strong>r Instruktion<br />

WDR ; Watchdog Reset<br />

zurückgepfiffen wird, dann geht er davon aus, dass Herrchen AVR eingeschlafen ist und weckt ihn<br />

mit einem brutalen Reset.<br />

Ab <strong>de</strong>m Reset wird also <strong>de</strong>r an Adresse 0x000000 stehen<strong>de</strong> Co<strong>de</strong> wortweise in die Ausführungsmimik<br />

<strong>de</strong>s Prozessors gela<strong>de</strong>n und ausgeführt. Während <strong>de</strong>r Ausführung wird die Adresse um 1 erhöht<br />

und schon mal die nächste Instruktion aus <strong>de</strong>m Programmspeicher geholt (Fetch during Execution).<br />

Wenn die erste Instruktion keine Verzweigung <strong>de</strong>s Programmes auslöst, kann die zweite Instruktion<br />

also direkt nach <strong>de</strong>r ersten ausgeführt wer<strong>de</strong>n. Je<strong>de</strong>r Taktzyklus am Takteingang <strong>de</strong>s Prozessors entspricht<br />

daher einem ausgeführten Instruktion (wenn nichts dazwischenkommt).<br />

Die erste Instruktion <strong>de</strong>s ausführbaren Programmes muss immer bei Adresse 0000 stehen. Um <strong>de</strong>m<br />

Assembler mitzuteilen, dass er nach irgendwelchen Vorwörtern wie Definitionen o<strong>de</strong>r Konstanten<br />

nun bitte mit <strong>de</strong>r ersten Zeile Programmco<strong>de</strong> beginnen möge, gibt es folgen<strong>de</strong> Direktiven:<br />

.CSEG<br />

.ORG 0000<br />

Die erste Direktive teilt <strong>de</strong>m Assembler mit, dass ab jetzt in das Co<strong>de</strong>-Segment zu assemblieren ist.<br />

Ein an<strong>de</strong>res Segment wäre z.B. das EEPROM, das ebenfalls im Assembler-Quelltext auf bestimmte<br />

Werte eingestellt wer<strong>de</strong>n könnte. Die entsprechen<strong>de</strong> Assembler-Direktive hierfür wür<strong>de</strong> dann natürlich<br />

lauten:<br />

.ESEG<br />

Die zweite Assembler-Direktive oben stellt <strong>de</strong>n Programmzähler beim Assemblieren auf die Adresse<br />

0000 ein. ORG ist die Abkürzung für Origin, also Ursprung. Wir könnten auch bei 0100 mit <strong>de</strong>m<br />

Programm beginnen, aber das wäre ziemlich sinnlos (siehe oben). Da die bei<strong>de</strong>n Angaben CSEG

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!