Maschinenorientierte Programmierung - Termin 11, 16.12.2013
Maschinenorientierte Programmierung - Termin 11, 16.12.2013
Maschinenorientierte Programmierung - Termin 11, 16.12.2013
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Prof. Dr. Sven-Hendrik Voß | Wintersemester 2013<br />
Technische Informatik (Bachelor), Semester 2 <strong>Termin</strong> <strong>11</strong>, <strong>16.12.2013</strong><br />
<strong>Maschinenorientierte</strong> <strong>Programmierung</strong>
Seite 2 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Inhaltsverzeichnis<br />
Themen und <strong>Termin</strong>e<br />
Lernziele<br />
Datenkommunikation<br />
Parallele Datenübertragung<br />
Serielle Datenübertragung<br />
Serielle Schnittstelle<br />
Asynchrone Datenübertragung<br />
Synchrone Datenübertragung<br />
Serielle Schnittstelle des 8015<br />
SFR für serielle Schnittstelle<br />
Konfigurationsmodi<br />
Empfangen und Versenden von Daten<br />
Erzeugung der Baudrate<br />
Zusammenfassung
Seite 3 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Themen und <strong>Termin</strong>e - Seminaristischer Unterricht<br />
Seminaristischer Unterricht (SU) im Raum B-254, montags 10:00 - <strong>11</strong>:30 Uhr<br />
<strong>Termin</strong> Datum Themen<br />
1 07.10. Organisatorisches, Nachtrag sequentielle Logik<br />
2 14.10. Einführung, Rechnerarchitekturen<br />
3 21.10. Befehlsausführung und Organisationsprinzipien<br />
4 28.10. Adressierung und Maschinenprogrammierung<br />
5 04.<strong>11</strong>. Programmiermodell des 8051 Mikrocontrollers<br />
6 <strong>11</strong>.<strong>11</strong>. Assemblersyntax des 8051<br />
7 18.<strong>11</strong>. Assemblersyntax und Betriebsmodi des 8051<br />
8 25.<strong>11</strong>. I/O Port-<strong>Programmierung</strong>, Umgang mit Instruktionen und Programme<br />
9 02.12. Interrupt-<strong>Programmierung</strong><br />
10 09.12. Timer- und Counter-<strong>Programmierung</strong><br />
<strong>11</strong> 16.12. Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen<br />
23.12. fällt aus (Weihnachtsferien)<br />
30.12. fällt aus (Weihnachtsferien)<br />
12 06.01. Benutzung der seriellen Schnittstelle, Timer, Interrupts<br />
13 13.01. Praxisbeispiele<br />
14 20.01. Hardwarenahe <strong>Programmierung</strong> in C<br />
15 27.01. Wiederholung und Klausurvorbereitung<br />
16 03.02. Klausur<br />
17 10.02. Klausurrückgabe und Besprechung
Seite 4 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Lernziele<br />
Nach diesem <strong>Termin</strong> sollten Sie...<br />
◮<br />
◮<br />
◮<br />
Grundbegriffe der Datenkommunikation verinnerlicht haben<br />
die prinzipiellen Vorgänge bei der<br />
Seriellen-Schnittstellen-<strong>Programmierung</strong> verstanden haben<br />
Programme zum Senden und Empfangen über die serielle Schnittstelle<br />
schreiben können
Seite 5 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Datenkommunikation<br />
Datenübertragung<br />
Signal Gleichlauf Zeichenübertragung Betrieb<br />
analog<br />
asynchron<br />
1 1 1 0 1 1 0 1<br />
bitseriell<br />
simplex<br />
1<br />
digital<br />
synchron<br />
0<br />
1<br />
1<br />
bitparallel<br />
halbduplex<br />
0<br />
vollduplex<br />
Kern der Datenkommunikation: Transport von Daten → Datenübertragung<br />
von einem Sender mittels eines Übertragungskanals zu einem Empfänger<br />
In der Praxis: unterschiedliche Übertragungsmethoden, -ausführungen,<br />
-geschwindigkeiten
Seite 6 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Parallele Datenübertragung<br />
Mehrere Bits werden zeitgleich über mehrere Datenleitungen übertragen<br />
Anzahl der Datenleitungen meist Vielfache von 8 (Byte-Struktur!) plus ggf.<br />
zusätzliche Kanäle für Parität, Taktsignal, etc.<br />
Beispiel: 8-Bit breite parallele Datenübertragung<br />
MSB<br />
LSB<br />
Sender<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
1<br />
Empfänger<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
1<br />
MSB<br />
LSB
Seite 7 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Serielle Datenübertragung<br />
Einzelne Bits werden über eine Leitung zeitlich nacheinander übertragen<br />
Am Sender müssen Bytes in serielle Bits konvertiert werden<br />
(Parallel-Seriell-Wandler, Schieberegister), am Empfänger ist eine<br />
Seriell-Parallel-Wanldung nötig<br />
Bit-Reihenfolge und Byte-Reihenfolge müssen beachtet werden<br />
Beispiel: bitweise Datenübertragung (LSB first)<br />
Sender<br />
Empfänger<br />
MSB<br />
LSB<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
1<br />
zeitlich nacheinander (seriell)<br />
0 0 1 0 1 1 0 1<br />
MSB<br />
LSB<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
1<br />
MSB<br />
LSB
Seite 8 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Serielle Schnittstelle<br />
Für serielle Schnittstellen werden häufig folgende Abkürzungen verwendet:<br />
◮<br />
◮<br />
UART: Universal Asynchronous Receiver Transmitter<br />
USART: Universal Synchronous/Asynchronous Receiver Transmitter<br />
U(S)ART: Art der seriellen Datenübertragung auf logischer Ebene<br />
◮<br />
◮<br />
unabhängig von Spannungen (5V TTL-, 3V CMOS-Pegel, etc.)<br />
unabhängig von IO-Standards (RS232, optisch, high oder low aktiv, etc.)<br />
RS232: Schnittstellenstandard (Datenübertragung auf elektrischer Ebene)<br />
◮<br />
◮<br />
◮<br />
◮<br />
Festlegung von Übertragungspegeln: +/-12V Pegel, bipolar pro Leitung,<br />
low-aktiv<br />
Definition von Signalen: 2 Datenleitungen und viele Steuerleitungen<br />
Festlegung des physikalischen Interface: 9-poliger DSUB-Stecker (ältere<br />
Systeme: 25-poliger Stecker)<br />
Festlegung von Reichweite: üblicherweise 6-8 Meter
Seite 9 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Serielle Schnittstelle<br />
Controller Board<br />
Mikrocontroller<br />
UART<br />
TxD<br />
RxD<br />
RS232<br />
Transceiver<br />
DSUB9<br />
Buchse<br />
Verbindung<br />
zum PC o.ä.<br />
Bidirektionale UART benötigt 2 Daten-Leitungen und Masse (GND)<br />
◮<br />
”<br />
TxD“ (Transmit Data = Daten Senden) - P3.0 (Port 3)<br />
◮<br />
”<br />
RxD“ (Receive Data = Daten Empfangen) - P3.1 (Port 3)
Seite 10 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Serielle Schnittstelle<br />
Controller Board<br />
Mikrocontroller<br />
UART<br />
RS232<br />
Pegelwandlung!<br />
Transceiver<br />
TxD<br />
RxD<br />
DSUB9<br />
Buchse<br />
Verbindung<br />
zum PC o.ä.<br />
5V TTL<br />
Pegel<br />
RS232<br />
Pegel<br />
(+/-12V)<br />
Signale direkt am Mikrocontroller sind (fast immer) CMOS- oder TTL-Pegel<br />
◮<br />
kein direkter Anschluss einer RS232-Schnittstelle o.ä. möglich<br />
Für verschiedene Schnittstellen existieren passende Treiber/Receiver ICs<br />
◮<br />
Pegelwandung für Kompatibilität mit RS232-Schnittstelle
Seite <strong>11</strong> Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Serielle Schnittstelle<br />
RS232-Schnittstelle über DSUB9 Buchse<br />
RS232 Stecker DSUB9<br />
Pin Beschreibung<br />
1 Data carrier detect (DCD)<br />
2 Recieved data (RxD)<br />
3 Transmitted data (TxD)<br />
4 Data terminal ready (DTR)<br />
5 Signal ground (GND)<br />
6 Data set ready (DSR)<br />
7 Request to send (RTS)<br />
8 Clear to send (CTS)<br />
9 Ring indicator (RI)
Seite 12 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Asynchrone Datenübertragung<br />
Zeichensynchronisation: Empfangstakt synchronisiert sich nach jedem<br />
übertragenen Zeichen erneut mit Sendetakt<br />
Zur Synchronisation der Datenübertragung wird ein Start Bit (0) sowie ein<br />
oder mehrere Stop Bits (1) benötigt<br />
Folgendes muss im Vorfeld der Übertragung bekannt sein:<br />
◮<br />
◮<br />
◮<br />
Schrittgeschwindigkeit (Baudrate)<br />
Anzahl Datenbytes pro Zeichen<br />
Parität<br />
◮ Anzahl Stop Bits (üblicherweise 1 oder 2)<br />
Erkennbar: gesenkte Übertragungsrate, da z.B. für 8 Informationsbits mind.<br />
10 Bits über die Leitung gesendet werden müssen (25% Overhead)
Seite 13 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Asynchrone Datenübertragung<br />
Zeichenfolge besteht aus einer Folge von Datenbits, die für jedes Zeichen<br />
von Start- und Stop Bit eingerahmt werden<br />
Zwischen zwei aufeinanderfolgenden Zeichen können beliebig lange Pausen<br />
sein, da Beginn eines Zeichens am Start Bit eindeutig erkannt wird<br />
T<br />
E S T<br />
0 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 0 1 0 1 0 1 0 1 1<br />
Start Bit<br />
Datenbits<br />
Datenbits<br />
Datenbits<br />
Datenbits<br />
Start Bit Start Bit Start Bit<br />
Stop Bits Stop Bits Stop Bits Stop Bits<br />
Datenstrom asynchron
Seite 14 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Asynchrone Datenübertragung<br />
Ablauf bei asynchroner Datenübertragung<br />
◮ Leitung liegt im Ruhezustand immer auf logisch 1<br />
◮ jedem Zeichen ist ein Start Bit vorangestelt (immer Wert 0)<br />
→ Empfangsbaustein erkennt wann ein Zeichen ankommt<br />
◮<br />
◮<br />
Datenbits in LSB-first Reihenfolge<br />
nach Datenbits folgt optional Prüfbit (Parity)<br />
◮ letztlich folgen 1 oder 2 Stop Bits (immer Wert 1)<br />
→ somit Trennung zum nächsten Start Bit
Seite 15 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Synchrone Datenübertragung<br />
Übertragung wird mit einem Taktsignal zeitlich synchronisiert → kein Start<br />
bzw. Stop Bit nötig, auch Schrittgeschwindigkeit (Baudrate) muss nicht<br />
zwangsläufig bekannt sein<br />
Rahmensynchronisation: Empfangstakt synchronisiert sich erst nach<br />
Übertragung eines größeren Datenblocks erneut mit Sendetakt<br />
Damit: höherer Datendurchsatz, da mehrere hundert Bytes ohne Pause<br />
zwischen einzelnen Zeichen übertragen werden (ohne Redundanz)<br />
Man unterscheidet zwischen zwei Protokollklassen<br />
◮<br />
◮<br />
Zeichenorientierte Übertragung<br />
Bitorientierte Übertragung
Seite 16 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Synchrone Datenübertragung<br />
Zeichenfolge besteht aus einer Folge von Datenbits, die hintereinander als<br />
Ganzes übertragen wird<br />
Sender und Empfänger müssen nur am Anfang der Übertragung durch eine<br />
vereinbarte Bitfolge synchronisiert werden (oder per separater Taktleitung)<br />
T<br />
E S T<br />
0 0 1 0 1 0 1 0 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0<br />
Datenstrom synchron
Seite 17 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Synchrone Datenübertragung<br />
Ablauf bei synchroner Datenübertragung<br />
◮<br />
◮<br />
◮<br />
◮<br />
◮<br />
Taktsignal oder Synchronisation zu Beginn der Datenübertragung nötig<br />
→ damit Empfangsbaustein Anfang einzelner Zeichen erkennt<br />
Synchronisation geschieht durch Übertragung einiger<br />
Synchronisationszeichen<br />
wenn keine Daten zur Übertragung anstehen: Idle-Sequenz zur<br />
Synchronisation<br />
synchrone Übertragung erfolgt blockweise (Datenblock durch<br />
Blocksicherungszeichen (Prüfsumme, CRC) und Blockendekennzeichnung<br />
markiert)<br />
Datenbits in LSB-first Reihenfolge
Seite 18 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Serielle Schnittstelle des 8015<br />
Serielle Schnittstelle des 8051 ist eine Vollduplex-Schnittstelle (zeitgleiches<br />
Versenden und Empfangen von Daten möglich)<br />
Schnittstelle besitzt einen Empfangspuffer → weiteres Datenbyte kann<br />
empfangen werden, obwohl letztes Byte noch nicht ausgelesen wurde<br />
<strong>Programmierung</strong> (SCON) und Datentransfer (SBUF) der seriellen<br />
Schnittstelle erfolgt über SFRs<br />
Ein/Ausgabepufferregister SBUF: physikalisch zwei Register, aber nur eine<br />
Adresse<br />
Betrieb in 4 verschiedenen Modi: 1x synchron, 3x asynchron<br />
Baudrate der seriellen Schnittstelle kann über verschiedene Möglichkeiten<br />
erzeugt werden:<br />
◮<br />
◮<br />
Baudrate wird von der Oszillatorfrequenz abgeleitet<br />
Baudrate wird mittels Timer 1 erzeugt
Seite 19 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
SFR für serielle Schnittstelle<br />
Special Function Register SCON<br />
◮<br />
◮<br />
◮<br />
an Adresse 98h, bitadressierbar<br />
Reset Wert 00h<br />
Kontroll- und Statusregister für die serielle Schnittstelle<br />
Serial Control Register<br />
SCON<br />
MSB<br />
SM0 SM1 SM2 REN TB8 RB8 TI RI LSB<br />
SM0, SM1 Auswahl der 4 Betriebs-Modi 0, 1, 2, 3<br />
SM2 Hilfsbit für Multicontroller-Kommunikation: bei Modus 0 Wert 0, bei Modus 1 Wert 1, bei<br />
Modi 2 und 3 Wert 1: RI wird nicht aktiviert, wenn empfangenes Datenbit 9 Wert 0 hat<br />
REN generelle Empfangsfreigabe: Wert 1 für Empfang zugelassen, Wert 0 für nicht zugelassen<br />
TB8 zu sendendes Datenbit 9 (Modi 2 und 3)<br />
RB8 empf. Datenbit 9 (Modi 2 und 3) oder Stop Bit (Modus 1); in Modus 0 nicht verwendet<br />
TI<br />
Transmit Interrupt: wird in Mode 0 bei Bit 8 automatisch gesetzt, in anderen Modi bei Stop<br />
Bits; manuelles Löschen notwendig<br />
RI<br />
Receive Interrupt: wird in Mode 0 bei Bit 8 automatisch gesetzt, in anderen Modi bei Stop<br />
Bits; manuelles Löschen notwendig
Seite 20 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
SFR für serielle Schnittstelle<br />
Modus-Wahl der seriellen Schnittstelle anhand SM0 und SM1<br />
SM0 SM1 Modus<br />
0 0 Modus 0 – synchroner Betrieb, feste Baudrate<br />
0 1 Modus 1 – 8-Bit UART, variable Baudrate<br />
1 0 Modus 2 – 9-Bit UART, feste Baudrate<br />
1 1 Modus 3 – 9-Bit UART, variable Baudrate
Seite 21 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
SFR für serielle Schnittstelle<br />
Special Function Register SBUF<br />
◮<br />
◮<br />
◮<br />
◮<br />
an Adresse 99h, nur byte-adressierbar<br />
Reset Wert XXh<br />
Empfang- und Sendepuffer der seriellen Schnittstelle<br />
Beschreiben dieses Registers initiiert Sendevorgang<br />
Serial Interface Buffer Register<br />
SBUF<br />
MSB<br />
LSB<br />
7 6 5 4 3 2 1 0<br />
SBUF Eingangsspeicher → lesen<br />
SBUF Ausgangsspeicher → schreiben<br />
Durch Schreibvorgang auf SBUF wird Übertragung der Daten über serielle Schnittstelle eingeleitet
Seite 22 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Konfigurationsmodi<br />
Mode 0, Shift Register (Synchronous) Mode<br />
◮<br />
◮<br />
◮<br />
◮<br />
◮<br />
synchrone Übertragung<br />
RXD-Leitung (P3.0) dient als Datenleitung für ein- und ausgehende<br />
Daten<br />
TXD-Leitung (P3.1) dient als Taktleitung für die Synchronisation<br />
Baudrate beträgt fest 1/12 von Oszillatorfrequenz f osc<br />
Übertragung von 8 Datenbits (LSB first)
Seite 23 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Konfigurationsmodi<br />
Mode 1, 8-Bit UART, Variable Baud Rate<br />
◮ asynchrone Übertragung<br />
◮ RXD-Leitung (P3.0) dient dem Empfang von eingehenden Daten<br />
◮ TXD-Leitung (P3.1) dient dem Versenden von ausgehenden Daten<br />
◮ Baudrate ist variabel einstellbar (z.B. über Timer 1)<br />
◮ Übertragung von 10 Bits: 1 Start Bit (0), 8 Datenbits (LSB first) und 1<br />
Stop Bit (1)<br />
◮ beim Empfang wird Stop Bit im SFR SCON im Flag RB8 gespeichert<br />
MSB<br />
LSB<br />
Sender<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
1<br />
Stop Bit<br />
8 Daten-Bits (LSB first)<br />
MSB<br />
Start Bit<br />
1 0 0 1 0 1 1 0 1 0<br />
LSB<br />
Empfänger<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
1<br />
MSB<br />
LSB<br />
Dieser Modus wird in der Praxis (und im Labor) am häufigsten verwendet!
Seite 24 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Konfigurationsmodi<br />
Mode 2, 9-Bit UART, Fixed Baud Rate<br />
◮ asynchrone Übertragung<br />
◮ RXD-Leitung dient dem Empfang von eingehenden Daten<br />
◮ TXD-Leitung dient dem Versenden von ausgehenden Daten<br />
◮ Baudrate entweder mit 1/64 oder 1/32 der Oszillatorfrequenz f osz<br />
konfigurierbar<br />
◮ Übertragung von <strong>11</strong> Bits: 1 Start Bit (0), 8 Datenbits (LSB first) +<br />
programmierbares 9. Datenbit und 1 Stop Bit (1)<br />
◮ beim Empfang wird 9. Datenbit im SFR SCON im Flag RB8 gespeichert<br />
◮ beim Versenden wird 9. Datenbit im SFR SCON im Bit TB8 angegeben<br />
◮ Verwendung 9. Datenbit: z.B. als Parity Bit (PSW.0 ist Paritybit P)<br />
Stop Bit<br />
9 Daten-Bits (LSB first)<br />
Start Bit<br />
1 0 0 0 1 0 1 1 0 1 0<br />
xB8 MSB<br />
LSB
Seite 25 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Konfigurationsmodi<br />
Mode 2, 9-Bit UART, Fixed Baud Rate<br />
Datenrahmen<br />
1 2 3 4 5 6 7 8 9 10 <strong>11</strong> Schritt<br />
1 2 3 4 5 6 7 8 Datenbit<br />
Stop Bit<br />
9.Datenbit oder<br />
Paritätsbit<br />
1.-8.Datenbit<br />
Start Bit
Seite 26 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Konfigurationsmodi<br />
Mode 3, 9-Bit UART, Variable Baud Rate<br />
◮<br />
◮<br />
asynchrone Übertragung<br />
entspricht Mode 2, jedoch mit variabel einstellbarer Baudrate über Timer<br />
1 (oder internen Baudratengenerator z.B. bei Siemens 80c515c)
Seite 27 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Empfangen und Versenden von Daten<br />
Versenden von Daten<br />
In allen Modi wird das Versenden von Daten durch das Beschreiben des<br />
SBUF Registers initiiert (d.h. durch Befehl der SBUF als Ziel angibt)<br />
Empfangen von Daten<br />
Mode 0 (Synchron)<br />
◮<br />
◮<br />
Datenempfang wird durch den Zustand der Flags RI und REN im SFR<br />
SCON gesteuert<br />
Bedingung RI=0 UND REN=1<br />
Modi 1-3 (Asynchron)<br />
◮<br />
◮<br />
Datenempfang wird durch den Empfang des Start Bits initiiert<br />
Voraussetzung ist REN=1 im SFR SCON
Seite 28 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Empfangen und Versenden von Daten<br />
Aufbau und Steuerungung des seriellen Ports<br />
Seriell-Control-Register SCON<br />
SM0 SM1 SM2 REN TB8 RB8 TI RI<br />
Steuerlogik<br />
der seriellen<br />
Schnittstelle<br />
Timer 1<br />
Überlauf<br />
CPU<br />
Takt<br />
SBUF Senderegister<br />
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1<br />
8 7<br />
0<br />
8051 interner Bus<br />
SBUF Empfangsregister<br />
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1<br />
8 7<br />
0<br />
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1<br />
8 7<br />
Schieberegister<br />
0<br />
TxD<br />
RxD
Seite 29 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Empfangen und Versenden von Daten<br />
Seriell-Control-Register SCON<br />
SM0 SM1 SM2 REN TB8 RB8 TI RI<br />
Steuerlogik<br />
der seriellen<br />
Schnittstelle<br />
Timer 1<br />
Überlauf<br />
CPU<br />
Takt<br />
SBUF Senderegister<br />
0/1<br />
8 7<br />
0/1<br />
0/1<br />
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1<br />
SBUF Empfangsregister<br />
8 7<br />
8 7<br />
Einfacher Sendevorgang<br />
MOV SBUF, A<br />
Send: JNB SCON.1, Send<br />
CLR SCON.1<br />
8051 interner Bus<br />
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1<br />
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1<br />
Schieberegister<br />
0<br />
0<br />
0<br />
TxD<br />
RxD
Seite 30 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Empfangen und Versenden von Daten<br />
Seriell-Control-Register SCON<br />
SM0 SM1 SM2 REN TB8 RB8 TI RI<br />
Steuerlogik<br />
der seriellen<br />
Schnittstelle<br />
Timer 1<br />
Überlauf<br />
CPU<br />
Takt<br />
SBUF Senderegister<br />
0/1<br />
8 7<br />
0/1<br />
0/1<br />
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1<br />
SBUF Empfangsregister<br />
8 7<br />
8 7<br />
Einfacher Empfangsvorgang<br />
Empf: JNB<br />
CLR<br />
MOV<br />
8051 interner Bus<br />
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1<br />
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1<br />
Schieberegister<br />
SCON.0, Empf<br />
SCON.0<br />
A, SBUF<br />
0<br />
0<br />
0<br />
TxD<br />
RxD
Seite 31 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Empfangen und Versenden von Daten<br />
Überwachung und Betrieb<br />
Fehlererkennung<br />
◮<br />
◮<br />
◮<br />
Zeichenlänge beträgt wahlweise 8 oder 9 Bit<br />
keine hardwaremäßige Erkennung von Übertragungsfehlern<br />
Parity, Überlauferkennung und Stop-Bit-Fehler per Software<br />
Überwachung der seriellen Schnittstelle<br />
◮<br />
◮<br />
durch Bitabfrage des SCON Registers<br />
per Interrupt
Seite 32 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Empfangen und Versenden von Daten<br />
Interrupts<br />
Serielle Schnittstelle unterstützt Interrupts<br />
◮<br />
◮<br />
◮<br />
◮<br />
◮<br />
Senden wird durch Beschreiben von SBUF gestartet<br />
Interrupt Request Flag TI wird gesetzt, wenn Frame komplett gesendet<br />
wurde (nach Senden von Bit 7 von SBUF)<br />
Empfang wird bei REN=1 durch Startbit begonnen (Wert in SBUF)<br />
Interrupt Request Flag RI wird gesetzt, wenn Frame komplett<br />
empfangen wurde (nach Empfang des Stop Bits)<br />
wenn Interrupts der seriellen Schnittstelle nicht genutzt: Abfragen von RI<br />
und TI durch Polling (zyklische Abfrage)<br />
Reaktion auf Interrupts<br />
◮<br />
◮<br />
◮<br />
◮<br />
◮<br />
Empfangs- und Sendeinterrupt verwenden den gleichen Interruptvektor<br />
beide Flags lösen selben Interrupt aus<br />
Interrupt Service Routine (ISR) muss auswerten: welches Ereignis?<br />
Art des Interrupt-Ereignis anhand der Flags feststellbar<br />
ISR muss beide Flags (RI, TI) zurücksetzen
Seite 33 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Erzeugung der Baudrate<br />
Definition Baudrate<br />
Maß für die Schrittgeschwindigkeit bei der Datenübertragung in Einheit [Bd]<br />
◮<br />
Baudrate = Schrittgeschwindigkeit<br />
◮<br />
◮<br />
◮<br />
◮<br />
Schrittgeschwindigkeit ist Kehrwert der Schrittdauer T Schritt<br />
Schrittgeschwindigkeit gibt Zahl der gesendeten Zeichen bzw. Zustände<br />
pro Sekunde an<br />
Schritt: kleinstes Zeitintervall zwischen zwei aufeinanderfolgende<br />
Zustandswechseln bei zeitdiskreten Signalen<br />
nicht zu verwechseln mit Datenrate (= Bitrate)!<br />
Benannt nach Jean Maurice Émile Baudot (franz. Ingenieur und Erfinder,<br />
1845 - 1903), der 1874 den Baudot-Telegraphen erfand<br />
Mit einem (Takt-)Schritt können ein oder mehrere Bits eines Datenstroms<br />
übertragen werden<br />
Anzahl Bits pro Zustand multipliziert mit Baudrate ergibt Bitrate
Seite 34 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Erzeugung der Baudrate<br />
Beispiel für Baudrate gleich Bitrate<br />
U<br />
5V<br />
1<br />
Bitstrom<br />
0 1 0 1 1 0 1 0<br />
Baud = BPS<br />
t<br />
0<br />
Für zweiwertige (binäre Signale) codiert jeder Zustandswechsel ein Bit<br />
◮<br />
◮<br />
Schrittgeschwindigkeit in Baud = Übertragungsgeschwindigkeit in bit/s<br />
Schrittgeschwindigkeit wird dann als Bitrate (oder Bitfolgefrequenz)<br />
bezeichnet<br />
Baudrate und Bitrate sind gleich, wenn ein<br />
Symbol genau einem Bit entspricht!
Seite 35 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Erzeugung der Baudrate<br />
Mehrstufige Signale können mehr als zwei Werte annehmen (z.B. Dibit: zwei<br />
Bit pro Signalwert)<br />
◮<br />
unterschiedliche Spannungswerte repräsentieren Paare von Bits (Dibits,<br />
3 oder 4 Bits, etc.)<br />
Für mehrstufige Signale mit n-möglichen Wertestufen gilt die Beziehung:<br />
v = v Schritt · ld(n), angegeben in bit/s<br />
◮ ld ist Logarithmus Dualis, Logarithmus zur Basis 2<br />
◮<br />
Datenrate (bit/s) unterscheidet sich von Schrittgeschwindigkeit (Baud)
Seite 36 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Erzeugung der Baudrate<br />
Beispiel für Baudrate ungleich Bitrate<br />
U<br />
15V<br />
10V<br />
5V<br />
Bitstrom<br />
0 0 1 0 0 1 1 1 0 1 1 1 1 0 0 0<br />
Baud BPS<br />
t<br />
<strong>11</strong><br />
10<br />
01<br />
00<br />
Bei mehrstufigen Signalen codiert jeder Zustandswechsel mehr als 1 Bit, hier<br />
z.B. zwei Bit<br />
◮<br />
Übertragung doppelt so vieler Informationsbits mit gleicher Baudrate!<br />
Bitrate ist höher als Baudrate, wenn für ein<br />
Symbol mehrere Bits verwendet werden!
Seite 37 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Erzeugung der Baudrate<br />
Möglichkeiten der Baudraten-Erzeugung für die serielle Schnittstelle<br />
◮ mit Hilfe des Timer 1<br />
◮<br />
mittels Baudratengenerator (falls verfügbar, z.B. 80c515c)<br />
Baudrate kann über Flag in PCON zusätzlich erhöht werden<br />
Um einen fehlerfreien Datentransfer zwischen einem<br />
PC und einem 8051 zu ermöglichen, muss sichergestellt<br />
werden, dass die Baudrate des 8051 mit der des<br />
COM Ports vom PC übereinstimmt!
Seite 38 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Erzeugung der Baudrate<br />
Baudrate in Mode 0<br />
Die Baudrate in Mode 0 beträgt fest:<br />
Baudrate Mode 0 = f osz/12<br />
Baudrate in Mode 2<br />
Die Baudrate in Mode 2 hängt vom Bit SMOD im SFR PCON ab<br />
◮<br />
◮<br />
SMOD=0: Baudrate 1/64 der Oszillatorfrequenz<br />
SMOD=1: Baudrate 1/32 der Oszillatorfrequenz<br />
Baudrate Mode 2 = ( 2 SMOD /64 ) · f osz
Seite 39 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Erzeugung der Baudrate<br />
Baudrate in den Modi 1 und 3<br />
In den Modi 1 und 3 kann die Baudrate mit dem Timer 1 variabel erzeugt<br />
werden<br />
Erzeugung der Baudrate mittels Timer 1 (generell)<br />
◮<br />
◮<br />
◮<br />
Baudrate leitet sich von Überlaufrate des Timer 1 und Flag SMOD ab<br />
Überlaufrate ist Anzahl der Überläufe des Timers pro Sekunde<br />
Betriebsart des Timer für Überlaufrate nicht von Bedeutung<br />
Baudrate Mode 1 und 3 = ( 2 SMOD /32 ) · Timer 1 Overflow Rate<br />
Wahl der Timer-Betriebsart für die gewünschte Baudrate<br />
◮<br />
◮<br />
für gängige Baudraten: Interrupts sperren und Timer als 8-Bit<br />
Auto-Reload-Timer einstellen (Modus 2)<br />
für sehr langsame Baudraten: Interrupts freigeben und Nachladen des<br />
Timers (16-Bit, Modus 1) selbst übernehmen → über Timer 1 Interrupt<br />
ein Software-Reload ausführen!
Seite 40 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Erzeugung der Baudrate<br />
Baudrate in den Modi 1 und 3<br />
Erzeugung der Baudrate mittels Timer 1 im Auto-Reload-Betrieb (Modus 2)<br />
◮<br />
Baudrate leitet sich aus folgender Formel ab<br />
Baudrate Mode 1 und 3 = ( 2 SMOD /32 ) · (f osz/(12 · (256 − TH1)))
Seite 41 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Erzeugung der Baudrate<br />
Special Function Register PCON<br />
◮<br />
◮<br />
◮<br />
an Adresse 87h, nur byte-adressierbar<br />
Reset Wert 0xxx0000b<br />
beeinhaltet Flags zur Steuerung des Idle- und Power-Down Modus,<br />
insbesondere aber SMOD-Flag zur Steuerung der seriellen Schnittstelle<br />
Power Control Register<br />
PCON<br />
MSB<br />
SMOD PDS IDLS SD GF1 GF0 PDE IDLE<br />
nur serielle<br />
Schnittstelle<br />
LSB<br />
SMOD serielle Schnittstelle: Wert 1 für Verdoppelung der Baudrate in den Modi 1, 2 und 3<br />
PDS Power Down Start: Wert 1 für Power Down Modus aktiv<br />
IDLS Idle Start: Wert 1 für Idle Modus aktiv<br />
SD<br />
Shut Down: Wert 1 für Ruhezustand<br />
GF0, GF1 generelles Flag 0 und 1 (kann allgemein benutzt werden)<br />
PDE, IDLE Power Down und Idle Mode Enable: jeweils Wert 1 für Freigabe
Seite 42 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Zusammenfassung<br />
Heute haben Sie gelernt...<br />
◮<br />
◮<br />
◮<br />
in welcher Form und Bündelung Daten über die serielle Schnittstelle<br />
übertragenen werden<br />
wie die Übertragungsgeschwindigkeit (baud) und die Anzahl der Bits zur<br />
Übertragung konfiguriert werden<br />
wie die serielle Schnittstelle per Interrupt kontrolliert werden kann
Seite 43 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Ausblick auf nächste Stunde<br />
In der nächsten Stunde widmen wir uns...<br />
◮<br />
◮<br />
◮<br />
einfachen Beispielprogrammen zum Thema Polling und Interrupts,<br />
Timer- und Serielle-Schnittstellen-<strong>Programmierung</strong><br />
Tricks zur Beeinflussung der Zeitintervalle beim Timer<br />
praktischen Einsatzsfällen der seriellen Schnittstelle
Seite 44 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Hinweise zum Selbststudium<br />
Zur Vertiefung wird empfohlen...<br />
◮<br />
◮<br />
MOP-Skript (Kapitel noch nicht fertig)<br />
M. Mazidi, J. Mazidi, R. McKinlay: The 8051 Microcontroller and<br />
Embedded Systems Using Assembly and C, Prentice Hall, ISBN<br />
013<strong>11</strong>9402X
Seite 45 Aufbau und <strong>Programmierung</strong> von seriellen Kommunikationsschnittstellen | <strong>Maschinenorientierte</strong> <strong>Programmierung</strong> | Wintersemester 2013<br />
Kritik<br />
Nun sind Sie dran:<br />
◮<br />
◮<br />
◮<br />
◮<br />
Kritik: Was funktioniert gut / was schlecht?<br />
Anregungen<br />
Wünsche<br />
Verbesserungsvorschläge in Bezug auf Inhalt und Organisation der<br />
Vorlesung