Kapitel 1 - Verlagsgruppe Hüthig Jehle Rehm GmbH
Kapitel 1 - Verlagsgruppe Hüthig Jehle Rehm GmbH
Kapitel 1 - Verlagsgruppe Hüthig Jehle Rehm GmbH
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familieund AT89C51Was haben Analog Devices, Atmel, Cypress Semiconductor, Dallas Semiconductor,Goal, Hynix, Infineon, Intel, OKI, Philips, Silicon Labs, SMSC, STMicroelectronics,Synopsis, TDK, Temic, Texas Instruments und Winbond gemein? Sie alle bieten8051-basierte Mikrocontrollerbausteine bzw. IP-Cores an!Aufgrund der großen Verbreitung dieser Mikroprozessorfamilie und damit verbundenmit großen Softwarebibliotheken gibt es auch eine Vielzahl von synthetisierbarenImplementierungen. Diese sind als so genannte IP-Cores in einerHardwarebeschreibungssprache wie beispielsweise VHDL frei und im Quelltextverfügbar. Sie eignen sich für den Einsatz in FPGAs und anwendungsspezifischenintegrierten Schaltungen (ASICs).1.1 EinführungSeit der Einführung des 8-Bit-Mikrocontrollers 8048 im Jahre 1976 von Intel, desersten Ein-Chip-Mikrocontrollers auf einem einzigen integrierten Baustein, istdiese so vielseitig einsetzbare Schaltung durch Entwicklung einer Reihe ähnlicherBausteine mit unterschiedlichen Zielsetzungen entwickelt worden. Zum Beispielwurde beim Mikrocontroller 8049 sowohl die Programm- als auch die Datenspeicherkapazitätgegenüber dem 8048 (oder seiner EPROM-Version 8748) verdoppelt.Für Anwendungen, bei denen nur externe Programmspeicherkapazitäterforderlich ist, stehen die Mikrocontroller 8035 und 8039 zur Verfügung. Derkostengünstige Mikrocontroller 8021 ist für Anwendungen vorgesehen, die miteiner geringeren Anzahl von Ein/Ausgabeleitungen auskommen und er arbeitetbei niedrigerer Geschwindigkeit mit einer Teilmenge des 8048-Befehlsvorrats.Der Mikrocontroller 8051 und seine Nachfolger sind inzwischen eine industrielleStandardschaltung geworden, die von zahlreichen Halbleiterherstellern angebotenund weltweit eingesetzt werden. Von beiden Familien haben die Halbleiterherstellerzahlreiche Schaltkreise in der CMOS-Version zur Verfügung gestellt und entwickeltund CMOS-Versionen aller anderen Schaltungen sowie weitere Mikrocontroller, diesich durch zusätzliche anwenderorientierte Funktionen auszeichnen.Bei allen Herstellern sind zahlreiche Mikrocontroller mit stark erhöhter Integrationsdichteverfügbar, die aufgrund ihrer hohen Leistungsfähigkeit neue Anwen-© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921527
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51dungsbereiche erschließt. Die Leistungsfähigkeit dieses Mikrocontrollers 8051 istgegenüber dem 8048 beträchtlich gesteigert worden, indem ca. 60 000 Transistorenauf die Chipfläche aufgebracht werden. Der 8051 gehört zur Mikrocontroller-Familie 8051, die auch die Mikrocontroller 8031 (ohne ROM) und 8751 (mitEPROM) umfasst. Die Mitglieder dieser Familie sind die Mikrocontroller 8052und 8032, die sich durch Verdopplung der RAM-Kapazität auf 256 Bytes sowie –beim 8052 – durch Verdopplung der ROM-Kapazität auf 8 Kbyte auszeichnen (der8032 hat kein ROM). Außerdem sind diese beiden Mikrocontroller mit einemzusätzlichen Timer mit speziellen Eigenschaften ausgerüstet.Ab 1980 kamen mehrere Einchip-Mikrocontroller aus der Familie 8051 auf denMarkt. Der 83C152 und 83C252 von Intel, der 80C154 von OKI, der 83C552 vonPhilips/Valvo, der 82C451 von Philips/Signetics und 80512, 80515 und 80C517 vonSiemens. Alle diese Mikrocontroller sind mit einem Watchdog-Timer, 8-Bit-Analog-/Digital-Wandler,Impulsweitenmodulation und einer seriellen Schnittstellenach I ² C ausgerüstet.Die Einchip-Mikrocontroller-Familie hat sehr viele Mitglieder hervorgebracht,doch weisen alle mehr oder weniger gemeinsame Merkmale auf:8-Bit-Prozessorkern mit einheitlichem Befehlssatzmindestens 128 Bytes internes RAMexternes RAM und ROMeinheitliches Adressierungsmodell für so genannte »Special FunctionRegister« (SFR)Full-Duplex-UARTfünf Interrupt-Quellenzwei Interrupt-Prioritätendiverse TimerAufgrund der unterschiedlichen Befehlslängen von einem bis zu drei Byte sowieden unterschiedlichen Ausführungszeiten für einen Befehl handelt es sich eindeutigum eine CISC-Architektur. Neben dem klassischen CISC-Mikrocontroller(complex instruction set computer), wie man diese bei den Mikroprozessoren inder PC-Technik findet, verwendet man immer mehr die modernen RISC-Mikrocontroller(reduced instruction set computer). Diese Mikrocontroller setzen einenreduzierten Befehlssatz ein, der wesentlich effizienter ist und dadurch auch erheblichschneller das Programm abarbeitet. Trotzdem hat die CISC-Architektur erheblicheVorteile in der Ausbildung und im Studium.Ein Befehlszyklus entspricht in der ursprünglich von Intel entwickelten Struktureinem bis drei Maschinenzyklen. Ein Maschinenzyklus entspricht zwölf Taktzyklen.Heute übliche Varianten des 8051 kommen hingegen meist mit zwei Taktzyklenpro Maschinenzyklus aus und damit ist bei gleicher Taktfrequenz einedeutlich höhere Befehlsabarbeitung möglich.28© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.1EinführungEine Besonderheit des 8051 ist der Bitprozessor, der im bitadressierbaren Bereicheine schnelle und einfache Bitmanipulation erlaubt.1.1.1 Unterschiede in der Familie 8051Die in NMOS-Technologie (im Jahr 1976) gefertigten 8051 und 8031 von Intel undden anderen Halbleiterherstellern wurden ab diesem Zeitpunkt in CMOS-Technikhergestellt. Auf technische Unterschiede der NMOS- und CMOS-Versionen bezüglichder Oszillator-Beschaltung und des Betriebs bei reduzierter Leistung wird nocheingegangen. In Tabelle 1.1 sind die Mikrocontroller der Familie 8051 aufgelistet.Weitere Unterschiede der einzelnen Schaltungen sind in den folgenden Ausführungenbeschrieben. Oft wird die Bezeichnung 8051 auch als Oberbegriff für dieseSchaltungen verwendet.NMOS-VariantenTyp ROM RAM Bemerkungintern intern8031 – 128 zwei 16-Bit-Timer, ein UART, zwei externe Interruptquellen8032 – 256 drei 16-Bit-Timer, ein UART, zwei externe Interruptquellen8051 4096 128 zwei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,maskenprogrammierbares ROM8052 8192 256 drei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,maskenprogrammierbares ROM8751 8192 128 zwei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,EPROM als OTP oder mit UV-FensterCMOS-VariantenTypROMinternRAMinternBemerkung80C31 – 128 zwei 16-Bit-Timer, ein UART, zwei externe Interruptquellen80C32 – 256 drei 16-Bit-Timer, ein UART, zwei externe Interruptquellen80C51 4096 128 zwei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,maskenprogrammierbares ROM80C52 8192 256 drei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,maskenprogrammierbares ROM80C54 16384 256 drei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,maskenprogrammierbares ROM80C58 32768 256 drei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,maskenprogrammierbares ROM87C51 8192 128 zwei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,EPROM als OTP oder mit UV-Fenster87C52 8192 256 drei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,EPROM als OTP oder mit UV-Fenster89C52 32768 256 drei 16-Bit-Timer, ein UART, zwei externe Interruptquellen,Flash-SpeicherTabelle 1.1: NMOS- und CMOS-Varianten der Familie 8051© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921529
1.1EinführungIn der ursprünglichen Form des 8051 handelt es sich um eine Harvard-Architektur,jedoch besitzen viele neuere 8051-Entwicklerboards eine modifizierte Harvard-Architektur.Mit dieser Architektur wird ein Teil des XRAM (extended dataRAM) mittels eines Adressdecoders in den Programmspeicher gespiegelt. Diesermöglicht einer meist ab ROM laufenden Terminalsoftware, z.B. per serielleSchnittstelle kommende Software in den Programmspeicher zu laden und nachdem Übertragen auszuführen. Der Stack befindet sich immer frei definierbar iminternen RAM. Die Bytereihenfolge ist »Little Endian First«.1.1.2 Vom Einchip-Mikrocontroller 8048 zur 8051-FamilieDie Architektur-Erweiterung der Mikrocontroller der Familie 8051 gegenüber demindustriellen Standard-Einchip-Mikrocontroller 8048 führt sowohl zu einer Leistungserhöhungder Zentraleinheit (CPU) als auch zu einer Erhöhung derLeistung, der Vielfalt und der Anzahl der auf dem Chip integrierten sonstigen Einheiten.Die Mikrocontroller der Familie 8051 sind daher besonders für Anwendungengeeignet, die eine große Anzahl von Funktionen auf dem Chip sowie einehohe Geschwindigkeit erfordern. Den Anwendern des 8048 stellen sie sich alsaufwärts-kompatible Schaltungen mit stark erhöhter Leistungsfähigkeit undGeschwindigkeit dar.Der 8051 ist ein 8-Bit-Einchip-Mikrocontroller hoher Leistungsfähigkeit, der fürAnwendungen mit den größten Anforderungen geeignet ist, die von einem derartigenMikrocontroller bewältigt werden können. Seine hohe Leistungsfähigkeit imVergleich zu anderen Mikroprozessoren und Mikrocontrollern zeigt sich vor allembei der Lösung schwieriger Realzeitaufgaben, z.B. im Bereich industrieller Steuerungen,in der Peripherie von Großrechenanlagen (als intelligente Schaltungen)oder für allgemeine Aufgaben im Automobilbau, Haushaltsgeräten usw.Der 8051 beinhaltet die Hardware-Merkmale, die Architekturerweiterungen sowiedie Befehle, die ein leistungsstarker und kosteneffektiver Mikrocontroller fürAnwendungen haben muss, die bis zu je 64-Kbyte-Programmspeicher- und/oderDatenspeicher-Kapazität erfordern. Mit diesen Eigenschaften wurde der 8051 zumStandard-Mikrocontroller in den achtziger Jahre und seine Anwendung hält bisheute an.Abbildung 1.1 zeigt Anschlussschema, Logiksymbol und Blockdiagramm desMikrocontrollers 8051. Die Funktionen der einzelnen Einheiten werden nocherklärt. In Tabelle 1.4 finden Sie die Anschlussbelegung der Mikrocontroller derFamilie 8051.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921531
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Abb. 1.1: Anschlussschema, Logiksymbol und Blockdiagramm des Mikrocontrollers 8051BezeichnungAnschlussEin- oderAusgangAktivFunktionU SS (0 V) 20 MasseanschlussU CC (+5 V) 40 Anschluss für die BetriebsspannungTabelle 1.4: Anschlussbelegung der Mikrocontroller der Familie 805132© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.1EinführungBezeichnungP0.0 bisP0.7P1.0 bisP1.7P2.0 bisP2.7Tabelle 1.4:AnschlussEin- oderAusgangAktivFunktion32 bis 39 E/A I/O Port 0 ist ein bidirektionaler 8-Bit-Open-Drain-E/A-Port, der bis zu acht LS-TTL-Lastenaufnehmen oder bei Busoperationentreiben kann. Anschlüsse von Port 0, dieeine Eins beinhalten, haben schwebendesPotential und stellen in diesem ZustandEingänge hoher Impedanz dar. Port 0 istauch der Anschluss für den im Multiplex-Verfahren arbeitenden, unteren Adressbussowie den Datenbus, während auf einenexternen Speicher zugegriffen wird. In diesemFall werden während der Ausgabe vonEinsen starke interne Pull-up-Widerständeverwendet. Port 0 gibt auch bestimmteBytes zur Programmüberprüfung aus. Beider Anwendung werden externe Pull-up-Widerstände benötigt.1 bis 8 E/A I/O Port 1 ist ein bidirektionaler 8-Bit-E/A-Portmit internen Pull-up-Widerständen. SeineAusgangspuffer können bis zu vier LS-TTL-Lasten aufnehmen oder abgeben. DieAnschlüsse von Port 1, in die Einsengeschrieben sind, werden durch internePull-up-Widerstände auf hohem Potentialgehalten und können in diesem Zustandals Eingänge dienen. Werden dieAnschlüsse von Port 1 bei Verwendung alsEingänge extern auf 0-Signal gezogen, soliefern sie wegen der internen Pull-up-Widerstände einen Strom (I IL im Datenblatt).21 bis 28 E/A I/O Port 2 ist ein bidirektionaler 8-Bit-E/A-Portmit internen Pull-up-Widerständen. SeineAusgangspuffer können bis zu vier LS-TTL-Lasten aufnehmen oder abgeben. Port 2gibt das obere Adressbyte während desZugriffs auf externe Speicher aus, die16-Bit-Adressen verwenden. In diesem Fallwerden während der Ausgabe von Einsenstarke interne Pull-up-Widerstände verwendet.Zum Programmieren und bei derProgrammüberprüfung des 8751 dient derPort 2 zur Aufnahme des höheren Adressbytesund von Steuersignalen, außerdemzur Programmüberprüfung beim 8051Anschlussbelegung der Mikrocontroller der Familie 8051 (Forts.)© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921533
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C5134BezeichnungP3.0 bisP3.7Anschluss Ein- oder Aktiv FunktionAusgang10 bis 17 E/A I/O Port 3 ist ein bidirektionaler 8-Bit-E/A-Portmit internen Pull-up-Widerständen. SeineAusgangspuffer können bis zu vier LS-TTL-Lasten aufnehmen oder abgeben.Die Anschlüsse von Port 3 werden alternativauch für andere im Folgenden aufgeführteFunktionen verwendet.P3.0 10 E I/O RXD; Eingang für serielle DatenP3.1 11 A I/O TXD; Ausgang für serielle DatenP3.2 12 E 0 INT0; externer Interrupteingang 0P3.3 13 E 0 INT1; externer Interrupteingang 1P3.4 14 E 1 T0; externer Eingang für Zähler 0P3.5 15 E 1 T1; externer Eingang für Zähler 1P3.6 16 A 0 WR; Strobe-Signal zum Schreiben in denexternen DatenspeicherP3.7 17 A 0 RD; Strobe-Signal zum Lesen aus demexternen DatenspeicherRST 9 E 0 Rücksetzeingang. Liegt an diesemAnschluss während zweier Maschinenzyklenein 1-Signal und läuft der Taktgeber,so wird die Schaltung zurückgesetzt.ALE/PROG30 A I/O (Address Latch Enable), Ausgangsimpulszur Zwischenspeicherung des unterenAdressbytes während des Zugriffs auf einenexternen Speicher. ALE wird mit konstanterFrequenz ( 1 / 6 der Oszillatorfrequenz) auchdann erzeugt, wenn auf den externen Speichernicht zugegriffen wird. Es steht füreinen etwa benötigten externen Takt oderexterne zeitliche Abläufe zur Verfügung.(Allerdings wird bei jedem Zugriff auf einenexternen Datenspeicher ein ALE-Impulsübersprungen.) Zum Programmieren desEPROM (8751) erhält dieser Anschluss denProgrammierimpuls (PROG).PSEN 29 (Programm Store Enable). Strobe-Signalzum Lesen des externen Programmspeichers.Beim Lesen aus diesem Speicherwird PSEN zweimal während eines jedenMaschinenzyklus aktiviert, jedoch erfolgtbeim Zugriff auf einen externen Datenspeicherkeine Aktivierung. Auch wirdPSEN beim Lesen aus dem internen Programmspeichernicht aktiviert.Tabelle 1.4:Anschlussbelegung der Mikrocontroller der Familie 8051 (Forts.)© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.1EinführungBezeichnungEA/U PP 31 A 0 (External Access). Wenn EA auf 1-Signalgehalten wird, liest die CPU aus deminternen Programmspeicher, es sei denn,der Programmzähler überschreitet denWert 0FFFH (beim 8051). Hält man EAjedoch auf 0-Signal, so wird die CPUgezwungen, unabhängig vom Wert desProgrammzählers aus dem externen Programmspeicherzu lesen. Beim 8031 mussEA durch externe Verdrahtung auf 0gebracht werden. Zum Programmierendes EPROM (8751) wird die ProgrammierspannungU PP = 21 V an diesenAnschluss gelegt.XTAL1 19 E 0 Eingang zum invertierenden Verstärkerdes TaktgeneratorsXTAL2 18 A Ausgang vom invertierenden Verstärkerdes TaktgeneratorsTabelle 1.4:1.1.3 BussystemeDrei Bussysteme verbinden die drei Funktionseinheiten Mikrocontroller, Speicher(RAM und ROM), sowie die Ein-/Ausgabebaugruppen, wie Abbildung 1.2 zeigt.AnschlussEin- oderAusgangAktivFunktionAnschlussbelegung der Mikrocontroller der Familie 8051 (Forts.)Datenbus: Acht Leitungen, auf denen die Daten zwischen Mikrocontroller,Speichereinheiten (RAM und EPROM) und I/O-Einheiten übertragen werden.Der Datenbus kann in beide Richtungen übertragen (Zweiweg-Datenübertragung).Adressbus: 16 Leitungen, über die bestimmte Speicherplätze oder Ein-/Ausgabebaugruppenausgewählt werden (Einweg-Datenübertragung), wobei achtkombinierte Leitungen auf dem Datenbus vorhanden sind. Aus diesem Grundeist der ALE-Ausgang (Adress Latch Enable) für die Zwischenspeicherungder Adressen notwendig.Steuerbus: Sechs Leitungen, die dem Prozessorzustand entsprechende Steuersignaleübertragen (Einweg-Datenübertragung)Speicher werden nicht nur zur Aufbewahrung von Befehlen (Anweisungen) benötigt.Es können auch Daten anfallen, die zur Durchführung eines Programmserforderlich sind. Es werden zwei Arten von Daten unterschieden: Zum einen gibtes Daten, deren Wert sich nicht ändert wie z.B. die Zahl = 3,141..., Zahlen dieserArt heißen Konstanten. Zum anderen gibt es Daten, deren Werte sich ändern können.Diese veränderbaren Daten sind Variablen.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921535
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Abb. 1.2:Bussysteme in einem MikrocontrollerDer gesamte Speicher kann sich aus unterschiedlichen Bausteinen und Technologienzusammensetzen. Zum Speichern von unveränderlichen Daten benutzt manSpeicherbausteine, deren Inhalt sich nach dem Programmieren nicht mehr verändernlässt. Damit geht nach dem Abschalten der Betriebsspannung auch derInhalt dieser Speicher nicht mehr verloren. Der Inhalt solcher Speicher kann währenddes Betriebs nur gelesen, nicht aber überschrieben werden. Speicher dieserArt werden als Nur-Lese-Speicher, Festwertspeicher oder Festspeicher bezeichnet.Die gebräuchliche Abkürzung ist ROM (Read Only Memory).Als Arbeitsspeicher für variable Daten sind Speicherbausteine erforderlich, indenen sich auch während des Betriebs die Daten noch ändern lassen. Solche Speichernennt man Schreib-Lese-Speicher, abgekürzt RAM (Random AccessMemory).ROM- und RAM-Bausteine arbeiten mit wahlfreiem Zugriff, was bedeutet, dassdie Speicherplätze in beliebiger Reihenfolge ansprechbar und gleich schnellerreichbar sind.1.1.4 Programmierung in AssemblerspracheIn diesem Abschnitt erhalten Sie eine kurze Beschreibung des Mikrocontrollersals Grundlage für die Programmierung in Assemblersprache.36© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.1EinführungIm 8051 sind folgende wesentliche Teile integriert:Mehrere Arbeitsregister zur Durchführung der Operationen und zur AdressierungDer Befehlszähler, der die Adresse des nächsten auszuführenden Befehls enthältDer Stackpointer, dessen Inhalt die Anfangsadresse des Stacks im Rahmen desArbeitsspeichers definiert. Durch diesen Stack wird die Verwendung von Unterprogrammenund Unterbrechungsprogrammen (Interrupt-Subroutinen)besonders erleichtert.Zu diesen, auf dem Mikrocontroller integrierten Funktionseinheiten kommennoch folgende Teile, über die der Programmierer unbedingt Bescheid wissenmuss:Der Programmspeicher (aufgebaut mit ROMs, PROMs, EPROMs oder Flash),in dem das Anwendungsprogramm oder die Konstanten des Mikrocomputersabgespeichert sind und der byteweise adressiert wirdDer Datenspeicher, der mit RAMs aufgebaut ist (Schreib-Lese-Speicher), indem die Momentan-Ergebnisse bzw. Daten des Mikrocomputers abgespeichertsind und der ebenfalls byteweise adressiert wirdDie Eingabe-Ausgabesteuerung, die aus Bausteinen besteht, über die der Mikroprozessormit seiner Umgebung in Kontakt stehtIm Mikrocontroller stehen ein 8-Bit-Akkumulator und mehrere 8-Bit-Zwischenregisterzur Verfügung. Diese acht Register werden über die Ziffern 0 bis 7 in einerSpeicherbank angesprochen. Die Registerpaaranordnung ist:Der Befehlszähler ist ein dem Programmierer zugängliches 16-Bit-Register,das die Adresse des nächsten auszuführenden Befehls enthält.Der Stack ist ein Teil des Arbeitsspeichers (RAM), der vom Programmierer definiertwird. In ihm sind Daten oder Adressen gespeichert, die gegebenenfallsdurch Stackoperationen aufgefunden werden können. Eine Reihe der Befehlesind in der Lage, auf diesen Stack zuzugreifen, und erleichtern somit das Arbeitenmit Unterprogrammen und Unterbrechungen (Interrupts). Das Stackpointerregistererlaubt dem Programmierer den Zugriff auf die Adressen desStacks.Verbindung zur Außenwelt stellt im System der Mikrocontroller über seinemaximal 256 Eingabe- und 256 Ausgabeports (Port = Kanal) her. Jeder dieserPorts verkehrt mit dem Mikrocontroller über Datenbytes, die entweder den Akkumulatorsetzen oder von ihm gesetzt werden. Jedem dieser Ports ist eineZahl zwischen 0 und 255 zugeordnet. Auf diese Zuordnung hat der Programmiererkeinen Einfluss.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921537
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Ein Programm besteht aus einer Reihe von Befehlen. Jeder Befehl löst eine elementareOperation, wie eine Datenübertragung, eine arithmetische oder logischeOperation mit einem Datenbyte bzw. -wort, oder eine Änderung der Reihenfolgeder auszuführenden Befehle aus. Ein Programm wird als eine Reihe von Bitsdargestellt, die die Befehle des Programms repräsentieren und die wir hier mithexadezimalen Ziffern symbolisieren. Die Speicheradresse des nächsten, auszuführendenBefehls steht im Befehlszähler (Program Counter). Vor der Ausführungeines Befehls wird der Befehlszähler um 1 erhöht und enthält so die Adressedes nächstfolgenden Befehls. Das Programm läuft prinzipiell sequenziell ab, bisein Sprungbefehl (Jump, Call oder Return) ausgeführt wird, wobei der Befehlszählerauf eine vom linearen Ablauf abweichende Adresse gesetzt wird. Das Programmwird von dieser neuen Speicheradresse an wieder sequenziell fortgesetzt.Der Inhalt eines Speicherplatzes gibt im Prinzip keinen Hinweis darauf, ob dasbetreffende Byte einen Befehl oder Daten darstellt. So entspricht beispielsweiseder Hexadezimalcode 1FH dem Befehl RAR (schiebe den Inhalt des Akkumulatorsnach rechts, zyklisch, mit Übertrag), was aber ebenso gut den Datenwert 1FH(dezimal 31) darstellen kann. Es ist aber wichtig, in einem Programm sicherzustellen,dass Daten nicht als Befehle interpretiert werden und durch Trennung vonProgramm und Datenspeicher kann dies einfach erreicht werden.Jedes Programm hat eine Anfangsadresse, die auf das erste Byte des ersten auszuführendenBefehls hindeutet. Bevor der erste Befehl ausgeführt wird, wird derBefehlszähler automatisch auf die Adresse des nächsten (auszuführenden)Befehls gesetzt. Diese Prozedur wird für jeden Befehl des Programms wiederholt.Zur Darstellung eines Befehls sind ein, zwei oder drei Bytes nötig. In jedem Fallwird der Befehlszähler automatisch auf den Beginn des nächsten Befehls gesetzt,wie das Beispiel in Tabelle 1.5 zeigt.Zur Vermeidung von Fehlern muss der Programmierer sicherstellen, dass aufeinen Befehl nicht ein Datenbyte folgt, soweit nach diesem Befehl noch ein weitererBefehl zu erwarten ist. So wird z.B. im Byte 021EH ein Befehl erwartet, weilBefehl Nr. 8 nach Befehl Nr. 7 ausgeführt werden muss. Enthält Byte 021EHDaten, so kann das Programm nicht richtig ablaufen. Aus diesem Grund dürfenDaten auf keinen Fall zwischen Befehlen abgespeichert werden.Programmsprungbefehle verursachen einen Sprung zu einem Befehl, der anirgendeiner Stelle im Speicher liegen kann. Die durch den Sprungbefehl angesprocheneAdresse muss wiederum die Adresse eines Befehls sein. Es muss alsoauch hier sichergestellt werden, dass das adressierte Byte keine Daten enthält, weilsonst das Programm nicht richtig ausgeführt werden kann.38© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.1EinführungSpeicheradresse Befehls-Nr. Inhalt des Befehlszählers0212 1 02130213 2 021502140215 3 02160216 4 0219021702180219 5 021B021A021B 6 021C021C 7 021F021D021E021F 8 02200220 9 02210221 10 0222Tabelle 1.5: Beispiel zum Setzen des Befehlszählers1.1.5 SpeicheradressierungDie Adressierung ist ein besonders wesentlicher Teil beim Aufbau eines Programms.Der Mikrocontroller bietet mehrere Möglichkeiten zur Adressierung:Bei der direkten Adressierung liefert der Befehl »explizit« eine Speicheradresse.Der Befehl »lade den Inhalt der Speicheradresse 1F2A in den Akkumulator«ist ein Beispiel für den Befehl mit direkter Adressierung, wobei 1F2A diedirekte Adresse ist. Im Speicher wird das folgendermaßen aussehen:Speicheradressen3An + 1 2A auszuführender Befehln + 21FDurch den Befehl werden drei Bytes im Speicher belegt, von denen das zweiteund dritte direkt die Adresse enthält.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921539
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Die Speicheradresse kann auch durch den Inhalt eines Registerpaares spezifiziertsein.Für fast alle Befehle müssen hierbei die internen Register verwendet werden.Ein Einbytebefehl, der den Akkumulator mit dem Inhalt der Speicheradresse1F2A lädt, sieht folgendermaßen aus:SpeicherRegisterBAuszuführender Befehl 7E CAußerdem gibt es zwei Befehle, die das Register zur Adressierung verwenden. Wieoben erwähnt, enthält das erste Register des Paares die höherwertigen und daszweite Register die niederwertigen Stellen der Adresse.1F2ADEHLAJeder beliebige Speicherplatz kann auch über den 16-Bit-Stackpointer adressiertwerden. Es gibt nur zwei verschiedene Stackoperationen: das Eingebender Daten in den Stack, das als PUSH, und das Auslesen von Daten aus demStack, das als POP bezeichnet wird. Voraussetzung für die Operation PUSH istselbstverständlich, dass sich der Stack in einem RAM befindet, da ja sonst keinEinschreiben in den Speicher durchgeführt werden kann.Durch jede PUSH-Operation werden 16 Datenbits aus einem Registerpaaroder vom Befehlszähler in den Stack gebracht. Die Adresse des Speicherbereichs,auf den während des PUSH-Befehls zugegriffen wird, bestimmt mandurch den Stackpointer in folgender Weise: die höchstwertigen acht Datenbits werden auf dem Speicherplatz abgespeichert,der durch den Stackpointer minus 1 adressiert ist, die niedrigstwertigen acht Datenbits werden auf dem Speicherplatz abgespeichert,der durch den Stackpointer minus 2 adressiert wird, der Inhalt des Stackpointers wird automatisch um 2 verringert.Im nachfolgenden Beispiel sind die Verhältnisse für den Fall dargestellt, dassder Stackpointer 13A6H enthält, während das Register B6AH und das Register030H enthält:40© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.1Einführungvor PUSH-Befehl Speicheradresse nach PUSH-BefehlSP FF 13A3 FF SP13A6 FF 13A4 30 13A4B FF 13A5 6A B6A FF 13A6 FF 6ACC30 30Durch jede POP-Operation werden acht Datenbits vom Stack in ein Registerpaaroder in den Befehlszähler gebracht. Die Speicheradresse, auf die durch diePOP-Operation zugegriffen wird, wird durch folgende Verwendung des Stackpointersbestimmt:1) Das zweite Register oder die niedrigstwertigen acht Bits des Befehlszählerswerden mit dem Inhalt der Speicherstelle geladen, auf die der Stackpointerzeigt.2) Das erste Register des Paares oder die höchstwertigen acht Bits des Befehlszählerswerden mit dem Inhalt der Speicherstelle geladen, die durch den Stackpointer+1 adressiert wird.3) Der Stackpointer wird automatisch um 2 erhöht.Im folgenden Beispiel soll angenommen werden, dass der Stackpointer 1508H(Speicherstelle 1508H) den Wert 33H enthält und die Speicherstelle 1509Hden Wert 0BH beinhalten soll. Eine POP-Operation in das Registerpaar Hwürde folgendermaßen aussehen:vor POP-Befehl Speicheradresse nach POP-BefehlSP FF 1507 FF SP1508 33 1508 33 150AH 0B 1509 0B HFF FF 150A FF 0BLLFF 33Der Programmierer bestimmt den Wert des Stackpointers. Die Definition desStackpointer-Inhalts vor irgendeiner Stackoperation ist nötig, um eine richtigeFunktion des Programms zu gewährleisten.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921541
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Bei unmittelbarer Adressierung enthält der Befehl eine Konstante. Der BefehlMOV A, 2AH »Lade den Akkumulator mit dem Wert 2AH« ist ein Beispiel für einesolche unmittelbare Adressierung. Im Speicher hat dieser Befehl folgendesAussehen:Speicherinhalt3E Lade Akkumulator unmittelbar2A In den Akkumulator zu ladender Wert1.1.6 Unterprogramme und die Verwendung des Stacksfür die AdressierungZunächst soll kurz der Begriff »Unterprogramm« erläutert werden. Als Beispielwollen wir die häufig nötige Operation des Multiplizierens verwenden. Der Mikrocontrollersoll über keinen Befehl für eine Multiplikation verfügen, bietet aber dieMöglichkeit, ein Byte zu einem anderen zu addieren. Man könnte daher eineMultiplikation ausführen, indem man derartige Additionen mehrere Male hintereinander(je nach Größe des Multiplikators) ausführt. Will man eine Multiplikationan mehreren Stellen des Programms durchführen, so müsste man an jederdieser Stellen die ganze Reihe der eben genannten Befehle einfügen. Dazu wärenatürlich sehr viel Speicherplatz nötig:ProgrammMultiplikationsroutineProgrammMultiplikationsroutineProgrammMultiplikationsroutineusw.Da das Unterprogramm für Multiplikation immer gleich bleibt, ist es eigentlichüberflüssig, es jedes Mal einzufügen. Es ist viel besser, es nur abzuspeichern undjedes Mal auszuführen, wenn es benötigt wird:ProgrammProgrammProgrammMultiplikationsroutine42© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.1EinführungEine solche Routine nennt man ein Unterprogramm. Der Mikrocontroller bietet dieMöglichkeit zum Aufruf von Unterprogrammen und zum Rücksprung in dasHauptprogramm. Im Einzelnen sieht der Programmablauf unter Verwendungvon Unterprogrammen folgendermaßen aus:HauptprogrammAufrufbefehlnächster BefehlUnterprogramm(Pfeile bezeichnen Reihenfolge der Ausführung)Hierbei wird also während der Ausführung des Aufrufbefehls (z.B. CALL) dieAdresse des folgenden Befehls (das ist der Inhalt des Befehlszählers) in den Stackgebracht und das Unterprogramm ausgeführt. Der letzte Befehl eines Unterprogrammsist gewöhnlich ein Rücksprungbefehl (z.B. RET), der eine Adresse vomStack holt und in den Befehlszähler einschreibt. Dadurch wird das Hauptprogrammbei dem auf den Aufrufbefehl folgenden Befehl fortgesetzt. Unterprogrammekönnen beliebig geschachtelt sein. Die einzige Grenze hierfür bildet derSpeicherplatz, der für den Stack zur Verfügung steht. Dabei ist der Rückweg ausder Verschachtelung identisch mit der Reihenfolge der Aufrufe, auch wenn dasUnterprogramm mehrmals aufgerufen wird.1.1.7 Register des Mikrocontrollers 8051Der Mikrocontroller 8051 verfügt über getrennte Adressierbereiche für den Programmspeicherund den Datenspeicher. Der externe Programmspeicher kann biszu 64 Kbyte umfassen. Außerdem befinden sich im ROM auf dem Chip des 8051weitere 4 Kbyte. Der Datenspeicher besteht aus einem auf dem Chip befindlichenRAM von 128 Bytes. In einem weiteren Adressierbereich von 128 Bytes sind nur 21Bytes mit speziellen Funktionsregistern belegt. Außerdem kann die Schaltung aufbis zu 64 Kbyte eines externen Datenspeichers zugreifen. Abbildung 1.4 zeigt dieBlockschaltung des 8051.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921543
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Abb. 1.3: Blockschaltung des Mikrocontrollers 8051In Tabelle 1.6 sind die 21 speziellen Funktionsregister mit ihren Kurzbezeichnungensowie Speicherplätzen aufgeführt und anschließend kurz beschrieben. Die44© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.1Einführungmit einem Stern versehenen Register sind sowohl byte- als auch bitadressierbar(11 Register mit Adressen, die durch 8 ohne Rest teilbar sind).Kurzbezeichnung RegisterAdresse(für Assembler)Dezimal HexadezimalACC*) Akkumulator 224 E0B*) Register B 240 F0PSW*) Programmstatuswort 208 D0SP Stackpointer 129 81DPH Datenzeiger (DPTR) oberes Byte 131 83DPL Datenzeiger (DPTR) unteres Byte 130 82P0*) Port 0 128 80P1*) Port l 144 90P2*) Port 2 160 A0P3*) Port 3 176 B0IP*) Interrupt-Prioritätenregister 184 B8IE*) Interrupt-Freigaberegister 168 A8TMOD Zeitgeber/Zähler-Betriebsart-Register 137 89TCON*) Zeitgeber/Zähler-Steuerregister 136 88TH0 Zeitgeber/Zähler 0 (oberes Byte) 140 8CTL0 Zeitgeber/Zähler 0 (unteres Byte) 138 8ATH1 Zeitgeber/Zähler 1 (oberes Byte) 141 8DTL1 Zeitgeber/Zähler 1 (unteres Byte) 139 8BSCON*) serielles Steuerregister 152 98SBUF serieller Datenpuffer 153 99PCON Leistungsaufnahme-Steuerregister 135 87Tabelle 1.6: Spezielles Funktionsregister des 8051*): auch bitadressierbarAkkumulator (Register A): Das Register ACC ist der Akkumulator. In den mnemonischenKurzbezeichnungen, die für Befehle mit Bezug auf den Akkumulator verwendetwerden, wird der Akkumulator nur mit A bezeichnet.Register B: Das Register B wird beim Multiplizieren und Dividieren benötigt. Beider Abarbeitung anderer Befehle kann es als weiterer schneller Hilfsspeicher dienen.Programmstatusregister: Das Programmstatusregister (PSW) enthält das in Tabelle1.7 beschriebene Programmstatuswort.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921545
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51höchstwertigesBitniedrigstwertigesBitCY AC F0 RS1 RS0 CV – PSymbol Bit-Speicherstelle Name und BedeutungCY PSW.7 ÜbertragsbitAC PSW.6 Hilfsübertragsbit (für BCD-Operationen)F0 PSW.5 Kennzeichnungsbit 0 (steht dem Anwender für allgemeineZwecke zur Verfügung)RS1 PSW.4 Registerbank-Auswahlbits 1 bzw. 0. Werden durchRS0 PSW.3Software gesetzt oder gelöscht, um die Registerbank{auszuwählen, in der gearbeitet werden soll. *)OV PSW.2 Überlaufbit– PSW.1 in ReserveP PSW.0 Paritätsbit. Wird durch Hardware bei jedem Befehlszyklusgesetzt bzw. gelöscht, um eine ungerade bzw.gerade Anzahl von Einsen im Akkumulator anzuzeigen(d.h. gerade Parität).*)Durch RS1 und RS0 wird diese Registerbank wie folgt festgelegt:RS1 RS0 Bank Speicherplätze0 0 0 00H bis 07H0 1 1 08H bis 0FH1 0 2 10H bis 17H1 1 3 18H bis 1FHTabelle 1.7:ProgrammstatusregisterDer Mikrocontroller hat fünf verschiedene Bedingungsbits zur Verfügung, um dasResultat von Operationen zu kennzeichnen. Alle bis auf eines (das Hilfs-Carrybit)können durch Befehle getestet werden, die den nachfolgenden Befehlsablaufbestimmen. An dieser Stelle wird vereinbart, dass ein Bit »gesetzt« ist, wenn esden Wert »1« hat, und »rückgesetzt« ist, wenn es den Wert »0« hat.Carrybit (Überlaufbit oder Übertragsbit): Das Carrybit CY wird durch verschiedeneBefehle gesetzt und kann direkt abgefragt werden. Die Operationen, diedas Carrybit verändern, sind Addition, Subtraktion, zyklisches Schieben undlogische Operationen. So kann z.B. die Addition von zwei 1-Byte-Zahlen einenÜberlauf (Carry) an der höchsten Stelle hervorrufen.46© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.1EinführungBit-Nr. 7 6 5 4 3 2 1 0AE = 1 0 1 0 1 1 1 0+74 = 0 1 1 1 0 1 0 0122 0 0 1 0 0 0 1 0Überlauf = 1, setzt Carrybit = 1Eine Addition mit Überlauf an der höchsten Stelle setzt das Carrybit. EineAddition ohne Überlauf setzt das Carrybit zurück. Hier soll noch eigens daraufhingewiesen werden, dass Addition, Subtraktion, zyklisches Schieben und logischeBefehle das Carrybit in verschiedenartiger Weise behandeln.Hilfs-Carrybit (Hilfsüberlaufbit oder Hilfsübertragsbit): Das Hilfs-Carrybit ACzeigt den Überlauf aus dem ersten Halbbyte (Bit 3 des Datenbytes) an. DerWert dieses Bits kann nicht direkt getestet werden, beeinflusst aber die Funktiondes Befehls DAA.Die folgende Addition setzt das Hilfs-Carrybit und das Carrybit zurück:Bit-Nr. 7 6 5 4 3 2 1 02E = 0 0 1 0 1 1 1 0+74 = 0 1 1 1 0 1 0 0A2 1 0 1 0 0 0 1 0Carrybit = 0 Hilfs-Carrybit = 1Das Hilfs-Carrybit wird durch Additions-, Subtraktions-, Inkrement-, Dekrement-und Vergleichsbefehle verändert.Signbit (Vorzeichenbit): Im Mikroprozessor ist grundsätzlich kein Vorzeicheneines Datenbytes festgelegt; man kann daher ein Byte mit dem numerischenWert 128 als plus 128 oder aber auch als minus 128 interpretieren. Zur Unterscheidungder beiden Möglichkeiten verwendet man das Bit 7 als Vorzeichen.Hat es den Wert 1, so wird die Zahl im Byte als negativ angesehen (von minus 1bis minus 128), hat Bit 7 den Wert 0, so wird die Zahl des Bytes als positiveZahl (von 0 bis plus 127) interpretiert.Bei arithmetischen und logischen Operationen wird das Signbit dem Bit 7 desErgebnisses gleichgesetzt; es kann dann als Bedingungsbit abgefragt werden.Zerobit (Nullbit): Dieses Bedingungsbit wird dann gesetzt, wenn das Ergebniseines arithmetischen oder logischen Befehls null ist. Das Zerobit wird rückgesetzt,wenn das Ergebnis dieses Befehls ungleich null ist.Ist das Ergebnis gleich null und das Carrybit gesetzt, so wird das Zerobit ebenfallsgesetzt.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921547
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Bit-Nr. 7 6 5 4 3 2 1 01 0 1 0 0 1 1 10 1 0 1 1 0 0 11 0 0 0 0 0 0 0 0Überlaufvon Bit 7Nullergebnis:Zerobit auf 1 gesetztParitybit (Paritätsbit): Nach arithmetischen und logischen Operationen wird eineParitätsprüfung vorgenommen. Die Anzahl der gesetzten Bits in einem Bytewird dabei gezählt; ist das Ergebnis ungerade, wird das Paritybit zurückgesetzt,ist das Ergebnis gerade, wird das Paritybit gesetzt.Stackpointer: Der acht Bit breite Stackpointer (SP) wird inkrementiert, bevorDaten während der Ausführung eines PUSH- oder CALL-Befehls gespeichertwerden. Während der Stack im Allgemeinen irgendwo im RAM (auf dem Chip)untergebracht sein kann, zeigt der Stackpointer nach einem Rücksetzvorgangauf den Speicherplatz 07H. Dies veranlasst den Stackpointer, mit Speicherplatz08H zu starten.Datenzeiger: Der 16-Bit-Datenzeiger (DPTR) besteht aus den Registern DPH(oberes Byte) und DPL (unteres Byte). Er enthält eine 16-Bit-Adresse und kannentweder als 16-Bit-Register oder als zwei unabhängige 8-Bit-Register arbeiten.Ports 0 bis 3: Die speziellen Funktionsregister P0, P1, P2 und P3 sind die Zwischenspeicher.Zeitgeber-Register: Die Registerpaare TH0 und TL0 sowie TH1 und TL1 sind16-Bit-Zählregister für die Zeitgeber/Zähler 0 bzw. 1.Serieller Datenpuffer: Der serielle Datenpuffer (SBUF) besteht eigentlich auszwei separaten Registern, nämlich einem Sende- und einem Empfangspufferregister.Wenn Daten nach SBUF transportiert werden, so erfolgt dies in dasSendepufferregister; der Transport eines Bytes nach SBUF löst dann die Übertragungin eine externe Einheit aus. Werden Daten von SBUF geholt (von einerEinheit auf dem Chip), so kommen sie aus dem Empfangspufferregister.Steuerregister: Die speziellen Funktionsregister IP, IE, TMOD, TCON, SCONund PCON enthalten Steuer- und Statusbits für das Interrupt-System, die Zeitgeber/Zählerund den seriellen Port. Sie werden in späteren Abschnitten beschrieben.1.2 Oszillator- und TaktgeberschaltungXTAL1 und XTAL2 sind der Eingang und Ausgang eines einstufigen, auf demChip befindlichen Inverters, der zusammen mit externen Bauelementen (Abbildung1.4a) zur so genannten Pierce-Schaltung (Abbildung 1.4b) aufgebaut wird.48© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.2Oszillator- und TaktgeberschaltungDie Schaltung auf dem Chip sowie die Auswahl der externen Bauelemente zumAufbau des Oszillators werden in den folgenden Abschnitten sowohl für dieNMOS- als auch für die CMOS-Version des Mikrocontrollers beschrieben.Abb. 1.4:a: Beschaltung der Anschlüsse XTAL1 und XTAL2 mit einem Quarz oder einemkeramischen Resonator sowie zwei Kondensatoren. Man achte auf kurze, direkteMasseverbindung zwischen Mikrocontroller und Kondensatorfußpunkten.b: Prinzip des Pierce-OszillatorsIn jedem Fall treibt der Oszillator den internen Taktgenerator. Dieser liefert dieinternen Taktsignale für die auf dem Chip befindlichen Schaltungen. Die Frequenzder internen Taktsignale beträgt die Hälfte der Oszillatorfrequenz und legtdie internen Phasen, Schritte und Maschinenzyklen fest, die später noch beschriebenwerden.Wie bei der NMOS-Version besteht auch die auf dem Chip des 80C51 befindlicheOszillatorschaltung (Abbildung 1.5) aus einem einstufigen linearen Inverter, derzum Betrieb als quarzgesteuerter Oszillator mit positiver Reaktanz vorgesehen ist.Dennoch sind einige wichtige Unterschiede vorhanden.Einer der Unterschiede besteht darin, dass der Oszillator mittels Software abgeschaltetwerden kann, indem ein 1-Signal in das Bit PD im speziellen FunktionsregisterPCON geschrieben wird. Ein weiterer Unterschied ist durch die Tatsachegegeben, dass die interne Taktschaltung des 80C51 durch Signale am AnschlussXTAL1 betrieben wird, während dies bei der NMOS-Version am Anschluss XTAL2erfolgt.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921549
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Abb. 1.5:Oszillatorschaltung auf dem Chip des Mikrocontrollers 80C51 (CMOS-Version)Der Rückkopplungswiderstand R f setzt sich aus parallel geschalteten n-Kanal- undp-Kanal-Feldeffekttransistoren zusammen, die durch das Bit PD gesteuert werden,und zwar ist R f abgeschaltet, wenn PD = 1 ist. Die Dioden D l und D 2 , die alsKlemmdioden für U CC (+5 V) und U SS (0 V) dienen, sind parasitär zu dem ausFeldeffekttransistoren bestehenden Widerstand R f .Abb. 1.6:Funktionale Darstellung der Oszillatorschaltung auf dem Chip des 80C51 (CMOS-Version) im Zusammenspiel mit der äußeren Beschaltung50© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.2Oszillator- und TaktgeberschaltungDer Oszillator kann mit denselben externen Bauelementen wie die NMOS-Versionaufgebaut werden, wie auch Abbildung 1.6 zeigt. Typische Werte sind C 1 = C 2= 30 pF, wenn ein Quarz eingesetzt wird, und C 1 = C 2 = 47 pF bei Verwendungeines keramischen Resonators.Abb. 1.7:Anschluss eines externen Taktgenerators an den 80C51 (CMOS-Version)Beim Betrieb der CMOS-Version (Abbildung 1.7) mit einem externen Taktgeneratorwird das externe Taktsignal an den Anschluss XTAL1 gelegt, während XTAL2unbeschaltet bleibt.Ein Maschinenzyklus besteht aus sechs Schritten (zwölf Oszillatorperioden). JederSchritt wird eingeteilt in eine Hälfte für Phase 1, während der Takt von Phase 1aktiv ist, und in eine Hälfte für Phase 2, während der Takt von Phase 2 aktiv ist.Somit besteht ein Maschinenzyklus aus zwölf Oszillatorperioden. Jede Phase dauerteine Oszillatorperiode, jeder Schritt zwei Oszillatorperioden. Im Allgemeinenfinden arithmetische und logische Operationen während Phase 1 statt, internerDatentransfer (von einem Register zum anderen) dagegen während Phase 2.Die Ausführung eines 1-Zyklus-Befehls beginnt, wenn der Befehlscode imBefehlsregister zwischengespeichert wird. Handelt es sich um einen 2-Byte-Befehl, so wird das zweite Byte während desselben Maschinenzyklus gelesen.Handelt es sich dagegen um einen 1-Byte-Befehl, so findet zwar ein Speichervorgangstatt, aber das gelesene Byte (nämlich der nächste Befehlscode) wird nichtbeachtet und der Programmzähler nicht inkrementiert.Die meisten Befehle des 8051 werden in einem Zyklus ausgeführt. MUL (Multiplizieren)und DIV (Dividieren) sind die einzigen Befehle, die zur vollständigen Ausführungmehr als zwei Zyklen, nämlich vier, benötigen.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921551
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Im Allgemeinen werden während eines Maschinenzyklus zwei Befehlscode-Bytesaus dem Programmspeicher geholt. Die einzige Ausnahme hiervon besteht in derAusführung eines MOVX-Befehls. Bei diesem handelt es sich um einen 1-Byte-2-Zyklen-Befehl, der auf den externen Datenspeicher zugreift. Dabei werden zweiHolvorgänge übersprungen, während der externe Datenspeicher adressiert undabgefragt wird.1.3 Aufbau und Betrieb der PortsAlle vier Ports des 8051 können bidirektional betrieben werden. Port 0 erlaubt denTristate-Zustand (»echter« bidirektionaler Port), während dies bei den Ports 1–3mit ihren internen Pull-up-Widerständen nicht der Fall ist (»quasi«-bidirektionalePorts). Jedem Port (Port 0–3) sind acht Bit-Zwischenspeicher zugeordnet, diejeweils ein spezielles Funktionsregister (SFR) bilden. Für jeden Portanschluss gibtes einen Ausgangstreiber und einen Eingangspuffer.1.3.1 Eingangspuffer und AusgangstreiberDie Ausgangstreiber von Port 0 und Port 2 sowie der Eingangspuffer von Port 0werden beim Zugriff auf den externen Speicher verwendet. Bei dieser Anwendunggibt Port 0 das untere Byte der externen Speicheradresse aus, im Zeitmultiplex mitdem zu schreibenden oder zu lesenden Byte. Port 2 gibt das obere Byte der externenSpeicheradresse aus, wenn diese 16 Bit breit ist. Andernfalls geben dieAnschlüsse an Port 2 auch weiterhin den Inhalt des speziellen FunktionsregistersP2 aus. Die Anschlüsse von Port 3 haben auch noch alternative Funktionen, wieaus Tabelle 1.8 zu ersehen ist.PortanschlussAlternative FunktionenP3.0 RXD (serieller Port, Eingang)P3.1 TXD (serieller Port, Ausgang)P3.2 INT0 (externer Interrupt)P3.3 INT1 (externer Interrupt)P3.4 T0 (Zeitgeber/Zähler 0, externer Eingang)P3.5 T1 (Zeitgeber/Zähler 1, externer Eingang)P3.6 WR (Strobe-Signal zum Schreiben in den externen Datenspeicher)P3.7 RD (Strobe-Signal zum Lesen aus dem externen Datenspeicher)Tabelle 1.8: Alternative Funktionen der Anschlüsse von Port 3Die alternative Funktion eines Portanschlusses kann nur dann aktiviert werden,wenn der entsprechende Bit-Zwischenspeicher im speziellen FunktionsregisterP3 eine Eins enthält. Andernfalls bleibt der Portanschluss auf null stehen.52© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der PortsTabelle 1.9 zeigt die Bitadressen im Registerspeicher:Adresse Funktion80H Port 0, Bit 081H Port 0, Bit 182H Port 0, Bit 283H Port 0, Bit 384H Port 0, Bit 485H Port 0, Bit 586H Port 0, Bit 687H Port 0, Bit 788H Timer 0,Interrupt, Type-Kontroll-Bit89H Timer 0, Interrupt, Edge-Flag8AH Timer 1, Interrupt, Type-Kontroll-Bit8BH Timer 1, Interrupt, Edge-Flag8CH Timer 0, Run Kontroll-Bit8DH Timer 0, Overflow-Flag8EH Timer 1, Run Kontroll-Bit8FH Timer 1, Overflow-Flag90H Port 1, Bit 091H Port 1, Bit 192H Port 1, Bit 293H Port 1, Bit 394H Port 1, Bit 495H Port 1, Bit 596H Port 1, Bit 697H Port 1, Bit 798H Receive Interrupt Flag99H Transmit Interrupt Flag9AH Receive Bit 89BH Transmit Bit 89CH Receiver Enable9DH Serial Mode Kontroll-Bit-29EH Serial Mode Kontroll-Bit-19FH Serial Mode Kontroll-Bit-0A0H Port 2, Bit 0Tabelle 1.9: Bitadressen im Registerspeicher© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921553
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Adresse FunktionA1H Port 2, Bit 1A2H Port 2, Bit 2A3H Port 2, Bit 3A4H Port 2, Bit 4A5H Port 2, Bit 5A6H Port 2, Bit 6A7H Port 2, Bit 7A8H Enable Externer Interrupt 0A9H Enable Timer 0 InterruptAAH Enable Externer Interrupt 1ABH Enable Timer 1 InterruptACH Enable Senat Port InterruptAFH Enable All InterruptsB0H Senat Port Receive PinB1H Senat Port Transmit PinB2H Interrupt 0 Input PinB3H Interrupt 1 Input PinB4H Timer/Counter 0 externes FlagB5H Timer/Counter 1 externes FlagB6H Write Data (für externes Memory)B7H Read Data (für externes Memory)B8H Priorität für externen Interrupt 0B9H Priorität für Timer 0 InterruptBAH Priorität für externen Interrupt 1BBH Priorität für Timer 1 InterruptBCH Priorität für seriellen Port InterruptD0H Parity FlagD2H Overflag FlagD3H Register Bank Selektions-Bit 0D4H Register Bank Selektions-Bit 1D5H Flag 0D6H Auxilliary Carry FlagD7H Carry FlagE0H Akkumulator, Bit 0Tabelle 1.9: Bitadressen im Registerspeicher (Forts.)54© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der PortsAdresse FunktionE1H Akkumulator, Bit 1E2H Akkumulator, Bit 2E3H Akkumulator, Bit 3E4H Akkumulator, Bit 4E5H Akkumulator, Bit 5E6H Akkumulator, Bit 6E7H Akkumulator, Bit 7F0H Multiplikationsregister, Bit 0F1H Multiplikationsregister, Bit 1F2H Multiplikationsregister, Bit 2F3H Multiplikationsregister, Bit 3F4H Multiplikationsregister, Bit 4F5H Multiplikationsregister, Bit 5F6H Multiplikationsregister, Bit 6F7H Multiplikationsregister, Bit 7Tabelle 1.9:1.3.2 E/A-StrukturBitadressen im Registerspeicher (Forts.)Die Blockschaltung arbeitet wie ein typischer Bit-Zwischenspeicher und dient alsE/A-Puffer für die E/A-Struktur der vier Ports. Der Bit-Zwischenspeicher (ein Bitim speziellen Funktionsregister des Ports) stellt sich als Flipflop vom Typ D dar,das auf einen Taktimpuls hin einen Wert vom internen Bus übernimmt, wenn dieZentraleinheit ein Signal »Schreiben in den Zwischenspeicher« ausgegeben hat.Das Ausgangssignal 0 des Flipflops wird auf den internen Bus gebracht, wenn dieZentraleinheit ein Signal »Lesen aus dem Zwischenspeicher« ausgegeben hat; derPegel direkt am Portanschluss wird dagegen dann auf den internen Bus gebracht,wenn die Zentraleinheit ein Signal »Lesen vom Portanschluss« ausgegeben hat.Einige Befehle, mit denen Portwerte gelesen werden, aktivieren das Signal »Lesenaus dem Zwischenspeicher«, andere das Signal »Lesen vom Portanschluss«.Die Ports 1, 2 und 3 haben interne Pull-up-Widerstände, Port 0 Open-Drain-Ausgänge.Jede E/A-Leitung kann unabhängig von anderen als Eingang oder Ausgangdienen, jedoch dürfen die Ports 0 und Port 2 nicht als E/A-Leitungen für allgemeineZwecke benutzt werden, wenn sie als Adress-/Datenbus arbeiten. Bei Verwendungals Eingang muss der betreffende Bit-Zwischenspeicher des SFR ein 1-Signal enthalten,die den Ausgangstreiber (einen Feldeffekttransistor) abschaltet. Bei denPorts 1, 2 und 3 wird der Portanschluss durch den internen Pull-up-Widerstand auf1-Signal gesetzt, kann aber durch eine externe Quelle auf 0-Signal gezogen werden.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921555
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Port 0 unterscheidet sich dadurch von den übrigen Ports, dass er keine internenPull-up-Widerstände hat. Der Pull-up-Feldeffekttransistor im Ausgangstreiber vonPort P0 wird nur dann benutzt, wenn der Port während eines Zugriffs auf externeSpeicher Einsen ausgibt. Andernfalls ist der Pull-up-Feldeffekttransistor abgeschaltet.Folglich sind die Leitungen von P0, die als Ausgangsleitungen dienen,vom Open-Drain-Typ. Wird eine Eins in den Bit-Zwischenspeicher geschrieben, sobleiben beide Ausgangs-Feldeffekttransistoren abgeschaltet, und der Anschlussliegt auf unbestimmtem Potential. In diesem Fall kann er als hochohmiger Eingangdienen. Da die Ports 1, 2 und 3 festgelegte Pull-up-Widerstände haben, werdensie oft als quasibidirektionale Ports bezeichnet. Wenn sie als Eingänge dienensollen, nehmen sie den 1-Pegel an und erzeugen dann einen Strom (I LL im Datenblatt),wenn sie auf 0-Pegel gezogen werden. Andererseits bezeichnet man Port 0als echten bidirektionalen Port, weil er unbestimmtes Potential aufweist, wenn erals Eingang betrieben wird.Durch Rücksetzen des 8051 werden Einsen in die Zwischenspeicher aller Portsgeschrieben. Wird anschließend eine Null in den Zwischenspeicher des Portsgebracht, so lässt sich dieser danach als Eingang wieder einrichten, indem maneine Eins in ihn schreibt.1.3.3 Schreiben in einen PortBei der Ausführung eines Befehls, der den Wert im Zwischenspeicher eines Portsändert, erreicht der neue Wert den Ausgangsanschluss erst während Phase 1 desnächsten Maschinenzyklus.Wenn die Änderung einen 0-1-Übergang (positive Flanke) in Port 1, 2 oder 3 erfordert,wird ein zusätzlicher Pull-up-Widerstand während desjenigen Zyklus eingeschaltet,in dem der Übergang erfolgt. Auf diese Weise wird die Übergangsgeschwindigkeiterhöht. Durch den zusätzlichen Pull-up-Widerstand fließt etwa der100-fache Strom wie durch den »normalen« Pull-up-Widerstand. Bei dieser Gelegenheitsollte bemerkt werden, dass die internen Pull-up-Widerstände Feldeffekttransistorenund keine linearen Widerstände sind.Beim Mikrocontroller 8051 (also bei der NMOS-Version) ist der »normale« (d.h.der stets vorhandene) Pull-up-Widerstand ein Transistor vom Verarmungstyp, beidem Gate und Source zusammengeschaltet sind. Der Transistor lässt über denPortanschluss etwa 0,25 mA fließen, wenn dieser mit Masse verbunden ist.Parallel zu diesem Transistor liegt ein Transistor vom Anreicherungstyp, der denoben beschriebenen zusätzlichen Pull-up-Widerstand darstellt und immer dannaktiv wird, wenn das betreffende Bit von null nach eins übergeht. Solange derzusätzliche Transistor aktiv ist, liefert er einen Strom von 30 mA an den Portanschluss,wenn dieser mit Masse verbunden ist.56© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der PortsBei der CMOS-Version besteht der Pull-up-Widerstand aus drei p-Kanal-Feldeffekttransistoren.Man beachte, dass ein n-Kanal-Feldeffekttransistor eingeschaltetist, wenn ein 1-Signal an seinem Gate liegt, und dann ausgeschaltet ist, wenn dortein 0-Signal liegt. Bei p-Kanal-Feldeffekttransistoren ist es umgekehrt.Man beachte, dass bei der Ausgabe eines 1-Signals am Portanschluss ein dort voneiner externen Quelle ankommender negativer Störimpuls den p-Kanal-Feldeffekttransistor3 ausschalten kann, wodurch der Portanschluss unbestimmtesPotential annimmt. Der p-Kanal-Feldeffekttransistor 2 stellt einen sehr niederohmigenPull-up-Widerstand dar, der immer dann eingeschaltet ist, wenn dern-Kanal-Feldeffekttransistor ausgeschaltet ist (typischer CMOS-Schaltungsaufbau).Durch ihn fließt nur ca. 1/10 des Stroms, der den p-Kanal-Feldeffekttransistordurchsetzt. Seine Aufgabe besteht darin, am Portanschluss ein 1-Signalwiederherzustellen, falls dort ein 1-Signal vorhanden war und dieses durch einenexternen Störimpuls verloren gegangen ist.Die Ausgangspuffer der Ports 1, 2 und 3 können je vier Low-Power-Schottky-TTL-Eingänge oder einen normalen TTL-Eingang treiben. Diese Ports in der NMOS-Version lassen sich auf normale Weise durch jede TTL- oder NMOS-Schaltungtreiben. Sowohl die NMOS- als auch die CMOS-Version können durch Open-Kollektorund durch Open-Drain-Ausgänge getrieben werden, ohne dass externe Pullup-Widerständeerforderlich sind.Die Ausgangspuffer von Port 0 können jeweils acht Low-Power-Schottky-TTL-Eingängeoder zwei normale TTL-Eingänge treiben. Sie erfordern jedoch externe Pullup-Widerstände,um NMOS-Eingänge zu treiben, außer wenn der Port als Adress-/Datenbus dient.1.3.4 Read-Modify-Write-MerkmaleEs gibt grundsätzlich zwei Möglichkeiten, einen Port durch einen Befehl zu lesen,und zwar entweder am Zwischenspeicher oder unmittelbar am Portanschluss. DerBefehlsvorrat des 8051 enthält Befehle der einen und der anderen Art. Befehle, dieden Zwischenspeicher lesen, sind jene, durch die ein Wert gelesen, möglicherweisegeändert und anschließend in den Zwischenspeicher zurückgeschriebenwird (so genannte Read-Modify-Write-Befehle). Bei diesen in Tabelle 1.10 aufgeführtenBefehlen ist der Zieloperand ein Port oder ein Portbit.Befehl Beschreibung BeispielANL Logisches UND ANL P1,AORL Logisches ODER ORL P2,AXRL Logisches Exklusiv-ODER XRL P3,AJBC Springe, wenn Bit = 1 und lösche Bit JBC P1.1‚LABELTabelle 1.10: Befehle, die den Zwischenspeicher der Ports lesen (Read-Modify-Write-Befehle)© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921557
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Befehl Beschreibung BeispielCPL Komplementiere Bit CPL P3.0INC Inkrementiere INC P2DEC Dekrementiere DEC P2DJNZ Dekrementiere und springe, falls nicht null DJNZ P3,LABELMOV PX.Y,C Transportiere Übertragsbit nach Bit Y von Port CCLR PX.Y Lösche Bit Y von Port XSET PX.Y Setze Bit Y von Port XTabelle 1.10: Befehle, die den Zwischenspeicher der Ports lesen (Read-Modify-Write-Befehle)Auf den ersten Blick ist nicht zu erkennen, dass auch die drei letzten Befehle dieserTabelle Read-Modify-Write-Befehle sind: Sie lesen das Portbyte (alle acht Bits),ändern das adressierte Bit und schreiben das neue Byte in den Zwischenspeicherzurück.Die Befehle verarbeiten deshalb die Werte des Zwischenspeichers und nicht dieder Anschlüsse, weil die Spannungspegel an den Anschlüssen zu Fehlinterpretationenführen können. Zum Beispiel könnte der Port zum Treiben der Basis einesTransistors dienen. Wird ein 1-Signal in die Bit-Speicherstelle geschrieben, soschaltet der Transistor ein. Wenn dann die Zentraleinheit dasselbe Portbit amAnschluss statt am Zwischenspeicher liest, wird sie die Basisspannung des Transistorslesen und diese als ein 0-Signal interpretieren. Nur das Lesen des Zwischenspeichersanstelle des Anschlusses führt daher zum richtigen Wert, einem1-Signal.1.3.5 Programmierung einer EingabeoperationWie bei allen Mikrocontroller-Projekten muss auch bei Verwendung eines Mikrocontrollersdie nötige Entwicklungsumgebung verfügbar sein. Die Software vonMultisim stellt eine effiziente und leistungsfähige Entwicklungsumgebung für auf8051-Mikrocontroller basierende Anwendungen. Compiler und Assembler sindaufeinander abgestimmt. Sie bilden eine homogene Einheit für die Softwareentwicklungund die erzeugten Objekt-Dateien sind Intel-kompatibel.Somit können Object- und Symbol-Dateien komfortabel mit dem EMUL51-PC-Emulator weiterverarbeitet werden. Der C-Compiler erzeugt alle notwendigenInformationen zur Unterstützung des Source-Code-Debuggings. Das gesamteAssemblerpaket ist Intel-kompatibel und arbeitet unter dem Betriebssystem MS-DOS und Windows. Es besteht aus: A51-Makroassembler L51-Linker/Locater LIB51-Library-Manager OHS51-Objekt-Hex-Konverter58© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der PortsDer Assembler deckt die Maschinenbefehle des Mikrocontrollers 8051 ab.Der Makroassembler A51 erzeugt aus einem 8051-Assemblersourcefile (Intel Mnemonics)ein relocatives Objektmodul und ein List-File. Er erlaubt symbolischenZugriff auf die Architektur des 8051, z.B. RAM-Adressen, Bit-Adressen, Ein/Ausgabeport.Ebenso wird die Architektur des 8052 und die gesamte Nachfolgefamilieberücksichtigt.Der Linker/Locater L51 bindet die einzelnen Module und bei Bedarf Teile ausBibliotheken zusammen, erzeugt absolute Adressen und speichert diese Daten imIntel-Object-File-Format ab. Die Symbole und eventuell die Zeilennummer-Informationenvom C-Quellcode sind im Objectfile enthalten. Zusätzlich kann eineCrossreference-Liste und eine Map-Datei erstellt werden.Für die Hochsprachenprogrammierung verfügt der Linker/Locate L51 auch übereine OVERLAY-Funktion, die den knappen internen Speicher der 8051-Mikrocontrollerspeziell verwaltet. Dabei werden Parameter und Variablen der einzelnenFunktionen überlagert, wenn sich diese Funktionen nicht gegenseitig aufrufen.Dadurch wird der Speicherbedarf der Anwendungen um ein Vielfaches reduziert.L51 analysiert selbstständig die gegenseitigen Aufrufe sämtlicher Funktionen undüberlagert dann gezielt die zu diesen Funktionen gehörenden Daten und Bit-Segmente.Für den DEBUG-Betrieb kann diese Funktion abgeschaltet werden, umproblemlos auf alle Werte zugreifen zu können.Der Object-Hex-Konverter OHS51 kann aus dieser Object-Datei ein Intel-Hex-Fileund eine separate Symboldatei erzeugen.C ist eine allgemein einsetzbare Programmiersprache, die Code-Effizienz, strukturiertesProgrammieren, komfortable Datenstrukturen und einen reichhaltigenSatz von Operationen vereinigt. C ist keine Programmiersprache, die aufbestimmte Anwendungen spezialisiert ist. Durch die Möglichkeit, ein Programmin einer Hochsprache zu formulieren, lässt sich ein Projekt in kürzerer Zeit mitgeringerer Fehleranfälligkeit und besserer Wartungsmöglichkeit realisieren.Der C51-Crosscompiler entspricht dem Standard nach ANSI X3J11 und Kernighan& Ritchie. Er erzeugt Intel-kompatiblen 8051-Objectcode als Ergebnis. DieseObject-Dateien können mit Assembler oder PL/M-51-Objektmodulen kombiniertwerden.Die Parameterübergabe an Funktionen erfolgt, wie bei PLM51, in festen Speicheradressen.Daher sind Zugriffe auf Parameter extrem schnell und einfach mitAssembler zu realisieren. Das Einbinden von Assembler-Unterprogrammen istsomit problemlos.Auch Interrupt-Prozeduren können mit C51 erstellt werden. Die Registerbank, diein der Interrupt-Prozedur verwendet werden soll, kann angegeben werden. DerCompiler generiert den für die Umschaltung erforderlichen Code.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921559
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Der C51-Compiler unterstützt vollständig die Architektur der 8051-Familie. Deruneingeschränkte Zugriff auf sämtliche Hardware-Komponenten des Systems istgewährleistet. Jede Variable kann durch Zuweisung des Speichertyps explizit platziertwerden. Es werden fünf Speichertypen unterstützt, wie Tabelle 1.11 zeigt.dataidatapdataxdatacodeTabelle 1.11:Direkt adressierbarer interner Datenspeicher. Ermöglicht den schnellsten Zugriffauf Variablen (128 Byte)Indirekt adressierbarer interner Datenspeicher. Ermöglicht den schnellsten Zugriffauf Variablen (256 Byte)»Paged« (256 Byte) externer Datenspeicher und der Zugriff erfolgt mit dem BefehlMOVX@RiExterner Datenspeicher (64 Kbyte) und der Zugriff erfolgt mit dem BefehlMOVX@DPTRProgrammspeicher (64 Kbyte) und der Zugriff erfolgt mit dem BefehlMOVC@A+DPTRUnterstützung der Speichertypen im 8051/8052 und der erweiterten FamilieGenerell werden drei verschiedene Speichermodelle unterstützt, wie Tabelle 1.12zeigt.SMALLCOMPACTLARGETabelle 1.12:Parameter und lokale Variablen werden im direkt adressierbaren internenDatenspeicher platziert (max. 120 Byte).Parameter und lokale Variablen werden im »paged« externen Datenspeicherplatziert (max. 256 Byte).Parameter und lokale Variablen werden im externen Datenspeicher platziert(max. 64 Kbyte).Verschiedene SpeichermodelleDer C51-Compiler unterstützt die nachfolgend aufgeführten Datentypen. Zusätzlichlassen sich die Variablen in Strukturen zusammenfassen. Außerdem könnenmehrdimensionale Felder gebildet werden. Die Adressierung von Variablen überPointer ist ebenso möglich wie der direkte Zugriff auf die »Special Function Register«(SFR), wie Tabelle 1.13 zeigt.Datentyp Größe Wertebereichbit 1 Bit 0 oder 1signed char 1 Byte –128 bis +127unsigned char 1 Byte 0 bis 255signed int 2 Byte –32768 bis +32767unsigned int 2 Byte 0 bis 65535Tabelle 1.13:Unterstützte Datentypen60© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der PortsDatentyp Größe Wertebereichsigned long 4 Byte –2147483648 bis +21474483647unsigned long 4 Byte 0 bis 4294967295float 4 Byte +/– 1.176E-38 bis +/– 3.40E+38inter 3 Byte Adresse einer VariablenTabelle 1.13:Unterstützte Datentypen (Forts.)Die Konvertierung der Datentypen beim Rechenvorgang erfolgt automatisch oderkann manuell durch C-Anweisungen gesteuert werden.Wenn Sie eine Schaltung in Multisim aufbauen, müssen Sie zuerst den Button»MCU« anklicken. MultiMCU erlaubt es dem Schüler, Studenten und Auszubildenden,einen Mikrocontroller, der in Assembler programmiert wurde, innerhalbder SPICE-Umgebung einzubinden. Wenn Sie den Button MCU PLATZIERENanklicken, erscheint Abbildung 1.8.Abb. 1.8:Fenster für die Auswahl der Mikrocontroller, RAM- und ROM-Einheiten© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921561
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51In dem Fenster kann man zwischen den Mikrocontrollern von Intel 8051/8052und von Mikrochip PIC16F84/16F84A wählen. Klickt man den Button »RAM« an,erscheinen verschiedene Versionen von 2 Kbyte oder 8 Kbyte. Wenn man den Button»ROM« anklickt, hat man die Auswahl von 16 Kbyte oder 32 Kbyte.Mit »OK« wird ein Mikrocontroller, ein RAM oder ein ROM in der Schaltung platziert.Danach erscheint das Fenster von Abbildung 1.9.Abb. 1.9: MCU-Assistent – Schritt 1 von 3Mit dem MCU-ASSISTENT gibt man Arbeitsbereichspfad und Arbeitsbereichsnamenein. Der Arbeitsbereichsname lautet Versuch1. Anschließend klickt manWEITER an. Es erscheint Abbildung 1.10.Abb. 1.10: MCU-Assistent – Schritt 2 von 3Bei dem MCU-ASSISTENT – SCHRITT 2 VON 3 werden die wichtigsten Definitionenfür die Programmierung festgelegt. Mit dem Projekttyp legt man STANDARD fest62© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der Portsoder man arbeitet mit einer externen Hex-Datei. Unter PROGRAMMIERSPRACHElegt man fest, ob man in C oder in Assembler (BAUGRUPPE) programmierenmöchte. Arbeitet man mit C, wird der HI-TECH C51-LITE-COMPILER festgelegt.Arbeitet man mit Assembler (BAUGRUPPE), wird der 8081/8052 METALINK-ASSEMBLER aufgerufen. Abschließend definiert man noch den PROJEKTNAMENmit Versuch1 und klickt WEITER an. Es erscheint Abbildung 1.11.Abb. 1.11: MCU-Assistent – Schritt 3 von 3Bei dem MCU-ASSISTENT – SCHRITT 3 VON 3 fügt man eine Quelldatei hinzu.Anschließend klickt man FERTIG STELLEN an. Im Schaltplan (Abbildung 1.12) befindetsich der Mikrocontroller 8051.Abb. 1.12: Schaltplan mit dem Mikrocontroller 8051© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921563
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Aus der Bibliothek kann Taster, Widerstand, Masse und +U b geholt werden. DieBausteine sind im Schaltplan zu platzieren und mit dem Mikrocontroller zu verbinden.Der Taster wird mit der PC-Leertaste ein- und ausgeschaltet. Die Hardwareist nun fertig und es kann mit der Programmierung in Assembler begonnenwerden. Dazu klickt man den Button »MCU« an und das Fenster von Abbildung1.13 öffnet sich.Abb. 1.13:Aufruf des MCU-Code-ManagersWenn man den MCU-Code-Manager angeklickt hat, öffnet sich das Fenster vonAbbildung 1.14. Hier lassen sich alle möglichen Funktionen einstellen.Abb. 1.14:Fenster und Einstellmöglichkeiten des MCU-Code-Managers64© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der PortsMit einem Doppelklick auf den Pfad MAIN.ASM öffnet sich das Fenster von Abbildung1.15 und hier führt man die Assembler-Programmierung durch.Abb. 1.15:Fenster für die Assembler-Programmierung und Fenster für die FehlermeldungenUm die Assembler-Programmierung für dieses kleine Projekt durchführen zukönnen, muss man sich Port 1 genau betrachten.Port 1 hat interne Pull-up-Widerstände. Jede E/A-Leitung kann unabhängig vonanderen als Eingang oder Ausgang dienen. Bei Verwendung als Eingang muss derbetreffende Bit-Zwischenspeicher des SFR ein 1-Signal enthalten, die den Ausgangstreiber(einen Feldeffekttransistor) abschaltet. Bei Port 1 wird der Portanschlussdurch den internen Pull-up-Widerstand auf 1-Signal gesetzt, kann aberdurch eine externe Quelle auf 0-Signal gezogen werden. Durch Rücksetzen desMikrocontrollers 8051 werden 1-Signale in die Zwischenspeicher aller Portsgeschrieben. Wird anschließend ein 0-Signal in den Zwischenspeicher des Portsgebracht, so lässt sich dieser danach als Eingang wieder einrichten, indem manein 1-Signal in ihn schreibt.In der ersten Zeile der Assembler-Programmierung stehtMOVP1,#255Damit wird der Eingang des Ports P1 auf 1-Signal gesetzt. Wenn in einer Assembler-Programmierungvor einem Wert das Zeichen »#« angegeben wird, handelt essich beim C51 um eine Konstante. Danach folgt eine Schleife und© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921565
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51MOV A,P1JMP SchleifeIn der Schleife wird der Eingang von Port P1 abgefragt und in den Akkumulatorgeschrieben. Wenn der Taster geschlossen ist, wird ein 0-Signal in den Akkumulatorgeschrieben, und ist der Taster offen, ein 1-Signal.Abb. 1.16:Assembler-Programmierung mit Fenster der FehlerüberprüfungAbbildung 1.16 zeigt die Assembler-Programmierung mit dem Fenster für dieFehlerüberprüfung, wobei die Schaltung bereits simuliert wurde.Jetzt können Sie den Balken MC1.1 anklicken und die Schaltung erscheint wiederim Bildschirm. Dann schaltet sich die noch laufende Simulation aus, erkennbarunten rechts im Bildschirm und so starten Sie erneut die Simulation. Es erscheintein Fenster, da die Projektkonfiguration jetzt nicht mehr aktuell ist, und Sie klickenauf JA. Das Fenster erlischt und Sie erhalten wieder das Fenster für dieAssembler-Programmierung.66© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der PortsIn dem Fenster für die Assembler-Programmierung sind oben links in der zweitenZeile ein grüner Pfeil, ein schwarzes Zweistrichsymbol, ein rotes Rechteck undein roter Kreis sichtbar. Mit dem grünen Pfeil führen Sie den Start oder die Fortsetzungder Simulation durch. Mit dem schwarzen Zweistrichsymbol lässt sich dieSimulation anhalten. Durch das rote Rechteck wird die Simulation angehalten.Klickt man den roten Kreis an, wird nicht nur die Simulation bei der nächstenMCU-Anweisungsgrenze angehalten, sondern Sie rufen die Debugger auf.Wenn ein Programm auf Fehler untersucht wird, spricht man vom DEBUG (entwanzen).Dies ist eine Bezeichnung für die Fehlersuche und Fehlerbehebung inder Hardware und Software. Bei der Software ist das Debug-Programm ein Hilfsmittelfür die Fehlersuche. Sie erlaubt das Setzen von Breakpoints, die Einzelbefehlsausführung,die Ausgabe von Registerinhalten bzw. Speicherabzügen (Dump)und das Verändern von Register- und Speicherinhalten.Breakpoints sind Unterbrechungspunkte im Betriebssystem und enthalten zur Testunterstützungdie Debug-Programme. Diese ermöglichen, Unterbrechungspunkteim Programmablauf vorzugeben. Ein Software-Breakpoint ist eine Adresse. EinHardware-Breakpoint unterbricht das Programm, wenn sich an einem ausgewähltenSignal der Pegel ändert. Das Programm hält dann an der vorgegebenen Stellean. Es ist so kontrollierbar, ob das Programm an dieser Stelle vorbeikommt. Es lassensich gegebenenfalls an dieser Stelle Register- oder Speicherinhalte überprüfen.Meist sind mehrere Breakpoints setzbar.Abb. 1.17:Quelldatei-Debug-AuflistungAbbildung 1.17 zeigt die Quelldatei-Debug-Auflistung. Wenn man die einzelnenDebugmöglichkeiten verlassen will, klickt man das Feld MC1.1 an und kommt so indie Schaltung.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921567
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Abb. 1.18:Speicheransicht nach einer SimulationAbbildung 1.18 zeigt die Speicheransicht von SFR, IRAM, IROM und XRAM. DasSpecial-Function-Register (SFR) liegt im Adressbereich 128 bis 255 (80H bis FFH).Auf die Adressen ist nur mittels direkt adressierter Befehle zuzugreifen. In diesemBereich liegen alle Register, außer den Registerbänken und dem Befehlszähler.Von den im Mikrocontroller 8051 enthaltenen 21 SFR sind 10 bitadressierbar. DasIRAM zeigt die Informationen des internen Schreib-Lese-Speichers und imMikrocontroller 8051 sind 128 Speicherzellen vorhanden. Das IROM zeigt dieInformationen des internen Festwertspeichers an und hat 4 Kbyte. Das XRAM istder externe Schreib-Lese-Speicher.Wenn man den grünen Pfeil anklickt, erscheint Abbildung 1.18 und man sieht, derAkkumulator hat keine Informationen. Wenn das schwarze Zweistrichsymbolangeklickt wird, stoppt die Simulation und der Akkumulator zeigt den Wert an:1 1 1 1 1 1 1 0 Taster geschlossen1 1 1 1 1 1 1 1 Taster offenSie können die Schaltfunktion ohne Probleme überprüfen.68© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der Ports1.3.6 Zugriff auf externe SpeicherHierbei muss zwischen dem Zugriff auf den externen Programmspeicher unddem Zugriff auf den externen Datenspeicher unterschieden werden. Beim Zugriffauf den externen Programmspeicher dient das Signal PSEN (program storeenable) als Lese-Strobesignal, beim Zugriff auf den externen Datenspeicher werdenRD (Read) oder WR (Write) (alternative Funktionen von P3.7 bzw. P3.6) alsLese- bzw. Schreib-Strobesignal verwendet. Abbildung 1.19 zeigt den Anschlusseines Schreib-Lese-Speichers an den Mikrocontroller 8051.Abb. 1.19:Anschluss eines Datenspeichers mit 8 Kbyte mit SpeicheransichtDie Daten und Adressen von D 0 bis D 7 und von A 0 bis A 7 werden gemeinsam überPort 0 ausgegeben. Die Datenleitungen liegen direkt an dem RAM an und dieAdressenleitungen werden über den Baustein 74373 zwischengespeichert. DerBaustein 74373 ist ein 8-Bit-D-Latch mit Enable und Tri-State-Ausgängen. Tabelle1.14 zeigt die Funktionen.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921569
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51OC G D Q0 1 1 10 1 0 00 0 X Q1 X X ZTabelle 1.14: Funktionen des TTL-Bausteins 74373Der Steuereingang OC (Output Control) ist in der Schaltung mit Masse verbundenund daher kann der Baustein 74373 in der Schaltung immer arbeiten. Bei einem1-Signal ist der Baustein gesperrt und die Ausgänge weisen den hochohmigenZustand auf. Hat der Eingang G (Gate oder Enable) ein 1-Signal, ist der Baustein74373 transparent, das heißt, die angelegte Information an dem D-Eingang wirddirekt an den Q-Ausgang weitergegeben. Hat der Eingang G ein 0-Signal, werdendie Informationen gespeichert.Statt des 74373 verwendet man den 74273, ein 8-Bit-D-Register mit Clear. Tabelle1.15 zeigt die Funktionen des TTL-Bausteins 74273.Clear Clock D Q0 X X 01 1 11 0 01 L X Q nTabelle 1.15: Funktionen des TTL-Bausteins 74273In den <strong>Kapitel</strong>n 3 und 4 wird dieser Baustein in der Simulation verwendet. Für denrichtigen Betrieb in der Praxis ist ein NICHT-Gatter für den Takt erforderlich.Das 8-Kbyte-RAM HM1-65642 hat für die Adressierung 13 Eingänge von A 0 bis A 12und daher können 8192 Speicherreihen zu je acht Bit angesprochen werden. Diegespeicherten Informationen in dem Baustein liegen an den Datenausgängen DQan, wenn die Bedingungen für die Wahrheits-Tabelle 1.16 erfüllt sind.E1 E2 G W DQ0 X X X ZX 1 X X Z1 X 1 X Z1 X 0 1 schreiben1 0 0 0 lesenTabelle 1.16:Wahrheits-Tabelle für 8-Kbyte-RAM HM1-6564270© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der PortsDer W-Eingang (Write oder schreiben) vom RAM ist mit dem WR-Ausgang des Mikrocontrollersverbunden. Der G-Eingang (Gate) vom RAM ist mit dem RD-Eingang(Read oder lesen) des Mikrocontrollers verbunden. Der Eingang E2 liegt an +5 V.Das 8-Kbyte-RAM HM1-65642 lässt sich adressieren, wenn sich E1 auf 0-Signalund E2 auf 1-Signal befinden. E1 ist mit dem Ausgang des NOR-Gatters verbunden.Die drei Eingänge des NOR-Gatters liegen an A 13 , A 14 und A 15 . Es ergibt sichfolgender Adressierbereich (Tabelle 1.17):A 15 A 14 A 13 Adressierbereich0 0 0 0000 bis 8191 0000 bis 1FFF0 0 1 8192 bis 16383 2000 bis 3FFF0 1 0 16384 bis 24575 4000 bis 5FFF0 1 1 24576 bis 32767 6000 bis 7FFF1 0 0 32768 bis 40959 8000 bis 9FFF1 0 1 40959 bis 49151 A000 bis BFFF1 1 0 49152 bis 57343 C000 bis DFFF1 1 1 57344 bis 65535 E000 bis FFFFTabelle 1.17:Adressierbereich für das 8-Kbyte-RAM HM1-65642Durch die Adressierung ergibt sich ein Bereich in 8-Kbyte-Blöcken.Auf den externen Programmspeicher wird stets über eine 16-Bit-Adresse zugegriffen,auf den externen Datenspeicher entweder über eine 16-Bit-Adresse (MOVX@DPTR) oder eine 8-Bit-Adresse (MOVX @Ri).Immer wenn eine 16-Bit-Adresse verwendet wird, erscheint das obere Adressbytean Port 2, wo es für die Dauer des Lese- oder Schreibzyklus stehen bleibt. Wennauf den Zyklus mit dem externen Speicher nicht ein weiterer derartiger Zyklusunmittelbar folgt, wird der unveränderte Inhalt des speziellen Funktionsregistersvon Port 2 im nächsten Zyklus wieder erscheinen.Bei Verwendung einer 8-Bit-Adresse (MOVX @Ri) bleibt der Inhalt des Zwischenspeichersvon Port 2 während des gesamten Zyklus mit dem externen Speicher anden Anschlüssen von Port 2 erhalten. In jedem Fall erscheint das untere Adressbyteim Zeitmultiplex mit dem Datenbyte an Port 0. Das Adress-/Datensignaltreibt beide Feldeffekttransistoren in den Ausgangspuffern von Port 0. Daher sinddie Anschlüsse von Port 0 bei dieser Anwendung keine Open-Drain-Ausgängeund erfordern somit keine externen Pull-up-Widerstände. Das Signal ALE(Address Latch Enable) soll dazu dienen, das Adressbyte in einen externen Zwischenspeicherzu bringen und das Adressbyte ist beim negativen Übergang vonALE gültig. In einem Schreibzyklus erscheint dann das zu schreibende Byte anPort 0, unmittelbar bevor WR aktiviert wird, und bleibt dort bis nach der Deaktivierungvon WR stehen. Bei einem Lesezyklus wird das ankommende Byte unmittelbarvor der Deaktivierung von RD an Port 0 entgegengenommen.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921571
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Während eines jeden Zugriffs auf den externen Speicher schreibt die Zentraleinheitden Wert FFH in den Zwischenspeicher von Port 0 (d.h. in das betreffendespezielle Funktionsregister) und löscht damit die vorher vorhandene Informationin diesem Register.Auf den externen Programmspeicher wird bei Erfüllung von wenigstens einer derbeiden Bedingungen zugegriffen:1. Das Signal EA ist aktiv.2. Der Programmzähler (PC) enthält einen Wert, der größer als 0FFFH ist.Dies macht es erforderlich, dass bei der Version ohne ROM (8031) die EA-Einheitendurch entsprechende Verdrahtung fest auf 0-Signal gelegt werden müssen, damitauf die unteren 4 Kbyte des externen Programmspeichers zugegriffen werden kann.Wenn die Zentraleinheit auf den externen Programmspeicher zugreift, sind alleacht Anschlüsse von Port 2 in Ausgabe-Funktion und dürfen nicht für allgemeineE/A-Zwecke verwendet werden. Wird der externe Programmspeicher angesprochen,so gibt Port 2 das obere Byte des Programmzählers aus, wird der externeDatenspeicher angesprochen und so stellt dieser Port entweder DPH oder den Wertdes speziellen Funktionsregisters von Port 2 zur Verfügung. Dies ist davon abhängig,ob der Zugriff auf den externen Datenspeicher mit einem Befehl MOVX @DPTRoder MOVX @Ri erfolgt.Abb. 1.20:Anschluss eines Befehlsspeichers mit 8 KbyteAbbildung 1.20 zeigt den Anschluss des Befehlsspeichers 27C64 mit 8 Kbyte anden Mikrocontroller. Die Daten und Adressen von D 0 bis D 7 und von A 0 bis A 7werden gemeinsam über Port 0 ausgegeben. Die Datenleitungen liegen direkt an72© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.3Aufbau und Betrieb der Portsdem RAM an und die Adressenleitungen werden über den Baustein 74373 zwischengespeichert.Die Steuerung für das EPROM 27C64 übernehmen die dreiEingänge PGM (Program Gate Memory), OE (Output Enable) und CE (ChipEnable). Der PGM-Eingang ist auf Masse gelegt und hat ein 0-Signal. DerEPROM-Baustein wird freigegeben, wenn der CE-Eingang auf 0-Signal liegt. DerCE-Eingang ist direkt mit dem NOR-Ausgang verbunden und für den Adressierbereichgilt Tabelle 1.17. Der OE-Eingang wird mit dem PSEN-Ausgang verbundenund schaltet der Mikrocontroller seinen PSEN-Ausgang auf 0-Signal, gibt derEPROM-Baustein seine gespeicherten Informationen aus.1.3.7 Signal PSENPSEN ist das Freigabesignal beim Zugriff auf den externen Programmspeicher; zumLesen des internen Programmspeichers wird dieses Signal nicht aktiviert. BeimZugriff der Zentraleinheit auf den externen Programmspeicher wird PSEN währendeines jeden Zyklus zweimal aktiviert (außer bei einem MOVX-Befehl), und zwarunabhängig davon, ob das geholte Byte gerade für den momentan abzuarbeitendenBefehl benötigt wird oder nicht. Der zeitliche Verlauf des (aktivierten) Signals PSENist nicht derselbe wie von RD. Ein vollständiger Zyklus von RD, einschließlich Aktivierungund Deaktivierung von ALE und RD, dauert 12 Oszillatorperioden, ein vollständigerZyklus von PSEN, einschließlich Aktivierung und Deaktivierung von ALEund PSEN, jedoch nur sechs Oszillatorperioden. Die Impulsdiagramme für diesebeiden Arten von Lesezyklen sind zum Vergleich in Abbildung 1.21 dargestellt.1.3.8 Signal ALEDie Hauptaufgabe des Signals ALE besteht darin, während des Zugriffs auf denexternen Programmspeicher für die Aufnahme des unteren Adressbytes aus PortP0 in dem zugehörigen externen Zwischenspeicher zu sorgen. Hierfür wird ALEzweimal während eines jeden Zyklus aktiviert. Dies geschieht auch dann, wennder Zyklus keinen externen Zugriff beinhaltet. ALE fällt jedoch dann einmal aus,wenn auf den externen Datenspeicher zugegriffen werden soll, und zwar fehlt daserste ALE-Signal des zweiten Zyklus eines MOVX-Befehls. Daraus folgt, dass injedem System ohne externen Datenspeicher ALE stets mit einer konstanten Frequenzvon 1/6 der Oszillatorfrequenz auftritt und daher für externe Takt- oderZeitgeberschaltungen verwendet werden kann.Bei einigen Anwendungen kann es wünschenswert sein, ein Programm in demselbenphysischen Speicher abzulegen, der auch zum Speichern von Daten dient.Beim Mikrocontroller 8051 können die externen Programm- und Datenspeicherbereichedadurch kombiniert werden, dass man eine UND-Verknüpfung vonPSEN und RD durchführt. Die UND-Verknüpfung (positive Logik) dieser beidenSignale erzeugt ein Lese-Strobesignal, das im aktiven Zustand auf 0-Signal ist undfür den kombinierten Speicher verwendet werden kann. Da der PSEN-Zyklus kürzerals der RD-Zyklus ist, muss der externe Speicher schnell genug sein, um sichan den PSEN-Zyklus anpassen zu können.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921573
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Abb. 1.21:Impulsdiagramme zum Lesen aus dem externen Programmspeicher ohne MOVX-Befehl und mit MOVX-Befehl74© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.4Zeitgeber und Zähler im 80511.4 Zeitgeber und Zähler im 8051Im 8051 sind zwei 16-Bit-Zeitgeber/Zähler (0 und 1) integriert, die entweder alsZeitgeber oder Zähler sowie in vier Betriebsarten (0,1, 2 und 3) arbeiten können.Zu den Zeitgebern/Zählern gehören die speziellen Funktionsregister TMOD (Zeitgeber/Zähler-Betriebsartregistervon Tabelle 1.18) und TCON (Zeitgeber/Zähler-Steuer/Statusregister von Tabelle 1.19). Sie dienen zur Festlegung von Funktionund Betriebsart bzw. zur Steuerung und Kennzeichnung der Zeitgeber/Zähler(z.B. für einen Interrupt oder bei einem Überlauf). Änderungen des Inhalts vonTMOD oder TCON – sei es durch Hardware oder Software, abhängig von den einzelnenBits dieser Register – wirken sich ab S1P1 im ersten Zyklus des nächstenBefehls aus. Sämtliche Bits der genannten Register werden durch Rücksetzengelöscht. Die genauen Funktionen der einzelnen Bits dieser Register sind ausTabelle 1.18 und Tabelle 1.19 zu ersehen.höchstwertigesBitniedrigstwertigesBitGATE C/T M1 M0 GATE C/T M1 M0 Zeitgeber/Zähler 1 Zeitgeber/Zähler 0Kennzeichnungsbit Bit-Speicherstelle Funktion von GATE und C/TGATE TMOD.7.3 Steuerung durch eine Logikschaltung. Wirdes gesetzt, so ist der Zeitgeber/Zähler nurdann aktiviert, wenn der Anschluss INTx ein1-Signal hat und das Steuerbit TRx gesetzt ist(x = 0,1). Ist GATE gelöscht, so wird der Zeitgeber/Zählerdurch Setzen von TRx stets aktiviert.C/T TMOD.6.2 Festlegung, ob Betrieb als Zeitgeber oderZähler erfolgt. Falls gelöscht, Betrieb als Zeitgeber(Eingangsimpulse vom internen Taktgeber).Falls gesetzt, Betrieb als Zähler(Eingangsimpulse vom Anschluss Tx).M1(TMOD.5.1)Tabelle 1.18:M0(TMOD.4.0)BetriebsartFunktion in der gewählten Betriebsart0 0 0 Die Bits 4 bis 0 stellen den Vorteiler dar(Division durch 32).0 1 1 THx und TLx sind in Kaskade zum 16-Bit-Zeitgeber/Zähler zusammengeschaltet;einen Vorteiler gibt es nicht.Zeitgeber/Zähler-Betriebsartregister (TMOD)© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921575
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Tabelle 1.18:1 0 2 Der 8-Bit-Zeitgeber/Zähler THx mit automatischerRückladung enthält einen Wert, dernach TLx rückgeladen wird, wenn dort einÜberlauf erfolgt.1 1 3 Zeitgeber/Zähler 0: TL0 ist ein 8-Bit-Zeitgeber/Zähler,der durch die Standard-Steuerbitsvon Zeitgeber/Zähler 0 gesteuert wird. TH0ist ein 8-Bit-Zeitgeber, der nur durch dieSteuerbits von Zeitgeber/Zähler 1 gesteuertwird.1 1 3 Zeitgeber/Zähler 1: Dieser ist gestoppt.Zeitgeber/Zähler-Betriebsartregister (TMOD) (Forts.)Die Steuerbits C/T (TMOD.2 und TMOD.6) entscheiden darüber, ob die Zeitgeber/Zähler0 bzw. 1 als Zeitgeber bzw. Zähler betrieben werden. Wenn die Einheitals Zeitgeber (O/T = 0) arbeitet, wird ihr Register bei jedem Maschinenzyklusinkrementiert, so dass diese praktisch gezählt werden. Da ein Maschinenzyklusaus 12 Oszillatorperioden besteht, beträgt die Zählrate 1/2 der Oszillatorfrequenz.höchstwertigesBitniedrigstwertigesBitTF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0Kennzeichnungsbit Bit-Speicherstelle FunktionTF1 TCON.7 Kennzeichnungsbit für Überlauf von Zeitgeber/Zähler1. Wird beim Überlauf durch Hardwaregesetzt und durch Hardware gelöscht,wenn der Prozessor eine Interrupt-Routineanspringt.TR1 TCON.6 Steuerbit zur Inbetriebnahme von Zeitgeber/Zähler 1. Wird durch Software gesetzt/gelöscht, um Zeitgeber/Zähler 1 an- bzw.abzuschalten.TF0 TCON.5 Kennzeichnungsbit für Überlauf von Zeitgeber/Zähler0. Wird beim Überlauf durchHardware gesetzt und durch Hardwaregelöscht, wenn der Prozessor eine Interrupt-Routine anspringt.TR0 TCON.4 Steuerbit zur Inbetriebnahme von Zeitgeber/Zähler 0. Wird durch Software gesetzt/gelöscht, um Zeitgeber/Zähler 0 an- bzw.abzuschalten.Tabelle 1.19:Zeitgeber/Zähler-Steuer/Statusregister (TCON)76© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.4Zeitgeber und Zähler im 8051IE1 TCON.3 Kennzeichnungsbit für externen Interrupt anINT1. Wird durch Hardware gesetzt, wenneine 1-0-Flanke zur Auslösung eines externenInterrupts an INT1 erkannt wird, und bei derAusführung des Interrupts gelöscht.IT1 TCON.2 Steuerbit für Interrupt an INT1. Wird durchSoftware gesetzt oder gelöscht, um entwedereinen flankenaktivierten (1-0-Übergang) odereinen pegelaktivierten (aktiv 0-Signal) externenInterrupt zuzulassen.IE0 TCON.1 Kennzeichnungsbit für externen Interrupt anINT0. Wird durch Hardware gesetzt, wenneine 1-0-Flanke zur Auslösung eines externenInterrupts an INT0 erkannt wird, und bei Ausführungdes Interrupts gelöscht.IT0 TCON.0 Steuerbit für Interrupt an INT0. Wird durchSoftware gesetzt oder gelöscht, um entwedereinen flankenaktivierten (1-0-Übergang) odereinen pegelaktivierten (aktiv 0-Signal) externenInterrupt zuzulassen.Tabelle 1.19:Zeitgeber/Zähler-Steuer/Statusregister (TCON) (Forts.)Arbeitet dieser als Zähler (C/T = 1), so wird das Register bei jeder 1-0-Flanke andem entsprechenden externen Anschluss (T0 oder T1) inkrementiert. Bei dieserBetriebsweise wird der externe Anschluss während des Zeitabschnitts S5P2 einesjeden Maschinenzyklus abgefragt. Ergibt sich hierbei in einem Zyklus 1-Signalund im nächsten 0-Signal, wird der Zähler inkrementiert. Der neue Zählwerterscheint im Register während des Zeitabschnitts S3P1 in dem Zyklus unmittelbarnach jenem, in dem der Übergang erkannt wurde. Da es zwei Maschinenzyklen(24 Oszillatorperioden) dauert, um eine 1-0-Flanke (negativ) zu erkennen, beträgtdie Zählrate maximal 1/24 der Oszillatorfrequenz. Bezüglich der Zyklen äußererEingangssignale gibt es keine Beschränkungen; um jedoch sicherzustellen, dassein gegebener Pegel wenigstens einmal abgefragt wird, bevor er sich ändert, sollteer mindestens bei einem vollen Maschinenzyklus stehen bleiben.Außer der Möglichkeit, zwischen der Funktion als Zeitgeber oder Zähler zu wählen,gibt es noch vier verschiedene Betriebsarten, die durch die Bitpaare M1, M0 imspeziellen Funktionsregister TMOD festgelegt werden. Die Betriebsarten 0, 1 und 2sind bei beiden Zeitgebern/Zählern dieselben, Betriebsart 3 ist unterschiedlich.Die vier Betriebsarten werden im Folgenden beschrieben. Abbildung 1.22 zeigtden Mikrocontroller 8051 in einer simulierten Schaltung mit externem Taktgeberund interner Zählfunktion.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921577
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Abb. 1.22:Mikrocontroller 8051 mit externem Taktgeber und interner ZählfunktionBetriebsart 0: Wie im vorigen Abschnitt dargelegt, ist die Betriebsart 0 beim Zeitgeber/Zähler0 und beim Zeitgeber/Zähler 1 identisch. Bei der zur Erläuterungdieser Betriebsart dienenden Abbildung 1.23 wird auf Zeitgeber/Zähler 1 Bezuggenommen; für Zeitgeber/Zähler 0 sind lediglich die Bezeichnungen T0, TF0,INT0, TL0 und TH0 anstelle der entsprechenden, zum Zeitgeber/Zähler 1 gehörendenBezeichnungen einzusetzen. Für die Zeitgeber/Zähler 0 und 1 gibt es jeein Bit GATE (TMOD.3 und TMOD.7).Abb. 1.23:Blockschaltung von Zeitgeber/Zähler in Betriebsart 0 (13-Bit-Zähler)In Betriebsart 0 verhält sich der Zeitgeber/Zähler 0 oder 1 wie der 8048-Zeitgeber,der ein 8-Bit-Zähler mit Vorteilung durch 32 ist. Wie Abbildung 1.23 zeigt, ist das78© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.4Zeitgeber und Zähler im 8051Zeitgeber/Zähler-Register in dieser Betriebsart ein 13-Bit-Register. Wenn bei derZählung ein Überlauf vom Zustand »Nur Einsen« in den Zustand »Nur Nullen«erfolgt, setzt dieses Register das Zeitgeber-Interrupt-Kennzeichnungsbit TF1. DieZählung am Eingang des Zeitgebers/Zählers 1 ist dann freigegeben, wenn TR1 = 1gesetzt ist und außerdem entweder GATE = 0 oder INT1 = 1 gilt. (Mit GATE = 1kann der Zeitgeber/Zähler über den externen Eingang INT1 gesteuert werden,wodurch Pulsbreitenmessungen erleichtert werden.)TR1 ist ein Steuerbit im speziellen Funktionsregister TCON (Tabelle 1.19) undGATE ist ein Steuerbit im speziellen Funktionsregister TMOD (Tabelle 1.18).Das 13-Bit-Register besteht aus sämtlichen acht Bits des speziellen FunktionsregistersTH1 und den unteren fünf Bits des speziellen Funktionsregisters TL1. Dieoberen Bits von TL1 sind unbestimmt und sollten nicht beachtet werden. DurchSetzen des Kennzeichnungsbits »Inbetriebnahme« (TR1) werden die Registernicht gelöscht.Betriebsart 1: Betriebsart 1 ist mit Betriebsart 0 identisch, ausgenommen, dass dasZeitgeber/Zähler-Register in Betriebsart 1 im 16-Bit-Format betrieben wird.Betriebsart 2: Bei dieser Betriebsart wird das Zeitgeber/Zähler-Register zu einem8-Bit-Zähler (TL1) mit automatischer Rückladung, wie in Abbildung 1.24 dargestelltist. Ein Überlauf von TL1 setzt nicht nur TF1‚ sondern lädt auch den Inhaltvon TH1 nach TL1 zurück; TH1 wird vorher per Software eingestellt. TH1 wirddurch den Rückladevorgang nicht geändert.Abb. 1.24:Blockschaltung von Zeitgeber/Zähler in Betriebsart 2 (automatische Rückladung)© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921579
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Betriebsart 2 von Zeitgeber/Zähler 1 und Betriebsart 2 von Zeitgeber/Zähler 0sind gleich.Betriebsart 3: Wird Zeitgeber/Zähler 1 in Betriebsart 3 gebracht, so ändert sich seinInhalt nicht. In den anderen Betriebsarten lässt sich dies durch TR1 = 0 erreichen.Abb. 1.25:Blockschaltung des Zeitgebers/ZählersZeitgeber/Zähler 0 in Betriebsart 3 richtet TL0 und TH0 als zwei getrennte Zählerein. Abbildung 1.25 zeigt die Logik von Zeitgeber/Zähler 0 und 1 in dieserBetriebsart. Daraus ist ersichtlich, dass TL0 die Steuerbits C/T, GATE, TR0, INT0und TF0 von Zeitgeber/Zähler 0 verwendet und TH0 somit nur als Zeitgeberbenutzt werden kann (Zählen von Maschinenzyklen). Dabei nimmt TH0 jetzt TR1und TF1 von Zeitgeber/Zähler 1 in Anspruch, so dass TH0 nun den Interrupt vonZeitgeber/Zähler 1 steuert.Betriebsart 3 ist für solche Anwendungen vorgesehen, die einen weiteren 8-Bit-Zeitgeber oder -Zähler benötigen. Mit dem Zeitgeber/Zähler 0 in Betriebsart 3stellt sich der 8051 als Mikrocontroller mit drei Zeitgebern/Zählern dar. Befindetsich Zeitgeber/Zähler 0 in Betriebsart 3, so lässt sich Zeitgeber/Zähler 1 ein- undausschalten, indem man ihn aus seiner Betriebsart 3 herausnimmt bzw. ihn in80© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.5Serielle Schnittstellediese hineinbringt. Außerhalb Betriebsart 3 kann er dann vom seriellen Port alsBaudratengenerator verwendet werden oder in jeder anderen Anwendung arbeiten,die keinen Interrupt erfordert (TF1 ist für ihn jetzt nicht verfügbar).1.5 Serielle SchnittstelleDer serielle Port ist ein Vollduplex-Port, der also gleichzeitig senden und empfangenkann. Er ist außerdem empfängerseitig gepuffert, das heißt, er kann bereitsmit dem Empfang eines zweiten Bytes beginnen, bevor das vorher empfangeneByte vom Empfängerregister gelesen wurde. Ist jedoch das erste Byte dann nochnicht gelesen, wenn das zweite Byte vollständig ist, so geht eines der Bytes verloren.Sowohl das serielle Sender- als auch das Empfängerregister des Ports werdenüber das spezielle Funktionsregister SBUF angesprochen; Schreiben in SBUF lädtdas Senderegister, und Lesen aus SBUF greift auf ein räumlich getrenntes Empfängerregisterzu. Abbildung 1.26 zeigt die simulierte Schaltung einer seriellenSchnittstelle mit dem Mikrocontroller 8051 und dem SchnittstellenbausteinMAX232.Abb. 1.26:Simulierte Schaltung einer seriellen Schnittstelle mit dem Mikrocontroller 8051 unddem Schnittstellenbaustein MAX232© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921581
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C511.5.1 Betriebsarten des seriellen PortsDer serielle Port kann in einer von vier Betriebsarten arbeiten, was durch das spezielleFunktionsregister SCON (Steuer- und Statusregister für den seriellen Port)vorgegeben wird. Außer den hierfür erforderlichen Bits zur Betriebsart-Auswahlenthält dieses Register auch das 9. Datenbit, das beim Senden und Empfangenbestimmte Funktionen erfüllt (TB8 bzw. RB8), sowie die Interrupt-Kennzeichnungsbitsdes seriellen Ports (TI und RI), ein Bit zur Empfangsfreigabe seriellerDaten (REN) und eine weitere Bitstelle. Die Funktionen der Bits in SCON sind inTabelle 1.20 aufgelistet; in ihrem unteren Teil sind die vier Betriebsarten des seriellenPorts angegeben. Abbildung 1.27 zeigt den Aufbau der Datenblöcke bei typischenAnwendungen mit Angabe der Betriebsarten. Diese werden im Folgendennäher beschrieben.Abb. 1.27:Aufbau typischer Datenblöcke für einige Anwendungen82© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.5Serielle SchnittstellehöchstwertigesBitniedrigstwertigesBitSM0 SM1 SM2 REN TB8 RB8 TI RIKennzeichnungsbit Bit-Speicherstelle FunktionSM0, SM1 SCON.6,7 siehe Seite 84SM2 SCON.5 Bit für Multiprozessor-Datenübertragung. Esgibt die Datenübertragung in einem Multiprozessorsystemin den Betriebsarten 2 und3 frei. Ist SM2 in den Betriebsarten 2 oder 3auf 1-Signal gesetzt, so wird RI nicht aktiviert,wenn das empfangene 9. Datenbit(RB8) den Wert Null hat. Ist SM2 in Betriebsart1 auf 1-Signal gesetzt, so wird RI nichtaktiviert, wenn kein gültiges Stoppbit empfangenwurde. In Betriebsart 0 sollte SM2auf 0-Signal sein.REN SCON.4 Bit für Empfangsfreigabe. Wird durch Softwaregesetzt/gelöscht, um den Empfang seriellerDaten zuzulassen/nicht zuzulassen.TB8 SCON.3 9. Datenbit, das in den Betriebsarten 2 und 3gesendet wird. Kann durch Software gesetztoder gelöscht werden.RB8 SCON.2 9. Datenbit, das in den Betriebsarten 2 und 3empfangen wurde. Ist SM2 in Betriebsart 1auf null gesetzt, so stellt RB8 das empfangeneStoppbit dar. In Betriebsart 0 wird RB8nicht verwendet.TI SCON.1 Sende-Interrupt-Kennzeichnungsbit. Wird inBetriebsart 0 durch Hardware am Ende derfür das 8. Bit vorgesehenen Zeit gesetzt, beiden übrigen Betriebsarten am Anfang desStoppbits. Dies gilt für jedes serielle Senden.Löschen muss durch Software erfolgen.RI SCON.0 Empfänger-Interrupt-Kennzeichnungsbit.Wird in Betriebsart 0 durch Hardware amEnde der für das 8. Bit vorgesehenen Zeitgesetzt, bei den übrigen Betriebsarten in derMitte der für das Stoppbit vorgesehenen Zeit.Dies gilt für jeden seriellen Empfang. Ausnahmenwerden zu SM2 erläutert. Löschenmuss durch Software erfolgen.Tabelle 1.20: Steuer-/Statusregister des seriellen Ports (SCON)© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921583
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51SM0(SCON.7)SM1(SCON.6)BetriebsartFunktion in der gewählten Betriebsart0 0 0 E/A-Erweiterung durch Schieberegister,Baudrate 1/12 der Taktfrequenz0 1 1 8-Bit-UART, variable Baudrate1 0 2 9-Bit-UART, die Baudrate beträgt entweder1/32 oder 1/64 der Taktfrequenz1 1 3 9-Bit-UART, variable BaudrateTabelle 1.20: Steuer-/Statusregister des seriellen Ports (SCON) (Forts.)Die Funktionen der Bits in SCON sind in Tabelle 1.20 aufgelistet; in ihrem unterenTeil sind die vier Betriebsarten des seriellen Ports angegeben. Abbildung 1.27zeigt den Aufbau der Datenblöcke bei typischen Anwendungen mit Angabe derBetriebsarten. Diese werden im Folgenden näher beschrieben.Betriebsart 0: Serielle Daten werden durch RXD sowohl empfangen als auch ausgegeben.TXD ist der Ausgang für den Schiebetaktimpuls. Es werden acht Datenbitsempfangen oder ausgegeben, und zwar das niedrigstwertige Bit zuerst. Die Baudrateist zu 1/12 der Oszillatorfrequenz festgelegt.1.5.2 Senden und Empfangen von InformationenDer Empfang von Daten wird durch die Bedingungen REN = 1 und RI = 0 eingeleitet.Während S 6 P 2 des nächsten Maschinenzyklus schreibt die Steuereinheit RXdie Bits 11111110 in das Empfänger-Schieberegister und aktiviert in der nächstenTaktphase das Signal »RECEIVE«.Sobald Datenbits von rechts hineingeschoben werden, fallen Einsen nach linksheraus. Ist die Null, die ursprünglich in die Speicherstelle ganz rechts geladenworden war, ganz links im Schieberegister angekommen, so wird die SteuereinheitRX veranlasst, eine letzte Verschiebung um eine Speicherstelle vorzunehmenund SBUF zu laden. Während S1P1 des 10. Maschinenzyklus nach dem Schreibenin SCON durch RI gelöscht wurde, wird »RECEIVE« deaktiviert und RI gesetzt.Betriebsart 1: Hier werden zehn Bits ausgegeben (über TXD) oder empfangen (überRXD): ein Startbit (0), acht Datenbits (das niedrigstwertige Bit zuerst) und einStoppbit (1). Beim Empfang nimmt RB8 in SCON das Stoppbit auf. Die Baudratewird durch die Überlaufrate von Zeitgeber 1 festgelegt.Die Ausgabe wird durch jeden Befehl eingeleitet, der SBUF als Zielregister verwendet.Das Signal »Schreiben in SBUF« lädt auch ein 1-Signal in die 9. Bitpositiondes Sender-Schieberegisters und teilt der Steuereinheit TX mit, dass eineAusgabe verlangt wird. Diese beginnt dann während S1P1 desjenigen Maschinenzyklus,der auf den nächsten Überlauf des die Überläufe von Zeitgeber/Zähler 184© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.5Serielle Schnittstelledurch 16 dividierenden Zählers folgt. Somit sind die Bitzeiten in Bezug auf diesenZähler synchronisiert, nicht in Bezug auf das Signal »Schreiben in SBUF«.Die Ausgabe beginnt mit der Aktivierung von SEND, wodurch das Startbit an TXDerscheint. Eine Bitzeit später wird DATA aktiviert, was zur Freigabe der auszugebendenBits des Sender-Schieberegisters nach TXD führt. Der erste Schiebeimpulstritt eine Bitzeit danach auf.Sobald Datenbits nach rechts hinausgeschoben werden, kommen Nullen von linksentsprechend den Taktimpulsen hinein. Ist das höchstwertige Bit des Datenbytesam Ausgang des Schieberegisters angekommen, so befindet sich ein 1-Signal, dasursprünglich in die 9. Speicherstelle geladen worden war, unmittelbar links nebendem höchstwertigen Bit, und alle übrigen Speicherstellen links davon enthaltennur Nullen. Diese Konstellation veranlasst die Steuereinheit TX, eine letzte Verschiebungum eine Speicherstelle vorzunehmen, danach SEND zu deaktivierenund TI zu setzen. Dies erfolgt beim 10. Überlauf des durch 16 dividierenden Zählersnach dem Signal »Schreiben in SBUF«.Der Empfang von Daten wird eingeleitet, sobald ein Übergang von 1 nach 0 anRXD entdeckt ist. Zu diesem Zweck erfolgt – unabhängig von der eingestelltenBaudrate – eine 16-malige Abfrage von RXD. Ist ein Übergang entdeckt worden, sowird der durch 16 dividierende Zähler sofort zurückgesetzt und 1FFH in das Empfänger-Schieberegistergeschrieben. Das Rücksetzen des durch 16 dividierendenZählers führt zur Synchronisation seiner Überläufe mit den Zeiten, die für dieankommenden Bits zur Verfügung stehen.Die 16 Zählerschritte teilen jede Bitzeit in Sechzehntel ein. Während des 7., 8. und9. Zählerschritts jeder Bitzeit überprüft der Bitdetektor den an RXD stehendenWert. Der akzeptierte Wert ist derjenige, der bei wenigstens zwei der drei Abfragenfestgestellt wurde. Dies geschieht zur Rauschunterdrückung. Beträgt der währendder 1. Bitzeit akzeptierte Wert nicht null, so werden die Empfangsschaltungenzurückgesetzt, und die Einheit wartet auf einen weiteren Übergang von 1 nach 0.Dies dient zur Rückweisung falscher Startbits. Ist das Startbit als gültig erkannt,wird es in das Empfänger-Schieberegister übernommen und danach ebenfalls derrestliche Datenblock.Sobald Datenbits von rechts hineingeschoben werden, fallen Einsen nach linksheraus. Ist das Startbit ganz links im Schieberegister angekommen (bei Betriebsart1 ein 9-Bit-Register), so wird die Steuereinheit RX veranlasst, eine letzte Verschiebungum eine Speicherstelle vorzunehmen, SBUF mit RB8 zu laden sowieRI zu setzen. Das Signal zum Laden von SBUF und RB8 sowie zum Setzen vonRI wird dann und nur dann erzeugt, wenn folgende Bedingungen während derErzeugung des letzten Schiebeimpulses erfüllt sind:1. RI = 02. entweder ist SM2 = 0 oder das empfangene Stoppbit = 1.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921585
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Ist eine dieser zwei Bedingungen nicht erfüllt, so ist der empfangene Block unwiederbringlichverloren. Bei Erfüllung beider Bedingungen nimmt RB8 das Stoppbitauf, SBUF die acht Datenbits, und RI wird aktiviert. Unabhängig davon, ob dieobigen Bedingungen erfüllt sind oder nicht, beginnt die Einheit zu dieser Zeit wieder,auf einen Übergang von 1 nach 0 an RXD zu warten.Betriebsarten 2 und 3: Hier werden elf Bits ausgegeben (über TXD) oder empfangen(über RXD): ein Startbit mit 0-Signal gekennzeichnet, acht Datenbits (dasniedrigstwertige Bit zuerst), ein programmierbares 9. Datenbit und ein Stoppbitmit 1-Signal gekennzeichnet. Soll ausgegeben werden, so kann dem 9. Datenbit(TB8) der Wert 0 oder 1 zugewiesen werden. Beim Empfang wird das 9. Datenbitvon RB8 in SCON aufgenommen. In Betriebsart 2 beträgt die Baudrate entweder1/32 oder 1/64 der Oszillatorfrequenz, in Betriebsart 3 wird sie von der durch 16oder 32 dividierten Überlaufrate des Zeitgebers 1 festgelegt.Hierdurch ist eine automatische Inbetriebnahme von Slave-Prozessoren durcheine Adressblock-Erkennung möglich. Diese erfolgt mittels Interrupts, was zueiner Vereinfachung des Datenaustausches zwischen den Mikrocontrollern (8051)führt. Die Ausgabe wird durch jeden Befehl eingeleitet, der SBUF als Zielregisterverwendet. Das Signal »Schreiben in SBUF« lädt auch TB8 in die 9. Bitpositiondes Sender-Schieberegisters und teilt der Steuereinheit TX mit, dass eine Ausgabeverlangt wird. Diese beginnt dann während S1P1 desjenigen Maschinenzyklus, derauf den nächsten Überlauf in dem durch 16 dividierenden Zähler folgt. Somit sinddie Bitzeiten in Bezug auf diesen Zähler synchronisiert, nicht in Bezug auf dasSignal »Schreiben in SBUF«.Die Ausgabe beginnt mit der Aktivierung von SEND, wodurch das Startbit an TXDerscheint. Eine Bitzeit später wird DATA aktiviert, was zur Freigabe des auszugebendenBits des Sender-Schieberegisters nach TXD führt. Der erste Schiebeimpulstritt eine Bitzeit danach auf; er taktet ein 1-Signal (das Stoppbit) in die9. Bitposition des Schieberegisters. Danach werden nur Nullen hineingetaktet.Sobald daher Datenbits nach rechts hinausgeschoben werden, kommen Nullenvon links entsprechend den Taktimpulsen hinein. Ist TB8 am Ausgang des Schieberegistersangekommen, so befindet sich das Stoppbit unmittelbar links daneben,und alle übrigen Speicherstellen links davon enthalten nur Nullen. DieseKonstellation veranlasst die Steuereinheit TX, eine letzte Verschiebung um eineSpeicherstelle vorzunehmen, danach SEND zu deaktivieren und TI zu setzen.Dies erfolgt beim 11. Überlauf des durch 16 dividierenden Zählers nach dem Signal»Schreiben in SBUF«.Der Empfang von Daten wird eingeleitet, sobald ein Übergang von 1 nach 0 (negativeFlanke) an RXD entdeckt wurde. Zu diesem Zweck erfolgt – unabhängig vonder eingestellten Baudrate – eine 16-malige Abfrage von RXD. Ist ein Übergangentdeckt worden, so wird der durch 16 dividierende Zähler sofort zurückgesetztund 1FFH in das Empfangs-Schieberegister geschrieben.86© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.5Serielle SchnittstelleWährend des 7., 8. und 9. Zählerschritts jeder Bitzeit überprüft der Bitdetektor denan RXD stehenden Wert. Der akzeptierte Wert ist derjenige, der bei wenigstens zweider drei Abfragen festgestellt wurde. Beträgt der während der ersten Bitzeit akzeptierteWert nicht null, so werden die Empfangsschaltungen zurückgesetzt, und dieEinheit wartet auf einen weiteren Übergang von 1 nach 0 (negative Flanke). Ist dasStartbit als gültig erkannt, wird es in das Empfänger-Schieberegister übernommenund danach ebenfalls der restliche Datenblock.Sobald Datenbits von rechts hineingeschoben werden, fallen Einsen nach linksheraus. Ist das Startbit ganz links im Schieberegister angekommen (bei denBetriebsarten 2 und 3 ein 9-Bit-Register), so wird die Steuereinheit RX veranlasst,eine letzte Verschiebung um eine Speicherstelle vorzunehmen, SBUF und RB8 zuladen sowie RI zu setzen. Das Signal zum Laden von SBUF und RB8 sowie zumSetzen von RI wird dann und nur dann erzeugt, wenn folgende Bedingungenwährend der Erzeugung des letzten Schiebeimpulses erfüllt sind:1. RI = 0 und2. entweder ist SM2 = 0 oder das empfangene 9. Datenbit = 1.Ist eine dieser Bedingungen nicht erfüllt, so ist der empfangene Block unwiederbringlichverloren, und RI wird nicht gesetzt. Bei Erfüllung beider Bedingungennimmt RB8 das empfangene 9. Datenbit auf und SBUF die ersten acht Datenbits.Unabhängig davon, ob die obigen Bedingungen erfüllt sind oder nicht, beginnt dieEinheit eine Bitzeit später erneut auf einen Übergang von 1 nach 0 (negativeFlanke) an RXD zu warten.Man beachte, dass der Wert des empfangenen Stoppbits ohne Einfluss auf SBUF,RB8 oder RI ist.1.5.3 Datenverkehr in MultiprozessorsystemenDie Betriebsarten 2 und 3 beinhalten eine spezielle Vorkehrung zum Datenverkehrin Multiprozessorsystemen. Bei diesen Betriebsarten werden neun Bits empfangen,wobei das 9. Bit von RB8 aufgenommen wird. Danach kommt dasStoppbit. Der Port kann so programmiert werden, dass nach Empfang des Stoppbitsein Interrupt des seriellen Ports nur dann ausgelöst wird, wenn RB8 = 1 ist.Dies wird durch Setzen von SM2 in SCON erreicht.Eine Möglichkeit zur Verwendung dieses Merkmals in Multiprozessorsystemenbesteht in Folgendem: Wenn der Master-Mikrocontroller einen Datenblock aneinen von mehreren Slaves übertragen will, sendet er zunächst ein Adressbyte aus,das den betreffenden Slave identifiziert. Ein Adressbyte unterscheidet sichdadurch von einem Datenbyte, dass das 9. Bit des Adressbytes eine Eins enthält,das 9. Bit des Datenbytes dagegen ein 0-Signal. Ist SM2 = 1 gesetzt, so wird bei denSlaves kein Interrupt durch ein Datenbyte ausgelöst, durch ein Adressbyte dagegenerfolgt ein Interrupt bei allen Slaves. Somit kann jeder Slave das empfangene© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921587
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Adressbyte daraufhin überprüfen, ob er adressiert wurde. Der adressierte Slavelöscht sein Bit SM2 und trifft Vorbereitungen, um die ankommenden Datenbytesin Empfang zu nehmen. Die nicht adressierten Slaves lassen hingegen ihre BitsSM2 gesetzt und fahren mit der Bearbeitung ihrer Aufgaben fort. AnkommendeDatenbytes werden dabei nicht berücksichtigt.Abb. 1.28:Serieller Datenverkehr in einem 8051-Multicontroller-SystemDie beschriebenen Vorgänge (Abbildung 1.28) lassen sich durch ein Protokoll fürden seriellen Datenverkehr in Multicontroller-Systemen beschreiben:1. Der serielle Port eines jeden Slaves ist per Hardware bereit, eine Adresse entgegenzunehmen.Der Empfang eines Adressblocks ruft einen Interrupt hervor,wenn das Bit SM2 des Slaves auf 1-Signal gesetzt ist (einen nur vom Adressblockausgelösten Interrupt).2. Der Master übermittelt dann einen Block, der die 8-Bit-Adresse desjenigen Slavesenthält, der die folgenden Anweisungen und Daten erhalten soll. Bei dem übermitteltenAdressblock ist das 9. Datenbit (TB8) auf 1-Signal gesetzt.88© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.5Serielle Schnittstelle3. Nach dem Empfang des Adressblocks bewirkt der serielle Port jedes Slaveseinen Interrupt bei seiner Zentraleinheit. Diese vergleicht die empfangeneAdresse mit der eigenen.4. Der adressierte, als Slave arbeitende 8051 setzt sein Bit SM2 auf 0-Signal zurückund erhält dadurch alle folgenden Informationen. Sämtliche anderen Slave-Mikrocontroller 8051 belassen ihr Bit SM2 im Zustand 1 und ignorieren somitalle weiteren Informationen, bis eine neue Adresse erscheint.5. Der Master überträgt nun die Steuerinformationen und Daten, die von dem vorheradressierten 8051 (der sein Bit SM2 auf null gesetzt hat) aufgenommen werden.In Betriebsart 0 bleibt das Bit SM2 wirkungslos, in Betriebsart 1 kann es zurPrüfung der Gültigkeit des Stoppbits dienen. Ist in Betriebsart 1 beim EmpfangSM2 = 1, so wird der beim Empfang sonst auftretende Interrupt nicht aktiviert,bevor ein gültiges Stoppbit empfangen wurde.1.5.4 Baudraten (Übertragungsraten)Die Baudrate in Betriebsart 0 des Ports beträgt:BaudrateBetriebsart 0Oszillatorfrequenz12Die Baudrate in Betriebsart 2 hängt vom Wert des Bits SMOD im speziellen FunktionsregisterPCON ab. Bei SMOD = 0 (Wert nach dem Rücksetzen) beträgt dieBaudrate 1/64 der Oszillatorfrequenz, bei SMOD = 1 ist sie 1/32 der Oszillatorfrequenz.Also gilt:BaudrateBetriebsart 2264SMODOszillatorfrequenzWird Zeitgeber/Zähler 1 als Generator für die Baudrate verwendet, so sind dieBaudraten bei den Betriebsarten 1 und 3 durch die Überlaufraten dieses Zeitgebers/Zählerssowie durch den Wert von SMOD wie folgt festgelegt:BaudrateBetriebsarten1und3SMOD2= ⋅Überlaufrate32Bei dieser Anwendung sollten Interrupts von Zeitgeber/Zähler 1 nicht zugelassensein. Der Zeitgeber/Zähler kann entweder als Zeitgeber oder als Zähler arbeiten,und zwar in jeder der drei Betriebsarten, in denen er laufen kann. Bei den meisten© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921589
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51typischen Anwendungen arbeitet er als Zeitgeber mit automatischer Rückladung(oberes Halbbyte von TMOD ist 0010B). In diesem Fall ergibt sich die Baudrate aus:BaudrateMan kann mit dem Zeitgeber 1 sehr niedrige Baudraten erreichen, wenn manInterrupts bei diesem Zeitgeber zulässt, ihn so einstellt, dass er als 16-Bit-Zeitgeberläuft (oberes Halbbyte von TMOD ist 0001B), und ihn somit als Zeitgeber mit16-Bit-Rückladung durch Software verwendet. Die Baudrate beträgt dann:BaudrateIn Tabelle 1.21 sind einige gebräuchliche Baudraten sowie Möglichkeiten zu ihrerErzeugung unter Verwendung von Zeitgeber 1 angegeben.Baudrate(kBaud)Betriebsartdes seriellenPortsOszillatorfrequenz(MHz)SMOD Zeitgeber/Zähler 1C/T Betriebsart Rückladewertmax. 1000 0 12 X X X Xmax. 375 2 12 1 X X X62,5 1,3 12 1 0 2 FFH19,2 1,3 11,059 1 0 2 FDH9,6 1,3 11,059 0 0 2 FDH4,8 1,3 11,059 0 0 2 FAH2,4 1,3 11,059 0 0 2 F4H1,2 1,3 11,059 0 0 2 E8H0,1375 1,3 11,986 0 0 2 1DH0,110 1,3 6 0 0 2 72H0,110 1,3 12 0 0 1 FEEBHTabelle 1.21:Betriebsarten1und3Betriebsarten1und3SMOD2 Oszillatorfrequenz 32 12 256 -TH1 SMOD2 Oszillatorfrequenz 32 12 65536 - TH1,TH 0 Häufig verwendete, durch Zeitgeber/Zähler 1 erzeugte Baudraten1.6 Interrupt-VerarbeitungDem Mikrocontroller 8051 sind fünf Interrupt-Quellen zugeordnet, wie aus Abbildung1.29 zu ersehen ist. Jeder der externen Interrupts INT0 und INT1 kann entwederpegel- oder flankenaktiviert sein, was von den Bits IT0 und IT1 im RegisterTCON abhängt. Die Kennzeichnungsbits, die diese Interrupts dann auslösen, sind90© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.6Interrupt-VerarbeitungIE0 und IE1 in TCON. Sie werden nur dann mittels Hardware beim Anspringender Subroutinen-Adresse gelöscht, wenn der Interrupt flankenaktiviert war. Ist derInterrupt dagegen pegelaktiviert, dann ist es die anfordernde externe Quelle, diedas Kennzeichnungsbit steuert und nicht die Hardware auf dem Chip.Abb. 1.29: Interrupt-Quellen des 8051Die Interrupts von Zeitgeber/Zähler 0 und 1 werden durch die Bits TF0 und TF1erzeugt, die durch einen Überlauf in den entsprechenden Registern dieser Zeitgeber/Zählergesetzt werden (ausgenommen Zeitgeber/Zähler 0 in Betriebsart 3).Bei einem Zeitgeber/Zähler-Interrupt wird das ihn erzeugende Kennzeichnungsbitdurch die Hardware auf dem Chip gelöscht, sobald die Subroutinen-Adresseangesprungen wurde.Der Interrupt des seriellen Ports wird durch eine logische ODER-Verknüpfungvon RI und TI hervorgerufen. Keines dieser Kennzeichnungsbits wird durchHardware gelöscht, nachdem die Subroutinen-Adresse angesprungen wurde. Inpraktischen Fällen muss die Subroutine im Allgemeinen darüber entscheiden, obRI oder TI den Interrupt hervorgerufen hat, und das betreffende Bit muss dannmittels Software gelöscht werden.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921591
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C511.6.1 Interrupt-RegisterAlle Bits, die Interrupts erzeugen, können durch Software gesetzt oder gelöschtwerden, und zwar mit derselben Auswirkung, als ob sie durch Hardware gesetztoder gelöscht worden wären. Dies bedeutet, dass Interrupts mittels Softwareerzeugt oder anstehende Interrupts verhindert werden können.Jede dieser Interrupt-Quellen kann einzeln durch Setzen oder Löschen eines Bitsim speziellen Funktionsregister IE freigegeben oder nicht freigegeben werden(Tabelle 1.22). Man beachte, dass IE auch ein allgemeines Nicht-Freigabebit (EA)enthält, mit dem alle Interrupts auf einmal gesperrt werden können.höchstwertigesBitniedrigstwertigesBitEA – – ET1 ES EX1 ET0 EX0Symbol Bit-Speicherstelle FunktionEA IE.7 kann alle Interrupts sperren. Ist EA = 0, wird kein Interruptzugelassen; ist EA = 1, wird jede Interrupt-Quelleindividuell freigegeben oder nicht freigegeben, indemihr Freigabebit gesetzt bzw. gelöscht wird.- IE.6 in Reserve- IE.5 in ReserveES IE.4 gibt Interrupts vom seriellen Port frei (ES = 1) odernicht frei (ES = 0)ET1 IE.3 gibt Interrupts vom Überlauf des Zeitgebers/Zählers 1frei (ET1 = 1) oder nicht frei (ET1 = 0)EX1 IE.2 gibt externe Interrupts von Anschluss INT1 frei(EX1 = 1) oder nicht frei (EX1 = 0)ET0 IE.1 gibt Interrupts vom Überlauf des Zeitgebers/Zählers 0frei (ET0 = 1) oder nicht frei (ET0 = 0)EX0 IE.0 gibt externe Interrupts von Anschluss INT0 frei(EX0 = 1) oder nicht frei (EX0 = 0)Tabelle 1.22: Interrupt-Freigaberegister (IE)Jeder Interrupt-Quelle kann durch Programmieren eine hohe oder niedrige Prioritätsstufezugewiesen werden, indem ein bestimmtes Bit im speziellen FunktionsregisterIP (Tabelle 1.23) gesetzt oder gelöscht wird. Ein Interrupt niedrigerPriorität kann durch einen Interrupt hoher Priorität unterbrochen werden, abernicht durch einen anderen Interrupt niedriger Priorität. Ein Interrupt hoher Prioritätkann durch eine andere Interrupt-Quelle nicht unterbrochen werden.92© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.6Interrupt-VerarbeitunghöchstwertigesBitniedrigstwertigesBit- – – PS PT1 PX1 PT0 PX0Symbol Bit-Speicherstelle Funktion– IP.7 in Reserve- IP.6 in Reserve- IP.5 in ReservePS IP.4 bestimmt die Prioritätsstufe des Interrupts des seriellenPorts. PS = 1 bedeutet die höhere Prioritätsstufe.PT1 IP.3 bestimmt die Prioritätsstufe des Interrupts von Zeitgeber/Zähler1. PT1 = 1 bedeutet die höhere Prioritätsstufe.PX1 IP.2 bestimmt die Prioritätsstufe des externen Interrupts vonAnschluss INT1. PX1 = 1 bedeutet die höhere Prioritätsstufe.PT0 IP.1 bestimmt die Prioritätsstufe des Interrupts von Zeitgeber/Zähler0. PT0 = 1 bedeutet die höhere PrioritätsstufePX0 IP.0 bestimmt die Prioritätsstufe des externen Interrupts vonAnschluss INT0. PX0 = 0 bedeutet die höhere Prioritätsstufe.Tabelle 1.23:Interrupt-Prioritätenregister (IP)Falls Interrupt-Anforderungen verschiedener Prioritätsstufen gleichzeitig auftreten,wird die Interrupt-Anforderung der höheren Prioritätsstufe abgearbeitet.Erscheinen jedoch Interrupt-Anforderungen derselben Prioritätsstufe gleichzeitig,bestimmt ein interner Auswahlprozess, welcher Interrupt abgearbeitet werdensoll. Somit gibt es innerhalb einer Prioritätsstufe eine weitere Prioritätsskala, diedurch den internen Auswahlprozess bestimmt wird und folgende Reihenfolgefestlegt, wie Tabelle 1.24 zeigt.Quelle Bit Priorität innerhalb einer StufeExterner Interrupt 0 IE0 höchsteÜberlauf an Zeitgeber/Zähler 0Externer Interrupt 1Überlauf an Zeitgeber/Zähler 1TF0IE1TF1Serieller Port RI + TI niedrigsteTabelle 1.24: Reihenfolge der Interrupt-Anforderungen© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921593
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Es sei nochmals betont, dass die angegebene »Priorität innerhalb einer Stufe« nurdann zur Geltung kommt, wenn gleichzeitige Anforderungen derselben Prioritätsstufevorliegen.1.6.2 Prioritäten der InterruptfolgeDie Interrupt-Kennzeichnungsbits werden während eines jeden Maschinenzyklusabgefragt und die Ergebnisse während des nächsten Maschinenzyklus einer Prioritätzugeordnet. War während des erstgenannten Zyklus eines der Kennzeichnungsbitsgesetzt, so wird dies im zweiten erkannt, und das Interrupt-Systemerzeugt den Befehl LCALL für die entsprechende Subroutinen-Adresse, vorausgesetzt,dass die Abarbeitung des durch Hardware erzeugten Befehls LCALL nichtdurch eine der folgenden Bedingungen gesperrt ist:1. Ein Interrupt gleicher oder höherer Priorität wird gerade abgearbeitet.2. Der gegenwärtige, der Zuordnung einer Priorität dienende Maschinenzyklus istnicht der letzte bei der Ausführung des gerade laufenden Befehls.3. Der gerade auszuführende Befehl ist RETI oder stellt einen Zugriff auf das spezielleFunktionsregister IE oder IP dar.Jede dieser drei Bedingungen blockiert den Befehl LCALL für die Interrupt-Routine.Bedingung 2 stellt sicher, dass der gerade laufende Befehl vollständig abgearbeitetwird, bevor irgendeine Subroutine angesprungen wird. Durch Bedingung 3ist Folgendes gewährleistet: Wenn der gerade auszuführende Befehl RETI ist odereinen Zugriff auf IE oder IP darstellt, wird wenigstens noch ein weiterer Befehlausgeführt, bevor die Durchführung des Interrupts beginnt.Die Zuordnung zu einer Priorität wird in jedem Maschinenzyklus wiederholt, unddie verglichenen Werte sind diejenigen, die während des vorangegangenenMaschinenzyklus vorhanden waren. Ist ein Interrupt-Kennzeichnungsbit gesetzt,das aber wegen einer der obigen Sperrbedingungen nicht bedient werden kann,und ist es bei Aufhebung der Sperrbedingung nicht mehr gesetzt, so wird derzurückgewiesene Interrupt nicht mehr ausgeführt. Mit anderen Worten: Das Systemerinnert sich nicht daran, dass das Kennzeichnungsbit gesetzt war, aber nichtbedient wurde. Jeder Zyklus, in dem eine Prioritätenzuordnung erfolgt, muss indiesem Sinn für sich betrachtet werden.Somit akzeptiert der Prozessor eine Interrupt-Anforderung, indem er durch denmittels Hardware erzeugten Befehl LCALL die entsprechende Subroutine aufruft.In einigen Fällen löscht er auch das Kennzeichnungsbit, das den Interrupt ausgelösthat, in anderen Fällen nicht. Niemals löscht er das Kennzeichnungsbit desseriellen Ports; dies muss durch die Software des Anwenders erfolgen. Die Kennzeichnungsbitsder externen Interrupts (IE0 und IE1) werden nur dann gelöscht,wenn der Interrupt flankenaktiviert war. Der mittels Hardware erzeugte Befehlveranlasst, dass der Inhalt des Programmzählers in den Stack übernommen wird94© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.6Interrupt-Verarbeitung(rettet jedoch nicht das Programmstatuswort) und lädt den Programmzähler miteiner Adresse, die von der Interrupt-Quelle abhängt, wie Tabelle 1.25 zeigt.Interrupt-QuelleExterner Interrupt 0Überlauf des Zeitgebers/Zählers 0Externer Interrupt 1Überlauf des Zeitgebers/Zählers 1Serieller PortTabelle 1.25: Startadressen für Interrupt-RoutinenStartadresse0003H000BH0013H001BH0023HDie Abarbeitung der Subroutine setzt sich von dem angegebenen Speicherplatzaus fort, bis der Befehl RETI auftritt. Dieser informiert den Prozessor darüber,dass die Interrupt-Routine beendet ist, holt dann die zwei oberen Bytes aus demStack und lädt damit den Programmzähler. Die weitere Ausführung des unterbrochenenProgramms erfolgt dann von der Stelle aus, wo es aufgehört hatte.Man beachte, dass ein einfacher Befehl RET zwar auch die Programmausführungan das unterbrochene Programm zurückgibt, das Interrupt-Steuersystem jedochin der Annahme belässt, dass der Interrupt weiterhin abgearbeitet wird.1.6.3 Externe Interrupt-QuellenExterne Quellen können einen Interrupt entweder durch ein 0-Signal oder durcheine negative Flanke von 1 nach 0 (pegelaktivierte oder flankenaktivierte Interrupts)auslösen, was durch Programmieren, d.h. durch Setzen oder Löschen vonIT1 oder IT0 im Register TCON, festgelegt wird. Ist ITx = 0, wird ein externerInterrupt x durch Erkennen des 0-Signals am Anschluss INTx eingeleitet, ist dagegenITx = 1, erfolgt die Interrupt-Auslösung durch Erkennen einer Flanke desPegels. In diesem Fall wird, wenn aufeinanderfolgende Abfragen von INTx ein1-Signal in einem Zyklus und von einem 0-Signal im nächsten Zyklus ergebenhaben, das Kennzeichnungsbit für externe Interrupt-Anforderungen IEx in TCONgesetzt. Dies löst dann den Interrupt aus.Da die externen Interrupt-Anschlüsse während eines jeden Maschinenzyklus einmalabgefragt werden, sollte ein Eingangssignal (1- oder 0-Signal) wenigstenszwölf Oszillatorperioden am Eingang anliegen, um eine sinnvolle Abfrage zugewährleisten. Wenn daher der externe Interrupt flankenaktiviert ist, muss dieexterne Quelle wenigstens einen Zyklus eines 1-Signals am entsprechendenAnschluss stehen lassen und danach wenigstens einen Zyklus eines 0-Signals,damit die Flanke erkannt und das Kennzeichnungsbit für externe Interrupt-AnforderungenIEx gesetzt werden kann. Ex wird durch die Zentraleinheit automatischgelöscht, wenn die Interrupt-Routine aufgerufen ist.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921595
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Ist der externe Interrupt pegelaktiviert, muss die externe Quelle die Anforderungso lange aufrechterhalten, bis der angeforderte Interrupt tatsächlich erzeugt wordenist. Danach muss er die Anforderung deaktivieren, bevor die Interrupt-Routineabgearbeitet ist; andernfalls wird ein weiterer Interrupt erzeugt.Die Pegel an INT0 und INT1 werden invertiert und während eines jeden Maschinenzyklusin IE0 bzw. IE1 zwischengespeichert. Bis zum nächsten Maschinenzykluserfolgt keine Zuordnung der gefundenen Werte zu Prioritäten durch dieSchaltung. Liegt eine Interrupt-Anforderung vor und lassen die sonstigen Bedingungendie Annahme dieser Forderung zu, so ist ein mittels Hardware ausgelösterSubroutinen-Aufruf der gewünschten Interrupt-Routine der nächste auszuführendeBefehl. Der Aufruf selbst nimmt zwei Zyklen in Anspruch. Somit vergehenminimal drei vollständige Maschinenzyklen zwischen der Aktivierung einer externenInterrupt-Anforderung und dem Ausführungsbeginn des ersten Befehls derInterrupt-Routine.Eine längere Ansprechzeit ergibt sich dann, wenn die Interrupt-Anforderungdurch eine Bedingung blockiert ist. Wird gerade ein Interrupt gleicher oder höhererPriorität abgearbeitet, so hängt die zusätzliche Wartezeit von der anderen Interrupt-Routineab. Befindet sich der gerade auszuführende Befehl nicht in seinemletzten Zyklus, so kann trotzdem die zusätzliche Wartezeit nicht mehr als dreiZyklen betragen, da die längsten Befehle (MUL und DIV) nun vier Zyklen langsind. Ist schließlich der gerade auszuführende Befehl RETI oder stellt er einenZugriff auf das spezielle Funktionsregister IE oder IP dar, so kann die zusätzlicheWartezeit nicht mehr als fünf Zyklen betragen (maximal einen weiteren Zyklus,um den laufenden Befehl zu beenden, sowie vier Zyklen für den nächsten Befehl,falls es sich um MUL und DIV handelt).Somit beträgt die Ansprechzeit in einem System mit einem einzelnen Interruptstets mehr als drei und weniger als acht Zyklen.1.7 EinzelschrittbetriebDie Interrupt-Struktur des 8051 gestattet Einzelschrittbetrieb mit sehr geringemzusätzlichem Softwareaufwand. Wie bereits dargelegt, wird eine Interrupt-Anforderungso lange nicht bedient, wie ein Interrupt gleicher oder höherer Prioritätläuft oder bis nach einem Befehl RETI wenigstens ein weiterer Befehl ausgeführtworden ist. Somit kann, sobald eine Interrupt-Routine begonnen hat, sie nichterneut einsetzen, bevor nicht wenigstens ein Befehl des unterbrochenen Programmsausgeführt wurde. Eine Möglichkeit, diese Tatsache für den Einzelschrittbetriebzu nutzen, besteht darin, einen der externen Interrupt-Anschlüsse (z.B.INT0) so zu programmieren, dass er pegelaktiviert ist. Die Interrupt-Routine wirddann mit folgender Codierung abgeschlossen:96© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.8Rücksetzen des 8051JNB P3.2,$ ;WARTE HIER, BIS INT0 HIGH ISTJB P3.2,$ ;WARTE JETZT HIER, BIS INT0 LOW ISTRETI;SPRINGE ZURUECK UND FUEHRE EINEN BEFEHL AUSWird jetzt der Anschluss INT0 (gleich dem Anschluss P3.2) normalerweise auf0-Signal gehalten, so startet die Zentraleinheit die durch den externen Interrupt0 ausgelöste Routine und bleibt so lange in dieser, bis INT0 gepulst wird (von0- nach 1- und von dort nach 0-Signal). Dann führt die Zentraleinheit den BefehlRETI aus, geht ins Hauptprogramm zurück, führt dort einen einzigen Befehl ausund beginnt sofort erneut mit der Routine des externen Interrupts 0, um auf dennächsten Impuls von P3.2 zu warten. Bei jedem Impuls an P3.2 führt die Zentraleinheiteinen Schritt des Hauptprogramms aus.1.8 Rücksetzen des 8051Der Anschluss RST stellt den Rücksetzeingang dar und ist Eingang eines Schmitt-Triggers. Ein Rücksetzvorgang lässt sich dadurch erreichen, dass man den AnschlussRST für wenigstens zwei Maschinenzyklen (24 Oszillatorperioden) auf ein1-Signal bringt, während der Oszillator läuft. Die Zentraleinheit reagiert darauf,indem sie einen internen Rücksetzvorgang einleitet, und richtet auch die AnschlüsseALE und PSEN als Eingänge ein (diese sind bidirektional). Der interneRücksetzvorgang wird während eines zweiten Zyklus ausgeführt, in dem RST ein1-Signal hat, und so lange während eines jeden Zyklus wiederholt, bis RST ein0-Signal annimmt. Nach dem Rücksetzvorgang weisen die Register folgendenInhalt auf, wie Tabelle 1.26 zeigt.PC 000H TMOD 00HACC 00H TCON 00HB 00H TH0 00HPSW 00H TL0 00HSP 07H TH1 00HDPTR 0000H TL1 00HP0...P3 0FFH SCON 00HIP (XXX00000) SBUF unbestimmtIE (0XX00000) PCON (0XXX0000)Tabelle 1.26: Registerinhalt nach Rücksetzvorgang© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921597
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Das interne RAM wird durch einen Rücksetzvorgang nicht berührt. Wenn U CCeingeschaltet wird, ist der RAM-Inhalt unbestimmt, es sei denn, dass vorher einBetrieb mit reduzierter Leistung erfolgt ist.Ein automatischer Rücksetzvorgang wird eingeleitet, wenn RST über einen 10-F-Kondensator mit U CC (+5 V) und über einen 8,2-k-Widerstand mit U CC verbundenwird (Abbildung 1.30). Voraussetzung für die Einleitung des Rücksetzvorgangsist jedoch, dass die Anstiegszeit von U CC ca. 1 ms und dass die Zeit für dieInbetriebnahme des Taktgenerators 10 ms nicht überschreitet.Abb. 1.30:Prinzipschaltung für Rücksetzen durch EinschaltenWenn die Spannung eingeschaltet wird, beginnt der über RST fließende Stromden Kondensator aufzuladen. Die Spannung an RST ist gleich der Differenz zwischenU CC und der Kondensatorspannung. Diese Spannung nimmt von U CC ausab, wenn sich der Kondensator auflädt. Je größer der Kondensator ist, desto langsamernimmt die Spannung an RST ab. Diese Spannung muss eine bestimmteMindestzeit oberhalb des unteren Schwellwerts des Schmitt-Triggers bleiben, umeinen vollständigen Rücksetzvorgang herbeizuführen; die erforderliche Mindestzeitist gleich der Zeit zur Inbetriebnahme des Taktgenerators plus zwei Maschinenzyklen.1.9 Betriebsarten mit reduzierter LeistungsaufnahmeBei Anwendungen, bei denen die Leistungsaufnahme einen kritischen Gesichtspunktdarstellt, kann sowohl die NMOS- als auch die CMOS-Version mit reduzierterLeistung betrieben werden. Die CMOS-Version (80C51) lässt den Betrieb mitreduzierter Leistung (Idle- und Power-Down-Betriebsart) standardmäßig zu, beider NMOS-Version (8051) ist der Betrieb mit reduzierter Leistung zwar auch möglich,aber nicht standardmäßig vorgesehen.98© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.9Betriebsarten mit reduzierter LeistungsaufnahmeDie Betriebsart mit reduzierter Leistung gestattet es dem Anwender der NMOS-Version, die Betriebsspannung U CC auf 0 V zu reduzieren und dabei den Inhaltdes RAM durch eine Hilfsspannung am Anschluss RST zu retten. Zur Ausnutzungdieses Vorteils muss das Anwendersystem, sobald es einen bevorstehendenSpannungsausfall erkennt, in irgendeiner Weise einen Interrupt bei dem Mikrocontrolleranfordern. Hierdurch werden wichtige Betriebsdaten in das RAM aufdem Chip gerettet, und es wird die Spannungsversorgung über den AnschlussRST aufgenommen, bevor U CC unter seinen unteren Grenzwert absinkt. Wenn dieBetriebsspannung wiederkommt, muss die Hilfsspannung noch lange genuganliegen, damit ein Rücksetzvorgang erfolgen kann. Danach wird der normaleBetrieb wieder aufgenommen.Bei der CMOS-Version gibt es zwei Betriebsarten mit reduzierter Leistung, dieIdle- und die Power-Down-Betriebsart. Der Eingangsanschluss, über den dieStromversorgung bei reduzierter Leistung erfolgt, ist U CC . Abbildung 1.31 zeigt dieinterne Schaltung, mit der diese Eigenschaften erreicht werden. Bei der Idle-Betriebsart (IDL = 1) arbeitet der Taktgenerator weiter, und die Bereiche Interrupt,serieller Port sowie Zeitgeber/Zähler werden weiterhin mit Taktimpulsen versorgt;nur die Zentraleinheit wird vom Takt abgetrennt. Bei der Power-Down-Betriebsart (PD = 1) wird der Taktgenerator stillgelegt. Die Idle- und die Power-Down-Betriebsart werden durch Setzen bestimmter Bits im speziellen FunktionsregisterPCON aktiviert. Die Adresse dieses Registers ist 87H; die Einzelheiten sindaus Tabelle 1.27 zu ersehen.Abb. 1.31:Schaltungsaufbau für den Betrieb mit reduzierter Leistung (Idle- und Power-Down-Betriebsart) beim 80C51© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/921599
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51höchstwertigesBitniedrigstwertigesBit- – – PS PT1 PX1 PT0 PX0Symbol Bit-Speicherstelle FunktionSMOD PCON.7 verdoppelt die Übertragungsrate. Ist SMOD = 1, wird dieÜbertragungsrate verdoppelt, wenn der serielle Port inden Betriebsarten 1, 2 oder 3 verwendet wird.PCON.6in ReservePCON.5in ReservePCON.4in ReserveGF1 PCON.3 Kennzeichnungsbit für allgemeine ZweckeGF0 PCON.2 Kennzeichnungsbit für allgemeine ZweckePD PCON.1 Bit für Power-Down-Betriebsart, PD = 1*) aktiviert dieseBetriebsart (CMOS-Version).IDL PCON.0 Bit für Idle-Betriebsart. DL = 1*) aktiviert diese Betriebsart.Tabelle 1.27: Steuerregister (PCON) für die Leistung*) Sind PD und IDL gleichzeitig auf 1-Signal gesetzt, hat PD Vorrang.Der Rücksetzwert von PCON ist bei der NMOS-Version 0XXXXXXXX, bei derCMOS-Version 0XXX0000.Ein Befehl, der PCON.0 setzt, ist der letzte vor dem Übergang in die Idle-Betriebsart.Bei dieser Betriebsart wird der interne Takt von der Zentraleinheit abgetrennt, abernicht die Bereiche Interrupt, Zeitgeber/Zähler und serieller Port. Der Status derZentraleinheit bleibt vollständig erhalten: Stackpointer, Programmzähler, Programmstatuswort,Akkumulator und alle anderen Register behalten ihre Wertewährend der Betriebsart. Die Portanschlüsse behalten die logischen Pegel, die siebei der Aktivierung von Idle hatten. ALE und PSEN nehmen ihre inaktiven Pegel an.Es gibt zwei Möglichkeiten, den Idle-Betrieb zu beenden. Durch Aktivierung einesbeliebigen zugelassenen Interrupts wird PCON.0 mittels Hardware gelöscht, waszur Beendigung des Idle-Betriebs führt. Der Interrupt wird ausgeführt, und dernächste, auf RETI folgende Befehl folgt dem Befehl des Hauptprogramms, derden Mikrocontroller in die Idle-Betriebsart versetzte.Mit den Kennzeichnungsbits GF0 und GF1 ist es möglich anzuzeigen, ob einInterrupt während des normalen Betriebs oder während des Idle-Betriebs aufgetretenist. Zum Beispiel kann ein Befehl, mit dem die Idle-Betriebsart aktiviert100© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.10Speicherorganisation und Adressierungsartenwird, auch eines der beiden Kennzeichnungsbits setzen. Wird der Idle-Betriebdann durch einen Interrupt beendet, kann die Interrupt-Routine die Kennzeichnungsbitsabfragen.Die andere Möglichkeit zur Beendigung des Idle-Betriebs besteht in einem Rücksetzvorgangmittels Hardware. Da der Taktgenerator weitergearbeitet hat, brauchtder Rücksetzvorgang mittels Hardware nur während zweier Maschinenzyklen (24Oszillatorperioden) aktiv gehalten zu werden, um ihn vollständig ablaufen zulassen.Wird mit einem Befehl PCON.1 gesetzt, so geht der Mikrocontroller sofort in diePower-Down-Betriebsart über. In dieser Betriebsart wird der Taktgenerator aufdem Chip angehalten, so dass alle funktionalen Abläufe gestoppt werden; dasRAM auf dem Chip sowie die speziellen Funktionsregister behalten jedoch ihreWerte. An den Portanschlüssen stehen die in den entsprechenden speziellenFunktionsregistern enthaltenen Werte zur Verfügung. ALE und PSEN befindensich auf 0-Pegel.Die einzige Möglichkeit, aus dem Power-Down-Betrieb wieder herauszukommen,besteht in einem Rücksetzvorgang mittels Hardware. Dieser bringt alle speziellenFunktionsregister in einen definierten Anfangszustand, ändert aber den Inhalt desRAM auf dem Chip nicht.Bei der Power-Down-Betriebsart kann U CC herabgesetzt werden, um die Energieaufnahmeauf ein Minimum zu reduzieren. Es muss jedoch darauf geachtet werden,dass U CC mit Sicherheit nicht vermindert wird, bevor der Power-Down-Betrieb aufgenommen ist, und dass U CC seinen normalen Betriebswert wiedererreicht hat, bevor der Power-Down-Betrieb beendet ist. Der Rücksetzvorgang, derden Power-Down-Vorgang abschließt, setzt auch den Taktgeber in Betrieb. DerRücksetzvorgang sollte nicht eingeleitet werden, bevor U CC den normalenBetriebswert wieder erreicht hat, und muss lange genug aktiviert bleiben, um demTaktgeber die Wiederaufnahme und Stabilisierung seines Betriebs zu ermöglichen(im Allgemeinen weniger als 10 ms).1.10 Speicherorganisation und AdressierungsartenDie Architektur der Mikrocontroller der Familie 8051 sieht Möglichkeiten vor, dieSpeicherkapazitäten sowohl auf dem Chip als auch außerhalb des Chips zu erweitern.Durch verschiedene Adressierungsmechanismen wird ein optimaler Befehlsvorraterreicht.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215101
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Der 8051 hat im Prinzip folgende Speicher-Adressierbereiche:64-Kbyte-Programmspeicher (extern)4-Kbyte-Programmspeicher (intern)64-Kbyte-Datenspeicher (extern)256-Byte-Datenspeicher (intern)In Abbildung 1.32 sind die Adressierbereiche übersichtlich dargestellt.Abb. 1.32:Adressierbereiche des Programm- und DatenspeichersDer Programmspeicher-Adressierbereich besteht aus einem inneren und einemäußeren Teil. Wird der Anschluss EA auf 1-Signal gehalten, so greift die CPU aufden internen Programmspeicher zu, es sei denn, die Adresse ist höher als 0FFFH.Informationen aus den Speicherplätzen 1000H bis FFFFH werden aus dem externenProgrammspeicher geholt. Hält man den Anschluss EA jedoch auf 0-Signal,so holt die CPU alle Befehle aus dem externen Programmspeicher. In jedem Fallerfolgt die Adressierung über den 16-Bit-Programmzähler.102© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.10Speicherorganisation und AdressierungsartenDie Speicherplätze 00 bis 23H im Programmspeicher werden für Interrupt-Routinenverwendet; die Startadressen sind aus Tabelle 1.17 zu ersehen. Der Datenspeicher-Adressierbereichbesteht aus einem internen und einem externen Teil. Aufden externen Teil wird bei der Ausführung eines MOVX-Befehls zugegriffen. Derinterne Datenspeicher besteht aus zwei getrennten Blöcken: den 128 Bytes desRAM und den 128 Bytes der speziellen Funktionsregister.Abb. 1.33:Adressierbereich des internen Datenspeichers© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215103
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Abb. 1.34:Adressen der bitadressierbaren Speicherstellen im RAM104© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.10Speicherorganisation und AdressierungsartenAbb. 1.35:Adressen der bitadressierbaren Speicherstellen im speziellen Funktionsregister(SFR)Abbildung 1.33 zeigt die Gliederung des internen Datenspeicher-Adressierbereichs.Vier 8-Registerbänke belegen die Speicherplätze 0 bis 31 im RAM-Bereich.Zu einer bestimmten Zeit kann nur eine dieser vier Bänke in Betrieb sein (überein 2-Bit-Feld im Programmstatuswort). Die nächsten 16 Bytes, die Speicherplätze32 bis 47, enthalten 128 bitadressierbare Speicherstellen, deren Adressen in Abbil-© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215105
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51dung 1.34 angegeben sind. Im Bereich des speziellen Funktionsregisters gibt esebenfalls bitadressierbare Speicherstellen, die in Abbildung 1.35 dargestellt sind.Man beachte, dass das Lesen aus nicht benutzten Speicherplätzen im internenDatenspeicher zu zufälligen Daten führt.1.11 Boole’scher ProzessorDer Boole’sche Prozessor stellt einen integrierten Bitprozessor innerhalb des 8051dar. Er hat seinen eigenen Befehlsvorrat, seinen eigenen Akkumulator (das Übertragsbit)sowie seinen eigenen bitadressierbaren Speicher (RAM) und E/A-Port.Die Bitverarbeitungsbefehle erlauben folgende Bitoperationen: Setzen; Löschen;Komplementieren; Springen, wenn gesetzt; Springen, wenn nicht gesetzt; Springen;und dann Löschen sowie Transportieren vom und zum Übertragsbit. AdressierbareBits oder ihre Komplemente können durch eine logische Operation UNDoder ODER mit dem Inhalt des Übertragsbits verknüpft werden und das Ergebniswird zum Übertragsregister zurückgebracht.1.12 CMOS-Mikrocontroller-Familie AT89C51Die Eigenschaften und Funktionen von tragbaren Geräten werden ständig verbessert.Die Kunden wollen die Leistungsfähigkeit ihrer Produkte erhöhen, was wiederumeine höhere Rechenleistung erfordert. Gleichzeitig wird ein geringererLeistungsverbrauch angestrebt. Im Mittelpunkt dieser entgegengesetzten Forderungensteht der Mikrocontroller – typischerweise einer der größten Leistungsverbraucherin tragbaren Geräten.Es gibt zwar viele leistungssparende Prozessoren, aber ihre Leistungsfähigkeit istoft eingeschränkt. Die Familie schneller Mikrocontroller von Dallas Semiconductorund Atmel stellt einen guten Kompromiss zwischen Leistungsverbrauch undLeistungsfähigkeit dar. Sie basiert auf der Architektur des 8051 – einer der weltweitverbreitetsten Mikrocontroller. Die Entwicklungsingenieure wissen seine einfacheAnwendung, die großzügig ausgelegte Ein-/Ausgangsstruktur und diebreite Akzeptanz zu schätzen. Mittlerweile hat er auch im Bereich der tragbarenProdukte Verbreitung gefunden, wo er in zahlreichen Anwendungen eingesetztwird.Der wichtigste Faktor bei der Bestimmung des Leistungsverbrauchs in einerSchaltung mit Mikrocontroller ist die Taktfrequenz des Systems. Der Leistungsverbrauchkomplementärer Metalloxidhalbleiterbauelemente (CMOS) ist der Taktfrequenzdirekt proportional. Daraus folgt, dass ein Mikrocontroller unter demGesichtspunkt des Leistungsverbrauchs mit der geringstmöglichen Frequenzbetrieben werden sollte.106© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.12CMOS-Mikrocontroller-Familie AT89C51Die typische Leistungskurve für einen Mikrocontroller geht von 12 MHz und einerStromaufnahme von ca. 14 mA bis zu 22 mA bei 25 MHz, die allen Entwurfsingenieurenfür tragbare Systeme bekannt ist. Der Kurve ist zu entnehmen, dass sichdie Stromaufnahme, mit einem DC-Offset, über der Frequenz linear verhält. DieserRuhestrom wird durch die statischen Schaltungsteile auf dem Chip, wie Komparatoren,Operationsverstärkern usw., verursacht. Obwohl es sich dabei um einenrelativ geringen Strom (< 1 mA) handelt, stellt er doch eine konstante Belastungdar, die nicht vernachlässigt werden sollte.Jede Schaltung, die für einen geringen Leistungsverbrauch ausgelegt ist, wird mitder geringstmöglichen Frequenz arbeiten. Die Festlegung der minimalen Systemfrequenzund damit des minimalen Leistungsverbrauchs hängt von mehrerenFaktoren ab, einschließlich des gewünschten Leistungsverhaltens und der Interrupt-Latenz.Unabhängig von den Kriterien bleibt das Ziel jedoch bestehen: diemöglichst genaue Anpassung der Betriebsfrequenz des Bausteins an die Leistungsanforderungender Anwendung.1.12.1 Schneller CPU-Kern im AT89C51Das direkte Verfahren zur Reduzierung des Leistungsverbrauchs einer Schaltungmit dem 8051 ist die Erhöhung der Rechenleistung des Mikrocontrollers. DieGrundversion des 8051 basierte auf der 12-Takt-Architektur mit zwei Abrufen proLesezyklus. Die Familie schneller Mikrocontroller arbeitet jedoch mit einem Kernmit vier Takten oder einem Takt pro Lesezyklus. Dies ist rechnerisch effizienterund erfordert weniger Taktzyklen zur Ausführung eines Befehls. Daraus ergebensich kürzere Ausführungszeiten und höhere maximale Taktfrequenzen.Gewöhnlich werden die Vorteile eines schnellen Kerns hinsichtlich des Leistungsverhaltensbetrachtet, sie wirken sich jedoch auch erheblich auf den Leistungsverbrauchaus. Wird die Befehlsausführung des Prozessors optimiert, wird wenigerZeit für die gleiche Aufgabe benötigt. Viele tragbare Produkte arbeiten im Stoßmodus,das heißt, auf kurze Aktivitätsperioden folgen längere Perioden der Inaktivität,wie z.B. bei der Aufzeichnung von Umweltdaten oder beim Lesen einesStrichcodes. Durch die Reduzierung der Aktivitätszeit des Mikrocontrollers wirdeine entsprechende Reduzierung des Energieverbrauchs erreicht.Eine weitere Folge aus dem verbesserten Wirkungsgrad ist, dass sich das gleicheLeistungsverhalten bei reduzierter Taktfrequenz erreichen lässt. Arbeitet ein veränderterKern mit vier anstatt zwölf Takten pro Zyklus, heißt das, dass der gleicheLeistungsumfang bei reduzierter Taktfrequenz bewältigt wird. Da der Leistungsverbrauchder Taktfrequenz direkt proportional ist, lässt er sich auf diese Art ohneBeeinträchtigung des Leistungsverhaltens reduzieren.Vergleicht man den Leistungsverbrauch von drei Mikrocontrollern, die die gleicheAufgabe mit dem gleichen Leistungsverhalten ausführen, erkennt man die Unter-© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215107
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51schiede. Zwei Mikrocontroller sind vom Standardbaustein 8051 abgeleitet undarbeiten mit zwölf extern erzeugten Takten pro Abrufzyklus, während es sich beimdritten um einen Mikrocontroller AT89C51 handelt, der mit vier Takten pro Abrufzyklusarbeitet. Für alle Bausteine wurde der Stromverbrauch gemessen und verglichen,wobei für den AT89C51 für die Verbesserung des Leistungsverhaltens einkonservativer Wert von 250 % angenommen wurde. Wie aus der Praxis bekanntist, ergibt sich bei dem Kern mit reduzierten Taktperioden pro Maschinenzykluseine erhebliche Stromreduzierung bei gleichem Durchsatz, besonders bei höherenLeistungsdaten.Ein weiteres Verfahren zur Leistungseinsparung ist die Integration periphererFunktionen auf dem Chip. Beim Treiben eines Signals außerhalb des Chips mussder signalerzeugende Schaltkreis die zum Treiben der externen Lasten erforderlicheSchaltleistung aufbringen und die DC-Verluste ausgleichen. Unter Schaltleistung(P SW ) ist die bei einer Signaländerung verbrauchte Leistung zu verstehen. Siewird näherungsweise wie folgt errechnet:P SWC UT 2Dabei ist C die Gesamtkapazität des Empfangsgatters des Eingangspuffers undder Verbindung zwischen den beiden Gates, und der Wert T ist die Taktperiode desSignals. Eine typische Eingangskapazität eines CMOS-Eingangs ist 10 pF. DieErmittlung des genauen Werts der Schaltleistung eines Systems ist zwar schwierig,aber es liegt auf der Hand, dass jede zusätzliche externe Last oder jederAnschluss, den der Mikrocontroller zu treiben hat, zusätzliche Leistung verbraucht.Systeme auf Mikrocontrollerbasis arbeiten normalerweise mit mehreren peripherenSchaltkreisen. Diese reichen von externen UARTs und Einschalt-Resets bis zuWatchdog-Timern. Einer der Vorteile der Produktfamilie AT89C51 besteht in dergroßen Anzahl der auf dem Chip integrierten peripheren Funktionen. Neben derVereinfachung der Schaltung durch Eliminierung von Bauteilen können integrierteperiphere Funktionen auch den Leistungsverbrauch reduzieren. ImGrunde kann man annehmen, dass die Kernfunktionen jedes peripheren Schaltkreises,sei er im Prozessor integriert oder nicht, die gleiche Leistung verbrauchen.Durch die Integration auf dem Chip werden jedoch die beim Treiben einesexternen Busses auftretenden Schaltleistungsverluste eliminiert.1.12.2 Interner Programmspeicher und interner DatenspeicherEine weitere Funktion des 8051, die üblicherweise nicht als peripher betrachtetwird, ist der Programmspeicher. Alle Bausteine der Familie 8051 und AT89C51enthalten einen chipintegrierten Programmspeicher unterschiedlicher Kapazität.108© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.12CMOS-Mikrocontroller-Familie AT89C51Dies wird von vielen Anwendern gewünscht, um die Anzahl der Bauteile und denPlatzbedarf zu reduzieren, es verlängert aber auch die Batterielebensdauer in tragbarenSystemen. Wie bereits erwähnt, wird der Leistungsverbrauch hier reduziert,da kein externer Bus zu treiben ist. Ein auf dem Chip integrierter Speicher ergibtnoch eine weitere Leistungseinsparung. Die 8051-Architektur erfordert den Einsatzeines Registers des Typs 74373 für das Demultiplexen des niederwertigenAdressbytes. Ein Vergleich zwischen dem Einsatz eines internen und eines externenProgrammspeichers ergibt eine Stromreduzierung von 45 mA bei 12 MHz auf16 mA. Beim ersten System wird ein schneller Mikrocontroller des Typs AT89C51mit einem Register 74AC573 und einem EPROM 27C256 mit einer Zugriffszeitvon 70 ns verwendet. Das zweite System benutzt den gleichen Mikrocontroller,arbeitet aber mit internem Speicher. Beide Systeme arbeiten mit 11,0592 MHzund führen ein kurzes Programm aus. Aus dem Versuch geht hervor, dass beihohen Frequenzen durch Eliminierung des externen EPROM und des Registersbis zu 49 mA eingespart werden können.Wie bereits erwähnt, wird durch einen chipintegrierten Speicher anstelle einesexternen RAM Leistung gespart. Der erweiterte Scratchpad-Speicher der Bausteinfamilie80C32 (256 Bytes) reicht als Stack- und Datenspeicher in kleinen Programmenaus, wodurch ein externes RAM entfallen kann.Für Entwicklungen, die einen größeren Datenspeicher oder einen externen Stackerfordern, kann jedoch ein zusätzlicher SRAM-Speicher notwendig werden. LeistungssparendeSRAMs sind zwar verfügbar, aber es entstehen zusätzliche Leistungsverlustedurch das 74373-Register und die kapazitiven Verluste beim Treibendes externen Busses. Dies lässt sich durch den Einsatz von Bausteinen mit erweitertemauf dem Chip integrierten RAM vermeiden. Es soll der Leistungsverbrauchvon zwei Systemen, bei denen das SRAM in den MOVX-Datenspeicher des 8051aufgenommen wurde, untersucht werden. Das erste System benutzt einen schnellenMikrocontroller des Typs AT89C51 mit einem 74AC573-Register und einem8-Kbyte-SRAM. Das zweite System benutzt den gleichen Mikrocontroller, aber1 Kbyte des internen MOVX-Datenspeichers. Beide Mikrocontroller arbeiten mit11,0592 MHz und führen ein kurzes Programm aus, das Lese- und Schreiboperationenim MOVX-Datenspeicherbereich vornimmt. Man kann feststellen, dass beihohen Frequenzen durch Eliminierung des externen SRAM und des Registers biszu 9 mA gespart werden können.1.12.3 TaktquelleEine weitere wichtige Systemkomponente hinsichtlich des Leistungsverbrauchsist die Taktquelle. Standardschaltungen mit dem 8051 benutzen üblicherweise entwedereinen externen Quarz mit einem internen Oszillatorverstärker oder einenexternen Quarzoszillator. Im letzteren Fall kann die Wellenform des Taktgebersden Leistungsverbrauch beeinflussen. Die Eingangsstufe des XTAL1-Anschlusses,© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215109
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51der die externen Taktsignale für den 8051 aufnimmt, arbeitet normalerweise mitkomplementären Treiberstufen. Während der Übergänge des Eingangstaktgeberszwischen H-Pegel und L-Pegel werden kurzzeitig beide Treiber eingeschaltet, waseinen erheblichen Stromstoß verursacht. Bei einem Rechtecksignal finden dieÜbergänge praktisch sofort statt, was die Zeit des gleichzeitigen Ein-Zustands beiderTreiber minimiert. Bei einer Signalform mit langsameren Übergängen, wiez.B. einem Sinus- oder Dreiecksignal, sind die Treiber für längere Zeit gleichzeitigeingeschaltet. Dies erhöht den Strom- und Leistungsverbrauch.Als Taktquelle wurde ein programmierbarer Signalgenerator für Sinus-, DreieckundRechtecksignale benutzt. Es wurde der Mittelwert von vier Bausteinen mitnormaler und hoher Geschwindigkeit dargestellt. Der Vergleich zeigt, dass derStromverbrauch der Anstiegs- und Abfallzeit der Taktwellenform direkt proportionalist. Das Dreiecksignal hat die längste Flanke und das Rechtecksignal diehöchste. Für das Rechtecksignal ergibt sich ein um 0,75 mA geringerer mittlererStrom als für das Dreiecksignal. Daraus folgt, dass der Stromverbrauch bei Schaltungenmit externem Taktgeber durch den Einsatz von Oszillatoren mit kurzenAnstiegs- und Abfallzeiten reduziert werden kann. Bei geringeren Frequenzen, wodie Übergänge mehr Zeit benötigen, ist dies von noch größerer Bedeutung.Einige 8051-Derivate enthalten einen chipintegrierten Ringoszillator. Dabei handeltes sich üblicherweise um hintereinander geschaltete Inverter, die ein Pulssignaldurch die Schleife propagieren lassen. Dafür steht eine interne Taktquelle vonca. 2 MHz bis 4 MHz zur Ansteuerung des Bausteins zur Verfügung. Da hier keinQuarz erforderlich ist, ist diese Taktquelle äußerst leistungssparend. Die Bewertungeines schnellen Mikrocontrollers AT89C51 zeigt, dass beim Betrieb miteinem Ringoszillator ein Leistungsverhalten erreicht wird, das einem 7-MHz-8051bei ca. 3,6 mA entspricht. Obwohl sie nicht die Stabilität eines piezoelektrischenQuarzes aufweisen, sind Ringoszillatoren aufgrund ihres geringen Leistungsverbrauchsund der vernachlässigbaren Einschaltverzögerung ein wichtiger Faktorbei der Leistungseinsparung.Wie oben erläutert, ist die Betriebsfrequenz des Mikrocontrollers der bestimmendeFaktor für seinen Leistungsverbrauch. Die Taktfrequenz des Systems istzwar hauptsächlich eine Hardwarefunktion, aber der 8051 besitzt die Fähigkeit,sie in bestimmten Grenzen zu steuern. Diese Methoden verlangsamen dieBetriebsfrequenz des Bausteins oder halten sie für den ganzen Baustein oder fürTeilschaltung an. Die herkömmliche 8051-Architektur benutzt zwei Modi zurTaktsteuerung: Leerlauf und Stopp.Der Stoppmodus ist der Zustand mit dem niedrigsten Leistungsverbrauch für den8051. Dabei wird der interne Oszillatorverstärker und damit auch der Betrieb desBausteins angehalten. Die Aufhebung des Stoppmodus geschieht normalerweisedurch einen externen Reset. Bei einigen Versionen ist die Aufhebung des Stoppmodusauch durch externe Interrupts möglich.110© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.12CMOS-Mikrocontroller-Familie AT89C51Einer der Nachteile des Stoppmodus besteht im Leistungsverbrauch während der»Totzeit«, d.h. der Anlaufperiode des Quarzes. Ein Quarzoszillator basiert auf denSchwingungen eines Quarzes. Aufgrund physikalischer Eigenschaften benötigtdie Quarzschwingung eine bestimmte Zeit, um eine für den Betrieb genügendeAmplitude zu erreichen. Diese Anlaufzeit ist immer erforderlich, unabhängigdavon, ob ein externer Quarz und ein interner Oszillatorverstärker oder ein externerQuarzoszillator verwendet wird. Sie kann, abhängig von den Eigenschaftendes Quarzes und des dazugehörigen Verstärkers, 3 ms bis 12 ms betragen.Diese Anlaufzeit wirkt sich so aus, dass der Baustein Leistung verbraucht, auchwenn er während dieser Zeit seine eigentliche Funktion nicht ausführt. Geht derBaustein häufig in den Stoppmodus oder verlässt diesen, um kurzzeitig andereAufgaben auszuführen, kann dies Bedeutung erlangen. Ist die andere Aufgabesehr kurz (
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51aufzunehmen, der auf das Setzen des Stoppbits folgt, anstatt vom Reset-Vektorneu zu starten. Dadurch braucht die Reset-Quelle nicht ermittelt zu werden, undder Prozessor kann seine Funktion in kürzerer Zeit aufnehmen.Der zweite Modus zur Taktsteuerung in der Architektur der Grundversion des8051 ist der »Idle-Mode« (Leerlaufmodus).Dabei wird der Betrieb der CPU angehalten, während die chipinternen Timer inBetrieb bleiben. In einer Anwendung, wo Leistungseinsparungen wichtig sind,dienen diese Timer dazu, den Baustein periodisch hochzufahren, um eine Aufgabeauszuführen oder abzufragen, ob dies erforderlich ist. Da die Standard-Timerdes 8051 nur über 16 Bit verfügen, gestattet dies eine maximale Timeout-Periodevon 31 ms bei einer Taktfrequenz von 16 MHz. Werden längere Perioden benötigt,sind mehrere Timer-Überläufe erforderlich. Dadurch wird zusätzliche Leistungverbraucht, da der Baustein ab und zu den vollen Betrieb aufnehmen muss, umeinen Zähler weiterzustellen, dabei aber keine eigentliche Funktion ausführt.Sind längere Perioden erforderlich, ist ein interner Timer mit einer längeren Periodeeinzusetzen. Einige Versionen der Familie 8051 enthalten einen Watchdog-Timer, der auch benutzt werden kann, um den Baustein aufzuwecken. Watchdog-Timer lassen sich für lange Timeout-Perioden (etwa bis zu 226 Taktzyklen) programmieren.Damit lässt sich eine maximale Timeout-Periode von 4,2 Sekundenbei 16 MHz erreichen. Nehmen wir beispielsweise an, dass eine Anwendung alledrei Sekunden aus einem leistungssparenden Zustand hochzufahren ist, um eineAufgabe (Task) auszuführen. Werden dazu die internen Timer benutzt, müsste derBaustein 96-mal den »Idle-Mode« verlassen, ohne eine eigentliche Funktion auszuführen.Wird jedoch ein Watchdog-Timer mit einer langen Timeout-Periode verwendet,verlässt der Baustein den »Idle-Mode« nur einmal, führt die Aufgabe ausund kehrt in den leistungssparenden Zustand zurück.Eine weitere Möglichkeit besteht im Einsatz eines Mikrocontrollers mit einer Real-Time Clock (RTC). Der schnelle Mikrocontroller AT89C51 enthält eine RTC, dieeine Alarmperiode von bis zu 24 Stunden erzeugen kann. Der durch diesen Alarmerzeugte interne Interrupt kann den Baustein aus dem Idle-Mode oder aus demStoppmodus hochfahren. Die Verwendung einer RTC zum Verlassen des Stoppmodusist das effizienteste Verfahren zum Anhalten des Betriebs des Bausteinsfür längere Zeit.1.12.4 Power-Management-BetriebsartenObwohl der »Idle-Mode« den Leistungsverbrauch durch Anhalten der Programmausführungreduziert, arbeiten die internen Timer weiter mit der externen Taktfrequenz.Unter dem Gesichtspunkt, dass die Timer sich in einem Standby-Zustandbefinden, entsteht dadurch ein erheblicher Leistungsverbrauch.112© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.12CMOS-Mikrocontroller-Familie AT89C51Eine bessere Lösung ist die Reduzierung der Taktfrequenz des gesamten Bausteins.Dies kann mittels eines internen Frequenzteilers geschehen, der die externeTaktfrequenz teilt, bevor sie auf die CPU gegeben wird. Dieses Prinzip wird imschnellen Mikrocontroller AT89C51 angewandt. Dieser Baustein arbeitet mit zweiFrequenzteilerfunktionen: Power-Management-Modus 1, der die Takteingangsquelledurch 64 teilt, und Power-Management-Modus 2, der die Takteingangsquelledurch 1024 teilt. Diese Modi werden durch Setzen der entsprechenden Bitsin einem speziellen Funktionsregister (SFR) aktiviert.Ein Vergleich zwischen dem Taktteiler und den Steuermodi des schnellen MikrocontrollersAT89C51 mit dem 8051 zeigt, dass der Stromverbrauch bei maximalerFrequenz (geteilt durch 4), im Power-Management-Modus 1 (geteilt durch 64), imPower-Management-Modus 2 (geteilt durch 1024), im »Idle-Mode« und im Stoppmodussinkt. Wie erwartet, wird im Stoppmodus der geringste Strom aufgenommen,da hier der gesamte interne Takt angehalten wird. Ein interessantes Ergebnisdieses Vergleichs ist, dass die beiden Power-Management-Modi weniger Stromverbrauchen als der »Idle-Mode«. Damit kann der Baustein nicht nur Leistungsparen, sondern er kann auch kontinuierlich mit reduzierten Funktionen weiterlaufen.Bei der herkömmlichen Architektur des 8051 gab es bei jeglicher CPU-Aktivität nur »alles oder nichts«. Der Baustein musste in jedem Fall mit der maximalenLeistungsfähigkeit arbeiten, selbst wenn dies nur für kurze Perioden erforderlichwar. Dadurch wurde der Leistungsverbrauch unnötig erhöht. Durch dieAnwendung der Power-Management-Modi (PMM) kann der Baustein (und dasSystem) seinen Leistungsverbrauch an die benötigte Rechenleistung anpassen.Eine mögliche Folge des Einsatzes eines internen Frequenzteilers ist eine beträchtlicheErhöhung der Interrupt-Latenzen. Darüber hinaus würde das Verlangsamender internen Timer die Fähigkeit der seriellen Ports des 8051 beeinträchtigen, dieStandard-Baudrate zu erzeugen oder mit dieser zu synchronisieren. Dies könntewiederum die Reaktion des Bausteins auf externe Signale behindern. Eine Lösungdafür ist der Einbau einer Funktion, die den Baustein automatisch auf den vollenBetrieb hochfährt, wenn ein externer Interrupt oder die Aktivität eines seriellenPorts festgestellt wird. Ein solcher Mechanismus wurde in den AT89C51 implementiert.Es handelt sich dabei um die »Switchback«- Funktion, mit deren Hilfe der Bausteinrasch auf externe Interrupts reagiert. Sofort nach der Bestätigung desInterrupts schaltet der Baustein ohne Softwareeingriff automatisch auf die volleFrequenz (geteilt durch 4) zurück.Die seriellen Schnittstellen arbeiten auf ähnliche Weise. Wenn eine fallendeFlanke (Startbit) am Empfangseingang der seriellen Schnittstelle ankommt, schaltetder Baustein automatisch auf die volle Frequenz (geteilt durch 4) zurück. Dadies direkt am Anfang der Übertragung erfolgt, kann der Baustein den Rest derÜbertragung mit der vollen Frequenz empfangen. Bei der herkömmlichen 8051-Architektur konnten die seriellen Ports in einer leistungssparenden Konfiguration© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215113
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51lediglich im »Idle-Mode« benutzt werden. Die Power-Management-Modi bietenhier eine leistungssparende Alternative.In leistungssparenden Systemen ist es üblich, das System vom Stoppmodus aufzuwecken,bestimmte Aktivitäten auszuführen und dann zum Stoppmoduszurückzukehren. Eine Möglichkeit, den Leistungsverbrauch in derartigen Systemenzu reduzieren, ist die Erhöhung der Betriebsfrequenz. Auf den ersten Blickscheint dies unserem Ziel entgegenzustehen. Während seiner Betriebszeit verbrauchtder Baustein mehr Leistung als ein mit niedrigerer Frequenz arbeitendesSystem. Der beim Betrieb des Systems verbrauchte Ruhestrom hängt jedoch nichtvon der Frequenz ab. Beim endgültigen Systementwurf wird der Energieverbrauchüblicherweise eingeschätzt, um die Batterielebensdauer zu bestimmen.Diese Unterscheidung ist bei der Bewertung eines leistungsfähigen Mikrocontrollerszu beachten, da dieser das Konzept von Zeit und Betriebsleistungsverbrauchvereint. Ist das Produkt aus Leistungsverbrauch und Zeit für ein bestimmtes Systemkleiner, verbraucht dieses, unabhängig von den speziellen Bedingungen,weniger Energie. In vielen Fällen lässt sich nachweisen, dass ein schneller Mikrocontrollerden Energieverbrauch reduzieren kann, indem er für kurze Periodenmit hoher Frequenz arbeitet, anstatt für längere Zeit langsamer zu laufen.Nehmen wir an, dass der AT89C51 nach dem Hochfahren aus dem Stoppmoduseinen I/O-Port lesen, eine mathematische Berechnung ausführen, das Ergebnis aneinem anderen Port ausgeben muss und dass dies 500 Operationszyklen CPU-Zeit erfordert. Gemäß dem Vergleich beträgt der Stromverbrauch 12,4 mA bei10 MHz bzw. 34,6 mA bei 30 MHz. Aus einem Vergleich geht hervor, dass beimBetrieb mit 30 MHz 6 % weniger Energie verbraucht wird, also erweist sich einehöhere Betriebsfrequenz hier als effizienter.Bei vielen Anwendungen hängt die Hochfahrzeit aus dem Stoppmodus nicht nurvon der Geschwindigkeit ab. Oftmals muss der Baustein auf einen peripherenSchaltkreis mit einer festen Antwortzeit, wie z.B. einen A/D-Wandler oder einenThermostat, zugreifen. In diesem Fall ist der Mikrocontroller mit einer intensivenAktivität (Burst Activity) beschäftigt, normalerweise um einen Prozess zu initialisieren,worauf eine Periode geringer oder sogar keiner Aktivität folgt. Für einensolchen Fall kann eine Kombination verschiedener Leistungssparverfahren geeignetsein.Die Mikrocontroller der Familie 8051 gehören nach wie vor zu den weltweit verbreitetstenProzessoren. Mit ihrem unkomplizierten Einsatz und der relativ hohenLeistungsfähigkeit eignen sie sich ideal für viele Anwendungen, einschließlich tragbarerund Handgeräte. Mit der Einführung schneller Mikrocontroller von DallasSemiconductor und Atmel ergibt sich die Möglichkeit, den Leistungsverbrauch existierender8051-Schaltungen ohne kostenaufwendige Neuentwürfe zu reduzieren.114© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.13Programmierung des 8751Die Vorteile von leistungssparenden Mikrocontrollern lassen sich folgendermaßenzusammenfassen: Eine leistungsfähige CPU erlaubt eine Verringerung derProzessorfrequenz, wodurch die gleichen Leistungsmerkmale bei reduziertemLeistungsverbrauch erreicht werden. Andererseits lässt sich die Prozessorleistungeines existierenden Systems verbessern, ohne den Leistungsverbrauch zu erhöhen.Bei dem schnellen Mikrocontroller sind Funktionen wie Watchdog-Timer, zusätzlicheUARTs und genaue Reset-Schaltkreise integriert. Externe Schaltkreise verbrauchenmehr Leistung.Die Einführung von zwei neuen leistungssparenden Modi bietet eine bessereAlternative zum Idle Mode. Neben der Reduzierung des Stromverbrauchs ermöglichenPower-Management-Modi, wie sie im AT89C51 Anwendung finden, demProzessor auch im leistungssparenden Modus die Ausführung bestimmter Funktionen,wie z.B. der Abfrage (Polling). Bei herkömmlichen 8051-Architekturenmuss der Prozessor immer mit der maximalen Betriebsfrequenz arbeiten, selbstwenn nur eine minimale Verarbeitungsleistung benötigt wird.Durch die Kombination der Vorteile einer programmierbaren Taktfrequenz undeines leistungsfähigen Kerns mit dem Stoppmodus kann eine beträchtliche Leistungseinsparungerreicht werden. Es wurden Beispiele dafür gezeigt, wie der Leistungsverbrauchdurch Anpassung der Taktfrequenz an die gewünschte Prozessorleistungreduziert werden kann.1.13 Programmierung des 8751Die Programmierung des AT89C51 basiert im Wesentlichen auf dem Mikrocontroller8751, der zur Programmspeicherung ein EPROM verwendet. Im AT89C51wird dagegen ein EEPROM oder Flash-EPROM verwendet.1.13.1 Programmierung des EPROM im 8751Der Mikrocontroller 8751 ist die EPROM-Schaltung der Mikrocontroller-Familie8051. Der Programmspeicher auf dem Chip kann also elektrisch programmiertund durch UV-Licht wieder gelöscht werden. Außerdem sind beim 8751 Vorkehrungengetroffen, die einen Zugriff auf den Inhalt des Programmspeichers vonaußen verhindern können, so dass die Software gegen unberechtigte Verwendunggeschützt ist.Bei der Programmierung muss der Mikrocontroller mit einer Oszillatorfrequenzvon 4 MHz bis 6 MHz arbeiten. Der Oszillator muss deshalb in Betrieb sein, weilder interne Bus Adressen und Daten in die zuständigen Register transportierensoll. Die Adresse des zu programmierenden EPROM-Speicherplatzes wird an Port 1© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215115
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51und die Anschlüsse P2.0 bis P2.3 an Port 2 gelegt, während das Datenbyte an Port0 gelegt werden muss. Die Anschlüsse P2.4 bis P2.6 sowie PSEN sollten auf L-Pegel und die Anschlüsse P2.7 und RST auf H-Pegel gehalten werden. Hierbeihandelt es sich um TTL-Pegel, ausgenommen RST, das 2,5 V für einen H-Pegelerfordert. EA/U pp wird normalerweise auf H-Pegel gehalten und mit ±21 Vgepulst. Während an EA/U pp 21 V liegen, wird der Anschluss ALE/PROG, der sichnormalerweise auf H-Pegel befindet, für 50 ms auf L-Pegel gepulst und danachEA/U pp wieder auf H-Pegel gelegt. Abbildung 1.36 zeigt die Funktion derAnschlüsse bei der Programmierung des 8751.Abb. 1.36: Programmierung des 8751Man beachte, dass am Anschluss EA/U pp zu keinem Zeitpunkt eine höhere Spannungals der angegebene Grenzwert U pp = 21,5 V liegen darf. Selbst ein schmalerStörimpuls oberhalb dieses Spannungspegels kann zu dauerhafter Beschädigungdes Mikrocontrollers führen. Die Spannung U pp sollte geregelt und frei von Störimpulsensein.Wenn das Programmsicherheitsbit nicht gesetzt ist, lässt sich der auf dem Chipbefindliche Programmspeicher für Prüfzwecke lesen, und zwar auf Wunsch entwederwährend oder nach der Programmierung. In Abbildung 1.37 ist die hierfürerforderliche Beschaltung des 8751 angegeben. Sie ist dieselbe wie bei der Programmierung,ausgenommen, dass Anschluss P2.7 auf dem L-Pegel liegen mussoder als Lese-Strobe-Eingang (aktiver Zustand L-Pegel) verwendet wird.116© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.13Programmierung des 8751Abb. 1.37: Programmüberprüfung beim 8751Die Adresse des zu lesenden Programmspeicherplatzes wird an Port 1 und dieAnschlüsse P2.0 bis P2.3 gelegt. Die anderen Anschlüsse von Port 2 und PSENwerden auf L-Pegel gehalten, ALE, EA und RST sind auf H-Pegel zu halten. DerInhalt des adressierten Speicherplatzes erscheint an Port 0. Für diese Operationsind externe Pull-up-Widerstände an Port 0 erforderlich.1.13.2 ProgrammsicherungDer 8751 enthält ein Sicherheitsbit, das, sobald es gesetzt ist, jeglichen externenelektrischen Zugriff zum Programmspeicher auf dem Chip verhindert. DieBeschaltung und die Programmierung mit dem Sicherheitsbit sind dieselben wiebei der normalen Programmierung, ausgenommen, dass Anschluss P2.6 auf demH-Pegel gehalten wird. Abbildung 1.38 zeigt die Beschaltung. An den Anschlüssenvon Port 0, Port 1 und P2.0 bis P2.3 von Port 2 kann jeder Pegel liegen.Sobald das Sicherheitsbit gesetzt ist, lässt es sich nur durch die vollständigeLöschung des Programmspeichers deaktivieren. Solange es gesetzt ist, kann derinterne Programmspeicher nicht gelesen werden, die Schaltung kann nicht weiterprogrammiert werden, und sie kann nicht auf externe Programmspeicher zugreifen.Durch Löschung des EPROM und die damit verbundene Deaktivierung desSicherheitsbits wird die volle Funktionsfähigkeit der Schaltung wiederhergestellt.Sie lässt sich danach erneut programmieren.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215117
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Abb. 1.38: Setzen des Sicherheitsbits beim 8751Die Löschung des EPROM auf dem 8751 setzt ein, wenn der Chip Licht ausgesetztwird, dessen Wellenlänge kleiner als 0,4 m ist. Da Licht dieser Wellenlängen vonder Sonne und von fluoreszierenden Lichtquellen abgestrahlt wird, kann eine(unbeabsichtigte) Löschung des EPROM erfolgen, wenn dieses einer derartigenQuelle über einen längeren Zeitraum (eine Woche im Sonnenlicht, drei Jahre beiZimmerbeleuchtung mit Leuchtstoffröhren) ausgesetzt wird. Wenn eine solcheBelichtung im Anwendungsfall möglich ist, empfiehlt es sich, das Fenster miteinem für UV-Licht undurchlässigen Aufkleber abzudecken.Zur Löschung des EPROM auf dem 8751 wird empfohlen, es ultraviolettem Licht(0,2537 m) mit einer Gesamtdosis von wenigstens 15 W/cm 2 auszusetzen. Eine20- bis 30-minütige Bestrahlung des 8751 mit einer UV-Lampe, die 12 mW/cm 2abgibt, dürfte bei einer Entfernung von ca. 2,5 cm zwischen Lampe und Chip zurLöschung ausreichen. Nach der Löschung befinden sich alle Speicherstellen imZustand 1.1.13.3 Programmierung des AT89C51Für die Programmierung des AT89C51 benötigt man eine Entwicklungssoftware,die kostenlos bei Atmel aus dem Internet direkt zu laden ist, und einen Programmer.Abbildung 1.39 zeigt die Hardware für einen Programmer.Die Hardware besteht aus dem Mikrocontroller AT89C51, der Quarzschaltung mitfünf Bauteilen, dem MAX232 und dem 9-poligen Sub-Stecker. Über die serielleSchnittstelle werden die Daten vom PC zum Mikrocontroller übertragen. Zwischendem Sub-Stecker und dem AT89C51 befindet sich der MAX232, der die118© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215
1.13Programmierung des 8751Pegel auf entsprechendes Spannungsniveau umsetzt. Der MAX232 enthält diePegelumsetzer und benötigt daher externe Kondensatoren, denn die Innenschaltungarbeitet mit mehreren Spannungskonvertern.Abb. 1.39:Hardware für einen Programmer des AT89C51Der Mikrocontroller hat einen Flash-Speicher und es gilt die Programmprozedurvon Tabelle 1.28.Betriebsart RST PSEN ALE/PROG EA/U pp P2.6 P2.7 P3.6 P3.7Schreibdaten H L _ H/+12 V L H H HLesedaten H L H H L L H HSchreibsperreBit – 1 H L _ H/+12 V H H H HBit – 2 H L _ H/+12 V H H L LBit – 3 H L _ H/+12 V H L H LBaustein löschen H L _* H/+12 V H L L LLese Signaturbyte H L H H L L L LTabelle 1.28: Programmierbetrieb des AT89C51*) Das Signal für den »Baustein löschen« soll 10 ms als Impuls amPROG-Eingang anliegen.© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215119
<strong>Kapitel</strong> 1Mikrocontroller-8051-Familie und AT89C51Wenn das Programm assembliert ist und der Assembler keine Fehler beinhaltet,kann mit der Programmierung des Mikrocontrollers AT89C51 begonnen werden.Für die ersten Versuche wird die Datenübertragung mit der seriellen Schnittstelledurchgeführt.120© des Titels »Mikrocontrollerprogrammierung in Assembler und C« (ISBN 978-3-8266-9215-4) 2013 by<strong>Verlagsgruppe</strong> <strong>Hüthig</strong> <strong>Jehle</strong> <strong>Rehm</strong> <strong>GmbH</strong>, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9215