27
MC 08.11.2018 1 / 27 MCT_Vorlesung_02_WS2018.doc Stundenplanänderung 1) Mikrocomputertechnik (MC) Praktikum nur donnerstags (eine Gruppe) 2) Elektronik und Kommunikationstechnik freitags 09:50 13:05 im PC-Pool nur für die Termine „Prof. Pollakowski“ d.h. vom 16.11.2018 14.12.2018

Stundenplanänderung Mikrocomputertechnik (MC) Praktikum ...€¦ · 1) Mikrocomputertechnik (MC) Praktikum nur donnerstags (eine Gruppe) 2) Elektronik und Kommunikationstechnik freitags

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

  • MC 08.11.2018

    1 / 27 MCT_Vorlesung_02_WS2018.doc

    Stundenplanänderung

    1) Mikrocomputertechnik (MC) Praktikum

    nur donnerstags (eine Gruppe)

    2) Elektronik und Kommunikationstechnik

    freitags 09:50 – 13:05 im PC-Pool

    nur für die Termine „Prof. Pollakowski“

    d.h. vom 16.11.2018 – 14.12.2018

  • MC 08.11.2018

    2 / 27 MCT_Vorlesung_02_WS2018.doc

    Bit-Operationen

    Sinn: hardwarenahe Programmierung,

    z.B. einzelne Bits von Schnittstellenbausteinen programmieren

    Bit-Operatoren in C:

    UND-Verknüpfung: „ & “

    ODER-Verknüpfung: „ | “

    Exclusiv-ODER-Verknüpfung: „ ^ “

    Einerkomplement: „ ~ “ (alle Bits invertieren)

    SHIFT-Operator „ > “ (Bits nach rechts schieben)

  • MC 08.11.2018

    3 / 27 MCT_Vorlesung_02_WS2018.doc

    Schaltsymbole und Wertetabellen

    0011

    0101

    0001

    a b c

    a

    bc&

    UND

    0011

    0101

    0111

    a b c

    a

    bc>

    ODER

    0011

    0101

    0110

    a b c

    a

    bc=

    exclusiv-ODER

    01

    10

    a b

    a b1

    Komplement

  • MC 08.11.2018

    4 / 27 MCT_Vorlesung_02_WS2018.doc

    UND-Verknüpfung von zwei Datenbytes

    char zahl1 = 0x0F; entspricht: 00001111

    char zahl2 = 0xAA; entspricht: 10101010

    ergebnis = zahl1 & zahl2; ergibt: 00001010

    ergibt 0A hexadezimal (10 dezimal) d.h. die Verknüpfung erfolgt bitweise

    Anwendung: „Bitmaske“ = Wert eines Bits innerhalb eines Datenworts prüfen

    z.B. Bitmaske für das 3. Bit: 0000 0100 (hexadezimal: 04 Hex)

    C-Programm Beispiel: Prüfen ob das dritte Bit eines Registers 1 ist:

    if (( register & 0x04 ) > 0)

    {

    ... d.h. drittes Bit ist 1 }

    else

    {

    ... d.h. drittes Bit ist 0 }

  • MC 08.11.2018

    5 / 27 MCT_Vorlesung_02_WS2018.doc

    ODER-Verknüpfung von zwei Datenbytes

    char zahl1 = 0x0F; entspricht: 00001111

    char zahl2 = 0xAA; entspricht: 10101010

    ergebnis = zahl1 | zahl2; ergibt: 10101111

    ergibt AF hexadezimal (175 dezimal)

    Anwendung: einzelnes Bit eines Bytes auf 1 setzen, alle anderen unverändert lassen

    z.B. das 3. Bit: 0000 0100 (hexadezimal: 04 Hex)

    register = register | 0x04;

    falls Inhalt des Registers

    vorher: 0000 0000 nachher: 0000 0100

    vorher: 0000 1111 nachher: 0000 1111

    vorher: 0000 0100 nachher: 0000 0100

  • MC 08.11.2018

    6 / 27 MCT_Vorlesung_02_WS2018.doc

    Exklusiv-ODER-Verknüpfung von zwei Datenbytes

    char zahl1 = 0x0F; entspricht: 00001111

    char zahl2 = 0xAA; entspricht: 10101010

    ergebnis = zahl1 ^ zahl2; ergibt: 10100101

    ergibt A5 hexadezimal (165 dezimal)

    Anwendung: einzelne Bits eines Bytes invertieren, alle anderen unverändert lassen

    z.B. die unteren 4 Bit eines Bytes: 0000 1111 (hexadezimal: 0F Hex)

    register = register ^ 0x0F;

    falls Inhalt des Registers

    vorher: 0000 0000 nachher: 0000 1111

    vorher: 0000 1111 nachher: 0000 0000

    vorher: 0000 0100 nachher: 0000 1011

  • MC 08.11.2018

    7 / 27 MCT_Vorlesung_02_WS2018.doc

    Einerkomplement

    char zahl1 = 0x0F; entspricht: 00001111

    ergebnis = ~ zahl1; ergibt: 11110000

    ergibt F0 hexadezimal (240 dezimal)

    Anwendung: einzelnes Bit eines Bytes auf invertieren

    ~register;

    falls Inhalt des Registers

    vorher: 0000 0000 nachher: 1111 1111

    vorher: 0000 1111 nachher: 1111 0000

    vorher: 0000 0100 nachher: 1111 1011

  • MC 08.11.2018

    8 / 27 MCT_Vorlesung_02_WS2018.doc

    Shift-Operation allgemein:

    ergebnis = variable

  • MC 08.11.2018

    9 / 27 MCT_Vorlesung_02_WS2018.doc

    Anwendungen der Shift-Operation

    links - SHIFT ( n) = Division durch 2n

    Beispiel:

    ergebnis = 0x08 >> 2 (n = 2)

    ergibt: 02 hexadezimal = 2 dezimal = 0000 0010 binär

  • MC 08.11.2018

    10 / 27 MCT_Vorlesung_02_WS2018.doc

    Zusammenfassung: Bitoperationen

    Ziel: Bitweise Veränderung von Speicherstellen

    & = UND Operator

    | = ODER Operator

    ^ = exclusiv-ODER Operator

    ~ = Komplement-Operator

    > SHIFT Operatoren (verschieben)

    wichtig:

    nicht mit logischem UND Operator &&

    bzw logischem ODER Operator || verwechseln !

  • MC 08.11.2018

    11 / 27 MCT_Vorlesung_02_WS2018.doc

    Verwendung von Bitmasken #include

    #define LED0 0xFE

    #define LED1 0xFD

    #define LED2 0xFB

    #define LED3 0xF7 usw…

    void main(void) {

    while (1) /* Endlosschleife */ {

    P1 = LED0; /* LED 0 einschalten */ }

    }

  • MC 08.11.2018

    12 / 27 MCT_Vorlesung_02_WS2018.doc

    Übung: Bitmasken verwenden und verknüpfen

    #define LED0 0xFE

    #define LED1 0xFD

    #define LED2 0xFB

    P1 = LED0 & LED2; /* = LED 0 und LED2 einschalten */

    P1 = P1 & LED2; /* = */

    P1 = P1 | ~LED2; /* = */

    P1 = LED0 | LED2; /* = */

    P1 = P1 & 0xFF; /* = */

    P1 = ~(~P0 & 0x0F); /* = */

  • MC 08.11.2018

    13 / 27 MCT_Vorlesung_02_WS2018.doc

    Bitoperationen

    Einige Bits im 8051 sind bitadressierbar (haben eine individuelle Adresse)

    → Der C51-Compiler kennt den Datentyp “Bit”

    für Port-Bits gibt es das Schlüsselwort sbit (= Special Function Register Bit)

    Beispiel: sbit LED0 = P1^0;

    LED0 = 0; …schaltet die LED ein

    LED0 = 1; …schaltet die LED aus

    Diese Zeile deklariert die Variable LED0 als Bitvariable an der Bitposition 0 des Port 1

    Analog: sbit TASTE1 = P0^0;

    Deklaration der Variablen TASTE1 als Bitvariable an der Bitposition 0 des Port 0

    if (TASTE1 == 0) … fragt den Tastenzustand ab

    oder: if (!TASTE1) … ist kürzer…

    Special Function Register

    = siehe später

    Special Function Register

    = siehe später

  • MC 08.11.2018

    14 / 27 MCT_Vorlesung_02_WS2018.doc

    Bitoperationen - Anwendung

    Eine LED in Abhängigkeit von einer Taste ein und ausschalten:

    #include

    sbit LED0 = P1^0;

    sbit TASTE1 = P0^0;

    void main(void)

    {

    while (1) /* Endlosschleife */ {

    if (TASTE1 == 0) /* Tastenabfrage*/ {

    LED0 = 0; /* LED 0 einschalten */ }

    else

    {

    LED0 = 1; /* LED 0 ausschalten */ }

    }

    }

  • MC 08.11.2018

    15 / 27 MCT_Vorlesung_02_WS2018.doc

    Übung (1)

    Aufgabe 1: Speichern Sie das Programm in einer Datei, übersetzen Sie es und testen Sie es.

    #include

    sbit LED0 = P1^0;

    sbit TASTE1 = P0^0;

    void main(void)

    {

    while (1) /* Endlosschleife */

    {

    if (TASTE1 == 0) /* Tastenabfrage*/

    {

    LED0 = 0; /* LED 0 einschalten */

    }

    else

    {

    LED0 = 1; /* LED 0 ausschalten */

    }

    }

    }

    Welche Wirkung hat dieses Programm? Beobachten Sie dabei den Zustand der Leuchtdioden.

    Verändern Sie den Zustand von Port 0, indem Sie die Taste 1 drücken.

  • MC 08.11.2018

    16 / 27 MCT_Vorlesung_02_WS2018.doc

    Übung (2)

    Aufgabe 2: Schreiben Sie ein Programm, das den Zustand der Taste 1 abfragt. Solange diese Tas-

    te gedrückt ist, sollen die Leuchtdioden 0 bis 3 aufleuchten. Wenn die Taste nicht gedrückt wird,

    sollen die Leuchtdioden 4 bis 7 leuchten.

    Aufgabe 3: Schreiben Sie ein Programm, das den Zustand aller Tasten abfragt. Solange Taste 1

    gedrückt ist, soll die Leuchtdiode 0 aufleuchten, wenn Taste 2 gedrückt ist, soll die Leuchtdiode 1

    aufleuchten usw.

    Hinweise: Bit = 0 LED leuchtet Taste gedrückt Bit = 0

    P1.0 → LED 0 P0.0 → Taste 1

    P1.1 → LED 1 P0.1 → Taste 2

    P1.2 → LED 2 P0.2 → Taste 3

    P1.3 → LED 3 P0.3 → Taste 4

    P1.4 → LED 4

    P1.5 → LED 5

    P1.6 → LED 6

    P1.7 → LED 7

  • MC 08.11.2018

    17 / 27 MCT_Vorlesung_02_WS2018.doc

    Komponenten eines Mikrocontrollers

    - Zentraleinheit: CPU (Central Processing Unit): 4, 8, 16 oder 32 Bit Datenwortbreite

    - Arbeitsspeicher: RAM (Random Access Memory = Speicher mit wahlfreiem Zugriff)

    intern: auf dem Chip integriert

    extern: zusätzlicher Chip anschließbar

    - Programmspeicher: ROM (Read Only Memory = Nur-Lese Speicher)

    ROM: bei Fertigung programmiert ( embedded controller)

    EEPROM: electrically erasable programmable ROM (löschbar)

    - Ein/Ausgabe Schaltungen: Ports - parallele Ports (digital)

    - serielle Schnittstellen

    - USB Schnittstelle

    - Zeitgeber/Zähler: Timer

  • MC 08.11.2018

    18 / 27 MCT_Vorlesung_02_WS2018.doc

    Blockdiagramm des AT89C5131

    Quelle: Datenblatt des AT89C5131

    Die mit (1) und (2)

    gekennzeichneten

    Anschlüsse stehen nicht

    gleichzeitig zur

    Verfügung

  • MC 08.11.2018

    19 / 27 MCT_Vorlesung_02_WS2018.doc

    Pinbelegung des AT89C5131 im PLCC-Gehäuse

    PLCC =

    Plastic Leaded

    Chip Carrier

    Ist eine mögliche

    Gehäuseform

    Sie hat 52 Pins

    (= Anschlüsse)

    Quelle: Datenblatt des AT89C5131

    Einige Pins sind

    mehrfach belegt.

    Beispiel: Pin 20

    Entweder P3.0

    (digitaler Ein/Ausgang)

    oder RxD

    (serielle Schnittstelle)

  • MC 08.11.2018

    20 / 27 MCT_Vorlesung_02_WS2018.doc

    Funktion einiger wichtiger Anschlüsse siehe: Datenblatt

    - Spannungsversorgung (Pins V..)

    - Quarz-Anschluß (XTAL...)

    - Reset-Leitung (RST) (Negation bedeutet: 0 V ist logisch 1)

    - Steuerleitungen für externen Speicher (EA, ALE, PSEN) (EA = External Address, ALE = Address Latch Enable , PSEN = Programm Store ENable)

    - Port Pins (P1.4 = Bit 4 von Port 1): je 8 Pin pro Port

    teilweise mit vordefinierten Bedeutungen

    z.B.: P3.0 = RxD (Receive Data der seriellen Schnittstelle)

    - USB-Schnittstelle (D+, D-)

  • MC 08.11.2018

    21 / 27 MCT_Vorlesung_02_WS2018.doc

    Aufbau der Zentraleinheit (CPU)

    besteht aus: - Rechenwerk (ALU = Arithmetic Logical Unit)

    führt Addition, Vergleich, Bitoperation etc. aus

    - Befehlsdekoder

    setzt Befehlscodewort in entspr. Aktion um

    - Ablaufsteuerung

    erzeugt alle notwendigen Takte und Steuersignale

    - Programmadressregister (PC = Programm Counter, „Programmzähler“)

    (16 Bit max 64 KByte Programm)

    enthält die Adresse des aktuellen Befehlscodeworts

    im Programmspeicher

  • MC 08.11.2018

    22 / 27 MCT_Vorlesung_02_WS2018.doc

    Abarbeitung eines Programmes

    1) Ein Befehlscodebyte aus Programmspeicher holen

    Adresse steht im Programm Counter

    ( bei Reset: Program Counter wird auf #0000H gesetzt )

    Programm Counter um 1 erhöhen

    2) Falls Befehl aus mehreren Byte besteht: Schritt 1) wiederholen

    3) Befehl ausführen:

    falls Sprungbefehl: Programm Counter mit neuer Adresse laden

    weiter mit Schritt 1)

    jeder Befehl besteht aus mindestens 1 Byte

    Bearbeitungszeit: mindestens 1 “Maschinenzyklus“

    z.B.: bei 12 MHz Quarz: 1 Zyklus = 1 s (10-6 s)

    bei 48 MHz Quarz: 1 Zyklus = 250 ns (10-9 s)

  • MC 08.11.2018

    23 / 27 MCT_Vorlesung_02_WS2018.doc

    Das „direkt adressierbare“ RAM

    → der AT89C5131 hat mehrere RAM-Bereiche (Random Access Memory)

    → für den Einstieg an einfachsten: das „direkt adressierbare“ RAM

    Aufbau: 256 Byte Speicherplatz

    Adressbereich 00H –FFH

    obere Hälfte = SFR

    (Special Function Register)

    oft mit Hardware verknüpft

    untere Hälfte = Datenspeicher

    (frei programmierbar)

    für „Variablen“, Stack usw.

    H = hexadezimal

    SFR

    Daten- speicher

    128 Byte

    128 Byte

  • MC 08.11.2018

    24 / 27 MCT_Vorlesung_02_WS2018.doc

    Einige Details...

    insgesamt 256 ( = 28) Adressen von 00H bis FFH:

    a) Adressen 80H - FFH (128 Byte) = Register mit

    besonderen Funktionen (SFR = Special Function Register)

    darin sind nicht alle Adressen benutzt

    z.B.: A (Register A), B (Register B)

    P0, P1, ... (Port 0, Port 1, ...)

    b) Adressen 00H - 7FH (128 Byte) = allgemeiner Datenspeicher

    darin: 4 Registerbänke aus je 8 allgemeinen Registern

    z.B.: R0, R1, ... R7

    16 Byte, in denen jedes Bit einzeln addressierbar ist

    = bitadressierbare Register

    Registerbank 0 Registerbank 1 Registerbank 2 Registerbank 3

    Register A

    Port-Register P1

    FFH

    E0H

    90H

    80H 7FH

    18H-1FH 10H-17H 08H-0FH 00H-07H

    frei nutzbares

    internes RAM

    Bereich der

    Special Function

    Register (SFR)

    bitadressierbar 20H-2FH

  • MC 16.04.2015

    25 / 27 MCT_Vorlesung_02_WS2018.doc

    Einige Speicherbereiche und Special Function Register (SFR) des AT89C5131 (Auswahl, unvollständig)

    27 Bit 20 27 Bit 20

    7FH F0H B*

    7EH

    byteadressierbarer

    interner Datenspeicher

    E0H ACC*

    31H D0H PSW*

    30H

    2FH 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H CDH TH2

    2EH 77H 76H 75H 74H 73H 72H 71H 70H CCH TL2

    bitadressierbarer

    interner Datenspeicher C8H T2MOD

    21H 0FH 0EH 0DH 0CH 0BH 0AH 09H 08H C0H P4*

    20H 07H 06H 05H 04H 03H 02H 01H 00H

    1FH Register 7 B0H P3*

    1EH Register 6

    Registerbank 3 A8H EAL EC ET2 ES ET1 EX1 ET0 EX0 IEN0

    *

    19H Register 1 A0H P2*

    18H Register 0

    17H Register 7 9BH BRR TBCK RBCK SPD SRC BDRCON

    16H Register 6 9AH BRL

    Registerbank 2 99H SBUF

    98H SM0 SM1 SM2 REN TB8 RB8 TI RI SCON*

    11H Register 1

    10H Register 0 90H P1*

    0FH Register 7

    0EH Register 6 8DH TH1

    Registerbank 1 8CH TH0

    8BH TL1

    09H Register 1 8AH TL0

    08H Register 0 89H Gate1 C/T1 M11 M10 Gate0 C/T0 M01 M00 TMOD

    07H Register 7 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TCON*

    06H Register 6

    Registerbank 0 83H DPH

    82H DPL

    01H Register 1 81H SP

    00H Register 0 80H P0*

    * diese Register sind bitadressierbar

  • MC 11.10.2018

    26 / 27 MCT_Vorlesung_02_WS2018.doc

    Wichtige Spezialregister

    1) Program Status Word (PSW - Register)

    gibt Auskunft über Ergebnis von Rechenoperationen

    7 Bits (sogennante Flags (Flaggen)) sind benutzt

    z.B.: Überlauf bei Rechenoperation, ...

    2) Stapelzeiger (SP = Stackpointer)

    einige Befehle „stapeln“ Daten zur Zwischenspeicherung

    z.B.: Unterprogrammaufruf: Rücksprungadresse

    SP zeigt auf die nächste freie Stelle des „Datenstapels“

    Stack wächst nach oben, nach Reset: auf 07H gesetzt

    PSW D0H

    CY AC F0 RS1 RS0 OV - P

    SP 81H

    Inhalt bei Reset: 07H

  • MC 11.10.2018

    27 / 27 MCT_Vorlesung_02_WS2018.doc

    3) Externer Datenzeiger, bestehend aus zwei 8-Bit Registern:

    DPTR = Datapointer, 16 Bit

    oder:

    DPH = Datapointer High Byte, 8 Bit

    DPL = Datapointer Low Byte, 8 Bit

    für den Zugriff auf max. 64 kByte externes RAM

    Vorgehensweise (bei Assemblerprogrammierung):

    1.) Adresse in den Datenzeiger laden

    2.) Spezialbefehl ( MOVX ... ) lädt Daten in Register A

    Problem: langsam, daher häufig benötigte Daten im internen RAM ablegen!

    82H DPH

    83H

    bilden zusammen das 16-Bit Register DPTR

    DPL