8051 Mikrocontroller

Programmentwicklung auf dem PC

Inhaltsübersicht:

 

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.

80C517 Assemblerprogrammierung

 

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

 

Suche