stundenplanänderung mikrocomputertechnik (mc) praktikum ...€¦ · 1) mikrocomputertechnik (mc)...
Post on 08-Feb-2021
4 Views
Preview:
TRANSCRIPT
-
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
top related