Path:
Home =>
AVR-Übersicht =>
Software => Makro-Beispiel 2
(This page in English:
)
Assembler Quellcode von Makro 2
; *****************************************************
; * Sprungziele innerhalb eines Makro: Es geht! *
; * Demonstriert den Gebrauch von Makros beim ATMEL *
; * Assembler, nur ein Testprogramm für das *
; * ATMEL STK200 Board, (C) 2000 Gerhard Schmidt *
; * Fehlerberichte an info!at!avr-asm-tutorial.net *
; *****************************************************
;
.NOLIST
.INCLUDE "8515def.inc"
.LIST
;
; Benutzte Register
;
.DEF mpr=R16 ; Vielzweckregister
;
; Das folgende Makro enthält ein Sprungziel innerhalb des Makros
; (mjmp) und ein Sprung zu einem Ziel ausserhalb des Makros.
; Beide Sprünge werden vom Assembler
korrekt übersetzt.
;
.MACRO TestMacro
Inc mpr
; Erhöhe das Register mpr
BRNE mjmp
; Wenn kein Überlauf, springe
RJMP ovf
; Springe wenn Überlauf
mjmp:
.ENDMACRO
;
.LISTMAC
;
; Beginn des Hauptprogrammes
;
LDI mpr,0xFF
; Setze PortB (LEDs) als Ausgang
OUT DDRB,mpr
; an Datenrichtungsregister
;
LDI mpr,0xFE
; Setze Register mpr auf 254
TestMacro ; Füge das Makro ein (ein INC)
TestMacro ; Füge es noch mal ein (weiterer INC)
; Weil bei der zweiten Erhöhung ein Überlauf eingetreten sein muss wird der
; folgende Code nie ausgeführt. Wenn er ausgeführt würde, würden alle LEDs
; eingeschaltet werden.
;
outp: OUT PORTB,mpr
loop: RJMP loop
; und ab in die Endlosschleife.
;
; Der Überlauf ist passiert und dieser Code wird ausgeführt:
;
ovf: LDI mpr,0xFF
; Alle LEDs aus
OUT PORTB,mpr
; an Port B
RJMP loop
; Zur Endlosschleife
;
; Nach der Ausführung sind alle LEDs PB.0 to PB.7 aus.
©2002 by http://www.avr-asm-tutorial.net