Sie sind auf Seite 1von 11

Mikrocontroller und Assembler

Antworten auf die Kontrollfragen


im Lemps-Lehrgang

Hans Kottmann
Mai 2001

Inhaltsverzeichnis
Inhalt 1

1 Mikrocontroller (MCU), was ist das? 1

2 Arbeiten mit dem Lemps 12 4

3 Mein erstes Assembler Programm 5

4 Assembler einsetzen 6

5 Verzweigung und Vergleich 8

6 Transfer- und Schiebebefehle 8

7 Logische Operationen 9

8 Indizierte Adressierung 10

9 Unterprogramme und Stack 11

1 Mikrocontroller (MCU), was ist das?


1. Was ist der Unterschied zwischen einem Mikroprozessor und einem Mikrocontroller?

• Mikrocontroller unterscheiden sich von Mikroprozessoren durch verschiedene Funktionen, wel-


che auf dem gleichen Chip integriert sind. So findet man bei modernen Mikrocontrollern Ti-
mersysteme, Ereigniszähler, Interfaces für verschiedene Schnittstellen, A/D Wandler, Pulswei-
tenmodulatoren, Watchdoc-Systeme sowie digitale Ports.

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.

4. In welchen Sprachen werden heute Mikrocontroller hauptsächlich programmiert?

• 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.

5. Welche Funktionen kann ein moderner Mikrocontroller abdecken?

• Die Einsatzmöglichkeiten sind praktisch nur durch die Fantasie des Anwenders begrenzt. Mit
entsprechender Peripherie und Software lassen sich unzählige Anwendungen realisieren.

6. Aus welchen Teilen besteht ein CPU?

• Akkus, Programmzähler, ALU (Arithmetic Logic Unit), Steuerwerk.

7. Was für Aufgaben erfüllt die ALU?

• Die Alu führt Operationen zwischen dem Akkumulator und dem Datenregister aus. Das Re-
sultat wird im Akku gespeichert.

8. Was hat der Akku für eine Funktion?

• Der Akku ist ein temporärer Speicher für Werte mit denen der Prozessor Operationen ausführt.

9. Welche Bedeutung haben die Flags der CPU?

• 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.

10. Was verstehen Sie unter dem Begriff BUS?

• Busse bedienen ausserhalb der CPU liegende Bauteile wie Speicher oder spezielle I/O Baustei-
ne.

11. Welche Busse finden wir in einem MCU System?

• 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

12. Was haben die Busse im MCU-System für Aufgaben?

• Ü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.

13. Was ist ein I/O-Port?

• 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.

15. Wie funktioniert ein Input-Capture (IC)?

• 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.

16. Wie funktioniert ein Output-Compare (OP)?

• 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.

17. Was ist ein PWM-Signal?

• 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.

18. Wie funktioniert ein ”Watchdog”?

• 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

2 Arbeiten mit dem Lemps 12


1. Welche Funktion übernimmt die Integrierte Entwicklungsumgebung (IDE) des Lemps 12?

• 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.

2. Welches sind die Aufgaben des Lemps 12 Terminals?

• Ü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.

4. Beschreiben Sie in Stichworten die Funktion der folgenden Token:


• read Adresse: Dem Token read muss eine Speicheradresse als Argument übergeben werden.
Mit Read wird der Inhalt der betreffenden und einigen weiteren Speicheradressen ausgelesen
und am Terminal ausgegeben.
• write Adresse hexcode Mit dem Token write können hexadezimale Werte ab der angegebenen
Adresse direkt in den Speicher geschrieben werden.
• goto Adresse Mit goto springt der Prozessor an die angegebene Adresse und beginnt, sofern
an dieser Adresse ein Programm beginnt, mit der Programmausführung.
5. Welche Tokens können Sie für die Bedienung der RTC einsetzen?

• 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.

3 Mein erstes Assembler Programm


1. Nennen Sie die Akkumulatoren und Register der HC 12 CPU und beschreiben Sie kurz ihre Funk-
tion:

• 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.

7. Was ist ein Mnemonic?

• Assemblerbefehle werden auch Mnemonics genannt.

8. Was versteht man unter Objekt-Code?

• Unter Objekt-Code versteht man das maschinenlesbare, compilierte Programm.

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.

5. Geben Sie die vier Grundsätze der Assembler-Programmierung an:

• Assembler-Programme immer strukturiert programmieren.


• Ausführliche Kommentare (Keine Zeile ohne Kommentar). Funktionen der Blöcke beschreiben.
• Allen Variablen und Konstanten Bezeichnungen zuordnen (nie Zahlen als Adressen).
• In sich abgeschlossene Blöcke und Funktionen als Unterprogramme aufbauen.

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.

7. Beschreiben Sie die Funktion der Assembler-Anweisungen fcb und fdb:

• fcb: Definition von 1 Byte Konstanten. Bsp: Zahl fcb $Wert


• fdb: Definition von 2 Byte Konstanten. Bsp: DZahl fdb $Wert

8. Wo und wann wird die Assembler-Anweisung org eingesetzt?

• Mit org adresse wird die Startadresse im Speicher festgelegt.

9. Wo wird die Assembler-Anweisung equ angewendet?

• Für die Zuweisung von Adressen oder Werten an Labels.

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

5 Verzweigung und Vergleich


1. Welche Flags im CCR beeinflussen die Branch-Befehle?

• 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.

2. Wie wird durch den cmp Befehl ein Vergleich durchgeführt?


• Der Wert, der entweder im Akku A cmpa oder im Akku B cmpb liegt, wird mit einem Wert,
der dem Befehl übergeben wird, oder mit dem Wert, der an einer Adresse, die dem Befehl als
Argument übergeben wird, subtrahiert. Falls die Operation 0 oder eine negative Zahl ergeben,
werden im CCR die entsprechenden Flags gesetzt. Bsp: cmpa Adresse oder cmpa Wert.
3. In welchem Fall setzen sie den Branch-Befehl bhi (Branch if higher) und wann verwenden Sie bgt
(Branch if greater)?

• 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

6 Transfer- und Schiebebefehle


1. Welche Mathematische Bedeutung hat die dreimalige Anwendung des Schiebebefehles lsld auf den
Inhalt des Doppelakkus D? was Bedeutet eine zweimalige Anwendung von lsrd?

• Dreimal lsld: Multiplikation mit 8.


• Zweimal lsrd: Division durch 4.
Mikrocontroller und Assembler 9

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.

5. Ergänzen sie die folgende Tabelle:

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

ldaa #$AA 1010 1010 ldaa #$AA 1010 1010


anda #$F0 1111 0000 oraa #$F0 1111 0000
Neuer Inhalt Neuer Inhalt
1010 0000 1111 1010
Akku A: Akku A:
Mikrocontroller und Assembler 10

2. EXOR-Verknüpfung (eora,eorb), Byte invertieren (coma, comb, com):

EXOR-Verknüpfung Byte invertieren

ldaa #$AA 1010 1010 movb #$95,PORTJ 1001 0101


eora #$F0 1111 0000 com PORTJ 0110 1010
Neuer Inhalt Neuer Inhalt
0101 1010 0110 1010
Akku A: PORTJ:

3. Einzelne Bits eines Bytes auf ’1’ (bset) oder auf ’0’ (bclr) setzen:

Bits auf ’1’ setzen Bits auf ’0’ setzen


movb #$F0,PORTJ 1111 0000 movb #$F0,PORTJ 1111 0000
bset PORTJ,#$C3 1100 0011 bclr PORTJ,#$C3 1100 0011
Neuer Inhalt Neuer Inhalt
1111 0011 0011 0000
PORTJ: PORTJ:

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:

ldx MyTab ; X = $1122


ldx #MyTab ; X = $5000
ldx #MyTab ; X = $5000
ldaa 0,X ; A = $11
ldy 5,X ; Y = $6677
ldx #MyTab ; X = $5000
ldaa 3,+X ; A = $55
ldab 1,X- ; B = $33
ldd 4,X ; D = $5566
Mikrocontroller und Assembler 11

2. Die in MyTab enthaltenen Werte sollen an die Adresse $4000 gespeichert werden. Schreiben Sie
diese Programmsequenz:

ldx #MyTab ;Adresse von MyTab in Register X laden


ldy #$4000 ;Adresse $4000 in Register Y laden
loop movb 1,X+,1,Y+ ;Wert kopieren und Adressen inkrementieren
cpx #MyTabEnd ;Ende der Tabelle schon erreicht?
bne loop ;wenn nicht, wieder von vorne

9 Unterprogramme und Stack


1. Warum ist bei der Anwendung des Stacks durch den Benutzer besondere Vorsicht geboten?

• Bei der Benützung des Stacks durch den Benutzer können Konflikte mit der CPU entstehen,
da die CPU selbst mit dem Stack arbeitet.

2. Wie funktioniert ein LIFO-Speicher?

• 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

Adresse Inhalt Stackpointer Anweisung


$1A00 $22 <<<< pulb
$19FF $AA <<<< psha
$19FE $35
$19FD $AA <<<< pshd
$19FC $FE
$19FB $AF <<<< pshx
$19FA
$19F9
$19F8

Satz: pdfLATEX

Das könnte Ihnen auch gefallen