Erweiterung des bekannten Assembler-Befehlssatzes
- Zum Testen der folgenden Taktungs-Konfigurationen des ATmega32, werden wiederholt kleine Assembler-Programme eingesetzt, weil hier die Anzahl der verbrauchten Taktzyklen genau angegeben werden kann.
- Zuvor soll hier deshalb das erste Beispiel aus Kapitel 1.3 noch einmal betrachtet und weiter gehend kommentiert werden.
|
- Die Codezeilen vor Zeile 009 sind für die im Rahmen dieser Vorlesung behandelten Assemblerprogramme notwendige Kopfzeilen, die immer wieder genau so verwendet werden und zum Verständnis des eigentlichen Programms nicht mit betrachtet werden müssen.
|
Zeile
000 .INCLUDE "m32def.inc" ; Einfügung für ATmega32
001 .DEF akku = r16 ; akku synonym für Register r16 nehmen
002 .CSEG ; Programmbereich Flash festlegen
003 RJMP start ; Reset-Einsprung
004 .ORG $2A ; Befehlsbereich
005 start: LDI r16,high(RAMEND) ;High byte only required if
006 OUT SPH,r16 ;RAM is bigger than 256 Bytes
007 LDI r16,low(RAMEND)
008 OUT SPL,r16
009 LDI akku,255 ; alle 8 Bit von Port D als
010 OUT DDRC,akku ; Ausgang konfigurieren
011 LDI akku,64 ; 64 direkt nach r16 laden
012 schleife: OUT PORTC,akku ; geladene Zahl zum Port D schicken
013 RJMP schleife ; ständiger Rücksprung zu Marke "schleife"
014 .EXIT ; Ende des Quelltextes
Code 0-1: Assemblerprogramm aus Kapitel 1.3
- Bereits in Kapitel 1.3 besprochen: Zeile 9,10: alle Bits von Port D als Ausgang konfigurieren. Zeile 11 bis 14 - ständig die 64 nach Port D schreiben (7. Bit, d.h. PD6 high setzen).
- Zeile 000: Include-Datei mit den für den verwendeten Baustein notwendigen Deklarationen einfügen.
- Zeile 001: akku als Synonym für Register r16 festlegen (ähnlich #define in C)
- Zeile 002: .CSEG ist eine Anweisung, die bestimmte notwendige Befehle und Konstanten ab der Adresse $0000 des Flash-Speichers ablegt.
- Zeile 003: Einsprungmarke nach einem Reset.
- Zeile 004: Gibt Adresse an ($2A), ab der das folgende Programm im Flash-Speicher liegen soll.
- Zeile 005-008: Schreibt die Adresse des RAM-Speicher-Endes in die Register SPH (höherwertiges Byte) und SPL (niederwertiges Byte)
|