02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

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

RJMP Routine1<br />

RJMP Routine2<br />

[...]<br />

RJMP Routine16<br />

Jetzt la<strong>de</strong>n Sie <strong>de</strong>n Anfang <strong>de</strong>r Tabelle in das Z-Register mit<br />

LDI ZH,HIGH(MeinTab)<br />

LDI ZL,LOW(MeinTab)<br />

und addieren <strong>de</strong>n heutigen Pegelstand am Portklavier in R16 zu dieser Adresse.<br />

IN R16,PINB ; Lese Portklavier von Port B<br />

ANDI R16,0x0F ; Loesche die oberen Bits<br />

ADD ZL,R16 ; Addiere Portklavierstand<br />

BRCC NixUeberlauf ; Kein Ueberlauf<br />

INC ZH ; Ueberlauf in MSB<br />

NixUeberlauf:<br />

Jetzt können Sie nach Herzenslust und voller Wucht in die Tabelle springen, entwe<strong>de</strong>r nur mal als<br />

Unterprogramm mit<br />

ICALL ; Rufe Unterprogramm auf, auf das ZH:ZL zeigt<br />

o<strong>de</strong>r auf Nimmerwie<strong>de</strong>rkehr mit<br />

IJMP ; Springe zur Adresse, auf die ZH:ZL zeigt<br />

Der Prozessor lädt daraufhin <strong>de</strong>n Inhalt seines Z-Registerpaares in <strong>de</strong>n Programmzähler und macht<br />

dort weiter. Manche fin<strong>de</strong>n das eleganter als unendlich verschachtelte bedingte Sprünge. Mag sein.<br />

9.6 Interrupts im Programmablauf<br />

Sehr oft kommt es vor, dass in Abhängigkeit von irgendwelchen Än<strong>de</strong>rungen in <strong>de</strong>r Hardware o<strong>de</strong>r<br />

zu bestimmten Gelegenheiten auf dieses Ereignis reagiert wird. Ein Beispiel ist die Pegelän<strong>de</strong>rung<br />

an einem Eingang. Man kann das lösen, in<strong>de</strong>m das Programm im Kreis herum läuft und immer <strong>de</strong>n<br />

Eingang befragt, ob er sich nun geän<strong>de</strong>rt hat. Die Metho<strong>de</strong> heisst Polling, weil es wie bei die Bienchen<br />

darum geht, je<strong>de</strong> Blüte immer mal wie<strong>de</strong>r zu besuchen und <strong>de</strong>ren neue Pollen einzusammeln.<br />

Gibt es außer diesem Eingang noch an<strong>de</strong>res wichtiges für <strong>de</strong>n Prozessor zu tun, dann kann das dauern<strong>de</strong><br />

zwischendurch Anfliegen <strong>de</strong>r Blüte ganz schön nerven und sogar versagen: Kurze Pulse wer<strong>de</strong>n<br />

nicht erkannt, wenn Bienchen nicht gera<strong>de</strong> vorbei kam und nachsah, <strong>de</strong>r Pegel aber schon wie<strong>de</strong>r<br />

weg ist. Für diesen Fall hat man <strong>de</strong>n Interrupt erfun<strong>de</strong>n.<br />

Der Interrupt ist eine von <strong>de</strong>r Hardware ausgelöste Unterbrechung <strong>de</strong>s Programmablaufes. Dazu<br />

kriegt das Gerät zunächst mitgeteilt, dass es unterbrechen darf. Dazu ist bei <strong>de</strong>m entsprechen<strong>de</strong>n<br />

Gerät ein o<strong>de</strong>r mehr Bits in bestimmten Ports zu setzen. Dem Prozessor ist durch ein gesetztes Interrupt<br />

Enable Bit in seinem Status-Register mitzuteilen, dass er unterbrochen wer<strong>de</strong>n darf. Irgendwann<br />

nach <strong>de</strong>n Anfangsfeierlichkeiten <strong>de</strong>s Programmes muss dazu das I-Flag im Statusregister gesetzt<br />

wer<strong>de</strong>n, sonst macht <strong>de</strong>r Prozessor beim Unterbrechen nicht mit und <strong>de</strong>r Interrupt verhungert.<br />

SEI ; Setze Int-Enable<br />

Wenn jetzt die Bedingung eintritt, also z.B. ein Pegel von Null auf Eins wechselt, dann legt <strong>de</strong>r Pro-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!