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

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