beginner_de
beginner_de
beginner_de
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-