Mikrokontroller

Was sind Mikrokontroller?

Mikrokontroller sind leistungsfähige, kompakte, programmierbare Rechnersysteme.
Die Komponenten (CPU, Zentralspeicher, Input- /Output-Baugruppen (I/O) befinden sich auf einem Chip.
Werden auch oft als Embedded Computer oder “Einchip-Computer” bezeichnet.

Anwendungsgebiete von Mikrokontroller

  • Waschmaschinen
  • Navigationssysteme
  • Fernseher
  • DVD-Player
  • Radio
  • Drucker
  • Kamera
  • Alarmanlagen
  • Telefon
  • Roboter

Unterschiede und Eigenschaften

Mikroprozessor

Zentraleinheit, CPU (Central Processing Unit), ist fähig logische und arithmetische Operationen nach einem beliebigen Programm auszuführen.

Mikrocomputer

Kleiner Computer bestehend aus einem Mikroprozessor, Daten- und Programmspeicher, sowie Anschlusselektronik für Peripherie. Der Mikrocomputer ist die Basis für jeden PC.

Mikrokontroller

Ist ein Mikrocomputer, der auf einem einzigen Chip integriert ist. Er besteht aus CPU, Zentralspeicher und Input- / Output-Baugruppen (I/O).
Wird auch als “Einchip-Computer” oder Embedded Computer bezeichnet.

Embedded Systems

Was ist ein Embedded System?

Embedded Systems sind aufgabenspezifisch, sie führen eine einzelne Aufgabe innerhalb eines grösseren Systems aus.

“Anwendungen die einen Mikrokontroller meistens versteckt eingebettet haben, nennt man auch Embedded Systems. Nach aussen hin ist der Computer in der Anwendung nicht direkt ersichtlich. Der Prozessor ist mit Sensoren und Aktoren komplett in die Anwendung integriert

Anbieter von Embedded Systems

  • Raspberry Pi
  • Arduino
  • BeagleBone
  • Nanode

Blockdiagramm

8 Bit Prozessor

Steuerwerk

Im Steuerwerk werden die Steuersignale wie z.B. Memory-Read usw. generiert bzw. externe Signale wie z.B. Interrupts erkannt.

Dekoder

Die gelesenen Befehle werden durch den Dekoder aufgeteilt und alle notwendigen internen Aktionen aktiviert.
der Dekoder ist eine “elektronische Maschine”, die in mehreren Schritten den anstehenden Befehl ausführt.

Programmzähler

Der Programmzähler erhöht nach der Ausführung eines Befehls seinen Wert um einen Befehl und weist somit auf den nächsten Befehlseintrag.

Register

Die bearbeiteten Daten werden im Register gespeichert. Das wichtigste Register wird als Akku bezeichnet.
das Register Akku ist ein Arbeitsregister und wird für alle auszuführenden Befehle benutzt.

ALU

ALU (Arithmetic Logic Unit) ist das Additionswerk. Es wird für alle mathematischen Berechnungen verwendet.
Die Ergebnisse einer Operation werden entweder im Akku zwischengespeichert oder an ein Register überwiesen.

Flagregister (PSW)

Das Programm Status Wort (PSW) oder Flag-Register signalisiert über einzelne Bits Bearbeitungszustände sowie spezielle Werte.
Die Flags werden verwendet, um arithmetische Operationen und bedingte Sprünge zu steuern.

Die Flags werden ausschliesslich durch den Inhalt des Akkus (z.B. nach einer mathematischen oder logischen Operation) beeinflusst / geändert.

Dieses Bit wird gesetzt, wenn bei einer arithmetischen Operation ein 8 Bit Überlauf eingetreten ist.

mehr als 8 Bit -> C = 1

(PSW.7 oder C)

Wird für die vorzeichenbehaftete Arithmetik benötigt.

OV = 1 wenn bei einer Addition oder Subtraktion der Zahlenbereich (-128 (80H) bis 127 (7FH)) verlassen wird und bei einer Division durch 0

(PSW.2)

Parity = 1 wenn die Anzahl der Bits mit dem Wert 1 im Akku ungerade ist.

P kann nur gelesen werden.

Wert ist ungerade -> p = 1

(PSW.0)

Zeigt an, dass das Ergebnis einer vorausgegangener Operation im Akku gleich Null ist.

Wenn alle 8 Bit 0 sind -> z = 1

Adressbus

Ein Adressbus ist für die Übertragung von Speicher- und Peripherie-Adressen zuständig.
Eine Adresse mit einer Länge von n Bit entspricht einem Adressraum von \(2^n \) Elementen

Bitweise rechnen

Nützliche Infos

0000 0100   -    4
0000 1000   -    8
0001 0000   -   16 
0010 0000   -   32
0100 0000   -   64
1000 0000   -  128 

Dezimal in Binär umrechnen

Dezimalzahl 15 in Binärzahl:
    8   4   2   1
    -------------
    1   1   1   1
8 + 4 + 2 + 1 = 15             
               
 
Dezimalzahl 1234 in Binärzahl:
1024 512 256     128 64  32  16      8   4   2   1
-------------    --------------      --------------
1    0    0       1   1   0  1       0   0   1   0



                            
 

Binär in Hexadezimal umrechnen

1 - 9
A = 10
B = 11
C = 12
D = 13 
E = 14
F = 15 
Binärzahl 101 in Hexadezimal:
    8   4   2   1
    -------------
    0   1   0   1
        |       |
        4   +   1   =   5h
                        
 
Binärzahl 1111 in Hexadezimal:
    8   4   2   1
    -------------
    1   1   1   1
    |   |       |
    1 + 4 + 1 + 1   =   15 = Fh
                        
 
Binärzahl 10011010010 in Hexadezimal:
8   4   2   1   8   4   2   1    8   4   2   1
-------------   -------------    -------------
0   1   0   0   1   1   0   1    0   0   1   0
      |               |                |   
      4               13               2

= 4D2h
                            
 

Binär rechnen

Addition

11111111b + 00000001b

      1 1 1 1 1 1 1 1
+     0 0 0 0 0 0 0 1
Ü   1 1 1 1 1 1 1 1
=     0 0 0 0 0 0 0 0

Carry   =   1   -> mehr als 8 Bit (letzter Übertrag)
Zero    =   1   -> alle 8 Bit sind 0
Parity  =   0   -> Anzahl '1er Bits' gerade 

Subtraktion

0 - 0 = 0
0 - 1 = 1 Übertrag
1 - 0 = 1 
1 - 1 = 0 
01000000b - 00000001b

      0 1 0 0 0 0 0 0
-     0 0 0 0 0 0 0 1
Ü       1 1 1 1 1 1
=     0 0 1 1 1 1 1 1

Carry   =   0   -> nicht mehr als 8 Bit
Zero    =   0   -> nicht alle 8 Bits sind 0
Parity  =   0   -> Anzahl '1er Bits' gerade 

Hexadezimal in Binär umrechnen

Hexadezimalzahl 3E8h in Binär:

3       =   0011
E = 14  =   1110
8       =   1000
---------------------
3E8h = 0011 1110 1000

                        
 

Assembler Befehlssätze

#40h oder 40h?

# = Wert
Ohne # = Wert von der Adresse

Code optimieren

Infos

Rotiert Akkumulator Links (Rotate Left)

 Im Akku steht folgender Wert:
11000101b
Nach dem Befehl: RR A steht im Akku:
10001011b

Rotiert Akkumulator rechts (Rotate Right)

 Im Akku steht folgender Wert:
11000101b
Nach dem Befehl: RR A steht im Akku:
11100010b

Tauscht Nibbles im Akkumulator

Der Befehl tauscht das obere Nibble mit dem unteren Nibble im Akkumulator.

Im Akkumulator steht folgender Wert:
11000101b
Nach dem Befehl SWAP A steht:
01011100b

DIV <Akku> <Register B>

Dividiert den Akkuinhalt durch das Register B

MUL <Akku> <Register B>

Multipliziert den Akkuinhalt mit dem Register B

MOV A, #01h     - # Steht für eine Zahl, h steht für Hexadezimal
MOV A, B        - Inhalt von B wird ins A kopiert, Inhalt von B bleibt
MOV R1, R0      - Ist nicht möglich! - Muss über A (Akku) kopiert werden
 

Interne RAM

Das interne RAM

Das interne RAM besteht aus 3 x 128 Bytes. Dabei unterscheidet man den untern- und den oberen RAM-Bereich.
Die verschiedenen Bereiche werden unterschiedlich addressiert.

Der untere RAM Bereich

Der untere RAM Bereich kann direkt oder indirekt (über R0 oder R1) angesprochen werden.

Der obere RAM Bereich

Der obere RAM Bereicht ist nur direkt adressierbar.

Special Function Register Bereich (SFR-Bereich)

Dieser Bereich wird direkt adressiert un enthält für das System wichtige Register. Die IO Ports befinden sich ebenfalls in diesem Bereich.

Weg vom Quellcode bis zur Maschinensprache

Von Neumann + Harvard Architektur

Von Neumann Architektur

Bei dieser Architektur sind Code und Daten im selben (64kB grossen) Speicherbereich.

Code und Datenbereiche dürfen sich nicht überschneiden.

Die Harvard Architektur

Bei der Harvard Architektur werden die Code und Daten getrennt gespeichert.

Dabei wird über eine Steuerleitung signalisiert, ob es sich bei der Aktion um Code oder Daten handelt.

Scroll to Top