Pfad: Home => AVR-Übersicht => Software => Makro-Beispiel 2

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