Pfad:
Home =>
AVR-Übersicht =>
Software => JUMP-Befehl
(This page in English:
)
; Testet Unterprogrammaufrufe über den Stack
;
; Die Unterprogrammaufrufe erfolgen nicht über den RCALL-
; Befehl, sondern über den Stack. D.h. zuerst wird die
; Rücksprungadresse auf dem Stack abgelegt,
dann die Adresse
; des Unterprogrammes, das aufgerufen werden soll. Der
; Sprung und der Rücksprung erfolgen dann über den RET-
; Befehl.
; Diese Adressierungsart ist für Unterprogrammaufrufe aus
; Tabellen günstig, weil man die Adressen dann aus einer
; Tabellenspalte auslesen kann.
;
.NOLIST
.INCLUDE "8515def.inc"
.LIST
;
.DEF mpr=R16 ;
Wie immer ein allgemeines Arbeitsregister
;
;
RJMP main
;
main: LDI mpr,HIGH(RAMEND)
; Stack einrichten
OUT SPH,mpr
LDI mpr,LOW(RAMEND)
OUT SPL,mpr
LDI mpr,LOW(retret)
; Lege Rücksprungadresse auf stack
PUSH mpr
LDI mpr,HIGH(retret)
PUSH mpr
LDI mpr,LOW(testup)
; Lege Sprungadresse auf stack
PUSH mpr
LDI mpr,HIGH(testup)
PUSH mpr
RET ; Springe zum Unterprogramm
;
; Das anzuspringende Rücksprungprogramm macht alle Lampen an
;
retret: LDI mpr,0x00
; Mache alle Lampen an, wenn erfolgreich
OUT PORTB,mpr
loop: RJMP loop
; Anhalten
;
;
; Testprogramm, das angesprungen werden soll
;
testup: LDI mpr,0xFF
; Alle Lampentreiber auf Ausgabe
OUT DDRB,mpr
RET ; Rücksprung
an die Aufrufadresse
©2002 by http://www.avr-asm-tutorial.net