1 Einführung in die Informationstechnik

1 Einführung in die Informationstechnik
Informationstechnik I
Dieses Skript soll das Mitschreiben bei der Vorlesung
erleichtern und konzentrierte Mitarbeit ermöglichen.
Es kann kein Lehrbuch ersetzen!
Prof. Dipl.-Ing Gerhard Schaub
Lehrbuchempfehlung zur Vorlesungsbegleitung:
Küveler/Schwoch: Arbeitsbuch Informatik,
Vieweg-Verlag
Küveler/Schwoch: Informatik für Ingenieure,
Neuauflage d. Arbeitsbuchs
Tietze/Schenk:
Halbleiter-Schaltungstechnik, Springer-Verlag
Inhalt
1
Einführung in die Informationstechnik
4
1.1 Historische Entwicklung der Datenverarbeitung
1.1.1
Historische Entwicklung des Rechnens
1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.4
1.1.2
1.1.3
1.1.4
4
Antike
Mittelalter: Rechnen mit römischen Ziffern
Dezimalsystem: Fortschritt aus Indien und Arabien
Algorithmen
4
4
4
4
Zahldarstellung im Digitalrechner
1.1.2.1
1.1.2.2
1.1.2.3
1.1.2.4
1.1.2.5
1.1.2.6
1.1.2.7
1.1.2.8
1.1.2.9
5
Physikalische Repräsentation von Zahlen im Digitalrechner
Dual- und Hexadezimal-Zahlen
Bereich der darstellbaren Dual- und Hexadezimalzahlen
Umrechnung von Dual und Hexadezimal in Dezimal
Umrechnung von Dezimal in Dual und Hexadezimal
Addition von Dual- und Hexadezimalzahlen
Ringdarstellung von ganzen Zahlen mit Vorzeichen
Subtraktion von Dualzahlen
Darstellung von gebrochenen Zahlen
5
5
6
6
6
7
7
7
8
Zeichendarstellung im Computer
Von A wie Abakus bis Z wie Zuse
8
8
1.2 Komponenten eines Computersystems
1.2.1
1.2.2
1.2.3
1.2.4
9
System des Personal Computer (PC)
Begriffserklärungen
Speicherarten (Halbleiterspeicher und Massenspeicher)
Verlauf der Entwicklung bei Geräten mit Controllern
1.3 DOS (Disk Operating System)
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.3.6
2
11
11
12
12
12
13
Begriffserklärungen
Unterscheidung von Steuerungen durch Informationsdarstellung
Unterscheidung von Steuerungen durch Signalverarbeitung
Unterscheidung von Steuerungen durch Programmverwirklichung
Kombinatorische Logik
13
13
14
14
14
15
2.1 Verknüpfungselemente (Gatter)
2.2 Regeln der Schaltalgebra (Bool´sche Algebra)
2.2.1
9
9
10
10
11
Aufgaben von DOS
Massenspeicher
Dateien und Verzeichnisse
Benutzerschnittstelle
FH-Netz
DOS-Kommandos
1.4 Einsatz der Computertechnik zur Steuerung und Regelung
1.4.1
1.4.2
1.4.3
1.4.4
4
Reihenfolge der Operationen
15
17
17
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
1
2.2.2
2.2.3
2.2.4
2.2.5
Kommutatives Gesetz (Vertauschen von Variablen)
Distributives Gesetz (Ein- und Ausklammern)
Assoziatives Gesetz (Teilen und zusammenfassen)
Rechnen mit nur einer Variablen
2.3 Entwurf von Logikschaltungen
2.3.1
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.3.10
2.3.11
2.3.12
18
Beschreibung der Aufgabe
Signalzuordnung
Funktionstabelle (Logiktabelle, Zustandstabelle oder Wahrheitstabelle)
Schaltfunktion in ODER-Normalform oder disjunktiver Normalform
Funktionsplan
Optimierung mit dem KV-Diagramm
Regeln für den Entwurf von KV-Diagrammen
KV-Diagramme für 2 - 6 Eingangsvariable
Einsatzgebiete für verbindungsprogrammierte Logikschaltungen
Technische Realisierung durch programmierbare Bausteine
Einführung in LOG_IC
Pegeldefinition
2.4 Beispiele
2.4.1
2.4.2
2.4.3
3
22
23
24
26
3.1 Astabile Kippschaltung (Multivibrator, Taktgeber)
3.2 Monostabile Kippschaltung (Monoflop)
3.3 Bistabile Kippschaltungen
Basis-Flipflop - Definition nach DIN
RS-Flipflop (zustandsgesteuert - die Spannungshöhe wirkt)
JK-Flipflop (flankengesteuert - die Spannungsänderung wirkt)
T-Flipflop (Trigger-Flipflop)
D-Flipflop (Daten-Flipflop)
Master-Slave-Flipflop (Zweispeicher-Flipflop)
Realisierung der Kippschaltungen mit Transistoren
3.4 Zähler und Register
3.4.1
3.4.2
3.4.3
4
26
26
26
26
27
27
28
28
28
29
30
Binärzähler (4-bit)
Schreib-Lese-Register (4 bit)
Schieberegister (4bit)
30
31
31
3.5 Anwendungsbeispiel aus der Inkrementaltechnik
3.5.1
3.5.2
3.5.3
3.5.4
3.5.5
18
18
18
18
19
19
20
20
21
21
21
21
22
Vereinfachung eines gegebenen Funktionsplans
7-Segment-Decoder für Dezimalziffern
Adreßdecodierung
Kippschaltungen
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
3.3.7
17
17
17
17
Prinzip
Simulation der Signale
Auswerteschaltung mit Richtungserkennung
Verdoppelung der Auflösung
Anwendungsgebiete
32
32
32
33
33
33
Programmierung in Assembler
34
4.1 Der Personal Computer (PC) intern
34
4.1.1
4.1.2
4.1.3
4.1.4
4.1.5
4.1.6
4.1.7
Register-Architektur des 80x86
Befehlssatz des 80x86 (Auswahl)
Adressierung im Real Mode (unter DOS)
Adressierung im Protected Mode (unter Windows ab 80286)
Memory Map des PC unter DOS
Nutzung des PC-Arbeitsspeichers im Real- und Protected Mode
Hardware für Programmierübungen
4.2 Programmerstellung
4.2.1
4.2.2
4.2.3
4.2.4
4.2.5
39
Basis für Programmierübungen
Format einer Programmzeile
Programmablauf
Programmbeispiel (I1_bsp1.asm und I1_bsp1.pas)
Verzögerungsschleife
4.3 Erklärung einiger Befehle
4.3.1
4.3.2
34
35
36
36
37
37
38
39
39
39
40
41
42
Logik-Befehle (Bool´scher Prozessor)
Rotations-Befehle
42
42
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
2
4.3.3
4.3.4
CMP - Befehl
Stackbefehle (nur 16 bit)
44
44
4.4 Programmbeispiele
4.4.1
4.4.2
4.4.3
4.4.4
4.4.5
4.4.6
5
45
UND - Verknüpfung (I1_bsp2.asm und I1_bsp2.pas)
Heizungssteuerung, siehe Abschnitt 2.3 (I1_bsp3.asm u. I1_bsp3.pas)
Wachsendes Leuchtband (I1_bsp4.asm und I1_bsp4.pas)
Wortaddition mit Doppelwort-Ergebnis (32 bit) (digital)
Umlaufender Punkt an der LED-Matrix (I1_bsp5.asm und I1_bsp5.pas)
Weitere Programmbeispiele im Netz unter s:\semester\schaub\ueb_asm
Programmierung in Pascal
50
5.1 Zielsetzung
5.2 Programm-Struktur in Pascal
50
50
5.2.1
5.2.2
5.2.3
Programm-Beispiel ´Schalter.pas´
Programm-Beispiel ´Spalten.pas´
Weitere Beispielprogramme
50
51
51
5.3 Einige Variablentypen
5.3.1
5.3.2
5.3.3
5.3.4
5.3.5
52
Ganze Zahlen
Boolean
Char
String
Array
52
52
52
52
52
5.4 Einige Ausdrücke
5.4.1
5.4.2
53
Rangfolge der Operatoren
Die wichtigsten Operatoren
53
53
5.5 Kontrollstrukturen
5.5.1
5.5.2
5.5.3
5.5.4
5.5.5
6
45
46
47
47
48
49
54
repeat [...] until ...
while ... do [...]
for ... do [...]
Anweisung if ... then ... else
Anweisung case ... of ... else ...
54
54
55
55
55
Speicherprogrammierte Steuerung (SPS)
6.1 Aufbau des Übungsgeräts (S5 - 100U)
6.2 Schrittweiser (sequentieller) Programmabl. im Programmbaust.
6.3 Programmierung in der Steuerungssprache STEP5
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
56
56
56
57
3
1 Einführung in die Informationstechnik
1.1 Historische Entwicklung der Datenverarbeitung
1.1.1 Historische Entwicklung des Rechnens
1.1.1.1 Antike
Ägypten und Mesopotamien:
Die jährlichen Überschwemmungen in den großen Flußtälern führten zur Entwicklung
der Geometrie zur Landvermessung. Es mußte ein Grundbuch geführt werden, das
jedem Bauern ´seine´ Ackerfläche garantierte, unabhängig von den Verlagerungen
des Flußufers. Dazu brauchte man Regeln zur Flächenberechnung. Buchführung
und Rechnung wurden später durch die Kaufleute weiter verbessert.
Die Ägypter verfügten über ein einfaches Zahlensystem mit Zeichen für Einer,
Zehner und Hunderter. Jedes Zeichen wurde sooft wiederholt, bis die gewünschte
Zahl abgezählt war (23 wäre ZZ III, wenn Z einen Zehner und I einen Einer
repräsentiert).
1.1.1.2 Mittelalter: Rechnen mit römischen Ziffern
Das Rechnen mit römischen Ziffern ist gegenüber der ägyptischen Zahlendarstellung
eher ein Rückschritt. Wie schwierig Berechnungen damit waren, zeigt sich an der
Tatsache, daß im 16. Jahrhundert die Universität Altdorf bei Nürnberg um Studenten
mit dem Hinweis warb, daß man hier sogar Dividieren lehre, was sonst nur an
italienischen Universitäten gelehrt werde!
1.1.1.3 Dezimalsystem: Fortschritt aus Indien und Arabien
Einen sprunghaften Fortschritt brachte die dezimale Stellenschreibweise durch die
Einführung einer speziellen Ziffer für die Null (in Indien um 600, in Arabien um 800 n.
Chr.).
Darstellung des Werts aus Potenzen der Basis 10:
1540710
4
3
2
1
= 1 x 10 + 5 x 10 + 4 x 10 + 0 x 10 + 7 x 10
0
Erst damit sind die heutigen effektiven Rechenverfahren möglich geworden.
1.1.1.4 Algorithmen
Übliche Rechenverfahren sind Algorithmen, d.h. sie führen nach endlich vielen
Schritten mit Sicherheit zu einem Ergebnis. Grundlage für jedes sinnvolle Programm
muß ein Algorithmus sein, denn sonst bestünde die Gefahr, daß der Computer nie
mit der Lösung fertig wird. Ein zentrales Problemfeld der modernen Informatik ist, ob
bestimmte Probleme algorithmisch lösbar sind bzw. ob und wie man überhaupt
entscheiden kann, ob sie lösbar sind.
Selbstverständlich sind unsere Übungsaufgaben algorithmisch lösbar!
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
4
1.1.2 Zahldarstellung im Digitalrechner
1.1.2.1 Physikalische Repräsentation von Zahlen im Digitalrechner
Die Basis der physikalischen Repräsentation von Zahlen im Digitalrechner ist das
Dualsystem mit den Ziffern 0 und 1 (2 Zustände), repräsentiert durch Spannung ein /
aus, Strom ein / aus bzw. wechselnde Stromrichtung. Diese elektrischen Signale
werden in Flipflops gespeichert und über Leitungen übertragen. Bei magnetischen
Datenträgern steckt die Information in der Magnetisierungsrichtung.
Zur Verarbeitung von Zahlen werden mehrere Flip-Flops zu Registern kombiniert.
Sie speichern die Operanden und die Ergebnisse von Operationen. Die Operationen
laufen in logischen Schaltungen ("Gatter") ab, die nach den Regeln der SchaltAlgebra für die jeweilige Aufgabe entworfen werden. Ein Addierer besteht z.B. aus 3
Registern für zwei Summanden und die Summe sowie einer logischen Schaltung,
die Bit für Bit summiert und die Überträge zwischen den Stellen verarbeitet.
Allgemein kann man sagen, daß die CPU aus einer Vielzahl komplexer Logikschaltungen besteht, deren Einsatz vom Programm gesteuert wird.
Eine Dualstelle heißt Bit, je 8 Bit werden zu einem Byte zusammengefaßt, die
Kombination von 2 Bytes (16 Bit) nennt man Wort.
Der technische Fortschritt der Digitaltechnik beruht auf ihrer prinzipbedingt geringen
Fehlerrate und auf der extremen Miniaturisierung der Bauelemente. Komplexe
Mikroprozessoren lassen sich auf einem Chip unterbringen.
1.1.2.2 Dual- und Hexadezimal-Zahlen
Wählen wir die Basis 2, so erhalten wir Dualzahlen, z.B.
101012 = 10101b = 1 ⋅ 24 + 0 ⋅ 23 + 1 ⋅ 22 + 0 ⋅ 21 + 1 ⋅ 20
Hexadezimal-Zahlen besitzen die Basis 16, wobei die "Ziffern" 10 bis 15 in die
Buchstaben A bis F übersetzt werden, um einstellig zu bleiben:
Dezimal
0
1
2
3
4
5
6
7
Hexadezimal
0
1
2
3
4
5
6
7
Dual
0000
0001
0010
0011
0100
0101
0110
0111
Dezimal
8
9
10
11
12
13
14
15
Hexadezimal
8
9
A
B
C
D
E
F
Dual
1000
1001
1010
1011
1100
1101
1110
1111
Beispiel: 4ACF316 = 4ACF3h = 4 ⋅16 + A ⋅16 + C ⋅16 + F ⋅16 + 3 ⋅16
4
3
2
1
0
= 4 ⋅16 + 10 ⋅16 + 12 ⋅16 + 15 ⋅16 + 3 ⋅16
4
3
2
1
0
Die Hexadezimalzahlen können auch als Kurzschreibweise der Binärzahlen
aufgefaßt werden, wobei 4 Binärstellen (4 Bit) zu 1 Hexadezimalstelle zusammengefaßt werden.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
5
1.1.2.3 Bereich der darstellbaren Dual- und Hexadezimalzahlen
Ist B die Basis und n die Zahl der Stellen, so ist die kleinste Ziffer immer 0 und die
n
größte Ziffer immer B-1. In einem solchen Zahlensystem kann man B Zustände
n
abzählen, der Zahlenbereich ist damit 0 ... B -1, solange wir kein Vorzeichen
zulassen.
Beispiele der größten darstellbaren Zahlen für n = 4 Stellen:
Basis B = 2:
24 - 1 = 1510
Basis B = 10:
104 - 1 = 999910
Basis B = 16:
164 - 1 = 6553510
Wie viele Dualstellen repräsentiert also ein Kilometerzähler im PKW, der bis 999999
km registrieren kann?
Für Dualzahlen gilt:
Bits Bytes
Zustände
4
Nibble
16
8
1
256
16
2
65536
32
4
4294967296
ohne Vorzeichen
0 ... 15
0 ... 255
0 ... 65535
0 ... 4294967295
mit Vorzeichen
-8 ... +7
-128 ... +127
-32768 ... +32767
-2147483648 ... +2147483647
Das Vorzeichen muß natürlich mit abgespeichert werden, es "kostet" uns 1 Bit
Speicherplatz, weil es genau zwei Zustände einnehmen kann.
Damit ein Speicherinhalt interpretiert werden kann, muß durch eine Typdefinition
vorher festgelegt sein, ob ein Vorzeichen enthalten ist oder nicht.
In ein Byte passen genau 2 HEX-Ziffern!
1.1.2.4 Umrechnung von Dual und Hexadezimal in Dezimal
Auf der formalen Zahldarstellung als Summe von Produkten aus Ziffern und
Potenzen beruht das Horner-Schema:
Zahlenwert = ( ... ((Zn-1 ⋅ B + Zn-2) ⋅ B + Zn-3) ⋅ B ... + Z1) ⋅ B + Z0
Dualzahlen kann man im Kopf umrechnen, bei Hexadezimalzahlen empfiehlt sich
dagegen die Verwendung eines Taschenrechners.
Beispiele:
101102
4ACF316
= (((1 ⋅ 2 + 0) ⋅ 2 + 1) ⋅ 2 + 1) ⋅ 2 + 0 = 2210
= (((4 ⋅16 + 10) ⋅16 + 12) ⋅16 + 15) ⋅16 + 3 = 30641910
1.1.2.5 Umrechnung von Dezimal in Dual und Hexadezimal
Beschreibt man das Horner-Schema als "fortlaufend Multiplizieren und
Aufsummieren", so kann man seine Umkehrung beschreiben durch "fortlaufend
Dividieren und Divisionsreste notieren".
Beispiel:
22 : 2 = 11 Rest 0 → LSB (Last significant bit)
11 : 2 = 5 Rest 1
5 : 2 = 2 Rest 1
2 : 2 = 1 Rest 0
1 : 2 = 0 Rest 1 → MSB (Most significant bit)
→ 101102
Diese Dualzahl kann man sofort in eine Hexadezimalzahl umwandeln, indem man
rechts beginnend Blöcke zu je vier Dualziffern markiert und in Hexadezimalziffern
übersetzt:
101102 = 10110b = 1 01102 = 1616 = 16h
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
6
1.1.2.6 Addition von Dual- und Hexadezimalzahlen
Alle Rechenregeln sind unabhängig von der Zahlenbasis gültig. Eine Addition läuft
wie gewohnt ab. Beispiel mit Dualzahl:
1. Summand
2. Summand
Überträge
Summe
dezimal
12
89
11−
101
dual
0000 1100
0101 1001
0011 000−
0110 0101
hexadezimal
0C
59
1−
65
1.1.2.7 Ringdarstellung von ganzen Zahlen mit Vorzeichen
Eine bildhafte Vorstellung von der Darstellung der vorzeichenbehafteten ganzen
Zahlen gibt der Zahlenring. Das folgende Beispiel ist für eine vierstellige Dualzahl
4
ausgearbeitet. Vier Dualstellen erlauben 2 = 16 Zustände, die wie folgt auf positive
und negative Zahlen verteilt werden:
0000 (+0)

1111 (-1)

1110 (-2)
0010 (+2)

1101 (-3)
1100 (-4)
0001 (+1)

negativ
0011 (+3)
positiv
0100 (+4)

1011 (-5)

1010 (-6)

1001 (-7)
0101 (+5)
0110 (+6)
0111 (+7)
1000 (-8)
Bei einer Addition durchlaufen wir den Zahlenring im Uhrzeigersinn, bei einer
Subtraktion entsprechend gegenläufig. Überschreiten wir bei einer Rechnung die
eingezeichnete Mittellinie, kommt es zu Überträgen in die Vorzeichenstelle, d.h. es
treten "unerwartete" Resultate auf!
Bei der Numerierung der einzelnen Bits ist übrigens zu beachten, daß das LSB (ganz
rechts) meist, aber leider nicht immer, als Bit 0 bezeichnet wird.
Die Bits 0, 1 und 2 haben in dieser Darstellung nur solange die Wertigkeiten 1, 2 und
4, wie wir uns auf die positiven Zahlen beschränken!
Das MSB enthält das Vorzeichen:
Das LSB bestimmt gerade / ungerade:
0 ⇒ positiv, 1 ⇒ negativ.
0 ⇒ gerade, 1 ⇒ ungerade.
1.1.2.8 Subtraktion von Dualzahlen
Die Subtraktion wird auf eine Addition zurückgeführt, indem man a-b durch a+(-b)
ersetzt, wobei -b das Komplement zu b heißt. Am Zahlenring sieht man, daß -b die
Spiegelung von b an der Mittellinie ist!
Das folgende Beispiel 101+(-12) = 89 (vergleiche Additionsbeispiel!) stellt die zwei
Subtraktionsverfahren einander gegenüber, wobei die geänderte Reihenfolge
"(-12)+101" anstatt "101+(-12)" dazu dient, beide Rechenwege übersichtlich
einander gegenüberzustellen:
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
7
dez.
+12
-12
+101
=89
mit 1er-Komplement
0000 1100
1111 0011 Ergänze zu 1
= 1111 0011 1er-Komplement
+ 0110 0101
= 1 0101 1000
↓ →
+1 ´end around carry´
= 0101 1001 = Differenz
mit 2er-Komplement
0000 1100
1111 0011 Ergänze zu 1
+1 Korrekturaddition
= 1111 0100 2er-Komplement
+ 0110 0101
= 1 0101 1001 Übertrag
übergehen
= 0101 1001 = Differenz
1.1.2.9 Darstellung von gebrochenen Zahlen
Bei der Gleitkomma-Darstellung zerlegt man die Zahl in Mantisse und Exponent. Für
den Exponenten mit Vorzeichen genügt in der Regel ein Byte, für Mantisse mit
Vorzeichen werden je nach Genauigkeit 3 bis 8 Byte verwendet.
In wissenschaftlicher Notation geschrieben sieht das so aus:
z.B. 0.00574 → 0.574 E-2
dabei: E = 10-er Exponent.
Rechnerintern ist die Zahl immer "normalisiert", d.h. sie beginnt unmittelbar nach
dem Dezimalpunkt. Stellenverschiebungen ändern den Exponenten entsprechend.
Alle Ein- oder Ausgaben eines Computers erfordern Umrechnungen zwischen dem
Dual- und dem Dezimalsystem!
1.1.3 Zeichendarstellung im Computer
Zahlen werden bei mathematisch-logischen Aufgaben verwendet, Zeichen zur
Textdarstellung benötigt. Da im Computer nur Dualzahlen physikalisch repräsentiert
sind, müssen die Textzeichen in Zahlen codiert werden.
Dies geschieht weltweit genormt durch den ASCII-Code (ASCII = American
Standard Code for Information Interchange) in Form einer 8-bit-Zahl.
Beispiele: G = 47h
Ω = Eah
] = 5Dh
w = 77h
ASCII-Tabelle: siehe Küveler / Schwoch, im Anhang
Eine Dualzahl im Speicher kann also Programmcode, Zahl oder Textzeichen sein.
Zur richtigen Interpretation muß der Typ im Programm festgelegt sein.
1.1.4 Von A wie Abakus bis Z wie Zuse
Meilensteine in der Geschichte der Rechentechnik:
ca.-1000 Abakus
Rechenbrett für Addition und Subtraktion
1623
Schickard
mechanische Rechenmaschine
1642
Pascal
für Addition und Subtraktion
1672
Leibnitz
mechanische Rechenmaschine mit verschiebbarer
Staffelwalze für Addition und Subtraktion
1833
Babbage
mit Lochkarten programmierbarer mech. Universalrechner nach dem Vorbild der Jacquard-Webstühle
1886
Hollerith
Papplochkarte → 1924 Gründung der IBM
1941
Konrad Zuse Erster programmierbarer Computer d. Welt (Relais)
ab 1946 Zuse Z22
Einsatz von Elektronenröhren
ab 1959
Einsatz von Transistoren und Kernspeichern
ab 1965
Einsatz von IC´s und Halbleiterspeichern
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
8
1.2 Komponenten eines Computersystems
1.2.1 System des Personal Computer (PC)
ROM
(Lesespeicher)
BIOS
(Basic Input Output System =
Minimal-Betriebssystem)
↔
Massenspeicher
Harddisk
Floppy
CD-ROM
Streamer
BUS
Eingänge
Programm
Daten
residente Dienstprogramme
↔
BUS
CPU
80x86
Tastatur
Maus
Parallele Ports
Serielle Ports
RAM
(Schreib-Lese-Speicher)
↑
Takt
Ausgänge
Monitor
Parallele Ports
Serielle Ports
Pro Programmbefehl wird eine Bit-Gruppe (Byte oder Wort) verarbeitet. Die Bits
können unabhängige Binärvariable oder codierte digitale Variable sein.
Die Befehle eines Programms werden zeitlich nacheinander bearbeitet.
Das Betriebssystem steuert und überwacht die Abläufe und stellt Dienstprogramme
zur Verfügung.
1.2.2 Begriffserklärungen
CPU Central Processing Unit
Steuerwerk + Speicherwerk + Operationswerk
führt die arithmetisch-logischen Verknüpfungen der Daten in Abhängigkeit
vom Programm aus.
BUS Leitungssystem zur bitparallelen codierten Signalübertragung zwischen
Systemkomponenten.
3 Bustypen: Datenbus + Adressbus + Steuerbus.
Die am BUS betriebenen Bausteine können von der CPU über den Steuerbus auf Senden, Empfang oder abgeschaltet werden (Tri-State-Betrieb).
Mikroprozessor
= CPU + BUS, Baugruppe eines größeren Systems.
Mikrocontroller
= Einchip-Mikrocomputer, ohne ext. Bausteine funktionsfähig,
für Steuer- und Regelzwecke.
Maschinensprache = Befehlsvorrat im HEX-Code.
Assemblersprache = Befehlsvorrat in symbolischen, sprachlich verständlichen
Abkürzungen.
Assembler
= Übersetzungsprogramm von Assemblersprache in den
Maschinencode zur Übersetzung auf demselben Prozessor.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
9
Crossassembler
= Assembler für Fremdprozessor, welcher z.B. Assemblerprogramme für einen Mikrocontroller auf dem PC übersetzt.
Compiler
= Übersetzungsprogramm von Hochsprache, z.B. Pascal,
in Assemblersprache oder direkt in d. Maschinencode.
1.2.3 Speicherarten (Halbleiterspeicher und Massenspeicher)
RAM (Random Access Memory): Schreib-Lesespeicher zur Speicherung der
Prozeßdaten. Der Speicherinhalt geht beim Abschalten der Stromversorgung
verloren (flüchtiger Speicher), sofern keine Batteriepufferung vorgesehen ist.
ROM (Read Only Memory): Nur Lesespeicher, wird bei der Herstellung maskenprogrammiert. Der Programmcode wird vom Kunden an den Chiphersteller geliefert.
Wirtschaftlich ab ca. 1000 Stück wegen Fixkosten der Maskenherstellung.
PROM (Programmable ROM): wird beim Kunden 1x programmiert.
EPROM (Erasable Programmable ROM): Gesamtlöschung durch UV-Licht.
EEPROM (Electrical Erasable Programmable ROM):
Löschung und Programmierung byteweise. Für selbstlernende Systeme geeignet, da
das Programm seine Parameter selbst ändern kann.
Flash-EPROM (Flash electrical Erasable Programmable ROM):
Die Bytes sind einzeln beschreibbar, aber nur blockweise elektrisch löschbar.
Floppy (Diskette): Flexible Scheibe mit Magnetschicht, z.Zt. 1,44 MB.
Harddisk (Festplatte): Starre Keramikscheibe mit Magnetschicht mit sehr hoher
Aufzeichnungsdichte und kurzer Zugriffszeit. Staubdicht gekapselt.
CD-ROM: Optische Speicherscheibe wie Musik-CD mit Laserabtastung.
Beschreibbare CD ist bereits am Markt.
Streamer: Magnetbandlaufwerk mit hoher Aufzeichnungsdichte. Große Zugriffszeit,
deshalb nur für Datensicherung geeignet.
1.2.4 Verlauf der Entwicklung bei Geräten mit Controllern
•
•
•
•
•
•
•
•
Planung der Hardware, Festlegung der Portleitungen des Controllers
Entwicklung und Test der Controller-Peripherie (oft Leistungselektronik)
Erstellung des Programmtextes in Assemblersprache mit PC-Texteditor
Crossassemblierung (Übersetzen) und Linken (Binden) des Programms
→ Object-Code im Intel-Hex-Format, Syntax-Fehler werden gemeldet
Laden des Object-Codes in ROM-Simulator oder Emulator
Test des Programms
Wiederholung dieses Ablaufs bis zur fehlerfreien Funktion
Programmierung eines PROMS für Geräteprototyp
Beim Controller legt der Programmierer den Adreßraum für das Programm fest. Der
Programmbeginn wird durch den Reset-Vektor definiert.
Der Vorteil der programmierbaren Technik liegt darin, daß die Entwicklung von
Hardware und Programm gleichzeitig betrieben werden können, wobei Programmanpassungen bis zum Fertigungsbeginn möglich sind.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
10
1.3 DOS (Disk Operating System)
1.3.1 Aufgaben von DOS
Die Bedienung eines Computers erfordert ein Betriebssystem. Dies ist ein
Programm, das die organisatorischen Abläufe regelt. Nach dem Einschalten des PC
erhält er aus einem dauerhaften Speicherbereich (ROM BIOS) ein "Minimalwissen",
das ihm erlaubt, die Zentraleinheit, den Arbeitsspeicher und alle angeschlossenen
Peripheriegeräte (Bildschirm, Tastatur, Disketten-Laufwerke, Festplatten usw.) einem
Funktionstest zu unterwerfen und im Systemteil zu registrieren. Danach wird das
eigentliche Betriebssystem geladen (Booten). Dabei werden Informationen auf dem
Bildschirm ausgegeben, die vom jeweiligen Gerät abhängen und im Fehlerfall helfen,
eine Diagnose zu stellen.
Das Betriebssystem bleibt bis zum Ausschalten aktiv, es stellt dem Anwender alle
notwendigen Hilfsmittel für das Laden, Speichern, Kopieren und Drucken von
Programmen und Daten zur Verfügung. Es überwacht den Programmlauf und sendet
bei Fehlern Meldungen zum Bildschirm. Bei Programmfehlern (Absturz) kann mit den
Tasten <Strg+Alt+Entf> erneut gebootet werden (Warmstart).
Wegen der starken Verbreitung der ´IBM-kompatiblen´ PC´s wurde DOS trotz vieler
Schwächen zu einem Industriestandard, welcher die Verwendung alter Software und
Daten seit 1983 gewährleistet (Aufwärts-Kompatibilität).
1.3.2 Massenspeicher
Eine zentrale Aufgabe des Betriebssystems ist es, den Speicher zu verwalten und so
dem Anwender den Zugriff auf die gespeicherten Informationen zu ermöglichen.
Dazu benötigt jeder Speicher ein Koordinatensystem (Adressierung), welches das
Speichermedium überzieht. Beim Halbleiter-Arbeitsspeicher RAM ist die
Adressierung eine fortlaufende Nummerierung von 0 an, bei Floppys und Festplatten
sind es Sektoren und Spuren (Tracks), die beim Formatieren erzeugt werden und
Datenblöcke bilden. In einem geschützten Verwaltungsbereich des Massenspeichers wird eine Datei-Verwaltungstabelle (FAT = File Allocation Table) angelegt,
in die beim Schreiben die Belegung eingetragen wird und die beim Lesen zum
Auffinden der Dateien dient.
Die Zugriffszeit auf die Daten der Massenspeicher-Laufwerke ist sehr
unterschiedlich. Bei Festplatten ist sie wesentlich kürzer als bei Floppys, von
Magnetbändern ganz zu schweigen.
Die Massenspeicher-Laufwerke werden über Buchstaben angesprochen.
Am FH-Netz gelten folgende Zuordnungen:
A: B: Lokale Disketten-Laufwerke
C: D: Lokale Festplatten
E:
Lokales CD-ROM Laufwerk
F:
Netzlaufwerk mit Benutzer-Accounts
G:
Netzlaufwerk mit Benutzer-Arbeitsbereich (wird täglich gelöscht)
S:
Netzlaufwerk für Dozentendateien mit Studentenzugriff.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
11
1.3.3 Dateien und Verzeichnisse
Eine Menge logisch zusammengehörender Daten nennt man Datei (file).
Sie werden in den Massenspeichern als Blöcke gespeichert und zur Benutzung in
den Arbeitsspeicher kopiert.
Dateien tragen symbolische Dateinamen (filenames) und können Daten oder
Programme enthalten. Programmdateien erkennt man an der Endung *.com oder
*.exe. Das Betriebssystem muß für jeden Datenträger ein Inhaltsverzeichnis
(Directory) führen, in dem es sich merkt, wo die Dateien physikalisch gespeichert
sind.
Mit dem DOS-Kommando DIR werden die Dateien des aktuellen Verzeichnisses am
Bildschirm aufgelistet. Der Befehl DEL zum Löschen einer Datei bewirkt zunächst
nur das Löschen des zugehörigen Dateieintrags im Verzeichnis. Die so "gelöschten"
Daten werden erst dann unwiderruflich physikalisch gelöscht, wenn sie überschrieben werden. Noch nicht physikalisch gelöschte Informationen können im Notfall also
noch restauriert werden. Hat man versehentlich gelöscht, darf man unter keinen
Umständen Speicherbefehle ausführen!
Um tausende Dateien übersichtlich und logisch ordnen zu können, wurde 1983 ab
DOS 2.0 ein hierarchisches Dateiensystem in Form eines Verzeichnisbaums
eingeführt. Beim Formatieren wird auf dem Datenträger ein Wurzelverzeichnis
(root) angelegt. Der Benutzer kann darin weitere Unterverzeichnisse anlegen.
Jedes Unterverzeichnis kann weitere Unterverzeichnisse enthalten, so daß mehrere
logische Hierarchieebenen entstehen. Ein Dateiname mit Pfadangabe heißt dann
z.B.:
s:\semester\schaub\comp\uebung\ueb_aufg.doc
Der Verzeichnisbaum kann mit dem Kommando TREE aufgelistet werden.
1.3.4 Benutzerschnittstelle
Sie erlaubt den Dialog mit dem PC und den Zugriff auf die Dienste von DOS.
Nach dem Booten meldet sie sich mit einer Prompt-Zeichenkette, welche aktives
Laufwerk und Dateiverzeichnis anzeigt. Jetzt kann der Benutzer ein Kommando
eingeben und damit ein Dienst- oder ein Anwendungsprogramm starten.
Das Kommando wird vom Kommandointerpreter ´command.com´ entgegengenommen und ausgeführt. Ein Anwendungsprogramm wird durch Eingabe des
Dateinamens gestartet. Nach dessen Beendigung meldet sich der Kommandointerpreter wieder mit dem Prompt und wartet auf ein neues Kommando. Mit der
Taste F3 kann die letzte Eingabezeile erneut aufgerufen werden.
1.3.5 FH-Netz
Für die Nutzung benötigen Sie eine Registrierung im Rechenzentrum (account) und
ein Passwort. Vorteile des Netzes:
Bereitstellung, und Verwaltung von Arbeits- und Massenspeicher
Laufende Datensicherung
Viele Nutzer haben Zugriff auf teure Softwarelizenzen.
Die Bedienungsanleitung entnehmen Sie bitte den Umdrucken des
Rechenzentrums.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
12
1.3.6 DOS-Kommandos
Mit dem DOS-Kommando ´help´ erhält man eine Auflistung und Erklärung aller
Kommandos. Für den Anfang sind folgende wichtig und sollten geübt werden:
dir, md, rd, cd, del, xcopy, format (Vorsicht Datenlöschung!), rename, type, more,
diskcopy, time, date, ver, chkdsk
1.4 Einsatz der Computertechnik zur Steuerung und Regelung
1.4.1 Begriffserklärungen
Prozeß:
Umformung und / oder Transport von Materie, Energie und / oder
Information
Störgrößen
↓
Prozeß
gekennzeichnet durch Zustandsgrößen
→ Ergebnis
↑
Eingriff
Ziel:
konstantes Ergebnis trotz Störgrößen,
dazu ist ein Eingriff in den Prozeß notwendig
Die Bemessung des Eingriffs zur Beeinflussung der
Zustandsgrößen erfolgt durch Steuerung oder Regelung.
Steuerung: Es findet ein offener Wirkungsablauf über die Steuerkette statt.
Keine Kontrolle des Ergebnisses.
Nur bekannte Störgrößen lassen sich kompensieren.
Einsatzbeispiele:
Aufzüge, Einspritzung bei Kfz-Motoren, Roboter, Waschmaschinen,
Verkehrsampeln, Telefonapparate
Regelung:
Geschlossener Wirkungsablauf im Regelkreis.
Das Ergebnis wird gemessen und mit dem Sollwert verglichen.
Der Einfluß der Störgrößen wird ´ausgeregelt´.
Ist- und Sollwert stimmen somit überein.
(→ Fach Regelungstechnik).
Einsatzbeispiele:
Drehzahlregelung bei CD-Laufwerken, Heizungsregelung, Autopilot
beim Flugzeug
Technische Realisierung:
Pneumatik und Hydraulik
Elektromechanik (Relais und Schaltwerke)
Kombinatorische Logik
Mikrocomputer und Mikrocontroller
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
13
1.4.2 Unterscheidung von Steuerungen durch Informationsdarstellung
ANALOGE STEUERUNG
vorwiegend analoge Signalverarbeitung
BINÄRE STEUERUNG
binäre Eingangs- und Ausgangssignale. Nicht darunter fällt die binär codierte digitale
Informationsverarbeitung (digitale Steuerung).
Jedes Signal besitzt eine Auflösung von 1 Bit (Ein/Aus) u. benötigt 1 Leitung.
Besteht vorwiegend aus Verknüpfungs-, Zeit- und Speicherelementen.
DIGITALE STEUERUNG
vorwiegend Verarbeitung zahlenmäßig dargestellter Informationen, welche jeweils
durch binäre Codierung in einem Wort (Byte) dargestellt sind und daher eine
Auflösung von >1 Bit aufweisen.
Zahl der Leitungen = Zahl der Bits.
Besteht vor allem aus Zählern, Registern, Speichern und Rechenwerken und wird
heute fast nur noch durch Mikroprozessoren realisiert.
1.4.3 Unterscheidung von Steuerungen durch Signalverarbeitung
TAKTSYNCHRONE STEUERUNG
Signale werden synchron mit Taktsignal verarbeitet.
Laufzeiteinflüsse werden eliminiert, sofern die Laufzeiten kleiner als die Taktperiode
sind.
ASYNCHRONE STEUERUNG
ohne Taktsignal, Signale werden sofort bei Eintreffen verarbeitet.
VERKNÜPFUNGSSTEUERUNG
Zustände der Ausgangssignale sind den Zuständen der Eingangssignale im Sinne
von Verknüpfungsfunktionen zugeordnet. Verarbeitung vorwiegend binärer Signale
im Sinne Bool'scher Verknüpfungen.
ABLAUFSTEUERUNG
zwangsweise schrittweiser Ablauf (Schrittschaltwerk).
Weiterschalten ist abhängig von der Zeit und / oder von Signalen des gesteuerten
Prozesses. Einzelne Größen können geregelt sein.
1.4.4 Unterscheidung von Steuerungen durch Programmverwirklichung
Das Programm ist die Summe aller Anweisungen für die Signalverarbeitung.
VERBINDUNGSPROGRAMMIERT
Programm ist durch Art der Funktionsglieder und deren Verbindungen bestimmt.
Programmänderungen nur durch Umstecken oder Umschalten von Leitungsverbindungen oder Baugruppen möglich.
SPEICHERPROGRAMMIERT
Das Programm ist als Reihe von Anweisungen in codierter digitaler Darstellung in
einem Programmspeicher gespeichert (Firmware).
Diese Anweisungen werden in der programmierten Reihenfolge zeitlich
nacheinander im Taktrythmus ausgeführt.
Die zur Programmbearbeitung erforderlichen Funktionsglieder und deren
Verbindungen (Hardware) werden als unveränderlich angesehen.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
14
2 Kombinatorische Logik
Die binären Variablen (Wert 0 / 1) werden durch die Aussagelogik verknüpft.
2.1 Verknüpfungselemente (Gatter)
Zur Vereinfachung sind nur 2 Signalleitungen dargestellt
Gatter
Funktionsplan
FunktionsSchaltfunktion
(FUP)
Tabelle
AND
(UND)
E1
E2
NAND
(Nicht
UND)
E1
E2
OR
(ODER)
E1
E2
NOR
(Nicht
ODER)
E1
E2
XOR
(Exclusiv
ODER)
NOT
(NICHT)
Treiber
E1
E2
E
E
&
&
>
_1
>
_1
=1
1
1
A
A
A
A
A
A
A
Beschreibung
E2 E1
0
0
0
1
1
0
1
1
A
0
0
0
1
E2 E1
0
0
0
1
1
0
1
1
A
1
1
1
0
E2 E1
0
0
0
1
1
0
1
1
A
0
1
1
1
E2 E1
0
0
0
1
1
0
1
1
A
1
0
0
0
E2 E1
0
0
0
1
1
0
1
1
A
0
1
1
0
E
0
1
A
1
0
Inverter
A = ¬E
Ausgang ist
invertierter
Eingang
E
0
1
A
0
1
Signalverstärker
A=E
Ausgang ist
gleich Eingang
Konjunktion
A = E1 ∧ E2
Neg. Konjunktion
A = ¬(E1 ∧ E2)
Disjunktion
A = E1 ∨ E2
Neg. Disjunktion
A = ¬(E1 ∨ E2)
Ausgang auf 1,
wenn alle
Eingänge auf 1
Ausgang auf 0,
wenn alle
Eingänge auf 1
Ausgang auf 0,
wenn alle
Eingänge auf 0
Ausgang auf 1,
wenn alle
Eingänge auf 0
XOR: A=(¬E1∧E2)∨(E1∧¬E2)
Ausgang auf 1,
wenn 1 Eingang auf 1
Antivalenz: A = E1 ≠ E2
(nur für 2 Eingänge)
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
15
Stellungen von 2 Schaltern an 4 LED´s anzeigen
2
(mit 2 bit sind 2 = 4 Aktionen steuerbar)
Einfaches Beispiel:
+5V
S1 S2
zu zu
auf zu
zu auf
auf auf
22k
S1
S2
&
5k
&
&
&
LED
LED 1 hell
LED 2 hell
LED 3 hell
LED 4 hell
LED1 LED2 LED3 LED4
1 LED ist immer hell (Zwangssteuerung)
Es ist zu beachten, daß die Logik-Bausteine an die Stomversorgung (+5V u. Masse)
angeschlossen sind.
Umwandlung AND ↔ OR (nach De Morgan)
Alle logischen Grundverknüpfungen ohne Speicher können allein durch NAND oder
NOR dargestellt werden. Der Beweis zu den Beispielen kann mit den Funktionstabellen geführt werden. Die Umwandlung findet in 3 Stufen statt:
Invertierung der Eingänge, Austausch des Operators, Invert. des Ausgangs.
NAND → OR:
¬ ( E1 & E2 )
E1
E2
NOR → AND:
&
>
_1
A
(¬E1 ∨ ¬E2 )
E1
E2
A
¬ ( E1 ∨ E2 )
E1
E2
≡
≡
>
_1
A
(¬E1 ∧ ¬E2 )
E1
E2
&
A
Standard - IC
Alle logischen Grundverknüpfungen sind als integrierte Schaltungen in Standardgehäusen erhältlich.
Gehäuse 7410 von oben gesehen:
Beispiel
Vcc
für Dual Inline Gehäuse (DIL):
14
13
12
11
10
9
8
NAND
im 14-poligen DIL-Gehäuse:
&
&
7400
7410
7420
7430
4 NAND
3 NAND
2 NAND
1 NAND
mit je 2 Eing.
mit je 3 Eing.
mit je 4 Eing.
mit 8 Eing.
&
1
2
3
4
5
6
7
GND
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
16
2.2 Regeln der Schaltalgebra (Bool´sche Algebra)
2.2.1 Reihenfolge der Operationen
Negation vor Konjunktion vor Disjunktion
Eingriff in diese Rangfolge durch Klammern
2.2.2 Kommutatives Gesetz (Vertauschen von Variablen)
Beispiel:
E1 ∧ E2 = E2 ∧ E1
Schaltungstechnisch:
E1
E2
&
E2
E1
A
&
A
2.2.3 Distributives Gesetz (Ein- und Ausklammern)
E1 ∧ (E2 ∨ E3) = (E1 ∧ E2) ∨ (E1 ∧ E3)
Beispiel:
Schaltungstechnisch:
Mehraufwand, aber
laufzeitsymmetrisch.
E1
E2
E3
A
&
>
_1
E2
E1
&
E3
&
>
_1
A
2.2.4 Assoziatives Gesetz (Teilen und zusammenfassen)
Beispiel:
E1 ∧ E2 ∧ E3 = (E1 ∧ E2) ∧ E3
Schaltungstechnisch:
Falls Eingänge fehlen,
dann aufteilen.
E1
E2
E3
&
E1
E2
E3
A
&
&
A
2.2.5 Rechnen mit nur einer Variablen
E∧0
= 0
E ∧ ¬E
= 0
E∧1
= E
E∧E
= E
E∨0
= E
E∨E
= E
E∨1
= 1
E ∨ ¬E
= 1
E
&
A=0
trivial!
&
A=0
trivial!
E
+5V
&
A=E
zur ´Stillegung´
überzähliger Eingänge
E
&
A=E
zur ´Stillegung´
überzähliger Eingänge
>
_1
A=E
zur ´Stillegung´
überzähliger Eingänge
E
>
_1
A=E
zur ´Stillegung´
überzähliger Eingänge
E
+5V
>
_1
A=1
trivial!
E
>
_1
A=1
trivial!
E
E
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
17
2.3 Entwurf von Logikschaltungen
(erklärt am Beispiel einer einfachen Heizungssteuerung)
2.3.1 Beschreibung der Aufgabe
Ein Gasbrenner soll dann eingeschaltet werden, wenn
1. die Kesseltemperatur < tkmin
und mindestens ein Heizkörperventil ganz offen ist
( Zeichen dafür, daß die Stellgrenze für das Halten der RaumSolltemperatur erreicht ist)
oder
2. die Boilertemperatur < tbmin ist (Boiler-Vorrang)
2.3.2 Signalzuordnung
(zur systematischen Bearbeitung notwendig)
Ausgang:
A = 0:
A = 1:
Brenner ein
Brenner aus
Eingänge:
E1 = 0:
E1 = 1:
Kesseltemperatur ≥ tkmin
Kesseltemperatur < tkmin
Boilertemperatur ≥ tbmin
Boilertemperatur < tbmin
mindestens 1 Heizkörperventil ganz offen
kein Heizkörperventil ganz offen
E2 = 0:
E2 = 1:
E3 = 0:
E3 = 1:
2.3.3 Funktionstabelle (Logiktabelle, Zustandstabelle oder Wahrheitstabelle)
3
für 2 = 8 Kombinationen
E1
E2
E3
A
0
1
0
1
0
1
0
0
1
1
0
0
0
0
0
0
1
1
1
0
0
0
1
1
↑
↑
↑
3 Vollkonjunktionen
0
1
1
0
Alle Kombinationen
der Eingangssignale
werden hier erfaßt.
1
1
1
0
2.3.4 Schaltfunktion in ODER-Normalform oder disjunktiver Normalform
für A = 1 (Brenner aus, wie oben festgelegt).
A =
¬E1 ∧ ¬E2 ∧ ¬E3
1. Vollkonjunktion
∨
¬E1 ∧ ¬E2 ∧ E3
2. Vollkonjunktion
∨
E1 ∧ ¬E2 ∧ E3
3. Vollkonjunktion
Eine Vollkonjunktion enthält alle Eingangsvariablen.
Zahl der Vollkonjunktionen = Zahl der Einsen in der Tabellenzeile von A.
alternative Lösungsmöglichkeit:
Man erhält die Schaltfunktion für ¬A mit Vollkonjunktionen für die Nullen in der
Tabellenzeile von A.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
18
2.3.5 Funktionsplan
E1
E2
E3
ergibt sich aus der Schaltfunktion:
Aufwand:
&
&
&
>
_
1
3 Inverter
3 AND mit 3 Eingängen
1 OR mit 3 Eingängen
= 15 Eingangseinheiten
A
2.3.6 Optimierung mit dem KV-Diagramm
Wie kommt man zur Minimalform der Problemlösung?
1. rechnerisch mit Bool´scher Algebra: Ergebnis nur mit Glück zu finden
2. mit einem der bekannten systematischen Verfahren.
Hier wurde wegen seiner Einfachheit und Übersichtlichkeit das Karnaugh-VeitchDiagramm (KV-Diagramm) ausgewählt,.
Grundlage für den Entwurf ist die ODER-Normalform (unseres Beispiels):
¬E1 ∧ ¬E2 ∧ ¬E3
A =
1
1
1
1
0
0
0
1
1
0
0
1
∨
¬E1 ∧ ¬E2 ∧ E3
∨
E1 ∧ ¬E2 ∧ E3
Die 3 Vollkonjunktionen werden als „1“ in den
zugehörigen Feldern des KV-Diagramms
eingetragen.
Spiegelbildlich zu Trennlinien liegende Einsen
werden zu einer Schleife zusammengefaßt.
Jede Schleife liefert eine Konjunktion, bei der
die Variable entfällt, die in der Schleife mit 0/1
vorkommt.
E1
E2
1
E3
Vereinfachte Funktionsgleichung:
A =
¬E1 ∧ ¬E2
∨
¬E2 ∧ E3
=
¬E2 ∧ ( ¬E1 ∨ E3 )
Vereinfachter Funktionsplan:
E1
E2
E3
NAND-Form:
E1
E2
E3
Aufwand:
&
&
>
_ 1
A
2 Inverter
2 AND mit 2 E ing.
1 OR mit 2 Eing.
&
&
= 8 Eingangseinheiten
also Aufwand halbiert
Die Inverter können folgendermaßen aus NAND
und NOR dargestellt werden:
&
A
&
>
_1
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
19
2.3.7 Regeln für den Entwurf von KV-Diagrammen
Zahl der Felder
= Zahl der Kombinationsmöglichkeiten
Zahl der Variablen
n
= 2
= 2.
Form möglichst Quadrat oder doppeltes Quadrat.
Diagramme für 2 bis 6 Variable zum Kopieren für Übungen siehe unten.
Zuweisung der Variablen zu Zeilen u. Spalten so, daß sich beim "Grenzübergang"
genau eine Variable ändert.
Eintragen der Vollkonjunktionen als ´1´ am passenden Kreuzungsfeld.
Zusammenfassen von faltungssymmetrischen Einsen in Schleifen, dabei möglichst
viele Einsen erfassen.
Die Anzahl der Einsen in einer Schleife ist eine Binärzahl (2, 4, 8 usw).
Jede Schleife liefert in der vereinfachten Funktionsgleichung 1 Konjunktion.
Es entfallen dabei die Variablen, die in der Bezeichnung der Schleifenfelder gleich
oft mit 0 und 1 vorkommen. Die Konjunktion ist umso kürzer, je mehr Einsen in der
Schleife sind.
Solange Schleifen bilden, bis alle Einsen in Schleifen untergebracht sind.
Einsen können in mehreren Schleifen auftreten.
2.3.8 KV-Diagramme für 2 - 6 Eingangsvariable
1
1
1
0
1
0
0
0
1
1
0
1
1
1
1 1
0
0
1 0
2
1
0
0
0
0
1
0
1
0
0
1
1
0 0
3
0 1
1
1
1
1
1
0
1
0
0
1
0
1
0
0
1
0
0
0
0
1
0
0
1
1
4
1 1 1
1 1 0
1 0 0
1
1
1
1 0 1
0 0 1
1 1
0 0 0
1 0
0 1 0
0 0
0 1 1
0 1
6
1
1
0
1
0
0
1
0
1
0
0
1
0
0
0
5
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
20
2.3.9 Einsatzgebiete für verbindungsprogrammierte Logikschaltungen
•
•
•
•
Peripherielogik von Mikrocomputersystemen (für die Systemsteuerung und
zur Entlastung der CPU bei der Verarbeitung externer Signale)
Sensorik
Für schnelle Logik, wenn Mikrocomputer zu langsam sind.
2.3.10 Technische Realisierung durch programmierbare Bausteine
Diskrete Bauelemente werden nur noch bei einfachen Verknüpfungsaufgaben
eingesetzt. Bei komplexen Logikschaltungen verwendet man hoch integrierte
Standardschaltkreise wie zum Beispiel:
PLD
Programmable Logic Device
EPLD
Erasable PLD
PEEL
Programmable Electical Erasable Logic
FPGA
Free Programmable Gate Array
Gate Arrays
Maske kundenspezifisch entworfen,
nur bei hohen Stückzahlen wirtschaftlich
2.3.11 Einführung in LOG_IC
Für den Entwurf von Logikschaltungen gibt es komfortable PC-Entwicklungswerkzeuge, z.B. LOGIC2 (Vorführung in der Vorlesung).
Die erzeugten Daten können direkt für die Programmierung von PLD´s usw.
verwendet werden.
Starten von LOG_IC im Rechenzentrum der FH Ulm:
g:\work\...> use logic2 nach Installation von Windows mit use win31
2.3.12 Pegeldefinition
Damit die Logikbausteine aller Hersteller untereinander kompatibel sind, hat man die
Logikpegel weltweit genormt. Sie sind je nach Halbleitertechnologie unterschiedlich
festgelegt.
Bipolartechnik (Versorgungsspannung +5V)
5V
H
5V
H
Störabstand:
2,4V
2,0V
verboten
verboten
0,8V
0,4V
L
L
0V
Ausgang
Fanout:
0,4 V für H- und L-Signal zwischen
Aus- und Eingang.
Störspannungen bis zu 0,4 V
Spitzenwert führen nicht zu
Fehlfunktionen.
0V
Eingang
10
gibt an, wieviele Eingänge an einen Ausgang
funktionssicher angeschlossen werden dürfen
MOS-Technik (Versorgungsspannung +5V bis +18V)
Störabstand:
Fanout:
0,4V bis 4V je nach Versorgungsspannung
50
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
21
2.4 Beispiele
2.4.1 Vereinfachung eines gegebenen Funktionsplans
E1
E2
E3
E4
>
_ 1
>
_ 1
>
_ 1
>
_ 1
>
_ 1
&
A
gesucht: Minimalform der Schaltfunktion
1. Lösungsschritt: Ausfüllen der Funktionstabelle (Funktionsanalyse)
E1
E2
E3
E4
A
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
1
1
0
0
1
0
0
1
0
1
1
0
1
0
1
0
1
1
0
0
1
1
1
0
1
0
0
0
1
1
1
0
0
1
1
2. Lösungsschritt: KV-Diagramm
0
0
0
1
1
1
1
0
0
0
0
0
1
0
0
1
1
1
1
1
1
1
1
0
1
1
1
0
1
0
1
1
E3
E4
0
1
0
1
1
1
1
0
1
1
0
0
1
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
1
1
4. Lösungsschritt:
Funktionsplan
E1
E2
E1
E2
E3
E4
&
&
>
_
&
1
A
3. Lösungsschritt: vereinfachte Schaltfunktion:
A =
E1∧
∧ E2
∨
¬E3 ∧ E4
5. Lösungsschritt: NAND - Form:
∨
E1
E2
E3
E4
¬E2 ∧ E3
→
↓
¬A = ¬(E1∧
∧E2) ∧ ¬(¬
¬E3 ∧E4) ∧ ¬(¬
¬E2 ∧E3)
&
&
&
&
A
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
22
2.4.2 7-Segment-Decoder für Dezimalziffern
gesucht für dieses Segment,
enthalten in den Ziffern 0, 4, 5, 6, 8, 9
es leuchtet bei A = 1
E0
E1
E2
E3
>
Decoder
A
Für 1 Digit werden 4 Signalleitungen E0 ... E3 benötigt.
Funktionstabelle für die Ziffern, bei denen das Segment leuchtet:
0
0
0
0
0
1
Ziffer→
E0
E1
E2
E3
A
4
0
0
1
0
1
5
1
0
1
0
1
6
0
1
1
0
1
8
0
0
0
1
1
9
1
0
0
1
1
A
0
1
0
1
X
B
1
1
0
1
X
C
0
0
1
1
X
D
1
0
1
1
X
E
0
1
1
1
X
F
1
1
1
1
X
falls Zahlen >9 im Signal nicht
vorkommen, bringt dieser Zusatz
eine erhebliche Vereinfachung
KV-Diagramm ohne Zusatz /
0
0
0
0
1
0
1
1
1
1
1
0
E2
E3
1
0
1
1
1
1
0
1
1
1
mit Zusatz
E0
E1
0
0
∨ (¬E0∧E2∧¬E3) ∨ (¬E1∧E2∧¬E3)
Resumee: 12 verknüpfte Eingänge
Funktionsplan in Minimalform →
(für die Version mit Zusatz)
1
1
1
0
0
0
1
0
1
1
X
X
1
1
1
X
X
X
X
1
0
1
1
E2
E3
Funktionsgleichung:
A= (¬E0∧¬E1∧¬E2)∨ (¬E1∧¬E2∧E3)
0
1
E0
E1
1
Funktionsgleichung:
A = (¬E0 ∧ ¬E1) ∨ E3
∨ (¬E0 ∧ E2) ∨ (¬E1 ∧ E2)
Resumee: 7 verknüpfte Eingänge
E0
E1
E2
E3
&
>
_
&
&
1
A
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
23
2.4.3 Adreßdecodierung
In Computersystemen werden die Bausteine parallel an einem Bussystem
betrieben. Dieses besteht aus Datenbus, Adressbus und Steuerbus. Es wird von der
CPU (Central Processing Unit) gesteuert.
Der Datenbus überträgt die Daten zwischen CPU und einem Baustein im Binärcode.
Zu einem bestimmten Zeitpunkt ist jeweils ein Sender und ein Empfänger am
Datenbus aktiviert. Die CPU ist immer beteiligt.
Der Steuerbus steuert die Datenrichtung (Read/Write), das evtl. Multiplexen von
Daten und Adressen auf denselben Leitungen (ALE) und den Zeitpunkt der
Datenübergabe (Strobe, Ready) mit nicht codierten Binärsignalen.
Der Adressbus bestimmt die Adresse des Byte, welches gelesen oder beschrieben
wird. Die Adressen sind binär codiert.
a
Bei a Adreßleitungen können 2 Byte adressiert werden.
16
Beispiel: 16 Adreßbit ergibt 2 B = 64 kB Adreßraum.
Dieser Adreßraum muß meist auf mehrere Bausteine aufgeteilt werden.
Man unterscheidet deshalb innerhalb der Adresse:
→ höherwertige m Bits
Grobstruktur Baustein (Hausnummer)
Feinstruktur Byte im Baustein (Zimmer-Nummer) → niederwertige n Bits
Beispiel:
m Bits
(Haus)
A3 A2
0
0
1
1
0
1
4
4-bit Adreßbus (Adreßraum mit 2 = 16 Adressen),
vollständig belegt mit 4 Bausteinen zu je 4 Byte:
n Bits
(Zimmer)
A1 A0
0
0
1
1
0
1
0
0
1
1
0
1
0
0
1
1
0
1
0
0
1
1
0
1
Funktionsplan:
Adr.-Bit-Nr.
Chip0/ Adr. 0
Chip0/ Adr. 1
Chip0/ Adr. 2
Chip0/ Adr. 3
Chip1/ Adr. 4
Chip1/ Adr. 5
Chip1/ Adr. 6
Chip1/ Adr. 7
Chip2/ Adr. 8
Chip2/ Adr. 9
Chip2/ Adr. 10
Chip2/ Adr. 11
Chip3/ Adr. 12
Chip3/ Adr. 13
Chip3/ Adr. 14
Chip3/ Adr. 15
Das höchstwertige Adreßbit teilt den
Adreßraum in 2 Hälften, das nächste
Bit diese jeweils wiederum in
2 Hälften usw.
Man führt dies solange fort, bis als
n
Teilmenge die Zahl der Bytes (2 ) im
Baustein übrigbleibt.
Die dafür verbrauchten m hohen bit
werden im Adreßdecoder zu einem
Chip-Select-Signal (CS) decodiert,
das den Baustein im ausgewählten
Adreßbereich aktiviert.
m
2 solcher Bausteine können im
n+m
gesamten Adreßraum (2
Byte)
installiert werden.
A0
A0
A1
A1
A2
A3
Baustein mit 4 Byte
CS
Adreßdecoder
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
24
Aufgabe:
Plazierung eines 8kB-Speicherbausteins
im 64kB-Adreßraum ab Adresse 6000H
16
Für die 64 kB = 2 B sind 16 Adreßleitungen A0 .. A15 vorhanden.
Der Adreßraum des Bausteins ist 8 kB = 1/8 des gesamten Adreßraums, für seine
eindeutige Zuordnung werden 3 Adreßleitungen A13 .. A15 benötigt.
die restlichen unteren 13 Adreßleitungen A0.. A12 liefern die 213 = 8k Adressen des
Bausteins.
gesamter Adressraum des Mikroprozessors:
FFFFH
E000H
DFFFH
C000H
BFFFH
oberste Speicheradresse
Adreßbits
A0
hexadez:
7
F
F
F
binär: 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
A000H
9FFFH
A15
8000H
7FFFH
3 bit
fest
für
CS
6000H
5FFFH
4000H
3FFFH
13 bit variabel
für innere Adressen
des Speicherbausteins
213 = 8192 = 8k
binär: 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
hexadez:
6
0
0
0
A15
Adreßbits
A0
unterste Speicheradresse
2000H
1FFFH
Mit 3 bit lassen sich 8 Bereiche
zu je 8 kB adressieren
0000H
Funktionsplan:
R/ W
A0
A1
A0
A1
....
....
A11
A12
A11
A12
8 kB RAM
6264 (28 Pin)
Datenbus D0 .. D7
A13
A14
A15
&
CS
^
Bereichswahl in 8 kB-Schritten durch Beschaltung
der 3 Eingänge mit / ohne Inverter
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
25
3 Kippschaltungen
3.1 Astabile Kippschaltung (Multivibrator, Taktgeber)
Sie ist wegen innerer Rückkopplung selbstschwingend
→ Schwingungserzeuger der Digitaltechnik.
G
Frequenz durch äußere R-C-Beschaltung einstellbar.
Der Baustein liefert das Signal immer, wenn er an der Versorgungsspannung liegt.
Anwendungsbeispiele: Taktsignalerzeugung, Tonerzeugung.
3.2 Monostabile Kippschaltung (Monoflop)
Funktionsplan:
E
1
Histogramm:
A
uE
Bei Triggersignal E = 1 ändert sich
das Signal an A von 0 auf 1.
Nach Ablauf der Zeit T kippt A
selbsttätig auf 0 zurück.
t
uA
T ist unabhängig von uE.
t
T ist durch äußere
C-Beschaltung einstellbar.
T
T
bei Nachtriggerbarkeit
Bei Baustein mit Nachtriggerbarkeit:
Zeitrechnung beginnt mit Triggerimpuls innerhalb T neu, ohne daß zuvor ein
Rückkippen erfolgt.
Das Monoflop ist der Zeitgeber der Digitaltechnik.
Anwendungsbeispiele: Impulserzeugung mit fester Dauer,
Treppenlichtautomat, Belichtungsautomat.
3.3 Bistabile Kippschaltungen
3.3.1 Basis-Flipflop - Definition nach DIN
Wenn das Eingangssignal 1 ist, nimmt der Ausgang des
gleichen Felds den Wert 1 an.
Die Ausgangssignale der beiden Felder sind
komplementär
Der gekennzeichnete Ausgang nimmt bei Reset den
Wert 1 an
R
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
26
3.3.2 RS-Flipflop (zustandsgesteuert - die Spannungshöhe wirkt)
S
S
R
A
0
1
0
1
0
1
S = R nicht definiert
A
A
R
Funktionstabelle
mit NAND-Schaltung erzeugt:
S
&
A
&
R
S
0
1
R
1
0
A
0
1
A
mit Taktzustandsteuerung erweitert:
S
C
R
vor
A
A
S
0
1
R
1
0
nach Takt
A
0
1
Die Signale, die an den Vorbereitungseingängen S und R anliegen, werden bei
Eintreffen von C = 1 verarbeitet und an A gespeichert.
Bei C = 0 erfolgt keine Änderung der Ausgänge.
3.3.3 JK-Flipflop (flankengesteuert - die Spannungsänderung wirkt)
J
A
A
K
^
dyn. Eingang
reagiert auf Übergang 0 → 1
J
↑
nicht ↑
↑
↓
K
nicht ↑
↑
↑
↓
A
1
0
¬X (invertiert)
X (unverändert)
X ist das Signal an A vor dem Ereignis
mit Taktflankensteuerung:
J
C
K
vor
A
A
J und K sind die
Vorbereitungseingänge
J
0
1
1
0
K
1
0
1
0
nach Taktflanke
A
0
1
¬X (invertiert)
X (unverändert)
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
27
3.3.4 T-Flipflop (Trigger-Flipflop)
wechselt mit jedem Signal die Seitenlage
T
↑
↓
A
T
A
A
¬X (invertiert)
X (unverändert)
entsteht z.B. aus folgender Beschaltung eines JK-Flipflops:
1
T
1
J
Histogramm:
A
C
K
A
Anwendung:
Binärzähler
Frequenzteiler /2
T
→t
A
→t
3.3.5 D-Flipflop (Daten-Flipflop)
Histogramm:
D
C
A
A
C
→t
D
→t
A
→t
entsteht aus:
J
D
C
A
C
K
Anwendung:
A
bei C = ↑ wird Wert von D an A
gespeichert. Damit ist das Signal an A
taktsynchron. Laufzeit-Toleranzen
können damit ausgeglichen werden
je 1 Bit in Registern und statischen RAM´s
3.3.6 Master-Slave-Flipflop (Zweispeicher-Flipflop)
Die Eingänge werden bei positiver Takt(flanke) gelesen
Die Ausgänge werden bei negativer Takt(flanke) gesetzt
Es gibt RS- und JK- Typen, hier wird nur JK behandelt.
Schaltzeichen
J
C
K
A
A
Die Auswertung der Eingangssignale und
die Ausgabe der Information an A sind um eine
halbe Taktperiode zeitlich getrennt.
Dadurch wird das System störunempfindlich
gegenüber Laufzeit-Toleranzen
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
28
Realisierung aus 2 Speichern:
Master (Meister)
J
J
K
C
K
Slave (Sklave)
J´
C´
K´
A
A
Funktionstabelle
Anlegen der
Vorbereitungssignale
Zwischenspeicherung
Ausgabe der
gespeicherten Information
Takt
vor
J
1
0
1
0
während
K
0
1
1
0
J´
1
0
¬X
X
nach Takt
A
1
0
¬X
X
K´
0
1
X
¬X
X = Signal J´ vor dem Takt
3.3.7 Realisierung der Kippschaltungen mit Transistoren
(Prinzipdarstellung, kein funktionsfähiges Schaltbild)
A
Y
X
A
U
S
R
Die Grundfunktion kann durch Wahl
der Zweipole X und Y bestimmt werden:
Zweipole
astabil
monostabil
monostabil
bistabil
X
C
R
C
R
Y
C
C
R
R
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
29
3.4 Zähler und Register
3.4.1 Binärzähler (4-bit)
A3
A1
A2
T
Übertrag
A0
T
R
R
T
R
T
R
E
Zählimpulse
Reset
Signalfolge beim Zählen
3
2
A3 = 2 = 8
A2 = 2 = 4
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
1
0
1
0
1
0
1
0
1
1
1
1
1
1
1
1
0
Übertrag ← 0
1
0
A1 = 2 = 2
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
← bit-Wert
Reset = 0
Impuls Nr. 1
Impuls Nr. 2
Impuls Nr. 3
Impuls Nr. 4
Impuls Nr. 5
Impuls Nr. 6
Impuls Nr. 7
Impuls Nr. 8
Impuls Nr. 9
Impuls Nr.10
Impuls Nr.11
Impuls Nr.12
Impuls Nr.13
Impuls Nr.14
Impuls Nr.15
Impuls Nr.16
A0 = 2 = 1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
Jedes weitere T-Flipflop erweitert den Zählbereich um den Faktor 2.
Beim Dezimalzähler decodiert man aus der ´10´ ein Reset-Signal.
Die Ausgänge werden wegen der Ablaufkette nicht gleichzeitig gesetzt.
Abhilfe durch parallelen Zähleingang beim Synchronzähler:
A3
A2
A1
&
Übertrag
T
R
&
A0
&
T
R
&
T
R
&
T
1
&
R
Reset
Zählimpulse
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
30
3.4.2 Schreib-Lese-Register (4 bit)
D0
D
C
D1
1
OE
D
C
D2
1
D1
OE
D
C
D3
D0
1
D2
OE
D
C
1
OE
Schreibfreigabe
Schreiben in das Register
bei positiver Flanke, sonst gesperrt
D3
Tristate-Treiber
0 / 1 / hochohmig
am Ausgang
Lesefreigabe
1 = Lesen aus dem Register
0 = Ausgänge hochohmig (unterbrochen)
D0 ... D3 ist ein bidirektionaler 4-bit Datenbus, z.B. eines Computersystems, auf
dem Daten codiert vom und zum Speicher übertragen werden.
3.4.3 Schieberegister (4bit)
bei Taktsignal:
Eingangsbit wird an A0 gespeichert,
An wird an An+1 weitergeschoben.
Geeignet sind nur Master-Slave-Flipflops, weil sonst die Information beim ersten
Takt bis zum letzten FF durchläuft. Die Schaltung kann im Labor getestet werden,
dazu D-Flipflops 74LS74 verwenden oder das integrierte Schieberegister 74LS164
nehmen.
A3
A1
A2
A0
Dateneingang
D
C
D
C
D
C
D
C
Takt
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
31
3.5 Anwendungsbeispiel aus der Inkrementaltechnik
3.5.1 Prinzip
Als Meßlineal verwendet man ein linear oder rotierend bewegtes Strichraster.
0
360 el.
Bewegung
Abtastung optisch oder magnetisch
mit Phasendifferenz von 90 Grad elektrisch
φ1
φ2
man benötigt die 2. Phase, um die Bewegungsrichtung erkennen zu können.
Signalverlauf bei Linksbewegung des Lineals:
φ1
t
φ2
t
Bei Rechtsbewegung sind die Phasenverläufe vertauscht.
Mit geeigneten Sensorsystemen ist eine Auflösung < 0,01 mm möglich.
Es können nur Relativbewegungen gemessen werden.
Ein Nullpunkt muß durch Indexgeber oder Endschalter erzeugt werden.
3.5.2 Simulation der Signale
J
C
K
E
J
C
K
φ2
Mit dieser Schaltung kann der unten
gezeichnete Signalverlauf erzeugt werden.
Damit lassen sich Schaltungen für die
Auswertung von Inkrementalsignalen
φ1
prüfen.
E
t
φ1
t
φ2
t
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
32
3.5.3 Auswerteschaltung mit Richtungserkennung
Triggerflanken
φ1
&
φ2
&
links
t
rechts
t
Mit der Bewegungsrichtung wechseln die Ausgangssignale den Ausgang.
Den zurückgelegten Weg in einem betrachteten Zeitintervall erhält man aus der
Differenz der Impulszahlen beider Ausgänge in diesem Zeitraum.
3.5.4 Verdoppelung der Auflösung
φ1
φ2
=1
A
Mit der XOR-Schaltung läßt sich die Zeitauflösung
verdoppeln:
φ1
t
φ2
t
A
t
Im Prinzip ist dies die Umkehr der Simulation von Abschnitt 2.10.1
3.5.5 Anwendungsgebiete
Die Inkrementaltechnik findet breite Anwendung zur Weg- und Winkelmessung.
Beispiele:
Werkzeugmaschinen (Vorschubmessung u.a.)
Koordinatenmeßmaschinen
Positioniereinrichtungen
Roboter (Lageregelung der Manipulatoren)
Antiblockiersysteme ABS (Überwachung der Raddrehung)
Antischlupfregelung ASR (Messung der Drehzahldifferenz der Räder)
elektronische Tachometer (Ersatz der Tachowelle durch elektrische Leitung)
elektrische Sitzverstellung mit Gedächtnis
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
33
4 Programmierung in Assembler
4.1 Der Personal Computer (PC) intern
4.1.1 Register-Architektur des 80x86
8080/8085
8086/8088/80186/80286
≥ 80386
31
16 15
8 7
8 bit Mikroprozessoren
PC / XT / AT (16 bit)
AT ≥ 80386
(32 bit)
0 Bit Nummer
Arbeitsregister
EAX
AX
AH
AL
Akkumulator
für Daten, Arithmetik
BL
Basisregister
zur Bildung von Speicheradr.
CL
Zählregister
für Schleifenzähler
DL
Richtungsregister
für Ein- / Ausgabe, Arithmetik
EBX
BX
BH
ECX
CX
CH
EDX
DX
DH
Zeigerregister (Pointer)
ESP
SP
Stackpointer
BP
Basepointer, Hilfsstackpointer
Instructionpointer
(Programcounter)
EBP
EIP
IP
Indexregister (zur Bearbeitung von Zeichenketten und Datenfeldern)
ESI
SI
Source Index
EDI
DI
Destination Index
Segmentregister (jeweils 16 bit) zur Bildung der physikalischen Adresse
CS
Codesegment
Pointer Befehlsbereich
CS:IP
DS
Datensegment
Pointer Datenbereich
DS:AX (BX, CX, DX, SI, DI)
ES
Extrasegment
Pointer Datenbereich
ES:AX (BX, CX, DX, SI, DI)
SS
Stacksegment
Pointer Stackbereich
SS:SP (BP)
FS
Extrasegment
ab 80386 frei verfügb.
GS
Extrasegment
ab 80386 frei verfügb.
Prozessor Status Register PSW
15
Bit Nummer
N
IOPL
Nested
I/O Privilege
Level
Task
O
D
Over- Direcflow
tion
0
I
T
S
Z
A
P
C
Interrupt
Trap
(SS)
Sign
Zero
Aux.
Carry
Parity
Carr
y
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
34
4.1.2 Befehlssatz des 80x86 (Auswahl)
Mnemonic
Operanden
Transfer-Befehle
MOV
op1,op2
XCHG
op1,op2
IN
accu,DX
OUT
DX,accu
Arithmetik-Befehle
ADD
op1,op2
ADC
op1,op2
DAA
INC
op1
SUB
op1,op2
SBB
op1,op2
DAS
DEC
op1
CMP
op1,op2
Logik-Befehle
AND
op1,op2
OR
op1,op2
XOR
op1,op2
NOT
op1
Rotationsbefehle
ROL
op1,CL *)
ROR
op1,CL *)
RCL
op1,CL *)
RCR
op1,CL *)
SHL
op1,CL *)
SHR
op1,CL *)
Z C
Funktionsbeschreibung
-
-
kopieren
austauschen
Port in Akku lesen
Akku an Port ausgeben
(op1) ← (op2)
(op1) ↔ (op2)
AX, AL ← [DX = Portadr]
[DX = Portadr] ← AX, AL
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Addition ohne Übertrag
Addition mit Übertrag
Dezimalkorrektur nach Addition
um 1 erhöhen
Subtraktion ohne Übertrag
Subtraktion mit Übertrag
Dezimalkorrektur n. Subtrakt.
um 1 erniedrigen
Vergleich, Operanden unverän.
(op1) ← (op1) + (op2)
(op1) ← (op1)+(op2)+(C)
(AL)d ← (AL)h
(op1) ← (op1) + 1
(op1) ← (op1) - (op2)
(op1) ← (op1) - (op2) -C)
(AL)d ← (AL)h
(op1) ← (op1) - 1
(op1) ↔ (op2)
* 0 bitweises UND
* 0 bitweises ODER
* 0 bitweises Exklusiv-ODER
- - invertiert alle Bits von op1
(op1) ← (op1) ∧ (op2)
(op1) ← (op1) ∨ (op2)
(op1) ← (op1) ⊕ (op2)
(op1) ← ¬(op1)
-
(op1) ← (op1) << (CL)
(op1) ← (op1) >> (CL)
(op1) ← (op1) << (CL)
(op1) ← (op1) >> (CL)
(op1) ← (op1) << (CL)
(op1) ← (op1) >> (CL)
*
*
*
*
*
*
Linksrotieren um (CL) bit
Rechtsrotieren um (CL) bit
Linksrotieren um (CL) bit dch. C
Rechtsrot. um (CL) bit durch C
Linksshift durch C um (CL) bit
Rechtsshift durch C um (CL) bit
*) Statt CL kann auch eine Konstante stehen
Einzelbitbefehle
CLC
STC
CMC
Stackbefehle
PUSH
op1
POP
op1
Sprungbefehle
LOOP
adr
CALL
adr
RET
JMP
adr
JA, JNBE
adr
JAE,JNB,JNC adr
JNAE, JB, JC adr
JNA, JBE
adr
JE, JZ
adr
JNE, JNZ
adr
- 0 Carry löschen
- 1 Carry setzen
- ¬ Carry invertieren
-
- auf Stack retten
- von Stack restaurieren
-
-
Stack ← (op1)
(op1) ← Stack
Dekr. CX und Sprung wenn ≠ 0
Abs. Unterprogrammaufr. z. adr
Rückkehr aus Unterpr. (Return)
Absoluter Sprung zu adr
Sprung wenn größer
Sprung wenn größer oder gleich
Sprung wenn kleiner
Sprung wenn kleiner oder gleich
Sprung wenn gleich oder 0
Sprung wenn ungleich oder ≠ 0
(CX) ← (CX) - 1
letzter Befehl im Unterpr.
Sprung bei Z=0 und C=0
Sprung bei C = 0
Sprung bei C = 1
Sprung bei Z=1 oder C=1
Sprung bei Z = 1
Sprung bei Z = 0
Erklärungen zu obiger Befehlstabelle:
Destination op1:
8 oder 16 bit Register, Memory
Source op2:
8 oder 16 bit Register, Memory oder Konstante
Mindestens ein Operand (op1, op2) muß ein Register sein!
adr
Sprungadresse, durch Sprungmarke bezeichnet
Flag wird nicht beeinflußt
*
Flag wird standardmäßig gesetzt
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
35
4.1.3 Adressierung im Real Mode (unter DOS)
alle Typen haben 20 Adreßbits (1 MB physikalisch).
Die physikalische Adresse wird aus zwei 16-bit-Registern gebildet:
Beispiel:
2
3
DS:CX =
A
7
2
2A60:7FD6
6
F
5
0
D
D
0
6
6
DS * 16
(Segment-Basisadresse)
+ CX
(effektive Adresse, Offset)
= absolute (physikalische) Adresse
Die Basisadresse des Programms wird beim Start vom Betriebssystem zugeteilt.
Jedes Segment hat eine maximale Größe von 64 kB.
Bei CS:IP und DS:AX (BX, CX, DX, SI, DI)
kann das Segmentregister weggelassen werden
Programmbeispiel hierzu:
mov ax, [ bx + di + Konstante ]
mov es: [ bx + di + 48 ], cx
(hier Datensegment)
(es: Segment-Override)
dabei: [ Adresse eines Speicherplatzes ] = indirekte Adressierung eines Byte
4.1.4 Adressierung im Protected Mode (unter Windows ab 80286)
Zahl der Adreßbits:
24 beim 80286
32 ab
80386
(max. 16 MB)
(max. 4 GB)
Jedes Segment wird durch 3 Attribute beschrieben, die in den
Segment-Deskriptoren abgelegt sind:
die Segment-Basisadresse (base address) mit 24/32 bit
die Segmentgröße in Byte (limit) mit 16/20 bit
die Zugriffsrechte (access rights) zur Realisierung von Schutzrechten.
Die Segment-Deskriptoren sind 8 Byte lang.
Kleinste Segmentadresse:
Größte Segmentadresse:
Basisadresse
Basisadresse + Segmentgröße
Die Segment-Deskriptoren werden im Selektor-Teil einer virtuellen Adresse
zugeordnet.
Ab 80386 gibt es neben der segmentorientierten eine seitenorientierte Speicherverwaltung.
Virtuelle Adresse
(logische Adresse) wird vom Linker zugeordnet.
Physikalische Adresse (absolute Adresse) wird vom Betriebssystem bei
Programmausführung zugeordnet.
Der physikalische Adreßraum ist normalerweise viel kleiner als der virtuelle.
Hauptspeicher,
Nur ein Teil des Programmcodes befindet sich im
Hintergrundspeicher
der andere im
(z.B. Festplatte)
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
36
4.1.5 Memory Map des PC unter DOS
0 ... 1 MB
FFFFFH
FE000H
F6000H
F4000H
F0000H
C8000H
C0000H
B8000H
B0000H
A0000H
9FFFFH
00000H
8 kB
BIOS ROM
32 kB
Basic ROM
8 kB
User ROM
16 kB
Reserviert
32 kB
Festpl. ROM
32 kB
Memory Exp.
32 kB Video RAM
CGA
32 kB Video RAM
Monochrom
64 kB Video RAM
EGA, VGA
640 kB
User RAM
0 ...1,5 kB
006FFH
00500H
00400H
00200H
00180H
00100H
00080H
00000H
DOS
Datenbereich
BIOS
Datenbereich
Basic Interrupt Vekt.
80H - FFH
User Interrupt Vekt.
60H - 7FH
Reserv. Int. Vekt.
40H - 5FH
DOS Interrupt Vekt.
20H - 3FH
BIOS Interrupt Vekt.
0H - 1FH
4.1.6 Nutzung des PC-Arbeitsspeichers im Real- und Protected Mode
0 ... 640 kB
Konventioneller Arbeitsspeicher
wird von allen DOS Programmen benötigt.
640 kB ... 1 MB
Hoher Speicherbereich (Upper Memory Area)
Ungenutzte Teilbereiche können von Gerätetreibern,
speicherresidenten Programmen und als
Upper Memory Blocks (UMB´s) belegt werden.
> 1 MB
Erweiterungsspeicher (Extended Memory, XMS)
nur ab 80286 nutzbar,
wird von HIMEM installiert und verwaltet.
1 MB ... 1,064 MB Oberer Speicherbereich (High Memory Area, HMA)
kann von DOS belegt werden, um konventionellen
Arbeitsspeicher frei zu machen.
Expansionsspeicher (EMS) stammt aus der Zeit vor dem AT
und wird von modernen Programmen nicht mehr benutzt.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
37
4.1.7 Hardware für Programmierübungen
Zum Programmieren von Steuerungsalgorithmen steht ein Übungsgerät mit einer
8x8 Leuchtdiodenmatrix und 4 Schaltern zur Verfügung, welches an die Parallel(Drucker-) Schnittstelle LPT1 angeschlossen wird.
Zuordnung der Portadressen:
80h
40h
20h
10h
08h
04h
02h
01h
Spaltenwert:
Port 378h,
Spalten-Nr. 7 ... 0: Port 37ah,
Schalter 3 ... 0:
Port 379h,
3
7
Bit 7
Das gezeichnete Leuchtmuster wird durch
folgenden Code erzeugt:
Port 378h = 86h
Port 37ah = 3
0
Bit 6 Bit 5
Port 379h
Bit 7 .... 0
Bit 2, 1, 0
Bit 7,6,5,3
In Delphi sind direkte Zugriffe auf I/O Adressen
über Portbefehle der FH-Unit Port_u möglich.
Das obige Leuchtmuster kann mit folgenden
Programmzeilen erzeugt werden:
Bit 3
OutPort($378, $86); {Spaltenwert an Port 378h}
OutPort($37a, $03); {Spalten-Nr. an Port 37ah}
In Assembler erreicht man das gleiche Muster mit den Programmzeilen:
mov
mov
out
mov
mov
out
al, 86h
dx, 378h
dx, al
al, 3
dx, 37ah
dx, al
{Spaltenwert in Register AL laden}
{Portadresse in Register DX laden}
{Spaltenwert an Port 378h ausgeben}
{Spaltennummer in Register AL laden}
{Portadresse in Register DX laden}
{Spaltennummer an Port 37ah ausgeben}
Schaltbild des LED-Matrixteils
LPT1 des PC
LED
100
Port 378h.7
Port 378h.6
LED - Matrix
Port 378h.5
8 Zeilen * 8 Spalten
Port 378h.4
Port 378h.3
Treiber
74541
= 64 LED´s
Port 378h.2
Port 378h.1
Port 378h.0
Treiber L603
Port 37ah.2
Port 37ah.1
Port 37ah.0
8 aus 3 Decoder (im PLD MACH 210A)
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
38
4.2 Programmerstellung
4.2.1 Basis für Programmierübungen
Delphi enthält einen integrierten Assembler. Seine Benutzung hat den Vorteil, daß
die Bedienung einfach und die Initialisierung der Segmente und das Linken zum
*.exe - Programm automatisch ausgeführt wird. Der Zugang zur Assemblerprogrammierung des PC wird damit erheblich erleichtert.
Initialisierungsrumpf in Delphi:
begin
asm
Programmzeilen in Assembler
.......
end;
end.
4.2.2 Format einer Programmzeile
@Marke:
Operanden, Trennung d.
Komma
Destination,
Source
Befehl
{Kommentar}
↑
Trennung der Felder durch Blank(s)
Der Befehlscode besteht aus
1
0 bis 5
Opcodebyte mit
Operandenbytes mit je
8 bit
8 bit
Die gesamte Befehlslänge beträgt also 1 bis 6 Byte
Die Befehle sind in der Befehlstabelle aufgelistet. Sie werden im Speicher als Folge
von 2-stelligen HEX-Zahlen nahtlos aneinandergereiht.
4.2.3 Programmablauf
Startadresse des Programmspeichers → Instructionpointer IP
Opcode an IP-Adresse → CPU
IP um 1 erhöhen
Opcode decodieren, dabei Zahl der Operandenbytes ermitteln
benötigte Operanden vom Programmspeicher → CPU
IP pro Byte um 1 erhöhen
Befehl ausführen
endlos wiederholen, bis Abbruchbedingung eintritt
Abbruchbedingung:
Erreichen der Marke ´end.´
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
39
4.2.4 Programmbeispiel (I1_bsp1.asm und I1_bsp1.pas)
Erzeugung von HEX-Zahlen 0 ... 0FFH und Ausgabe in Spalte 7 des LED-Felds
Struktogramm:
Spalte 7 wählen und Register initialisieren
Zahl als Spaltenwert ausgeben
Zahl um 1 erhöhen
wiederholen solange Zahl ≠ 0
Programm (links der Maschinencode):
Programmcode asm
{ Initialisierung }
B0 07
mov al, 7
{ Spaltennummer in AL laden }
BA 7a 03
mov dx, 37ah
{ Portadresse in DX laden }
EE
out
dx, al
{ Spalte wählen }
B0 00
mov al, 0
{ Zahlenregister AL löschen }
BA 78 03
mov dx, 378h
{ Portadresse in DX laden }
{ Zahlengenerierung mit Ausgabe }
EE
@wdh:
out
dx, al
{ Zahl an Port 378h ausg. }
04 01
add al, 1
{ AL ← AL + 1 }
75 FB
jnz
@wdh
{ Schleife solange AL ≠ 0 }
end;
{ sonst Programmende }
Beim Testen dieses Programms stellt man fest, daß das Auge zu langsam ist für die
Betrachtung der Zahlenausgabe. Zwischen den Ausgaben muß deshalb eine Wartezeit
eingefügt werden.
Mit Schleifenabbruch bei 100
Struktogramm:
Spalte 7 wählen und Register initialisieren
Zahl als Spaltenwert ausgeben
Zeitverzögerung
Zahl um 1 erhöhen
wiederholen solange Zahl ≤ 100
Programm (I1_bsp1.asm):
Programmcode asm
B0 07
mov al, 7
BA 7a 03
mov dx, 37ah
EE
out
dx, al
B0 00
mov al, 0
BA 78 03
mov dx, 378h
{ Initialisierung }
{ Spaltennummer in AL laden }
{ Portadresse in DX laden }
{ Spalte wählen }
{ Zahlenregister AL löschen }
{ Portadresse in DX laden }
{ Zahlengenerierung mit Ausgabe }
EE
E8
04
3C
76
EB
@wdh:
08
01
64
F6
0D
00
out
call
add
cmp
jbe
jmp
dx, al
@warten
al, 1
al, 100
@wdh
@ende
{ Zahl an Port 378h ausg. }
{ Zeitverzögerung }
{ nächste Zahl }
{ AL ≤ 100 ? }
{ wenn ja: Schleife }
{ wenn nein: Programmende}
{ Unterprogr. zur Zeitverzögerung }
....
C3
....
....
@warten: ...............
ret
@ende:
{ siehe Abschnitt 4.2.5 }
{ Rückkehr ins Hauptprogr. }
{ Programmende }
end;
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
40
4.2.5 Verzögerungsschleife
Struktogramm:
Zählregister laden
Zählregister dekrementieren
wiederholen solange Zählregister ≠ 0
Assembler - Unterprogramm:
@warten:
@wdh1:
mov
loop
cx, 589
@wdh1
ret
Zählregister CX laden (max. 64 k)
CX dekrementieren und Schleife durchlaufen
zurück ins Hauptprogramm
Erkenntnisse:
Verzögerungszeit läßt sich durch definierte "Beschäftigung" der CPU erreichen.
Anfangswert des Zählers und Systemgeschwindigkeit bestimmen die Zeit.
Hier ist der Registerinhalt eine codierte Zahl.
Durch Verschachtelung von Zählschleifen sind längere Zeiten erreichbar.
Die Verzögerungszeit ist näherungsweise:
Zähleranfangswert ⋅ Durchlaufzeit der Schleife.
Verschachtelte Zählschleifen
Zählregister 1 laden
Zählregister 2 laden
Zählregister 2 dekrementieren
wiederholen solange Zählregister 2 ≠ 0
Zählregister 1 dekrementieren
wiederholen solange Zählregister 1 ≠ 0
Assembler - Unterprogramm:
@warten:
@wdh1:
@wdh2:
mov cx, 30
push cx
---------------------------mov cx, 0ffffh
loop @wdh2
---------------------------pop cx
loop @wdh1
ret
Zählregister 1 laden (max. 64 k)
Zählregister 1 auf Stack retten
Zählregister 2 laden (max. 64 k)
Zähler 2 dekrementieren / Schleife
Zählregister 1 von Stack holen
Zähler 1 dekrementieren / Schleife
zurück ins Hauptprogramm
Erkenntnisse:
Die Verzögerungszeit ist näherungsweise:
Produkt der Zähleranfangswerte ⋅ Durchlaufzeit der inneren Schleife
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
41
4.3 Erklärung einiger Befehle
4.3.1 Logik-Befehle (Bool´scher Prozessor)
sie verknüpfen Bits gleicher Position der Operanden.
z.B.
AND
AL, 01100111b
(oder 67h)
Bits von AL vor Befehl:
Bits der Konstanten:
Bits von AL nach Befehl:
0 1 0 1
0 1 1 0
0 1 0 0
0 1 1 1
0 1 1 1
0 1 1 1
Bits 3, 4, 7 in AL wurden gelöscht, die andern nicht verändert.
Anwendung:
Löschen (Maskieren) von Bit oder Bitgruppe.
z.B.
AL, 10011000b
OR
(oder 98h)
Bits von AL vor Befehl:
Bits der Konstanten:
Bits von AL nach Befehl:
0 1 0 1
1 0 0 1
1 1 0 1
0 1 1 1
1 0 0 0
1 1 1 1
Bits 3, 4, 7 in AL wurden gesetzt, die andern nicht verändert.
Anwendung:
Setzen von Bit oder Bitgruppe oder Sammeln von Bits.
z.B.
AL, 111100b
XOR
(oder 3Ch)
Bits von AL vor Befehl:
Bits der Konstanten:
Bits von AL nach Befehl:
0 1 0 1
0 0 1 1
0 1 1 0
1 0 1 1
1 1 0 0
0 1 1 1
Bits 2 - 5 in AL wurden invertiert, die andern nicht verändert.
Anwendung:
Invertieren von Einzelbit oder Bitgruppe.
4.3.2 Rotations-Befehle
ROL
AX, CL
Der Destination-Operand wird so oft bitweise nach links rotiert, wie es durch den
Source-Operanden (CL) spezifiziert ist (max. 15).
↑
→
......
......
→
......
......
→
bit 15
C
←
←
...
↓
bit 0
←
←
......
←
←
←
←
Register AX
beim Befehl ROR sind alle Pfeile umzudrehen, dabei bit 0 → C.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
42
RCL
DL, CL
Der Destination-Operand wird so oft bitweise durch Carry nach links rotiert, wie es
durch den Source-Operanden (CL) spezifiziert ist (max. 15).
↑
→
→
......
......
......
→
......
→
......
bit 7
C
←
←
...
↓
bit 0
←
←
←
←
←
←
←
Register DL
beim Befehl RCR sind alle Pfeile umzudrehen, dabei bit 0 → C → bit 7.
SHL
AH, CL
Der Destination-Operand wird so oft bitweise nach links geschoben, wie es durch
den Source-Operanden (CL) spezifiziert ist (max. 15)
bit 7
C
←
←
bit 0
←
←
←
←
←
←
←
←0
Register AH
SHR
AX, CL
Der Destination-Operand wird so oft bitweise nach rechts geschoben, wie es durch
den Source-Operanden (CL) spezifiziert ist (max. 15).
bit 15
0→
→
bit 0
→
→
......
→
→
→
→
→
C
Register AX
Anwendung der Rotationsbefehle
1. Programmierbare Schieberegister für universelle Anwendung.
Randbits beachten!
2. Multiplikation bei Linksrotation (Verdoppelung pro bit).
Division bei Rechtsrotation (Halbierung pro bit).
Bei Rotation um 1 bit ändern die Bits ihren Wert um den Faktor 2.
Wesentlich schneller als Multiplikations- und Divisionsbefehle!
Beispiel: mov
shl
cl, 3
ax, cl
ax ⋅ 8, wenn Bits 13-15 vorher 0 waren
mov
shr
cl, 2
bl, cl
bl / 4
Diese Befehle eignen sich nur zur Multiplikation / Division vorzeichenloser Zahlen.
Für vorzeichenrichtige Operationen gibt es weitere Befehle.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
43
4.3.3 CMP - Befehl
Der Vergleichsbefehl CMP verändert den Destination-Operanden nicht, sondern
setzt nur die Statusflags. Deshalb muß die Auswertung durch eine bedingte Sprungoperation unmittelbar danach folgen.
Format:
Funktion:
cmp op1, op2
op1 - op2 computed (Subtraktion ohne Differenzausgabe)
Zusammenstellung der Sprungbedingungen:
Zero
Carry
Entscheidung
Sprungbedingung
0
0
op1 > op2
JA, JNBE
X
0
op1 ≥ op2
JAE, JNB, JNC
X
0
1
1
1
1
0
X
op1 < op2
JNAE, JB, JC
op1 ≤ op2
JNA, JBE
op1 = op2
JE, JZ
0
X
op1 ≠ op2
JNE, JNZ
4.3.4 Stackbefehle
(nur 16 bit)
PUSH
AX
Speichert den Registerinhalt auf dem Stack
POP
AX
Schreibt die 2 höchsten Stackbytes in das Register
Damit die Stackverwaltung richtig funktioniert, müssen diese beiden Befehle immer
paarweise auftreten:
push
push
.........
pop
pop
ax
bx
bx
ax
Registerinhalte unverändert
push
push
.........
pop
pop
ax
bx
ax
bx
Registerinhalte vertauscht
Die Push- und Pop- Befehle dürfen nicht mit Sprüngen umgangen werden.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
44
4.4 Programmbeispiele
Vorsicht:
Alle Beispiele dieses Kapitels arbeiten als Endlosschleifen und sollten
nur unter Delphi getestet werden! Abbruch mit <Ctrl+Brk>
4.4.1 UND - Verknüpfung (I1_bsp2.asm und I1_bsp2.pas)
Schaltfunktion:
P378h.0 = P379h.6 ∧ P379h.5 ∧ ¬P379h.3
P378h.0 = 1 für Bitmuster von P379h (die eindeutige von 8 Kombinationen):
Bit 7
Bit 6
Bit 5
X
1
1
Port 379h
Bit 4
Bit 3
X
0
Bit 2
Bit 1
Bit 0
X
X
X
Struktogramm:
Signale an Port 379h in AL einlesen
Bits 6,5,3 von AL isolieren, d.h. die übrigen auf 0 setzen
AL = 60H ?
ja
nein
P378h.0 ← 1
P378h.0 ← 0
bedingungslos wiederholen
Assemblerprogramm (I1_bsp2.asm):
asm
{ Initialisierung }
@start:
mov dx, 379h
{ Input-Portadresse in DX laden }
{ Logikteil }
in
al, dx
{ Signale in AL einlesen }
mov dx, 378h
{ Output-Portadresse in DX laden }
and al, 68h
{ Maske }
cmp al, 60h
{ Vergleich }
je
@ja
{ Sprung wenn gleich }
{ Signalausgabe }
in
al, dx
{ Port 378h in AL einlesen }
and al, 0feh
{ Bit 0 ... }
out
dx, al
{ ... von Port 378h löschen }
jmp @start
{ Schleife }
@ja:
in
al, dx
{ Port 378h in AL einlesen }
or
al, 1
{ Bit 0 ... }
out
dx, al
{ ... von Port 378h setzen }
jmp @start
{ Schleife }
end;
{ Programmende }
Erkenntnisse
•
Zwischen der Ein- und Ausgabe des Ergebnisses vergeht Rechenzeit, die von
der Leistung des Systems und von der Programmlänge abhängt.
•
Echtzeitbetrieb ist nur bedingt möglich.
•
Falsche Signalausgabe beim Einschalten, da Ports noch nicht initialisiert.
•
Das Programm arbeitet in Endlosschleife.
•
Abbruch durch externes Signal, Booten oder Abschalten.
•
Der Prozessor ist mit diesem Programm voll beschäftigt → Interruptbetrieb?
•
Die Zahl d. Eingänge beeinflußt die Programmlänge nicht
•
Es gibt viele Lösungswege, wichtig ist eine gute Struktur.
•
Hier besteht das Datenwort aus unabhängigen Einzelbits.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
45
•
4.4.2 Heizungssteuerung, siehe Abschnitt 2.3 (I1_bsp3.asm u. I1_bsp3.pas)
vereinfachte Schaltfunktion:
Signalzuordnung:
A = (¬ E1 ∧ ¬ E2) ∨ (¬ E2 ∧ E3)
E1 → P379h.5
E3 → P379h.7
E2 → P379h.6
A → P378h.7
Damit lautet die Schaltfunktion:
P378h.7 = (¬P379h.5 ∧ ¬ P379h.6) ∨ (¬P379h.6 ∧ P379h.7)
P378h.7 = 1 für Bitmuster von P379h (die eindeutige von 4 Kombinationen):
Bit 7
Bit 6
Bit 5
X
0
0
Port 379h
Bit 4
Bit 3
X
X
Bit 2
Bit 1
Bit 0
X
X
X
oder P378h.7 = 1 für Bitmuster von P379h (die eind. von 4 Kombinationen):
Bit 7
Bit 6
Bit 5
1
0
X
Port 379h
Bit 4
Bit 3
X
Struktogramm:
AL ← P379h
AH ← AL
Bits 5 und 6 von AL isolieren
AL = 0 ?
ja
•/•
P378h.7 ← 1
bedingungslos wiederholen
X
Bit 2
Bit 1
Bit 0
X
X
X
nein
bits 6 und 7 von AH isolieren
AH = 80H ?
ja
nein
P378h.7 ← 1
P378h.7 ← 0
Assemblerprogramm (I1_bsp3.asm):
asm
{ Initialisierung und Logik }
@start:
mov dx, 379h
{ Input-Portadresse in DX laden }
in
al, dx
{ Signale in AL ... }
mov ah, al
{ ... und AH einlesen }
mov dx, 378h
{ Spaltenwert-Portadr. in DX laden }
and al, 01100000b
{ Maske 1 }
jz
@ja
{ Sprung wenn 0 }
and ah, 11000000b
{ Maske 2 }
cmp ah, 80h
{ Vergleich }
je
@ja
{ Sprung wenn gleich }
{ Signalausgabe }
in
al, dx
{ Status v.Sp.-wertport 378h einlesen}
and al, 7fh
{ Bit 7 ... }
out
dx, al
{ ...v.Spaltenwertport 378h löschen }
jmp @start
{ Schleife }
@ja:
in
al, dx
{ Status v.Sp.-wertport 378h einlesen}
or
al, 80h
{ Bit 7 von ... }
out
dx, al
{ ... Spaltenwertport 378h setzen }
jmp @start
{ Schleife }
end;
{ Programmende }
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
46
4.4.3 Wachsendes Leuchtband (I1_bsp4.asm und I1_bsp4.pas)
Die linke Spalte der Leuchtdiodenmatrix ist als ´wachsendes Leuchtband´ zu
programmieren. Zu Beginn ist die Spalte abgeschaltet. Unten beginnend sollen die
Leuchtdioden nacheinander in gleichen Zeitabständen zugeschaltet werden, so daß
sich ein in der Länge wachsendes Leuchtband ergibt. Der Vorgang soll sich nach
Erreichen der maximalen Länge endlos wiederholen.
Die Aufgabe wird durch Einschieben von ´1´ in ein Register gelöst:
bit 7
0
←
0
bit 0
0
0
C nach Rot.
0
0
0
0
0
←
Register AL
1
C vor Rot.
Assemblerprogramm (I1_bsp4.asm):
asm
{ Initialisierung }
mov dx, 37ah
{ Spalten-Portadresse in DX laden }
mov al, 7
{ linke Spalte in AL }
out dx, al
{ an Spaltenport 37ah ausgeben }
mov dx, 378h
{ Spaltenwert-Portadr. in DX laden }
@start:
mov al, 0
{ Register für Leuchtmuster löschen }
@wdh:
out
dx, al
{ an Saltenwertport 378h ausgeben }
call @warten
{ Zeitverzögerung }
{ nächstes Leuchtmuster erzeugen }
stc
{ Carry setzen }
rcl
al, 1
{ 1 x Linksrotation }
jnc
@wdh
{ Leuchtband weiter wachsen lassen }
jmp @start
{ Leuchtband neu aufbauen }
{ Unterprogramm zur Zeitverzögerung }
@warten: mov cx, 20
{ Zählregister 1 laden (max. 64 k) }
@wdh1: push cx
{ Zählregister 1 auf Stack retten }
mov cx, 0ffffh
{ Zählregister 2 laden (max. 64 k) }
@wdh2: loop @wdh2
{ Zähler 2 dekrementieren / Schleife }
pop cx
{ Zählregister 1 von Stack holen }
loop @wdh1
{ Zähler 1 dekrementieren / Schleife }
ret
{ zurück ins Hauptprogramm }
end;
{ Programmende }
4.4.4 Wortaddition mit Doppelwort-Ergebnis (32 bit) (digital)
Beispiel:
Registerpaar AX/BX ← AX/BX + CX (BX = Low_word)
Assembler - Programmzeilen:
add bx, cx
bx ← bx + cx
(Low_word addieren)
adc ax, 0
ax ← ax + 0 + C (Übertrag in High_word)
bitweise Erklärung:
(Zahlen erfunden)
0 ...... 0 0 1 0 1 0 1
0 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0
ax
bx
+ 1 1 0 1 1 1 0 0 0 1 0 1 0 0 1 1
↓
cx
+ 1
= 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1
C↓
bx
0 ...... 0 0 1 0 1 1 0
0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1
ax
unverändert
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
bx
47
4.4.5 Umlaufender Punkt an der LED-Matrix (I1_bsp5.asm und I1_bsp5.pas)
Aufgabenstellung:
Ein Leuchtpunkt soll, in der linken oberen Ecke der
LED-Matrix beginnend, im Uhrzeigersinn umlaufen.
Die Umlaufgeschwindigkeit soll im Bereich 1:16 oder
mehr über die Schalter an Port 379h verstellt werden
können.
80h
40h
20h
10h
08h
04h
02h
01h
Die Umlaufgeschwindigkeit soll so einstellbar sein,
daß der optische Eindruck vom Lauf des
Einzelpunkts bis zur flimmerfreien Darstellung eines
hellen Quadrates reicht.
7 6 5 4 3 2 1 0
Bit 7
Assemblerprogramm (I1_bsp5.asm):
asm
@start:
@rechts:
mov
mov
call
call
call
call
call
jmp
call
dec
call
cmp
jne
ret
bh, 80h
bl, 7
@Ausgabe
@rechts
@runter
@links
@rauf
@start
Bit 6 Bit 5
Port 379h
Bit 3
{ Hauptprogramm }
{ init Register mit Spaltenwert }
{ init Register mit Spaltennummer }
{ .... }
{ .... }
{ .... }
{ 4 lineare Bewegungen }
{ Unterprogramm rechts }
@warten
{ Zeitverzögerung }
bl
{ 1 Spalte nach rechts }
@Ausgabe
{ Punkt ausgeben }
bl, 0
@rechts
{ rechter Rand? }
{ Unterprogramm abwärts }
@warten
{ Zeitverzögerung }
bh, 1
{ 1 Position nach unten }
@Ausgabe
{ Punkt ausgeben }
bh, 1
{ unterer Rand? }
@runter
@runter:
call
shr
call
cmp
jne
ret
@links:
call
inc
call
cmp
jne
ret
@warten
bl
@Ausgabe
bl, 7
@links
@rauf:
call
shl
call
cmp
jne
ret
@warten
bh, 1
@Ausgabe
bh, 80h
@rauf
{ Unterprogramm links }
{ Zeitverzögerung }
{ 1 Spalte nach links }
{ Punkt ausgeben }
{ linker Rand? }
{ Unterprogramm aufwärts }
{ Zeitverzögerung }
{ 1 Position nach oben }
{ Punkt ausgeben }
{ oberer Rand? }
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
48
{ Unterprogramm zur Punktausgabe }
@Ausgabe: mov
mov
out
mov
mov
out
ret
@warten:
@wdh1:
@wdh2:
call
push
mov
loop
pop
loop
ret
@zbasis: push
push
mov
mov
in
mov
and
and
shl
add
shr
add
pop
pop
ret
end;
dx, 378h
al, bh
dx, al
dx, 37ah
al, bl
dx, al
@zbasis
cx
cx, 5h
@wdh2
cx
@wdh1
{ Spaltenwert ausgeben }
{ Spaltennummer ausgeben }
{ Unterprogramm zur Zeitverzögerung }
{ Geschwindigkeit einlesen }
{ Zählregister 1 auf Stack retten }
{ Zählregister 2 laden (max. 64 k) }
{ Zähler 2 dekrementieren / Schleife }
{ Zählregister 1 von Stack holen }
{ Zähler 1 dekrementieren / Schleife }
{ Unterprogramm zur Zeiteingabe }
dx
{ Register retten }
ax
cx, 0
{ Zeitregister löschen }
dx, 379h
{ Input-Portadresse in DX laden }
al, dx
{ Signale in AL ... }
cl, al
{ ... und CL einlesen }
al, 11100000b
{ Bits 7, 6, 5 in AL isolieren }
cl, 00001000b
{ Bit 3 in CL isolieren }
cl, 1
{ Bit 3 in CL nach Bit 4 }
cl, al
{ Schaltersignale in Bits 7...4 von CL }
cl, 4
{ 4 Bit ins low Nibble }
cl, 1
{ 0 vermeiden }
ax
{ Register restaurieren }
dx
{ Programmende }
In den Dateien I1_bsp5.asm und I1_bsp5.pas ist das Programm erweitert um die
Abbruchmöglichkeit durch eine PC-Taste und einen Abbruchhinweis am Bildschirm.
Untersuchen Sie die dort verwendete Programmiertechnik.
4.4.6 Weitere Programmbeispiele im Netz unter s:\semester\schaub\ueb_asm
Schalter.asm
Prüfprogramm für den Schaltercode.
Spalten.asm
Helle LED-Spalte langsam von rechts nach links bewegen.
Testled. asm
Ein Punkt durchläuft das Feld zeilenweise von links oben nach
rechts unten. Tempo durch Schalter steuerbar.
Schach. asm
Schachbrettmuster am LED-Übungsgerät.
Tempo bis zu flimmerfreiem Bild an Tasten einstellbar.
Billard. asm
Reflexmuster am LED-Übungsgerät.
Punktbewegung unter 45 Grad innerhalb 7 Zeilen-Rechteck.
Tempo über Tasten verstellbar.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
49
5
Programmierung in Pascal
5.1 Zielsetzung
ist, die Lösung von Steuerungsproblemen durch
Verbindungsprogrammierte Logik,
Assemblerprogrammierung
SPS
Pascal
und
durch Steuerprogramme in
zu erweitern.
Dies soll mit einfachsten Sprachelementen anhand von Beispielen erfolgen, ohne
der systematischen Behandlung von Pascal im Fach ´Informationstechnik II´
vorzugreifen. Deshalb wurde bewußt auf Realzahlen verzichtet und Anweisungen für
Ein- und Ausgabe über die Konsole nicht behandelt.
Informationen zu Pascal:
siehe ´Arbeitsbuch Informatik´.
Programmierumgebung:
Delphi 5. Der Quellcode wird in den
Ereignishandler 'TFormular.OnActivate(...)'
eingefügt und von diesem gestartet.
Für Übungszwecke kann das leere Projekt
'It1_Basis' verwendet werden, wobei an
bezeichneter Stelle das Steuerprogramm
geschrieben oder eingefügt wird.
Hardware-Plattform für Übungen:
LED- Übungsgerät an der DruckerParallelschnittstelle LPT1 (von der
Assemblerprogrammierung bekannt).
Systematische Programmplanung:
mit Struktogramm (s. ´Arbeitsbuch´).
5.2 Programm-Struktur in Pascal
5.2.1 Programm-Beispiel ´Schalter.pas´
Demoprogramm für die Wirkung der Schalter.
Die Schalter werden eingelesen, die 4 Bits maskiert und in der aktuellen LED-Spalte
ausgegeben.
Lernziel:
begin
1. Struktur eines Minimal-Programms aufzeigen.
2. Kennenlernen der LED-Zeilenansteuerung und der Schalterfunktion
3. Lesen von und Schreiben in Ports in Pascal
(unter Windows NT mit FH-Treiber).
4. Einfache Endlosschleife in Pascal.
{ Beginn des Instruktionsteils }
repeat
OutPort($378, InPort($379) and $e8);
until false;
end.
Vorsicht:
{ Schleifenbeginn }
{ Ausgabe, Einlesen und maskieren }
{ Schleifenende }
{ Ende des Instruktionsteils }
Programme mit Endlosschleifen nur unter Delphi testen!
Abbruch mit Schaltfläche II.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
50
5.2.2 Programm-Beispiel ´Spalten.pas´
Funktionsbeschreibung:
Helle Spalte am LED-Übungsgerät langsam von rechts nach links bewegen.
Lernziel:
1. Deklarationen kennenlernen.
2. Zweidimensionale Ansteuerung des LED-Felds.
3. Schleife mit Abbruchbedingung in Pascal.
4. Verzögerung mit fester Zeit in ms.
Struktogramm:
konstanten Spaltenwert deklarieren (alle Dioden hell)
variable Spalte mit 0 initialisieren (ganz rechts)
Spaltenwert ausgeben an Port 378h
Wiederholen, solange die Spaltennummer < 8
Spaltennummer ausgeben an Port 37ah
Spaltennummer um 1 erhöhen
Verzögerung von 1 Sekunde
Pascalprogramm:
const
Wert = $ff;
var
Spalte : Integer;
begin
Spalte := 0;
OutPort($378, Wert);
while Spalte < 8 do
begin
OutPort($37a, Spalte);
Spalte := Spalte+1;
Sleep(1000);
end;
end.
{ Beginn der Konstantendeklarationen }
{ Spaltenwert → Konstantenbezeichner }
{ Beginn der Variablendeklarationen }
{ Variable als ganze 16-bit-Zahl deklariert }
{ Beginn des Instruktionsteils }
{ init Spalte }
{ Spaltenwert ausgeben }
{ Beginn der Verbundanweisung }
{ Ausgabe Spaltennummer }
{ nächste Spalte }
{ feste Verzögerung 1000 ms }
{ Ende der Verbundanweisung }
{ Ende des Instruktionsteils }
Das Programm wird bei Erreichen des letzten end. (mit Punkt!) beendet.
5.2.3 Weitere Beispielprogramme
Im Verzeichnis S:......InfoT1\ ueb_pas sind weitere Pascalprogramme zu finden,
welche Figuren und Muster am LED-Feld erzeugen:
Testled.pas
Schach.pas
Billard.pas
Schalter.pas
Ein Punkt durchläuft das Feld zeilenweise von links oben nach
rechts unten. Tempo durch Schalter steuerbar.
Schachbrettmuster am LED-Übungsgerät. Erzeugt werden
Qudrate von 2x2 Punkten. Tempo an Tasten einstellbar.
Reflexmuster am LED-Übungsgerät. Tempo verstellbar.
Programm zur Demonstration der Schalterbit-Konfiguration.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
51
5.3 Einige Variablentypen
Jede Deklaration einer Variablen muß deren Typ angeben.
Dieser legt den Wertebereich der Variablen fest und bestimmt die Operationen, die
mit ihr ausgeführt werden können.
5.3.1 Ganze Zahlen
Typ
Bereich
Format
shortint
-128 ... 127
8 Bit = 1 Byte mit Vorzeichen
integer
-32768 ... 32767
16 Bit = 2 Bytes mit Vorzeichen
longint
-2147483648 ... 2147483647 32 Bit = 4 Bytes mit Vorzeichen
byte
0 ... 255
word
0 ... 65535
8 Bit = 1 Byte ohne Vorzeichen
16 Bit = 2 Bytes ohne Vorzeichen
5.3.2 Boolean
Variable vom Typ boolean können nur einen der vordefinierten Werte
False (0) oder True (1) annehmen und eignen sich damit als Merker (1 Bit).
5.3.3 Char
Variable vom Typ char enthalten den ASCII-Code von Zeichen und benötigen
deshalb 1 Byte Speicherplatz.
5.3.4 String
Variable vom Typ string enthalten eine Zeichenfolge mit dynamischer Länge.
Der Speicherplatzbedarf ist 1 Byte pro Zeichen +1 für das Stringendezeichen.
Deklarationsbeispiel:
var
nachricht : string;
Initialisierungssbeispiel:
nachricht := ´Anton, kommen!´;
5.3.5 Array
Arrays haben eine festgelegte Anzahl von Komponenten eines einzigen Typs.
Deklarationsbeispiel: Bitmuster für 2 Zeichen am LED-Feld:
const
muster : array[0..1,0..7] of byte
= (($7E,$83,$85,$89,$91,$A1,$C1,$7E), { 0 }
($FF,$88,$88,$88,$88,$88,$88,$FF)); { A }
Zugriffsbeispiel für 3. Spalte von ´A´:
Spalte := muster[1,2];
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
52
5.4 Einige Ausdrücke
Ausdrücke bestehen aus Operatoren und Operanden.
Binäre Operatoren verknüpfen 2 Operanden (Beispiel: Spalte + 1).
Unäre Operatoren arbeiten mit einem Operanden (Beispiel: not Wert).
5.4.1 Rangfolge der Operatoren
Rangfolge
Operatoren
not, @
*, /, div, mod, and, shl, shr
+, -, or, xor
=, <>, <, >, <=, >=, in
Rang
1
2
3
4
Kategorie
unär
multiplizierend
addierend
relational
Operationen von gleichem Rang werden normalerweise von links nach rechts
durchgeführt.
5.4.2 Die wichtigsten Operatoren
Arithmetische
Operatoren
Operator
+
*
/
div
mod
Operation
Addition
Subtraktion
Multiplikation
Division
Integerdivision
Modulo
ganzz. Ergebistyp
Integer
Integer
Integer
Integer
Integer
Integer
Logische
Operatoren
Operator
not
and
or
xor
shl
shr
Operation
bitweise Negation
bitweises Und
bitweises Oder
bitweise Antivalenz
Linksschieben
Rechtsschieben
Ergebistyp
Integer
Integer
Integer
Integer
Integer
Integer
Boolesche
Operatoren
Operator
not
and
or
xor
Operation
logische Negation
logisches Und
logisches Oder
logische Antivalenz
Ergebistyp
Boolean
Boolean
Boolean
Boolean
Relationale
Operatoren
Operator
=
<>
<
>
<=
>=
in
Operation
gleich
ungleich
kleiner als
größer als
kleiner oder gleich
größer oder gleich
Element von
Ergebistyp
Boolean
Boolean
Boolean
Boolean
Boolean
Boolean
Boolean
Schreibweise
und Funktion
wie bei
Assembler
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
53
5.5 Kontrollstrukturen
5.5.1 repeat [...] until ...
Struktogramm:
Spaltennummer ausgeben an Port 37ah
Spaltennummer um 1 erhöhen
Verzögerung von 1 Sekunde
Wiederholen, bis die Spaltennummer 8 ist
Pascalprogramm:
repeat
OutPort($37a, Spalte);
Spalte := Spalte+1;
Sleep(1000);
until Spalte = 8;
{ Ausgabe Spaltennummer }
{ nächste Spalte }
{ feste Verzögerung 1000 ms }
Die Anfangsspalte muß vor Schleifenbeginn gesetzt werden.
Die Spaltenänderung wird innerhalb der Schleife vorgenommen.
Die Bewertung des Kontrollausdrucks erfolgt nach dem Schleifendurchlauf.
Die Schleife wird deshalb mindestens einmal durchlaufen.
Die Schleifenbegrenzung ist durch repeat ... until vorgegeben.
5.5.2 while ... do [...]
Struktogramm:
Wiederholen, solange die Spaltennummer < 8
Spaltennummer ausgeben an Port 37ah
Spaltennummer um 1 erhöhen
Verzögerung von 1 Sekunde
Pascalprogramm:
while Spalte < 8 do
begin
OutPort($37a, Spalte);
Spalte := Spalte+1;
Sleep(1000);
end;
{ Beginn der Verbundanweisung }
{ Ausgabe Spaltennummer }
{ nächste Spalte }
{ feste Verzögerung 1000 ms }
{ Ende der Verbundanweisung }
Die Anfangsspalte muß vor Schleifenbeginn gesetzt werden.
Die Spaltenänderung wird innerhalb der Schleife vorgenommen.
Die Bewertung des Kontrollausdrucks erfolgt vor dem Schleifendurchlauf.
Die Schleife wird deshalb mindestens nullmal durchlaufen.
Die Verbundanweisung (>1 Anweisung) wird durch begin ... end begrenzt.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
54
5.5.3 for ... do [...]
Struktogramm:
Wiederholen für die Spaltennummern 1 bis 7
Spaltennummer ausgeben an Port 37ah
Verzögerung von 1 Sekunde
Pascalprogramm:
for Spalte := 0 to 7 do
begin
OutPort($37a, Spalte);
Sleep(1000);
end;
{ ..to.. erhöht, ..downto.. erniedrigt um 1 }
{ Beginn der Verbundanweisung }
{ Ausgabe Spaltennummer }
{ feste Verzögerung 1000 ms }
{ Ende der Verbundanweisung }
Die Anfangsspalte wird durch die Schleifenanweisung gesetzt.
Die Spaltenänderung wird nach Durchlauf der Schleife autom. vorgenommen.
Die Bewertung des Kontrollausdrucks erfolgt vor dem Schleifendurchlauf.
Die Schleife wird deshalb mindestens nullmal durchlaufen.
Die Verbundanweisung (>1 Anweisung) wird durch begin ... end begrenzt.
5.5.4 Anweisung if ... then ... else
Struktogramm:
Bits = 60H ?
ja
P378h.0 ← 1
nein
P378h.0 ← 0
Pascalprogramm:
if Bits = $60
then OutPort($378, InPort($378) or 1)
else OutPort($378, InPort($378) and $fe);
{ Vergleich }
{ 1. Zweig, ´True´ }
{ 2. Zweig, ´False´ }
5.5.5 Anweisung case ... of ... else ...
Struktogramm:
Bits = ?
60h
P378h.0 ← 1
40h
P378h.1 ← 1
28h
P378h.2 ← 1
Rest
P378h.0 ← 0
Pascalprogramm:
OutPort($378, InPort($378) and $f8);
{ Vorbereitung der Ausgänge }
case Bits of
{ Selektorbeginn }
$60: OutPort($378, InPort($378) or 1);
{ 1. Zweig }
$40: OutPort($378, InPort($378) or 2);
{ 2. Zweig }
$28: OutPort($378, InPort($378) or 4);
{ 3. Zweig }
else entfällt wegen Vorbereitung der Ausgänge
{ 4. Zweig }
end;
{ Selektorende }
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
55
6 Speicherprogrammierte Steuerung (SPS)
6.1 Aufbau des Übungsgeräts (S5 - 100U)
Module und zugehörige Adressen
Zentralbaugruppe
mit:
CPU
ROM, RAM
Registern
Merkern
Timern
Assembler
Betriebssystem
→
BUS
↑
Anschluß
Programmiergerät
Analog Analog weitere
Input Output Baugr.
Digital Digital
Input Input
Digital
Output
Digital
Output
8
Leitungen
8
Leitungen
8
Leitungen
8
4
2
Leitun- Kanäle Kanäle
gen
bebestückt stückt
↑
Adr.
↑
Adr.
↑
Adr.
↑
Adr.
↑
Adr.
↑
Adr.
......
↑
......
0.0...0.7 1.0...1.7 2.0...2.7 3.0...3.7 96...103 104-111
analog
analog
Adressen 0 bis 63: für Digitalmodule in Schritten von 1 Adresse.
Adressen ab 64:
für Analogmodule in Schritten von 8 Adressen.
Die Analogmodule müssen rechts vom letzten Digitalmodul gesteckt werden.
6.2 Schrittweiser (sequentieller) Programmabl. im Programmbaust.
Prozeßabbild der Eingänge (PAE) in CPU laden
Verknüpfung der Eingänge in Programmschritten zeilenweise
Eingänge werden dabei nicht gelesen, sondern PAE verwendet
Prozeßabbild der Ausgänge (PAA) zu Ausgängen übertragen
Bausteinende (BE)
Baustein wird bedingungslos wiederholt
auch prozeßbedingte Wiederholungen sind möglich
Die Aktualisierung der Ausgänge erfolgt im Takt der Programm-Durchlaufzeit.
Die Zeitauflösung hängt von der Programmlänge und von der Zahl der Programmbausteine ab.
Rechenzeit: ca. 0,1 ... 100 µs pro Binäranweisung je nach CPU -Typ,
beim Übungsmodell sind es 7µs pro Binäranweisung.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
56
6.3 Programmierung in der Steuerungssprache STEP5
Kleine Auswahl aus dem Anweisungssatz:
OperationsArt
VerknüpfungsOperationen
SpeicherOperationen
Befehl
UND
ODER
NICHT
Klammer
Operation
Abk
U
O
UN, ON
U(, O(, )
SET
RESET
Zuweisung
Laden
S
R
=
L
Analoge
Ausgabe
Transferieren
T
weitere:
(nicht detailliert
aufgeführt)
Zeitoperation
Zähloperation
Arithm. Operat.
Sprung-Operat.
S..
Z..
Analoge
Eingabe
Operand
Kennzeichen
Parameter
Eingang E
Ausgang A
Merker M
Adresse
Zeitgeber T
Zähler Z
Eingang E
Ausgang A
Adresse
Merker M
E-, A- Byte B,
E-, A- Wort W,
Adresse
Konstante K
→ Akku
Akku →
E-, A- Byte B,
Adresse
E-, A- Wort W,
Konstante K
Beispiel: Übungsaufgabe 2
Beispiel: Binärzähler
(Symmetrie von 5 Schaltern)
A 2.2 =
(E1.0∧E1.1∧E1.3∧E1.4)
∨ (E1.0∧¬E1.1∧¬E1.3∧E1.4)
∨ (¬E1.0∧E1.1∧E1.3∧¬E1.4)
∨ (¬E1.0∧¬E1.1∧¬E1.3∧¬E1.4)
Anweisungsliste (AWL):
O(
U
E
1.0
1. Klammer
U
E
1.1
U
E
1.3
U
E
1.4
)
O(
U
E
1.0
2. Klammer
UN
E
1.1
UN
E
1.3
U
E
1.4
)
O(
UN
E
1.0
3. Klammer
U
E
1.1
U
E
1.3
UN
E
1.4
)
O(
UN
E
1.0
4. Klammer
UN
E
1.1
UN
E
1.3
UN
E
1.4
)
=
A
2.2
Zuweisung
BE
Bausteinende
(wird vorgeführt)
E 1.4
Wahlschalter für Zähler löschen
E 1.5
Eingang für Zählimpulse
A3
Ausgang für Zählerstand
Anweisungsliste (AWL):
U
E
1.4
E 1.4 = 1 (löschen)?
nein: Zeile überspringen
R
Z
1
ja: Zähler Z1 rücksetzen
U
E
1.5
ZV
Z
1
L
Z
1
T
AB
3
E 1.5 = 1 (Zählimpuls)?
nein: Zeile überspringen
ja: Z1 + 1 (vorwärts zählen)
Lade Zählerstand Z1
→ Akku
Transferiere Akku
→ Ausgang (Byte) 3
BE
Diese Programme können mit WinSps in der
Simulation oder am Gerät im Labor getestet
werden.
Name der Datei, die diese Beispiele u.a. enthält:
comp1.prj
Die Programme können von WinSps aus über die
serielle Schnittstelle in die SPS geladen werden.
Prof. G. Schaub - I1_v.doc - Druck 07.02.01
57
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement