AVR – RISC Mikrocontroller

Werbung
Fachoberschule am Beruflichen Schulzentrum e.o. plauen
Facharbeit
in der Fachrichtung Technik
im Fach Informatik
AVR – RISC Mikrocontroller
von
Pierre Schmidt
Klasse FOS TLA 2001
Betreuer:
Herr Neidel
Ort, Datum:
Ullersreuth, 28. Februar 2002
2
Vorwort
Der Mikrocontroller ist in der heutigen Zeit nicht mehr wegzudenken. Man verwendet sie unter
anderem zur Steuerung von Geräten in der Unterhaltungselektronik bis hin zu allen möglichen
Haushaltsgeräten sei es der Geschirrspüler oder die Waschmaschine. Betrachtet man dieses
weite Spektrum und damit die verbundenen hohen Stückzahlen ist es nicht verwunderlich, dass
jeder größere Halbleiterhersteller seinen eigenen Typ auf dem Markt anbietet. Jedoch hat sich
in den achtziger Jahren ein 8 Bitprozessor auf dem Markt deutlich durchgesetzt. Es ist der 8051
der Firma Intel. Trotz hoher Konkurrenz hält er bislang den Spitzenplatz in der Rangliste.
Jedoch wird dieser in letzter Zeit durch einen 8 Bit RISC-Controller ( RISC = ReducedInstruction-Set-Computer, d.h. Computer mit reduzierten Befehlssatz) der Firma Atmel
bedrängt, der auch in dieser Arbeit näher erläutert und erklärt wird. Er setzt neue Maßstäbe im
leistungssparenden Herstellungsprozess und damit hat er ein günstiges Preis-/Leistungsverhältnis.
Die Facharbeit wird nur ein Teil des Gebietes der AVR-RISC Mikrocontroller
berücksichtigen. Nach dem Lesen dieser Facharbeit wird es möglich sein, kleine Steuerungen
mit dem AVR-RISC Mikrocontroller zu erstellen.
Vereinbarungen
In dieser Facharbeit werden für Schreibweisen von Zahlen ff. Vereinbarungen getroffen. Es
wird davon ausgegangen, dass die Binär- sowie die Hexdezimalschreibweise bekannt ist.
Schreibweise
Beispiele
Hexadezimalzahlen
vorangestelltes $-Zeichen
oder „0x“ + Hexzahl
$AF, $10, $EDEA
0x01, 0xCF, 0x1FED
Binärzahlen
0b + Binärzahl
0b01110010
Dezimalzahlen
Ohne Zusatz
15, 37, 128
Assembler-Befehle
Courier New
rjmp, clr, breq
Ein Bit ist gesetzt, wenn es den Wert „log. 1“ bzw. High-Pegel, und es ist rückgesetzt, wenn es
den Wert „log. 0“ bzw. Low-Pegel hat.
3
Inhaltsverzeichnis
1
Aufbau
1.1
Grundstruktur
1.1.1
Blockschaltbild
1.1.2
Die CPU
1.1.2.1 Die Ablaufsteuerung
1.1.2.2 Das Rechenwerk
1.1.3
Speicherarchitektur
1.1.3.1 Programmspeicher
1.1.3.2 Flüchtiger Datenspeicher
1.1.3.3 Nichtflüchtiger Datenspeicher
1.1.4
Bus-System
1.2
Gehäuse und Anschlüsse
1.2.1 Gehäusebauformen
1.2.2
Pinanschluss bei Eingangskonfiguration
1.2.3
Pinanschluss bei Ausgangskonfiguration
2
Die Arbeitsweise eines Controllers
2.1
Zugriff auf die Speicher
2.1.1 Zugriff auf den internen SRAM
2.1.2
Zugriff auf den nichtflüchtigen Speicher (EEPROM)
2.1.3
Zugriff auf den Programmspeicher
2.2
Programmbearbeitung
2.3
Die Ein- / Ausgabeports
2.3.1
Das Datenrichtungsregister
2.3.2
Das Portregister
2.3.3
Das Eingangs-Pin-Register
3
Programmerstellung
3.1
Einfache Assemblerbefehle
3.2
Pin als Ausgang
3.3
Pin als Eingang
3.4
Programmentwicklung
4
Quellenverzeichnis
5
Selbstständigkeitserklärung
6
Anlagenverzeichnis
4
1
1.1
Aufbau
Grundstruktur
1.1.1 Blockschaltbild
AVR-Mikrocontroller sind alle nach dem gleichem Schema aufgebaut. Der Aufbau wird in fünf
Bereiche unterteilt, die CPU, der Datenspeicher, der Programmspeicher, der Ein- /
Ausgabebereich und das Bus-System.
Die in der CPU vorhandene Ablaufsteuerung,
bestehend aus dem Programmzähler und der Dekodierlogik, liest und dekodiert Befehle. Diese
Befehle befinden sich im Programmspeicher. Das Rechenwerk, das ebenfalls in der CPU
untergebracht ist, führt arithmetische und logische Operationen aus. Der Ein- / Ausgabebereich
(E-/A-Bereich) wird zur Ein- und Ausgabe von Daten von und zur Peripherie verwendet. In dem
Datenspeicherbereich werden Daten und Variable gespeichert. Letztendlich verbindet das BusSystem die CPU, Programm- und Datenspeicher und den E-/A-Bereich.
Ablaufsteuerung
Rechenwerk
CPU
Programmspeicher
Datenspeicher
Ein-/
Ausgabe
Adressbus
Datenbus
Steuerbus
Bild 1: Pinzipaufbau eines AVR-RISC-Mikrocontrollers
Peripherie
5
1.1.2 Die CPU
1.1.2.1 Die Ablaufsteuerung
Die Ablaufsteuerung, die vom Oszillator gesteuert wird, regelt den gesamten Betrieb eines
Mikrocontrollers. Sie steuert den Programmablauf sowie die Zusammenarbeit der einzelnen
Module, die abhängig vom Typ des Mikrocontrollers sind. Von der Ablaufsteuerung werden alle
für eine Befehlsverarbeitung notwenigen Operationen, vom Holen des Befehls aus dem
Programmspeicher,
Lesen der für den Befehl erforderlichen Daten, Freigabe für das
Rechenwerk und die Abspeicherung des Befehls in den entsprechenden Speicher, gesteuert.
1.1.2.2 Das Rechenwerk
Das Rechenwerk untergliedert sich in die ALU (Arithmetic-Logic-Unit) und 32 Arbeitsregister.
Diese Arbeitsregister und die ALU sind direkt miteinander verbunden. Die ALU führt die
arithmetischen und logischen Operrationen aus und die Ergebnisse werden im Arbeitsregister
gespeichert. Das Rechenwerk eines AVR-Mikrocontroller kann Additionen, Subtraktionen,
Schieboperationen und auch logische Verknüpfungen wie AND, OR und XOR ausführen. In
einem Systemtakt können zwei Befehl ausgeführt werden. Das bedeutet, die Befehle werden
aus dem Registerbereich in die ALU geholt, die Operationen werden ausgeführt und die
einzelnen Ergebnisse werden im Zielregister wieder gespeichert.
1.1.3
Die Speicherarchitektur
Der Speicherbereich der AVR-Mikrocontroller
wird
in 2 Bereiche aufgeteilt. Einmal der
Programmspeicher und zum Anderen der Datenspeicher. Sie unterscheiden sich auch im
physikalischen Aufbau. Die Größe aller Speicher ist von dem einzelnen Typ des AVRMikrocontrollers abhängig.
1.1.3.1 Programmspeicher
Im Programmspeicher (Befehlsspeicher) wird das eigentliche Programm gespeichert. Dies
geschieht durch die elektrisch lösch- und programmierbare Flash-Technologie. Diese
platzsparende Art der Speicherung des Programms ist direkt in dem Baustein eines AVR´s mit
untergebracht. Der Controller kann direkt in dem System programmiert werden, das heißt, dass
6
der Controller in seiner Schaltung bleibt und über den seriellen Programmiermodus
programmiert werden kann.
Der Controller kann auch im parallelen Modus programmiert
werden, jedoch muss er dazu aus der Schaltung ausgebaut werden, und zusätzlich mit einer
Spannung von
+12V während des Programmiervorganges versorgt werden. Der Flash-
Speicher ist bei den vier Grundtypen (AT90S1200, AT90S2313, AT90S4414, AT90S8515) der
AVR-Serie immer zu n Worten organisiert. Die Anzahl der Worte ist abhängig von dem Typ der
Controllers.
Bei Flash-EPROM-Technologie kann der gesamte Chip oder einzelne Blöcke in wenigen
Millisekunden blitzartig (FLASH) elektrisch gelöscht werden. Für das Löschen ist also kein UVLicht wie bei der EPROM-Zelle notwendig.
1.1.3.2 Flüchtiger Datenspeicher (SRAM)
Das Speichern von Variablen und Daten, die nach dem Ausschalten des Controllers nicht mehr
vorhanden sein müssen, übernimmt das statische RAM (SRAM). Die Art der Speicherung der
Daten erfolgt bitweise. Dieses Speichern wird durch eine Verschaltung mehrerer RS-Flip-Flops
ermöglicht. Der SRAM kann bei den größeren AVR-Controllern durch externe Beschaltungen
erweitert werden, jedoch gehen dabei wichtige E-/A-Pins verloren.
Der SRAM wird in drei Teile unterteilt, den Arbeitsregisterbereich, den Ein- / Ausgabebereich
und den eigentlichen SRAM.
Der Arbeitsregisterbereich liegt im untersten Block des SRAMs und ist wie schon gesagt direkt
mit der ALU verbunden. Ihm wurden die Adressen von $00 bis $1F zugewiesen.
Der Ein- / Ausgabebereich (I/O-Bereich) eines AVR-Mikrocontrollers bildet den mittleren Block
des SRAMs und dient zur Steuerung von Hardware- und Peripheriekomponenten des
Mikrocontrollers (z. B. Ports, Timer, EEPROM-Programmierung). Weiterhin ermöglicht dieser
Teil des SRAMs die Anzeige von Ergebnissen aus logischen und arithmetischen Funktionen.
Bei den kleinern AVR-Mikrocontrollern sind nicht alle Funktionen des E-/A-Bereichs vorhanden.
Für den Zugriff auf den I/O-Bereich gibt es, neben den normalen Befehlen, zusätzliche Befehle.
Der Zugriff auf ein I/O-Register kann mit in und out erfolgen, wobei in ein Byte aus dem I/OBereich in ein Arbeitsregister liest und out ein Byte aus dem Arbeitsregister in den I/O-Bereich
speichert. Der I/O-Bereich hat eigene Adressen (von $00 bis $3F), die man mit den
zusätzlichen Befehlen in, out, sbi, cbi, sbis und sbic erreichen kann. Einige dieser I/OBereiche werden noch genauer beschrieben. Ein I/O-Register kann auch über seine SRAMAdresse angesprochen werden, jedoch muss man dann $20 zu seiner I/O-Adresse addieren.
Die SRAM-Adresse wird immer mit in Klammern angegeben. Der Zugriff über die SRAMAdresse erfolgt mit den normalen Befehlen. In dem internen SRAM werden die Daten und
7
Variablen, die während des Programms genutzt werden, gespeichert. Die Größe des internen
SRAMs ist wieder von dem jeweiligen Typ des AVR- Mikrocontrollers abhängig.
1.1.3.3 Der nichtflüchtige Speicher
Wie schon der Name verrät, ist dieser Teil des Speicherbereichs für die Speicherung der Daten,
die nach einem Ausfall der Spannung vorhanden bleiben sollen, zuständig. Dies könnten zum
Beispiel die Kalibrierungsdaten eines Messgerätes sein. Die Größe des Speichers ist abhängig
von dem jeweiligen Controller. Die Daten kann man aus den einzelnen Datenblättern
entnehmen.
Die Zeit zum Speichern/Löschen von Daten auf den EEPROM ist von der angelegten Spannung
abhängig. Der Vorgang dauert zwischen 2,5 und 4 ms. Jedoch darf man trotz dieser geringen
Zeit den EEPROM nicht als RAM verwenden, denn es können nur 100000 Schreibzyklen
ausgeführt werden.
Im Gegensatz zu dem Befehlsspeicher, bei dem man nur abschnittsweise den Flash-EPROM
löschen kann, lässt sich bei dem EEPROM jedes einzelne Bit auf 0 und 1 setzten. Dies lässt
sich nur durch das Anwenderprogramm selbst realisieren.
Zum Speichern/Löschen von Daten im EEPROM ist immer ein sich wiederholender Vorgang
nötig. Es werden die I/O-Register EEPROM-Adressregister (EEAR), das EEPROM-Data
Register (EEDR) und das EEPROM-Control-Register (EECR) benötigt.
1.1.4
Bus-System
Das Bus -System eines AVR-Controllers verbindet die CPU mit einzelnen Speicherbereichen.
Die Ablaufsteuerung der CPU wird über die einzelnen Befehle im Programmspeicher gesteuert.
Sie liest die Daten aus dem jeweiligen Speicherbereich. Der eigentliche Transport sämtlicher
Daten eines Controllers erfolgt über acht parallele Leitungen. Diese Leitungen werden als
Datenbus bezeichnet.
Programm und Daten liegen im Speicher unter verschiedenen Adressen. Jedes Datenbyte hat
eine Adresse. Die Adresse wird von der Ablaufsteuerung als Dualzahl auf den Adressbus
ausgegeben. Somit erhält die CPU die erforderlichen Daten. Der Adressbus besteht auch aus
mehreren parallelen Leitungen.
Da in den Speicher Daten gelesen und geschrieben werden können, muss ihm noch mitgeteilt
werden um welchen Vorgang es sich handelt. Dafür sind sogenannte Steuerleitungen
verantwortlich. Die zwei wichtigsten Leitungen sind die für das Lesen und das Schreiben. Die
8
im Steuerbus befindlichen Leitungen geben also vor, zu welchem Zeitpunkt die Schaltvorgänge
stattfinden.
1.2
Gehäuse und Anschlüsse
1.2.1 Gehäusebauformen
Die AVR-Mikrocontroller
unterscheiden
sich
in
ihrer
Bauform
(siehe
Anlage).
Die
Funktionsweise der Mikrocontrollers ist jedoch vollkommen identisch. Für welchen man sich
letztendlich entscheidet hängt von dem Platz ab, den man in seinem Schaltkasten oder auf der
Platine zur Verfügung hat.
1.2.2
Pinanschluss bei Eingangskonfiguration
Mit Hilfe des Portregisters, eines Eingangsports im I/O-Bereich, kann man bestimmen, ob der
interne Pull-Up-Widerstand verwendet werden soll oder ein Externer geschalten wird.
mit externem Pull-Up
mit internen Pull-Up
5V
R1/10k
Pin
Pin
S1
S1
GND
GND
Bild 2: Eingangspinanschluss bei
externem Pull-Up-Widerstand
1.2.3
Bild 3: Eingangspinanschluss bei
internem Pull-Up-Widerstand
Pinanschluss bei Ausgangsbelegung
Pin
R1/1k
GND
V1
GND
Bild 4: Ausgangspinanschluss
9
2
Die Arbeitsweise eines Controllers
2.1
Zugriff auf die Speicher
2.1.1
Zugriff auf den internen SRAM
Damit man Daten aus dem SRAM lesen kann, wird zunächst die Adresse des gewünschten
Datenbereichs auf den Adressbus gelegt. Die Anzahl der Adressbits richtet sich nach dem
Speicherausbau des jeweiligen Controllers. Danach wird die Read-Leitung des Steuerbusses
aktiviert (log. 0), und auf dem internen Datenbus ist der Inhalt der adressierten SRAM-Zelle. Mit
einer steigenden Flanke des Read-Signals ( /RD-Signal) werden die Daten in ein Arbeitsregister
übernommen.
Soll in einen SRAM Daten eines Arbeitsregisters geschrieben werden, so werden die Daten auf
den Datenbus, und die gewünschte Adresse auf den Adressbus gelegt. Es wird die WriteLeitung des Steuerbusses auf log. 0 gesetzt und wieder auf log. 1. Mit der steigenden Flanke
des Write-Signals wird der Inhalt des Arbeitsregisters in den SRAM eingeschrieben.
2.1.2
Zugriff auf den nichtflüchtigen Speicher (EEPROM)
Für den Schreib-/Lesezugriff auf den nichtflüchtigen Speicher
sind drei I/O-Register des
SRAMs relevant. Diese sind:
EEPROM Adress-Register
EEPROM Daten-Register
EEPROM Control-Register
Adresse
$1C ($3C)
Tab. 1:
Bit7
Bit6
Bit5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
-
-
-
-
-
EEMWE
EEWE
EERE
EEPROM- Control-Register
Beim Lesen wird die zu lesende EEPROM-Adresse in das EEPROM-Adress-Register (EEAR),
das sich auf dem I/O-Speicherplatz $1E (RAM: $3E) befindet, eingeschrieben. Dann wird in das
EEPROM-Daten-Register (EEDR),
auf dem I/O-Speicherplatz $1D (RAM: $3D), der zu
speichernde Inhalt abgelegt. Erst durch das Setzten des Read-Enable-Control-Bits (EERE) im
10
EEPROM-Control-Register (EECR), das sich auf dem I/O-Speicherplatz $1C (RAM: $3C)
befindet, können die Daten gelesen werden.
Der Schreibzugriff auf das EEPROM erfolgt in ähnlicher Weise. Jedoch muss das EEWE-Bit
(EEPROM-Write-Enable-Bit) gesetzt sein. In dem EEAR muss die Adresse, und im EEDR das
zu speichernde Datenbyte vorhanden sein.
Um ein unbeabsichtigtes Schreiben auf das
EEPROM zu verhindern muss zusätzlich das EEMWE-Bit im Controll-Register gesetzt sein.
Zum Programmieren sind folgenden Schritte notwendig.
1. Warten, falls ein Programmiervorgang läuft, bis dieser beendet ist.
2. Die EEPROM-Adresse in das EEAR einschreiben.
3. Das zu speichernde Datenbyte in das EEDR einschreiben.
4. Das EEMWEBit auf log. 1 setzten.
5. Das EEWE-Bit auf log. 1 setzten und ca. 2,5 – 4 ms ( 4 Perioden des Systemtaktes)
warten.
Das EEWE-Bit wird nach dem Programmiervorgang automatisch auf log. 0 zurückgesetzt.
Bevor also das nächste Byte programmiert werden darf, ist es notwendig dieses Bit abzufragen
und zu warten bis es den Wert log. O erreicht hat.
2.1.3
Zugriff auf den Programmspeicher
Der Lesevorgang auf den Programmspeicher wird von der CPU gesteuert. Der Programmierer
muss nicht extra ein Programm dafür schreiben. Der Ablauf des Lesevorganges der Gleiche,
wie bei dem SRAM-Lesevorgang.
Der Schreibvorgang auf den Programmspeicher wird nur einmal für eine Anwendungsaufgabe
durchgeführt. Dies kann mit einem PC, mit entsprechender Software, erfolgen. Der
Programmiervorgang des Flash-EPROMs kann eingeschränkt seriell (in der Schaltung), oder
parallel erfolgen. Für den parallelen Programmiermodus muss der Mikrocontroller aus der
Schaltung genommen werden.
2.2 Programmbearbeitung
Die jeweiligen Arbeitsanweisungen für den Controller stehen im Programm, das sich im
Programmspeicher befindet. Jeder Befehl hat eine bestimmte Adresse. Nach einem Neustart
des Controllers ruft die CPU die erste Adresse ($0000) auf. Der Inhalt geht über den Datenbus
11
zu der CPU. Jeder Befehl besteht aus mehreren Bytes. Das erste Byte enthält immer den
Operationscode, der dem Rechenwerk sagt, welche Operation auszuführen ist. Weiterhin gibt
das erste Byte über die Länge des Befehls Auskunft. Erst wenn der gesamte Befehl gelesen ist,
führt der Controller ihn aus. Dies kann unter anderem Lesen / Schreiben in Speicher oder
Ausführen von Rechenoperationen sein. In den folgenden Byte/s stehen die Adressen oder die
Register, die angesprochen werden sollen.
Nach der Ausführung des Befehls holt die
Ablaufsteuerung den nächsten Befehl aus dem Programmspeicher. Ist der letzte Befehl im
Programmspeicher bearbeitet beginnt die CPU wieder bei der ersten Adresse ($0000), soweit
keine anderen Sprünge oder Schleifen programmiert sind.
2.3 Die Ein- / Ausgabeports (I/O-Ports)
Alle Ports der AVR-RISC Controller verfügen über 8 Bit breite, bi-direktionale I/O-Ports. Bei dem
AT90S1200 sowie dem AT90S2313 ist der Port D jedoch nur mit 7 Bit breit, da das Gehäuse
nur 20 Anschlüsse hat. Bidirektional bedeutet, dass jeder Pin eines Ports als Ein- sowohl auch
als Ausgang verwendet werden kann. In der Funktion als Eingang kann ihm nach Bedarf auch
ein Pull-Up-Widerstand zugeschaltet werden kann. Jeder einzelne Port des Controllers wird
über drei I/O-Bereiche des SRAMs angesprochen. Die Tabelle (siehe Anlage) zeigt welche
Register erforderlich sind, sowie deren Adresse. Initial zeigt den Wert des Registers nach einem
Reset an.
Jeder I/O-Pin ist nach dem gleichen Prinzip aufgebaut
RD
interner Datenbus
Pull-UpWiderstand
TD
DDXn
S1
PortXn
S2
S3
PinX
TL
TP
RL RP
Bild 5: Prinzipschaltung eines I/O-Pins
12
2.3.1
Das Datenrichtungsregister
Im Datenrichtungsregister (DDX) wird festgelegt, ob die einzelnen Pins eines Ports als Ein- oder
Ausgang arbeiten sollen. Steht in einem Bit (n) im Datenrichtungsregister eine „0“ so ist der Pin
als Eingang konfiguriert. Bei einem Eingang ist der Schalter S3 geöffnet und trennt den Pin von
seinem dazugehörigem Port. Der Schalter S1 (Öffner) ist geschlossen, dadurch wird der PullUp-Widerstand an den Pin geschalten, falls der Schalter S2 durch ein High am Ausgang von
seinem Port geschlossen ist.
Wird in ein Datenrichtungsregister-Bit eine „1“ eingeschrieben, so wird der entsprechende Pin
als Ausgang festgelegt. S3 ist dann geschlossen und verbindet den jeweiligen Port mit seinem
dazugehörigen Pin.
Der Öffner S1 ist offen und trennt den Pull-Up-Widerstand vom Pin,
unabhängig vom Schalter S2.
2.3.2
Das Portregister
In das eigentliche Port-Register
(PortX)
wird
bei
einer
Ausgangskonfiguration
der
auszugebende Wert eingeschrieben. Ist der Pin als Eingang konfiguriert, besteht die
Möglichkeit den internen Pull-Up-Widerstand einzuschalten. Der Schalter S2 ist dann
geschlossen.
2.3.3
Das Eingangs-Pin-Register
Mit Hilfe dieses Registers kann man die logischen Pegel eines Pins (PinX) einlesen. Um die
Inhalte auszulesen, aktiviert die Steuerlogik die Signale RD (Read Direction), RL (Read Latch)
bzw. RP (Read Pin), die den jeweiligen Wert über den entsprechenden Treiber TD, TL bzw. TP
auf den internen Datenbus schalten.
13
3
Programmerstellung
Programme für Mikrocontroller können in mehreren Programmiersprachen erstellt werden. Es
steht unter anderem C, Basic oder Assembler zur Verfügung. Es soll die Assemblersprache
näher erläutert werden.
3.1
Einfache Assemblerbefehle
Einige Assemblerbefehle, mit denen man schon viele Anwendungsaufgaben lösen kann.
Befehl
Funktion
and Rd, Rr
Der Inhalt des Registers Rr wird mit dem Inhalt des Registers Rd
UND-verknüpft. Das Ergebnis wird in Rd gespeichert.
Andi Rd, K8
Der Inhalt des Registers Rd wird mit der 8 Bit - Konstanten K8 UNDverknüpft. Das Ergebnis wird in Rd gespeichert.
in Rd, P
Der Inhalt des I/O-Ports P wird in das Register Rd geladen.
ldi Rd, K8
Der Inhalt von einer 8 Bit - Konstanten K8 wird in das Register Rd
geladen.
Nop
Einen Systemtakt warten.
or Rd, Rr
Rr wird mit Rd Oder verknüpft. Das Ergebnis wird in Rd gespeichert.
ori Rd, K8
Der Inhalt des Registers Rd wird mit der 8 Bit - Konstanten K8 ODERverknüpft. Das Ergebnis wird in Rd gespeichert.
out P, Rr
Der Inhalt von dem Register Rr wird in den I/O-Port P geladen.
rjmp Label
Relativer Sprung auf Label
Tab. 2:
Einfache Assemblerbefehle
3.2
Port als Ausgang
Befehl
.include
Erklärung
"2313def.inc“
;Diese Datei wird an jedem Prgrammanfang
;eingebunden, damit wird dem Makro-Assembler
;(Übersetzungsprogramm, der den Code in
;Maschinencode übersetzt) mitgeteilt um welchen
;Controller es sich handelt.
14
ldi
r16, 0xFF
;0xFF in das Arbeitsregister 16 laden
out
DDRB, r16
;Der Inhalt des Arbeitsregisters 16 wird nun in das
;Datenrichtungsregister von Port B ausgegeben. Alle
;Pins an Port sind nun als Ausgang konfiguriert.
ldi
r16, 0b00111111
;0b00111111 wird in das Arbeitsregister r16 geladen
out
PORTB, r16
;Der Inhalt des Arbeitsregisters r16 wird an das
;Portregister von Port B übergeben.
ende:
rjmp
ende
; Es wird ein Sprung zur Marke Ende gemacht, da
;sonst der Controller immer wieder von vorn beginnen
;würde.
3.3
Port als Eingang
Befehl
.include
Erklärung
"2313def.inc“
;Diese Datei wird an jedem Prgrammanfang
;eingebunden, damit wird dem AVR-Assembler
;(Übersetzungsprogramm in Maschinencode)
;mitgeteilt um welchen Controller es sich handelt.
ldi
r16, 0x00
;In das Arbeitsregister 16 wird 0x00 geladen.
out
DDRD, r16
;In das Portregister von Port D wird r16 gegeben.
;Damit ist Port D als Eingang konfiguriert.
ldi
r16, 0xFF
;In das Arbeitsregister 16 wird 0xFF geladen
out
DDRB, r16
;In das Portregister von Port B wird r16 gegeben.
;Damit ist Port B als Ausgang konfiguriert.
marke1 :
in
r16, PIND
; Die Zustände an den Pins von Port D
;(Signalgeber) werden in das Arbeitsregister 16
;geladen.
out
PORTB, r16
; Das Arbeitsregister 16 wird an den Port B
;gegeben, damit liegt an den Ausgangspins
;Spannung an, wenn am jeweiligen Eingangspin
;Spannung anliegt.
15
rjmp
marke1
; Es wird wieder zur Marke 1 gesprungen, denn die
;Zustände an den Datenrichtungsregistern bleibt
;erhalten und muss nicht neu eingeschrieben
;werden.
3.4
Programmentwicklung
Zum Abschluss soll der Weg vom Assemblerprogramm bis hin zum endgültigen Betrieb des
Mikrocontrollers beschrieben werden.
Zunächst wird das Programm in einem Editor per Tastatur eingegeben. Ein Editor der das
geschriebene Assemblerprogramm als reine *.txt –Datei speichert ist vollkommen ausreichend.
Nach dem Speichern des Assemblerprogramms wird dieses Programm mit Hilfe eines
Makroassemblers in die Maschinensprache übersetzt. Es ist darauf zu achten das in der
gespeicherten *.txt–Datei der reine ASCII–Code steht, also ohne Textformatierungen, denn die
Textformatierungen würden von dem Makroassembler mit übersetzt werden. Dies hat eine
Fehlfunktion des Programms zur Folge.
Der Makroassembler wird nach dem Übersetzten
Dateien erstellen, die *.lst-Datei ( Programmlisting ), die *.obj-Datei und die *.hex – Datei, das
eigentliche Maschinenprogramm in unterschiedlichen Formaten, das später in den Flash-ROM
gespeichert wird. Mit Hilfe *.obj-Datei kann man jetzt im Simulator das komplette Programm
testen. Zur Auffindung von Fehlern im Programm enthält der Simulator einen Debugger, dieser
ermöglicht eine Fehlererkennung des Programms, bevor in es den Mikrocontroller gespeichert
wird. Nach der dieser Programmierung und Überprüfung des Programms muss die *.hex-Datei
in den Controller übertragen werden. Die parallele oder serielle Schnittstelle des Computers
und der entsprechende Programmieradapter wird zur Übertragung der Daten verwendet. Das
Programm befindet sich nun im Flash-Speicher des AVR-Mikrocontroller. Letztendlich wird nun
eine Inbetriebnahme des Systems durchgeführt und das System ist betriebsbereit.
16
4
Quellenverzeichnis
Bücher:
Autor, Titel, Ort, Verlag, Jahr
[1] Wolfgang Trampert, AVR-RISC Mikrocontroller, Poing, Franzis´ Verlag, 2000
[2] Bernd-Dieter Schaaf Mikrocomputertechnik, München, Hanser Verkag, 1999
Software:
Name, Version, Typ, Hersteller
[3] wavrasm, Vers. 1.3, Assembler, Atmel
[4] AVR-Studio, Vers.2.0, Simulator, Atmel
Internetquellen:
Autor, Adresse
[5] ATMEL Cooperation, www.atmel.com
[6] Andreas Schwarz, www.mikrocontroller.net
Bilder:
Nummer, Bezeichnung, Quelle, Seite
Bild 1: Prinzipaufbau eines AVR-RISC-Mikrocontroller, Buch: AVR-RISC Mikrocontroller, 5
Bild 2: Eingangspinanschluss bei externem Pull-Up-Widerstand, www.mikrocontroller.net, 9
Bild 3: Eingangspinanschluss bei internem Pull-Up-Widerstand, www.mikrocontroller.net, 9
Bild 4: Ausgangspinanschluss, www.mikrocontroller.net, 9
Bild 5: Prinzipschaltung eines I/O-Pins, Buch: AVR-RISC Mikrocontroller, 12
Bild 6: PDIP-Gehäuse, www.atmel.com , 21
Bild 7: PLCC-Gehäuse, www.atmel.com , 21
17
Tabellen:
Nummer, Bezeichnung, Quelle, Seite
Tab. 1: EEPROM-Control-Register, www.atmel.com, 10
Tab. 2: Einfache Assemblerbefehle, Buch: AVR-RISC Mikrocontroller, 14
Tab. 3: Funktion des einzelnen Anschlusspins, Buch: AVR-RISC Mikrocontroller, 20/21
Tab. 4: relevanten I/O-Register für die I/O-Ports, 22
18
5
Selbständigkeitserklärung
Hiermit erkläre ich, dass ich die vorliegende Arbeit selbstständig und ohne fremde Hilfe verfasst
und keine anderen Hilfsmittel als angegeben verwendet habe. Insbesondere versichere ich,
dass ich alle wörtlichen und sinngemäßen Übernahmen aus anderen Werken als solche
kenntlich gemacht habe.
Ort, Datum:
Unterschrift:
Ullersreuth, 28. Februar 2002
Herunterladen