8051 Mikrocontroller
Programmentwicklung auf dem PC
Inhaltsübersicht:
- Assemblerprogrammierung
- Programmieren in Assemblersprache
- Software Keil u-Vision
- Schreiben eines Assemblerprogramms
- a51 - Assembler-Direktiven
- Die ersten Programmanweisungen
- Adressierungsarten
Assemblerprogrammierung
Soll ein Gerät mithilfe eines Mikrocontrollers gesteuert werden, muss ein Programm am PC programmiert werden, welches dann in ein EPROM geschrieben wird.
In diesem EPROM ist das Steuerprogramm in Maschinensprache gespeichert. Ein EPROM kann bereits direkt am Controllerchip integriert oder extern angeschlossen sein.
Wie hier beim 80C517 ist ein ROM mit 32kByte bereits im Controller integriert.
Programmieren in Assemblersprache
Eine Assemblersprache ist eine spezielle Programmiersprache, welche die Maschinensprache einer spezifischen Prozessorarchitektur in einer für den Menschen lesbaren Form repräsentiert.
Jede Computerarchitektur hat folglich ihre eigene Assemblersprache.
Ein Programm in Assemblersprache wird auch als Assemblercode bezeichnet. Es wird durch einen speziellen Compiler, ebenfalls Assembler genannt, in direkt ausführbare Maschinensprache (auch Maschinencode) umgewandelt.
Programme in Assemblersprache zeichnen sich dadurch aus, dass man die komplette Bandbreite des Computers ausnutzen und Hardwarechips direkt programmieren kann.
Weil Assemblerprogramme faktisch auf Maschinencode-Ebene arbeiten, sind sie oftmals erheblich kleiner und schneller als Programme, die einen ähnlichen Grad an Komplexität aufweisen, aber eine Hochsprache als Basis haben.
Der Compiler einer höheren Programmiersprache erzeugt meistens mehr Code, weil er stark generalisiert geschrieben werden muss.
Beispiel eines Assemblercodes für ein Lauflicht welches links und rechst umschaltbar ist:
;80517A: Assembler-Programm
;**************************
; P4 Lauflicht (P4) links und rechts umschaltbar (P7); Zeitschleife als Unterprogramm
$ NOMOD51
$ INCLUDE (REG517A.INC)
ORG 0000H
MOV A,#1
LOOP: MOV P4,A
MOV R4,P7
CJNE R4,#0C0h,RLauf
MOV R5,#120
CALL Warten
RL A
JMP LOOP
RLauf:
MOV R5,#240
CALL Warten
RR A
JMP LOOP
WARTEN:
L1: MOV R6,#20
L2: MOV R7,#100
L3: DJNZ R7,L3
DJNZ R6,L2
DJNZ R5,L1
RET
END
Grundsätzlich kann man ein Programm auch in einem normalen Texteditor schreiben.
Da wir unsere Programme aber auch direkt testen wollen, benötigen wir dazu eine Entwicklungsumgebung (IDE) welche eine Programmsimulation ausführen kann.
Software Keil u-Vision in der Version 2.0
Die Entwicklungsumgebung µVision der Fa.Keil ist in ihrer Trial-Version für Schüler und Studenten frei zugänglich.
Mit ihr können C und 8051-Assemblerprogramme bis zu 2kByte Umfang erstellt werden. Sie arbeitet unter Windows und kann neben vielen weiteren 8051 Derivaten auch Programme für den MC80515 / MC80535 Controller erstellen. Zusammen mit dem notwendigen Compiler, Assembler und Linker verfügt sie über ein integriertes Terminalprogramm, über welches die Programme in Echtzeit auf einem angeschlossenen Rechner ausprobiert werden können.
Die aktuelle Software finden Sie direkt auf der Webseite von Keil www.keil.com
Schreiben eines Assemblerprogramms
Die Controller-Familie bietes einiges an Assemblerbefehlen an. Es gibt Befehle zum Datentransfer wie z.B. MOV, MOVC oder MOVX, Befehle zu arithmetischen Operationen (ADD, SUBB, INC) und vieles mehr.
Eine übersicht über den Befehlssatzfinden Sie hier:
Im Keil uVision Editor schreiben wir unser 1. Programm.
Bei der Assemblerprogrammierung wird zuerst der Assembler-Quelltext geschrieben. Er setzt sich aus Befehlsworten zusammen,denen bis zu 3 Operanden folgen.
Zwischen dem Befehl und dem 1. Operanden steht ein Leerzeichen, die Operanden werden durch Komma getrennt.
Kommentare werden durch ein Semikolon; eingeleitet. Alle Befehle können Groß oder Klein geschrieben werden.
Beispiel:
MOV A,20h
MOV ist ein Transportbefehl. Hier wird der Inhalt von Speicherzelle 20h in den Akku geladen.
a51 - Assembler-Direktiven
Die roten Befehlsworte gehören zu den Assembler-Direktiven und richten sich nicht an die CPU, sondern an die Übersetzungsprogramme, den Assembler und den Linker.
Der ORG 1000h-Befehl stellt dabei den Assembler so ein, dass dieser das Programm ab Speicherzelle 1000h ablegen wird.
Der END-Befehl teilt dem Assembler mit, dass hier das Programm zu Ende ist.
Die blauen Befehle sind Assemblerbefehle und richten sich an die CPU.
ORG 1000h
MOV A,#21h
MOV 35h,A
MOV r0,#85h
MOV @r0,#44h
END
Die ersten Programmanweisungen
;Hauptprogramm
;=============
ORG 0h
Start: ;Marker "Start" setzen
mov A,#21h ;Die Zahl 21h in den Akku laden
mov 35h,A ;Den Inhalt vom Akku auf SZ 35h übertragen
mov 36h,35h ;Transportiere den Inhalt von SZ 35h auf SZ 36h
mov 10h,#10h ;Die Zahl 10h in SZ 10h übertragen
mov 40h,10h ;Den Inhalt von SZ 10h in SZ 40h übertragen
jmp Start ;springe zum Marker Start
END
Adressierungsarten
unter der Adressierungsart versteht man in der Assemblersprache den Weg, den ein Assemblerbefehl benutzt, um an einen Speicherzelleninhalt zu kommen.
Die Adressierungsarten werden an dem Befehl mov (move - bewege nach) erläutert.
mov Ziel,Quelle
hinter dem Befehlswort mov wird erst die Zielspeicherzelle genannt, in die das hineingeschrieben werden soll, wovon im Quelloperanden die Rede ist.
Diese Abfolge der Operanden gilt auch für alle anderen Maschinenbefehle der 8051 Assemblermnemonik.
>> direkte und indirekte Adressierung