Beruflich Dokumente
Kultur Dokumente
Hans Kottmann
Mai 2001
Inhaltsverzeichnis
Inhalt 1
4 Assembler einsetzen 6
7 Logische Operationen 9
8 Indizierte Adressierung 10
2. MCU’s des gleichen Typs werden in den verschiedensten Anwendungen eingesetzt. Welche Teile
müssen speziell für eine bestimmte Anwendung entwickelt werden?
• Die Peripherie rund um den Mikrocontroller, zum Beispiel Anpassungen an Sensoren und
Treiber für Aktoren, und die Software müssen für die jeweilige Anwendung angepasst werden.
1
Mikrocontroller und Assembler 2
3. Was ist der Unterschied zwischen den beiden Betriebsarten ”Single Chip” und ”Expanded”?
• Für kleinere Anwendungen, für die der interne Speicher ausreicht, kann die ”Single Mode”
Betriebsart werden. Wird externer Speicher benötigt, muss ”Expanded” verwendet werden.
• Die effektivste Programmiersprache, weil Systemnah und vom Platzbedarf her effizient, ist
Assembler. Assembler ist allerdings wenig komfortabel zum Programmieren. Bei den heutigen,
leistungsfähigen Mikrocontrollern ist der Platzbedarf kein grosses Problem mehr, so dass sie
auch in Hochsprachen wie C programmiert werden können.
• Die Einsatzmöglichkeiten sind praktisch nur durch die Fantasie des Anwenders begrenzt. Mit
entsprechender Peripherie und Software lassen sich unzählige Anwendungen realisieren.
• Die Alu führt Operationen zwischen dem Akkumulator und dem Datenregister aus. Das Re-
sultat wird im Akku gespeichert.
• Der Akku ist ein temporärer Speicher für Werte mit denen der Prozessor Operationen ausführt.
• Das Flag speichert die Eigenschaften der letzten von der ALU durchgeführten Operation.
Anhand dieser Flags ist ersichtlich, ob die letzte Operation den Wert 0, eine negative Zahl
oder einen Überlauf ergeben hat.
• Busse bedienen ausserhalb der CPU liegende Bauteile wie Speicher oder spezielle I/O Baustei-
ne.
• Adressbus: Die CPU bestimmt über den Adressbus die Speicherstelle, den Ein-Ausgabe Port
oder das Register einer anderen Peripherieschaltung des Systems. Nur die CPU kann Adressen
ausgeben. Diese Bus ist unidirektional, d.h. die Signale laufen nur in eine Richtung.
• Datenbus: Auf dem Datenbus werden Daten zwischen externen Bauteilen und der CPU hin-
und herverschoben. Als Daten versteht man sowohl Programmcode als auch Ein- und Ausga-
bedaten der Peripheriebausteine. Der externe Teilnehmer wird über die am Adressbus ausge-
gebene Adresse bestimmt. Die Daten müssen logischerweise in beide Richtungen transportiert
werden. Dieser Bus ist also bidirektional ausgelegt.
• Controllbus: Mit verschiedenen Signalen steuert die CPU über diesen Bus die übrigen System-
bausteine. So wird zum Beispiel mit dem Read/Write Signal festgelegt, in welcher Richtung
der Datentransfer auf dem Datenbus erfolgt.
Mikrocontroller und Assembler 3
• Über die Busse wird in einem Mikrocontrollersystem der ganze Datentransfer abgewickelt.
Dazu gehören der Transfer von Anweisungen über den Controll- und den Adressbus, wie auch
der eigentliche Transfer von Daten über den Datenbus.
• I/O-Ports sind digitale Schnittstellen, die als Ein- oder Ausgang den Mikrocontroller mit der
Aussenwelt verbinden. Falls zum Port ein Datenrichtungsregister gehört, lassen sich die Lei-
tungen einzeln als Ein- oder Ausgänge schalten.
14. Welche Aufgaben hat ein Analog/Digital-Wandler? Fassen Sie die Eigenschaften des 68HC12A4
A/D Wandlers zusammen.:
• Analoge Signale können über den A/D über acht Kanäle digitalisiert werden. Die Auflösung
beträgt 8 Bit (256 Schritte). Mit den beiden Referenzeingängen Vrh und Vrl kann ein Span-
nungsbereich gewählt werden, in welchem die Digitalisierung erfolgen soll.
• Mit dem Input-Capture kann der genaue Zeitpunkt eines Ereignisses festgehalten werden. Der
Input-Capture wird ausgelöst, wenn am entsprechenden Timer-Kanal der Eingangszustand
ändert. Die IC-Funktion kann so programmiert werden, dass sie auf eine positive, eine negative
oder auf beide Flanken des Signals reagiert.
• Zu jeder Output-Compare Funktion gehört ein 16 Bit Register, welches durch den Anwender
programmiert werden kann. Sobald der Systemzähler den Wert erreicht, der im OC-Register
gespeichert ist, können Ereignisse an den Timerausgängen ausgelöst werden.
• Ein PWM-Signal ist ein Rechtecksignal, dessen Einschaltdauer verändert werden kann. Jeder
Timer-Kanal lässt sich als Pulsweitenmodulator programmieren. Die Frequenz des Signals
bleibt konstant, aber die Einschaltdauer wird verändert. Dadurch lässt sich die Leistung von
Verbrauchern mit hohem Wirkungsgrad über das Tastverhältnis steuern, zum Beispiel Lampen
dimmen.
• Der Watchdog überprüft, ob der Programmablauf richtig funktioniert. Dafür muss die Anwen-
dersoftware den Watchdoc innerhalb einer bestimmten Zeit zurücksetzen. Tut sie das nicht,
löst der Watchdoc einen Systemreset aus und bewirkt damit, dass die Software neu gestartet
wird.
19. Erklären Sie den Unterschied zwischen einem EEPROM und einem Flash EEPROM:
• EEPROM’s sind ROM-Speicher(Read Only Memory), die sich elektrisch (Electric Erasable)
löschen lassen. Bei EEPROM’s erfolgt das Schreiben, wie auch das Löschen Byteweise. Flash
EEPROM’s hingegen lassen sich nur Sektorweise löschen.
Mikrocontroller und Assembler 4
• Die Lemps Entwicklungsumgebung umfasst einen eigenen Editor, in dem die Programme ge-
schrieben werden können. Über die Schaltflächen am oberen Rand können die benötigten
Compiler und Zusatzprogramme wie Easy-Case aufgerufen werden.
• Über das Terminal kann mit dem Lemps kommuniziert werden, Download von Programmen
und das Laden eines neuen Lemps-Bios läuft ebenfalls über das Terminal. Die Einstellungen
der Systemzeit und Datum werden mit Tokens ebenfalls über das Terminal vorgenommen.
3. Was versteht man im Zusammenhang mit dem Lemps 12 unter einem Token?
• Tokens sind Befehle, die über das Terminal an das Lemps 12-Bios geschickt werden.
• date Tag Monat Jahr : Damit wird das Datum eingestellt. Wird date ohne Argumente einge-
geben, so wird das aktuelle Datum ausgegeben.
• time Std Min Sek : Damit wird die Systemzeit eingestell. Wird time ohne Argumente eingege-
ben, so wird die aktuelle Zeit ausgegeben.
• day Wochentag: Einstellen des Wochentages. Montag = 01, Sonntag = 07. Ohne Argumente
wird der aktuelle Wochentag ausgegeben.
• swatch: swatch gibt Tag, Datum und Zeit am Terminal aus.
6. Welche Schritte müssen durchgeführt werden, bis ein im Editor geschriebenes Programm im RAM
läuft?
• Wird ein Programm über die Lemps 12 Ide compiliert, passieren alle notwendigen Schritte au-
tomatisch. Bereits compilierte Programme müssen jedoch nicht noch einmal compiliert werden.
Um ein solches Programm in das RAM zu laden, sind folgende Schritte notwendig:
– Öffnen der Quellcodedatei
– Schaltfläche Download S19 anklicken (Das zur Quelldatei gehörende S19-File muss sich
im gleichen Verzeichnis wie die Quelldatei befinden)
– Im Terminal goto 2000 eingeben oder die Schaltfläche g2000 anklicken.
7. Wie kann erreicht werden, dass ein Programm im RAM nach einem Reset automatisch gestartet
wird? Wie wird ein solcher Autostart wieder ausgeschaltet?
• Einschalten: Im Terminal nach einem Reset auto 2000 eingeben. Nun befindet sich der
Lemps im Autostartmodus.
Mikrocontroller und Assembler 5
• Ausschalten: Auf dem Lempsboard die XIRQ-Taste drücken, im Terminal auto ohne weitere
Argumente eingeben. Nach einem Reset ist der Lemps wieder im Terminal-Mode.
8. In welchen RAM-Speicherbereich können Sie Ihre Programme laden und ausführen?
• Der Programmspeicherbereich reicht von Adresse $2000 bis $6000, ein Programm kann also
im Maximum 16 KByte gross sein.
• Akkumulatoren (A, B und D): Die Akkus A und B sind 8-Bit Register. Arithmetische
Operationen sowie Datenmanipulationen werden mit den Inhalten dieser Akkus durchgeführt.
Sie enthalten nach der Operation auch die Resultate. Die beiden Akkus A und B (je ein Byte)
sind im Doppelakku D zusammengefasst.
• Indexregister X und Y: Dies sind 16-Bit Register, die für die indizierte Adressierung an-
gewendet werden. Sie können auch als Zählerregister oder als Zwischenspeicher eingesetzt
werden.
• Programmcounter (PC): Der Programmcounter ist ein 16-Bit Register, das immer die
Adresse der nächsten Instruktion enthält.
• Stackpointer (SP): Der Stackpointer ist 16-Bit Register, das immer die Adresse des letzten
Eintrages in den Stack enthält. Der Stack ist als LIFO (Last In First Out) organisiert. Auf
dem Stack werden von der CPU die Rücksprungadressen bei Unterprogrammaufrufen und
Interrupts gespeichert.
• Condition Code Register (CCR): Das Condition Code Register ist ein 8-Bit Register, in
dem fünf Bits die Eigenschaften der letzten ausgeführten Operation angeben. Drei Bits sind
Kontrollbits für die Interruptausführung und den Stopp-Befehl.
2. In welchen Fällen wird das C und in welchen Fällen das Z Flag des CCR gesetzt?
• Das C-Bit wird gesetzt, falls bei der letzten Operation die ALU den Zahlenbereich des bear-
beiteten Register über- oder unterschritten hat. Das Z- oder Zero-Bit wird gesetzt, falls die
letzte arithmetische oder logische Operation oder eine Datenmanipulation den Wert Null in
einem Register ergab.
3. Was versteht man unter einem Datenrichtungsregister (DDRx)? Welche Funktionen hat dieses Re-
gister?
• Nach einem Reset werden alle Ports als Eingänge geschaltet. Jedem digitalen Port ist ein Daten-
richtungsregister zugeordnet. Durch einen Eintrag in dieses Register kann für jeden einzelnen
Portanschluss festgelegt werden, ob dieser als Eingang oder als Ausgang eingesetzt wird.
4. Ich möchte auf dem PORTH die Ausgänge H0 bis H5 als Ausgänge (Zustand ’1’) setzen. Welche
Assemblerbefehle sind Notwendig?
• ldaa #$3F
staa DDRH
• oder movb #$3F,DDRH
Mikrocontroller und Assembler 6
5. Welcher Zustand muss im DDR eingetragen werden, damit der entsprechende Port-Anschluss ein
Ausgang ist?
• High
6. Beschreiben Sie den Unterschied zwischen den Adressierungsarten INH, IMM und EXT. Geben Sie
Beispiele an:
• INH: Befehle, die aus einem Byte Code bestehen und keine weiteren Operatoren benötigen.
Bsp: inca, decb, mul.
• IMM: Ein Zahlenwert wird unmittelbar in den Akku geladen. Der Zahlenwert ist im Programm
enthalten. Das Zeichen # weist auf diese Adressierungsart hin. Bsp: ldaa #$3E.
• EXT: Operation mit dem Speicherinhalt der angegebenen Adresse durchführen. Bsp: ldaa
$3000, staa $6000.
9. Welche Flags des CCR werden durch den Assemblerbefehl ldaa beeinflusst und in welcher Weise?
• Das Negativ-Flag wird gesetzt, falls nach der Operation das höchstwertige Bit (MSB) den Wert
1 hat, sonst hat das N-Flag den Wert 0;
• Das Zero-Flag wird gesetzt, falls der Akku A durch die Operation den Inhalt 0 erhalten hat,
sonst hat das Z-Flag den Wert 0:
• Dass V-Flag wird durch die ldaa-Operation in jedem Fall zurückgesetzt (Zustand 0).
10. Warum gibt es den Assemblerbefehl staa nicht auch in der IMM Adressierung?
• Der Zahlenwert, der mit staa an eine bestimmte Adresse gespeichert wird, muss zuvor in den
Akku A geladen werden. Es kann kein Zahlenwert direkt an eine Adresse übergeben werden.
4 Assembler einsetzen
1. Tokens:
• Tokens sind Befehle, die über das Terminal an den Lemps übergeben werden können. Die
Tokens werden über das Lbios ausgeführt. Beispiele für Tokens sind unter anderem g2000 um
ein Programm, das ab Adresse 2000 beginnt zu starten oder write adresse hexcode, um den
Speicher direkt zu beschreiben.
2. HC 12-Befehle:
• Hier handelt es sich um HC 12 spezifische Befehle, die von Motorola definiert und in den
Befehlssatz des HC 12 integriert wurden. Beispiele für HC 12 Befehle sind ldaa PORTJ, stab
DDRJ, inca
3. Lbios-Unterprogramme:
• Hier handelt es sich um Subroutinen, die im Lbios vorhanden sind und mit den notwendigen
Argumenten direkt aus den Programmen heraus aufgerufen werden können. Beispiele sind die
Delay-Funktionen (Delay1s, DelayXms) und die Sound-Funktionen (Sound, NoSound).
Mikrocontroller und Assembler 7
4. Assembler-Anweisungen:
• Hier handelt es sich um Anweisungen, mit denen der Compiler gesteuert wird. Beispiele sind
org Adresse, include Datei, fcb oder rmb.
6. Ein Assembler-Programm wird grundsätzlich in vier Spalten aufgebaut. Welche Programmteile ent-
halten diese Spalten?
• Spalte 1: Labels am Linken Rand! Unter Labels versteht die Bezeichnungen von Variablen,
Konstanten oder Unterprogrammen.
• Spalte 2: Mnemonics oder Assembleranweisungen.
• Spalte 3: Operanden wie Adressen, Ports oder Labels, die als Operanden verwendet werden.
• Spalte 4: Kommentaaaaar!!!!!! Kommentare müssen mit Semikolon ”;” nach vorne abgetrennt
werden.
10. Beschreiben Sie die Funktion der HC 12-Befehle COM und MUL. In welchen Adressierungsarten können
diese Befehle eingesetzt werden?
• COM Port: Invertieren aller Bits eines Ports. Adressierungsart: Extended (EXT).
• MUL: Multiplizieren des Inhaltes von Akku A mit demjenigen von Akku B. Das Ergebnis kommt
in den Doppelakku D. Adressierungsart: Inherent (INH).
11. Beschreiben Sie die Schritte, welche bei der professionellen Bearbeitung eines Softwareprojektes
durchgeführt werden müssen. Geben Sie in Stichworten an, welche Arbeiten die einzelnen Schritte
beinhalten:
• Problemanalyse: Grafische Darstellung des Problems, das mittels Software gelöst werden
soll.
• Programmplanung: Entwurf der Software auf dem Papier, zuerst durch Softwareanalyse,
nachher erstellen eines Struktogrammes.
• Codieren: Schreiben des entworfenen Programmes in eine geeigneten Programmiersprache.
• Test: Testen des Programmes und Bugs ausmerzen.
• Dokumentation: Beschreibung der Funktionen des Programmes erstellen, die auch für Laien
verständlich ist.
Mikrocontroller und Assembler 8
• C oder Carry-Flag: Das C-Flag wird gesetzt, wenn bei der letzten Operation ein Übertritt
vom positiven in den negativen Zahlenbereich oder umgekehrt erfolgt ist.
• N oder Negativ-Flag: Das N-Flag wird gesetzt, wenn die letzte Operation einen negativen Wert
ergeben hat.
• Z oder Zero-Flag: Das Z-Flag wird gesetzt, wenn die letzte Operation den Wert 0 ergeben hat.
• V oder Overflow-Flag: Das V-Flag wird gesetzt, wenn bei der letzten Operation ein Übertritt
von 127 nach -128 oder umgekehrt erfolgt ist.
• bhi wird verwendet wenn nur mit natürlichen Zahlen, das heisst, nicht vorzeichenbehafteten
Zahlen gerechnet wird.
• bgt wird verwendet, wenn auch mit negativen, also vorzeichenbehafteten Zahlen gerechnet
wird
4. Wie unterscheiden sich die beiden Branch-Befehle beq und lbeq in ihren Funktionen?
• Alle Branch-Befehle wie beq, bne haben die Grösse von einem Byte. Damit können maxi-
mal Sprünge von +127 oder -128 Byte durchgeführt werden. Long-Branch-Befehle wie lbeq,
lbne bestehen hingegen aus 2 Bytes und ermöglichen dadurch Sprünge über den gesamten
Speicherbereich.
5. Unterprogrammen müssen immer mit jsr oder bsr aufgerufen werden. Warum darf man nicht auch
mit bne oder beq ein Unterprogramm aufrufen?
• Ein Branch ist eine endgültige Verzweigung, bei der keine Rücksprungadresse in den Stack
geschrieben wird. Nach dem Ablauf des Unterprogrammes würde also keine Fortsetzung des
Ablaufs mehr stattfinden. Bei jsr oder bsr wird die Rücksprungadresse in den Stack geschrie-
ben und nach Ablauf des Unterprogramms kehrt der Prozessor wieder an die Stelle zurück, wo
das Unterprogramm aufgerufen wurde.
6. Erklären Sie, in welchen Fällen das Z, das C und das V Bit im CCR gesetzt werden:
• Siehe 1
2. Der Inhalt des Registers ADR0H soll als LSB in das Register X verschoben werden. Das MSB im
Register X muss den Wert 0 aufweisen. Schreiben Sie die kurze Assemblersequenz:
• ldab ADR0H
clra
tfr D,X
3. Welches ist der Unterschied zwischen den HC12-Befehlen tfr und exg?
• tfr: Der Inhalt eines Registers oder einer Adresse wird zum zweiten Register oder Adresse
kopiert. Bsp: tfr Startadresse,Zieladresse oder tfr Startregister,Zielregister.
• exg: Die Inhalte der angegebenen Adressen oder Register werden vertauscht. Bsp: exg Adres-
se1,Adresse2 oder exg Register1,Register2
4. Welchen Wert erhält das Register Y nach der folgenden Transfersequenz (Begründen Sie ihre Ant-
wort):
ldaa #$A5
tfr A,Y
• $FFA5 Wenn das MSB ”1” ist, geht der Prozessor davon aus, dass es sich um eine negative
Zahl handelt und erweitert das vorangehende Byte entsprechend.
Akku Speicher
Ausgeführte HC12 Befehle
A B Adresse Inhalt
ldd $2000 $A5 $B7 $2000 $A5
exg A,B $B7 $A5 $2001 $B7
tfr B,A $A5 $A5 $2002
ldab $200D $A5 $33 $2003 $00
lslb $A5 $66 $2004 $AA
stab $200C $A5 $66 $2005
lsrb $A5 $33 $2006 $20
lsrd $52 $99 $2007 $06
ldd #$2006 $20 $06 $2008
std $2006 $20 $06 $2009 $66
clra $00 $06 $200A $33
staa $2003 $00 $06 $200B
movb #$AA,$2004 $00 $06 $200C $66
movw $200C,$2009 $00 $06 $200D $33
7 Logische Operationen
1. Und-Verknüpfung (anda, andb), Oder-Verknüpfung (oraa, orab):
Und-Verknüpfung Oder-Verknüpfung
3. Einzelne Bits eines Bytes auf ’1’ (bset) oder auf ’0’ (bclr) setzen:
4. Das PORTD ist bereits als Ausgang geschaltet. Die Bits D1, D4 und D5 sollen invertiert werden.
Schreiben Sie diese Programmsequenz:
• ldaa PORTD
eora #$31
staa PORTD
5. Zeigen Sie auf zwei verschiedene Arten, wie das Bit D4 des PORTD auf den Wert ’1’ gesetzt werden
kann, ohne dass die übrigen Stellen beeinflusst werden:
• bset PORTD,#$10
• ldaa PORTD
oraa #$10
staa PORTD
6. Zeigen Sie auf zwei verschiedene Arten, wie das Bit D6 des PORTD auf den Wert ’0’ gesetzt werden
kann, ohne dass die übrigen Stellen beeinflusst werden:
• bclr PORTD,#$40
• ldaa PORTD
anda #$BF
staa PORTD
8 Indizierte Adressierung
1. Geben Sie an, welche Werte das angegebene Register nach den folgenden Zeilen enthält:
2. Die in MyTab enthaltenen Werte sollen an die Adresse $4000 gespeichert werden. Schreiben Sie
diese Programmsequenz:
• Bei der Benützung des Stacks durch den Benutzer können Konflikte mit der CPU entstehen,
da die CPU selbst mit dem Stack arbeitet.
• LIFO steht für Last In, First Out, das bedeutet, dass der Wert, der als letzter in den Speicher
geladen wurde, wieder als erster aus dem Speicher geholt wird.
3. Warum darf ein Unterprogramm nie mit jmp oder einem Branch-Befehl (Ausgenommen bsr) auf-
gerufen werden?
• Branch-Befehle mit Ausnahme von bsr schreiben die Rücksprungadresse nicht in den Stack.
Es kommt zum Programmabsturz!
4. Tragen Sie in der untenstehenden Stackdarstellung die Inhalte nach Ablauf der folgenden Pro-
grammsequenz ein:
pulb
ldaa #$AA
ldx #$AFFE
psha
pshd
pshx
Satz: pdfLATEX