P ro g ra mm Da te n b u s Ad re s s b u s S p e ic h e r P ro g ra … · 2019. 1. 9. ·...
Transcript of P ro g ra mm Da te n b u s Ad re s s b u s S p e ic h e r P ro g ra … · 2019. 1. 9. ·...
-
MCT 10.01.2019
1 / 22 MCT_Vorlesung_09_WS2018.doc
Speicherarchitekturen
Grundsätzliche Möglichkeiten:
Prozessor
ProgrammundDatenSpeicher
Prozessor
ProgrammSpeicher
Datenbus Adressbus
"Von-Neumann-Architektur"
DatenSpeicher
"Harvard-Architektur"
Oft genügt ein gemeinsamer Programm und Datenspeicher
Signalprozessoren: meist in Harvard-Architektur schneller
-
MCT 10.01.2019
2 / 22 MCT_Vorlesung_09_WS2018.doc
Anschaltung von externem Speicher
Für 64 kByte Speicher: 16 Adreßleitungen und 8 Datenleitungen nötig
Adreß- und Datenleitungen:
Port 0: abwechselnd Adreßleitung 0-7 und Datenleitung 0-7 = Zeitmultiplex
durch Steuerleitung ALE (adress latch enable) Unterscheidung möglich
Port 2: Adreßleitung 8-15
Steuerleitungen:
PSEN (program store enable) = Lesezugriff auf ROM
RD (read) = Lesezugriff auf RAM
WR (write) = Schreibzugriff auf RAM
Frage: Warum gibt es keinen
Schreibzugriff auf das ROM?
-
MCT 10.01.2019
3 / 22 MCT_Vorlesung_09_WS2018.doc
Schaltungsaufbau
P0.0 - P0.7
ALE
PSEN
P2.0 - P2.7
WR
RD
Latch
ROM RAM
OE WR RD80535
Daten- und Adressbus
Adressbus
8 Bit
8 Bit
8 Bit
16 Bit
AT89C5131
-
MCT 10.01.2019
4 / 22 MCT_Vorlesung_09_WS2018.doc
Zugriff auf externen Programmspeicher
internerTakt
ALE
PSEN
Port 0
Port 2
1 us
A8 - A15
A0 - A7
DatenAdressen
Adressen
D0-7
Adressen
A8 - A15
Adressen
A0 - A7
Daten
D0-7
µs Zykluszeit 1µs bei
12 MHz Quarz
Praktikum: 750ns
-
MCT 10.01.2019
5 / 22 MCT_Vorlesung_09_WS2018.doc
Ablauf des Speicherzugriffs
1.) Controller gibt Adressinformation an Port 0 und Port 2 aus
2.) Fallende Flanke von ALE: Adressen 0-7 werden von Adresslatch gespeichert
3.) Sobald PSEN auf 0 geht: ROM gibt Inhalt der adressierten Speicherstelle aus
4.) Nach 2 Taktperioden werden die Daten vom Controller übernommen
pro Maschinenzyklus (1us) werden 2 Byte gelesen
Port 0 schaltet um zwischen Ausgeben (Adressen) und Einlesen (Daten)
Adressen 0-7 werden in Adresslatch zwischengespeichert
ROM Speicher muss Daten schnell genug ausgeben
Controller kann nicht warten (keine „wait-states“)
-
MCT 10.01.2019
6 / 22 MCT_Vorlesung_09_WS2018.doc
Adresslatch
Beispiel: 74LS373 = Transparenter 8 Bit Registerbaustein
LS373
D1
D8
Q1
Q8
Enable
Adress-undDatenbus
ALE
AdressbusA0 - A7
wenn ALE = 5V (high): Ausgang = Eingang (Q1 = D1, ...) = transparent
ALE = 0V (low) Ausgangszustand wird „eingefroren“
-
MCT 10.01.2019
7 / 22 MCT_Vorlesung_09_WS2018.doc
Zeitbedingungen für Speicherbausteine
1.) Lesezugriff auf Programmspeicher
Zeit: Adressen gültig bis Daten einlesen = 302 ns (aus Datenblatt)
PSEN low bis Daten einlesen = 150 ns
ROM muß diese Bedingung einhalten
beachten: Adresslatch verzögert die Adressleitungen um einige ns
2.) Lesezugriff auf Datenspeicher
Zeit: Adressen gültig bis Daten eingelesen = 585 ns
RD low bis Daten einlesen = 252 ns
unterschiedliche Zeitbedingungen für RAM und ROM
-
MCT 10.01.2019
8 / 22 MCT_Vorlesung_09_WS2018.doc
Symbolische Darstellung von Digitalsignalen
Signalform Eingang Ausgang
Muß stabil sein Muß stabil sein
Kann von "1" nach
"0"w echselnKann von "1" nach
"0"w echseln
Kann von "0" nach
"1"w echselnKann von "0" nach
"1"w echseln
nicht beachtenJeder Wechsel erlaubt
WechseltZustand nicht bekannt
macht keinenSinn
Mittellinie bedeutet " hochohmiger Zustand"
( J. Walter, Mikrocomputertechnik mit der 8051-Controller-Familie)
-
MCT 10.01.2019
9 / 22 MCT_Vorlesung_09_WS2018.doc
Timing: Lesezugriff Programmspeicher
ALE
PSEN
Port 0
Port 2
A0-A7
A8-A15
Instr. N A0-A7
tLHLL
tAVLL tPLPH
tAZPL
tLLAX
tLLPL
tPLIV
tAVIV
tPXIX
tPXIZ
tPXAV
tLLIV
J. Walter, Mikrocomputertechnik mit der 8051-Controller-Familie)
-
MCT 10.01.2019
10 / 22 MCT_Vorlesung_09_WS2018.doc
Zusammenstellung: Datentypen des C-51-Compilers
Datentyp Größe Verwendung
bit 1 Bit für Bit-Variablen
sbit 1 Bit für Bits in "special function registers", z.B. Port-Bits
(signed) char 8 Bit mit Vorzeichen (Wertebereich -128 bis +127)
unsigned char 8 Bit ohne Vorzeichen (Wertebereich 0 bis 255)
sfr 8 Bit 1-Byte-Variable in einem "special function register"
(signed) int 16 Bit mit Vorzeichen (ca. -32000 bis ca. +32000)
unsigned int 16 Bit ohne Vorzeichen (0 bis ca. 64000)
sfr 16 16 Bit 2-Byte-Variable im "special function register"-Bereich
(signed) long 32 Bit mit Vorzeichen (ca. –2 · 10+9 bis 2 · 10+9)
unsigned long 32 Bit ohne Vorzeichen (0 bis ca. 4 10+9)
float 32 Bit ca. 1,2 · 10-38 bis 3,4 · 10+38
pointer 8 - 24 Bit für Addressen von Variablen
-
MCT 10.01.2019
11 / 22 MCT_Vorlesung_09_WS2018.doc
Auszug aus der Header-Datei reg5131.h
/*--------------------------------------------------------------
REG5131.H
---------------------------------------------------------------*/
...
/* BYTE Register */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr P4 = 0xE8;
...
/* BIT Register */
...
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
...
damit stehen diese Variablen für die C-Programmierung zur Verfügung
Bekanntgabe der Adressen der
Special Function Register
Bekanntgabe der Adressen der
bitadressierbaren Bits
in den Special Function Registern
-
MCT 10.01.2019
12 / 22 MCT_Vorlesung_09_WS2018.doc
Wiederholung: Timer-Programmierung in C
Aufgabe: LED 1 mit 5 Hz (d.h. Puls-Dauer TP = 100ms) blinken lassen
#include
sbit LED1 = P1^0; /* Bit 0 von Port P1 */
#define TH0_Startwert 0xfc /* 65536 - 1000 ( = 1 ms) */
#define TL0_Startwert 0x18 /* ergibt fc18 als Startwert */
/* Hauptprogramm */
void main(void)
{
char zaehler;
TMOD = 0x01; /* Timer 0 als 16 Bit Timer initialisieren */ TH0 = TH0_Startwert;
TL0 = TL0_Startwert;
t
100 ms
Algorithmus: programmiere einen 1ms Timer, zähle die
Timerdurchläufe, bei Durchlauf 100: LED-Zustand
invertieren und Zähler auf 0 setzen
P1.0
-
MCT 10.01.2019
13 / 22 MCT_Vorlesung_09_WS2018.doc
zaehler = 0; /* Zähler für die Schleifendurchläufe */
TF0 = 0; /* Timer 0 Überlauf-Flag löschen */
TR0 = 1; /* Timer 0 Run-Bit setzen (Timer starten) */
while (1) /* Endlosschleife */ {
if (TF0 == 1) /* d.h.: Timer abgelaufen */ {
TF0 = 0;
TH0 = TH0_Startwert;
TL0 = TL0_Startwert;
zaehler++;
if (zaehler > 100) /* 100 ms */ {
LED1 = ~LED1; /* LED-Bit invertieren */ zaehler = 0; }
}
}
}
-
MCT 10.01.2019
14 / 22 MCT_Vorlesung_09_WS2018.doc
Übung: Dimmer
Aufgabe 1: Schreiben Sie ein Programm in C, das die LED mit einer Frequenz von 1 Hz ein- und
ausschaltet, mit einem Tastverhältnis von 1:9 (10% eingeschaltet, 90% ausgeschaltet)
Lösungshinweis: Bei Zählerstand 100 ausschalten, bei Zählerstand 1000 ausschalten
Aufgabe 2: Erhöhen Sie die Umschaltfrequenz so weit, dass das Auge den Umschaltvorgang nicht
mehr erkennen kann (Hinweis: mindestens 25 Hz).
Aufgabe 3: Programmieren Sie einen „Dimmer“, d.h. eine Möglichkeit, die LED-Helligkeit im
Bereich von 0 bis 100% einzustellen. Sie könnten die Helligkeit per Tastenabfrage am
Experimentierboard einstellen oder per Serieller Schnittstelle übertragen.
Zusatzaufgabe: Stellen Sie die Helligkeit als Prozentangabe auf dem LCD-Display dar.
t
100 ms
900 ms
P1.0
-
MCT 10.01.2019
15 / 22 MCT_Vorlesung_09_WS2018.doc
Taktversorgung des AT89C5131
Ansteuerung durch Quarz
Externes Taktsignal
Quarz (12 MHz)
22 pF
22 pF
XTAL1
XTAL2
80535
XTAL1
XTAL2
80535+5V
externesTaktsignal
wichtig: kurze Verbindungsleitungen
sinnvoll: Taktsignal durch vorgeschaltetes
Gatter regenerieren
Taktanschaltung für andere 8051-Varianten
anders als beim AT89C5131 !
27pF
27pF
Quarz (16MHz) AT89C5131 AT89C5131
-
MCT 10.01.2019
16 / 22 MCT_Vorlesung_09_WS2018.doc
Erzeugung des Reset-Signals
Zwei Resetquellen: a) Einschalten der Versorgungsspannung
b) Reset-Taste
Reset-Eingang ist „aktiv-low“ 0 V, mindestens 2 s lang unter High-Pegel
2,2 µF
(intern)
-
MCT 10.01.2019
17 / 22 MCT_Vorlesung_09_WS2018.doc
Spannungsversorgung
Beispiel:
Spannungs-regler 7805+
1uF
+
1uF 100nF
Induktivität(Ferritperle)
KerkoElko
Eingang:8..12 V =
Ausgang:
5 V =
Ferritperle: verhindert Rückwirkungen der Mikrocontrollerschaltung
Versorgungsspannung
+5V einige
mV
Schaltvorgang im 80535
Elko (Elektrolytkondensator): schwächt größere, langsame Schwankungen ab.
Kerko (Keramischer Kondensator): schwächt schnelle Spannungsschwankungen ab.
Schaltvorgang im Mikrocontroller
-
MCT 10.01.2019
18 / 22 MCT_Vorlesung_09_WS2018.doc
Aufbau der I/O Ports
Latch = "D-Flipflop"
= Speicher für ein Port-Bit
D = Daten-Eingang
Q = Speicher-Ausgang
C = Takt-Eingang (Clock)
Zustand von D wird ge-
speichert, wenn Taktsignal
aktiviert C wird.
Port-Latch speichert den Zustand des Port-Bits nach dem Schreiben
gelesen wird entweder - Inhalt des Latch
oder - Zustand des Port-Pin
abhängig Flipflop-Zustand !
C
Q
Q
D
Port-Latch
Schreib-
signal für
das Latch
Interne
Busleitung
Latch-Inhalt lesen
Pin-Zustand lesen
Ausgangs-
treiber
-
MCT 10.01.2019
19 / 22 MCT_Vorlesung_09_WS2018.doc
Schematischer Aufbau von Port 1,3,4 und 5
Prinzip: N-Kanal FET (Feldeffekt-Transistor) mit internem Pull-Up-Widerstand
Schreiben: Datenbit = 0 Q-Ausgang ist 1 Transistor leitet Port-Pin = low
Datenbit = 1 Q-Ausgang ist 0 Transistor sperrt Port-Pin = high
Lesen: Transistor V1 muß sperren, sonst wird immer 0 gelesen
C
Q
Q
D
Port-Latch
Schreib-
signal für
das Latch
Interne
Busleitung
Latch-Inhalt lesen
Pin-Zustand lesen
Port-
pin
UB (5 Volt)
Interner
Pull-up
Widerstand
Feldeffekt
Transistor
(FET)
-
MCT 10.01.2019
20 / 22 MCT_Vorlesung_09_WS2018.doc
Schematischer Aufbau von Port 2
Prinzip: wie Port 1,3,4,5 aber zusätzlich Adreßausgabe (obere 8 Bit der Adresse)
Umschalter: - legt entweder Adresse oder Port-Latch auf den Port-Pin
- Zeitmultiplex: von der Ablaufsteuerung angesteuert (automatisch)
C
Q
Q
D
Port-Latch
Schreib-
signal für
das Latch
Interne
Busleitung
Latch-Inhalt lesen
Pin-Zustand lesen
Port-
pin
UB (5 Volt)
Umschalter
Adress-Bit
1 Inverter
-
MCT 10.01.2019
21 / 22 MCT_Vorlesung_09_WS2018.doc
Schematischer Aufbau von Port 0
Prinzip: „Open-Drain“ Schaltung ( = Drain-Strom fließt nach außen)
wegen zweitem Transistor: auch High-Pegel mit niedrigem Widerstand (hoher Strom)
Zeitmultiplex: Untere 8 Bit der Adresse, Daten oder Zustand des Port-Latch
wichtig: Bei Ausgabe von Latch-Zustand „1“: beide Transistoren sperren
= Pegel am Pin ist undefiniert, muß durch externe Schaltung sichergestellt werden !
C
Q
Q
D
Port-Latch
Schreib-
signal für
das Latch
Interne
Busleitung
Latch-Inhalt lesen
Pin-Zustand lesen
Port-
pin
UB (5 Volt)
Umschalter
Adress-Bit
1
Schalter
-
MCT 10.01.2019
22 / 22 MCT_Vorlesung_09_WS2018.doc
Grenzwerte der Strombelastung
Port 1 - 5: Pull-Up Widerstand ca. 10 kOhm - 40 kOhm
Grenzwert für Strom: IQH = - 80 A ( high-Zustand )
IQL = 1,6 mA ( low-Zustand )
Grenzwert für Spannung: UH = min 2,4 V ( high Zustand )
UL = max 0,45 V ( low-Zustand )
Port 0:
Grenzwert für Strom: IQH = - 400 A ( high-Zustand )
IQL = 3,2 mA ( low-Zustand )
Beispiel: LED direkt an Port anschalten
a) LED muß im low-Zustand des Ports leuchten (höherer Strom)
b) Vorwiderstand muss so groß sein, daß IQL nicht überschritten wird