Path:
Home =>
AVR-Übersicht =>
Software => Makro-Beispiel 3
(This page in English:
)
Assembler Quellcode von Makro 3
; *****************************************************
; * Einen Parameter an ein Makro übergeben: Geht so! *
; * Zeigt den Gebrauch von Makros beim ATMEL AVR- *
; * 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 und erhält den Zählerstand mit dem ersten Parameter
; übergeben (@0).
;
.MACRO TestMacro
LDI mpr,@0
; Setze mpr auf Wert des 1. Parameters
Inc mpr
; Erhöhe um eins
BRNE mjmp
; Wenn kein Überlauf überspringe
RJMP ovf
; Springe wenn Überlauf
mjmp:
.ENDMACRO
;
.LISTMAC
;
; Beginn des Hauptprogrammes
;
LDI mpr,0xFF
; PortB (LEDs) ist Ausgang
OUT DDRB,mpr
; an Datenrichtungsregister
;
LDI mpr,0xFE
; Setze mpr auf 254
; Hier kommt das Makro: 0xFF wird übergeben, dann um Eins erhöht.
; Wenn dann Null rauskommt, springt die Ausführung nach ovf.
;
TestMacro(0xFF) ; Füge das Makro mit dem Parameter
FF ein
;
; Weil ein Überlauf passiert sein muss bei der letzten Erhöhung
; sollte der folgende Code niemals ausgeführt werden. Wenn er
; doch ausgeführt würde, wären alle LEDs an.
;
outp: OUT PORTB,mpr
loop: RJMP loop
; und in die Endlosschleife
;
; Der Überlauf sollte passiert sein und dieser Code wird ausgeführt:
;
ovf: LDI mpr,0xFF
; Lösche alle LEDs
OUT PORTB,mpr
; an Port B
RJMP loop
; Springe zur Endlosschleife
;
; Nach der Ausführung sollten alle LEDs PB.0 to PB.7 aus sein.
©2002 by http://www.avr-asm-tutorial.net