3. Übersicht zum µC 8052 - No official entry point - HAW Hamburg
3. Übersicht zum µC 8052 - No official entry point - HAW Hamburg
3. Übersicht zum µC 8052 - No official entry point - HAW Hamburg
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
3 U bersicht <strong>zum</strong> üC <strong>8052</strong> ..................................... 3-2<br />
<strong>3.</strong>1 Hardware-Architektur.......................................... 3-3<br />
<strong>3.</strong>2 Speicherorganisation............................................ 3-7<br />
<strong>3.</strong>2.1 Universalregister ............................................... 3-8<br />
<strong>3.</strong>2.2 Special Function Register ................................. 3-9<br />
<strong>3.</strong>3 Externer Speicher............................................... 3-10<br />
<strong>3.</strong>4 Zeitgeber 2 Betriebsarten................................... 3-13<br />
<strong>3.</strong>5 Integrierte serielle Schnittstelle ......................... 3-16<br />
<strong>3.</strong>5.1 Register der seriellen Schnittstelle................. 3-17<br />
<strong>3.</strong>5.2 Abla ufe im Sendebetrieb des Modus 1 .......... 3-19<br />
<strong>3.</strong>5.3 Abla ufe im Empfangsbetrieb des Modus 1.... 3-22<br />
<strong>3.</strong>6 Aufbau des Assembler-Codes........................... 3-26<br />
<strong>3.</strong>7 Befehlsubersicht des –C 8051 Assemblers........ 3-32<br />
<strong>3.</strong>8 <strong>8052</strong> Interrupt Organisation............................... 3-33<br />
<strong>3.</strong>8.1 Interrupt Freigabe und Priorita t....................... 3-33<br />
<strong>3.</strong>8.2 Interrupt Flaggen und Ausfuhrung.................. 3-35<br />
<strong>3.</strong>8.3 Interrupt Vektoren........................................... 3-37<br />
<strong>3.</strong>8.4 Programmbeispiel ........................................... 3-38<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
© B. Schwarz 3-1
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
3 U bersicht <strong>zum</strong> üC <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Der erste MCS-51 mit 60000 Transistoren wurde von Intel 1980 angekundigt. Eine Vielzahl von neuen Mitgliedern<br />
wurden der MCS-51 Familie zugefugt, die insbesondere als embedded controllers fur closed-loop Anwendungen<br />
in geregelten Prozessen mit A/D-Umsetzerschnittstellen entwickelt wurden. Die Verfugbarkeit der 8051-<br />
Varianten wird durch Zweithersteller (Siemens, Philips, SGS-Thompsen) unterstutzt.<br />
• Von Siemens z. B. werden in der C500 Familie 20 Varianten mit der folgenden Kernarchitektur angeboten:<br />
Versionen mit 12/24/40 MHz Taktfrequenz<br />
Maximal 8 kB ROM Programmspeicher<br />
256 Byte RAM incl. Funktionsregister<br />
Vier 8 Bit Ports<br />
Drei 16 Bit Zeitgeber als up-counter<br />
Eine universelle synchrone/asynchrone Receiver/Transmitter (USART) Schnittstelle<br />
Sechs Interruptquellen ( 2 extern/4 intern) mit zwei Prioritatsebenen<br />
• Der Weltmarkt der 8 Bit Mikrocontroller umfasste 1998 mit 14 Herstellern 5,036 Milliarden US Dollar. Die<br />
Marktanteile der 16 Bit üCs machten 1998 2,6 Milliarden US Dollar aus.<br />
• Der auf dem XS95 Board verfugbare üC 8032 ist eine ROM lose Version des Zweitherstellers OKI. Als Programm-<br />
und Datenspeicher ist ein 32 kB SRAM angeschlossen. Das CPLD XC95108 ist in den Adressbus und die<br />
SRAM-Ansteuerung eingebunden.<br />
© B. Schwarz 3-2
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>1 Hardware-Architektur<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Bild 3-1: Blockdiagramm<br />
des ü C<strong>8052</strong> [9]<br />
© B. Schwarz 3-3
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
U bersicht zu den Portpins und Steuersignalen<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Port 0: Fur das System mit externem Programmspeicher wird Port 0 als gemultiplexter Daten- und<br />
Adressbus verwendet (D0-D7 u. A0-A7).<br />
• Port 1: Die 8 Portpins stehen als I/O Schnittstellen frei zur Verfugung. Es sind keine alternativen Pinfunktio-<br />
nen zu beachten. Aufgrund der direkten Kopplung des Port 1 mit dem XC95108 CPLD und den herausgefuhrten<br />
Boardanschlussen sind die Signaltreiberrichtungen im VHDL-Code und Assembler-<br />
Code aufeinander abzustimmen.<br />
• Port 2: Die oberen 8 Adressbits (A7-A14) werden uber Port 2 ausgegeben, sodass 32 kB adressierbar sind.<br />
Alle Pins ko nnen vom CPLD gelesen werden.<br />
• Port 3: Die Portpins sind mit den Funktionen der Hardwarearchitektur zweifach belegt. In der XS95 Board-<br />
Anwendung sind folgende Funktionen relevant:<br />
Bit/Pin-Nr. Name Bit Adresse Funktion<br />
P<strong>3.</strong>1/13 TXD B1H Serielle Sendeleitung des<br />
UART<br />
P<strong>3.</strong>6/18 ¬WR B6H Schreibfreigabe fur ext. Datenspeicher<br />
P<strong>3.</strong>7/19 ¬RD B7H Lesefreigabe fur ext. Datenspeicher<br />
© B. Schwarz 3-4
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• PSEN: Mit dem Steuersignal Program Store Enable wird der externe Programmspeicher freigegeben.<br />
U berlicherweise wird der Pin PSEN mit dem Output Enable ( OE) Eingang eines EEPROMs<br />
verbunden, damit die Programmbytes gelesen werden konnen. Das Signal PSEN wird vom üC wahrend<br />
des Befehl-Holzyklus auf low getaktet.<br />
• ALE: Der üC 8051 setzt das Signal Address Latch Enable <strong>zum</strong> Demultiplexen des Adress- und Datenbusses<br />
ein. Wenn das Port P0 als Datenbus arbeitet, soll das Signal ALE die unteren 8 Adressbits<br />
wahrend der ersten Halfte eines Speicherzyklus in ein externes Latch ubernehmen. Danach ist das<br />
Port P0 frei fur die Daten, die in der zweiten Zyklushalte <strong>zum</strong> Speicher ubertragen werden. Bei Zugriffen<br />
auf den Programmspeicher nimmt das Latch die untere Halfte des 16 Bit breiten Programmzahlers<br />
PCL auf. Im Fall von Datentransfers werden die A0-A7 Leitungen von der unteren Halfte des<br />
Data<strong>point</strong>ers DPTR belegt.<br />
• EA: Ist das Eingangssignal External Access Enable auf high gelegt, wird das Programm bis zu den<br />
Adressen 1000H bzw. 2000H aus dem internen ROM-Bereich ausgefuhrt. Bei der ROM-losen üC Variante<br />
8032 des XS95 Boards ist EA mit Masse verbunden, sodass bei der Befehlsabarbeitung automatisch<br />
die erforderlichen PSEN und ALE Signalverlaufe erzeugt werden.<br />
• WR: Das Schreibsteuersignal latched die Datenbytes von Port 0 in den externen Datenspeicher.<br />
• RD: Das Lesesteuersignal gibt die Ausgange des externen Datenspeichers frei, sodass der Datenbus mit<br />
Speicherbytes belegt wird.<br />
© B. Schwarz 3-5
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
Ein-/Ausgabeleitungen Port 1<br />
Bild 3-2: Quasi-bidirektionale Ein/Ausgabeleitung von Port P1 [11]<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Quasibidirektionale Datenubertragung ohne Tri-<br />
State Zustand. Ausgangs-High-Pegel werden durch<br />
einen internen Pull-up Widerstand (40 kW) erzeugt.<br />
• Bei Dateneingabe muss im Latch eine “1– stehen,<br />
damit mit Q = 0 der Feldeffekt-Transistor<br />
hochohmig wird. Ein Systemreset setzt alle Portlatches,<br />
sodass die Anschlusse als Eingange wirken konnen.<br />
Mit SETB P1.i lassen sich einzelne Eingangsleitungen<br />
gezielt vorbereiten. Mit MOV P1,#0FFH wird<br />
das Port 1 komplett <strong>zum</strong> Eingang. Datentransferbefehle<br />
(z. B. MOV C,P1) lesen den Pin. Read-modifywrite<br />
Instruktionen lesen den Latchausgang.<br />
• Aufgrund eines Ausgabebefehls CLR P1.3 ubernimmt<br />
das Latch die “0–. Der Ausgang Q = 1 schaltet den<br />
FET durch und der Pin wird uber 150 W mit Masse<br />
verbunden. Um Kurzschlusse zu vermeiden, darf dies<br />
nicht bei Portpins erfolgen, die als Eingange verwendet<br />
werden.<br />
© B. Schwarz 3-6
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>2 Speicherorganisation<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Bild 3-3: Adressierbarer Speicherbereich<br />
der ü C 805x Derivate<br />
[11].<br />
• Die üC 805x haben separate Adressraume fur Programmcode (ROM) und Datenspeicher (RAM). Fur Programmcode<br />
werden 64 kB unterstutzt, die untersten 4 kB bzw. 8 kB sind auf dem Chip, der Rest ist extern. Zusatzlich<br />
<strong>zum</strong> on-chip RAM werden 64 kB externer Datenspeicherbereich unterstutzt<br />
© B. Schwarz 3-7
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>2.1 Universalregister<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Der untere Block des internen RAMs ist in drei Bereiche gegliedert, die direkt oder indirekt adressierbar sind:<br />
4 Registerbanke a 8 Register (R0 ” R7), einen auch bitweise adressierbaren Abschnitt mit 16 Byte und einen 80<br />
Byte tiefen RAM Bereich.<br />
• Nach einem Reset sind die unteren 8 Register an den Adressen 00H-07H verfugbar. In 1-Byte MOV-Befehlen<br />
werden die Register mit Ri angesprochen. Die Wahl der Registerbanke kann im Program Status Word (PSW<br />
im Special function Register) mit zwei Bits PSW.3 u. PSW.4 verandert werden. Alle 32 Register lassen sich auch<br />
durch ihre Adresse ansprechen, wobei jedoch 2-Byte Befehle beno tigt werden.<br />
• 128 bitadressierbare Speicherplatze liegen zwischen den Byteadressen 20H und 2FH. Diese Bits lassen sich mit<br />
Befehlen direkt manipulieren (SETB 2BH). Die oberen 80 Byte liegen zwischen 30H bis 7FH.<br />
• Die 128 Byte der oberen Halfte des internen Datenspeicherbereiches ist nur indirekt adressierbar (80H ” FFH).<br />
Diese Einschrankung ist erforderlich, da unter den gleichen Adressen die nur direkt adressierbaren 128 Byte<br />
des Special Function Registers angesprochen werden.<br />
© B. Schwarz 3-8
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>2.2 Special Function Register<br />
Bild 3-4: Interner RAM-Bereich des ü C 8051 [9]<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Die 128 Byte Special Function Register enthalten<br />
Statusregister und die Steuerregister fur die integrierten<br />
Peripheriefunktionen. Diese Register sind<br />
nur direkt bzw. auch bitadressierbar.<br />
• ACC Accumulator<br />
• PSW Program Statusword<br />
• IP Interrupt Priority<br />
• Pi Port Register<br />
• IE Interrupt Enable<br />
• DPTR Data Pointer<br />
• SP Stack Pointer<br />
Serial Interface:<br />
• SBUF Serial Data Buffer<br />
• SCON Serial Port Control<br />
Timer 2:<br />
• T2CON Control Register (Adresse C8HEX)<br />
• RC2L Reload Register Low Byte (CA HEX)<br />
• RC2H Reload Register High Byte (CB HEX)<br />
• TL2 Timer 2 Value Reg. Low Byte (CD HEX)<br />
• TH2 Timer 2 Value Reg. High Byte (CC HEX)<br />
© B. Schwarz 3-9
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>3 Externer Speicher<br />
WR WE<br />
RD<br />
Bild 3-5: Anschluss des externen Programm und Datenspeichers [9]<br />
SRAM<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Das XS95-Board bietet einen 32 kB<br />
SRAM Speicher gemeinsamen fur den<br />
Programm- und den Datenbereich.<br />
• Das Signal PSEN wird <strong>zum</strong> Lesen<br />
von Befehlen und das Signal RD <strong>zum</strong><br />
Lesen von Daten angesteuert. Damit<br />
beide Zugriffe des Controllers alternativ<br />
wirksam werden konnen, wird der<br />
OE Eingang des SRAMs uber ein<br />
UND-Gatter mit den Steuersignalen<br />
verbunden (vgl. Bild 3-6).<br />
• Das haufig angegebene Adress-Latch ist<br />
durch ein flankengesteuertes Register zu ersetzen,<br />
damit ein durchgangig synchrones<br />
System entsteht (vgl. Bild 3-6). Fur<br />
diese Koppelfunktionen ist im VHDL-<br />
Design eine separate Komponente vorzusehen,<br />
die ALE als Clock-Enable nutzt (vgl.<br />
Bild 3-7).<br />
© B. Schwarz 3-10
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
CLK<br />
RESET<br />
CPLD XC95108<br />
P9 P10 P21<br />
P46 P45 P10<br />
RESET<br />
8<br />
8<br />
CLK<br />
P70<br />
P13<br />
P32<br />
P20<br />
P62<br />
P65<br />
XTAL1<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
üC <strong>8052</strong><br />
SRAM<br />
Bild 3-6: Hardware-Interfacing zwischen den Komponenten des XS95-Boards. Ansteuerung des externen SRAMs.<br />
P12<br />
P32<br />
P19<br />
P33<br />
P18<br />
RST<br />
TXD P<strong>3.</strong>1<br />
PSEN<br />
RD P<strong>3.</strong>7<br />
ALE<br />
A0/D0 ” A7/D7 P0.0 ” P0.7<br />
P24-31<br />
A8 -A15 P2.0 ” P2.7<br />
WR P<strong>3.</strong>6<br />
WE<br />
A8 -A15<br />
D0 ” D7<br />
A0 ” A7<br />
OE<br />
CE<br />
© B. Schwarz 3-11
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
Bild 3-7: Timing zu einem Befehlsabruf aus einem externen Programmspeicher [11].<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
© B. Schwarz 3-12
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>4 Zeitgeber 2 Betriebsarten<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Der Zeitgeber 2 ist ein 16-Bit Zeitgeber/Zahler der als Zeitgeber oder Zahler arbeitet. Drei Betriebsmodi sind<br />
wahlbar:<br />
‚ 16-Bit nachladbarer Frequenzteiler (inkrem. oder dekrem.) erzeugt periodische Interrupts (auto-reload)<br />
‚ Auslesen des 16-Bit Zahlerstandes bei einem bestimmten Ereignis: Zeitintervallmessung (capture mode)<br />
‚ Baudratengenerator fur die serielle Schnittstelle (UART)<br />
• Die Betriebsmodi werden uber Bits des Special Function Register angewahlt SFR T2CON (C8HEX ):<br />
• RCLK (Receive Clock Enable) = 1: Die serielle Schnittstelle nutzt die U berlaufpulse des Zeitgebers 2 als Empfangertaktsignal<br />
(UART Betriebsmodi 1 und 3).<br />
• TCLK (Transmit Clock Enable) = 1: Die serielle Schnittstelle nutzt die U berlaufpulse des Zeitgebers 2 als Sendertaktsignal<br />
(UART Betriebsmodi 1 und 3).<br />
• TR2 (Start/Stop Control) = 1: Der Zeitgeber 2 wird gestartet.<br />
• C/ T2 (Zeitgeber or Counter select): C/ T2 = 0 Freigabe der Zeitgeberfunktion (interner Takt = Quarz/12).<br />
C/ T2 =1 Freigabe der Ereigniszahlerfunktion (nega. Flanke)<br />
© B. Schwarz 3-13
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
Timer overflow<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Bild 3-8: Zeitgeber 2 als Baudraten-Generator fu r den Receiver RX und den Transmitter TX des UART [11] .<br />
© B. Schwarz 3-14
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Der Zeitgeber 2 wird durch Setzen der Bits TCLK und/oder RCLK im SFR Register T2CON als Baudratengenerator<br />
angewahlt (MOV T2CON,#10H;). In diesem Betriebsmodus des Zeitgebers 2 verursacht ein U berlauf<br />
des Zahlerregisters TH2 ein Nachladen der Zahlerregister TH2 und TL2 mit den Inhalten der Vorladeregister<br />
RC2H und RC2L, die vom Anwender beschrieben werden (MOV RC2H,#0FEH; MOV RC2L,#0C8H;).<br />
• Die Baudrate der seriellen Schnittstelle (Betriebsmodi 1 und 3) wird durch die U berlaufrate des Zeitgebers 2<br />
nach folgendem Zusammenhang bestimmt:<br />
Modi 1, 3 Baudrate = (Zeitgeber 2 U berlaufrate)/16<br />
• Die Zahlerregister (T2H,T2L) des Zeitgebers 2 werden im Betrieb als Baudratengenerator mit jedem Zustandswechsel<br />
Si fi Si+1 inkrementiert (fOSC /2). Die Zeitgeber 2 U berlaufrate bestimmt sich deshalb zu:<br />
Zeitgeber 2 U berlaufrate = (fOSC /2)/(2 16 -(RC2H, RC2L)<br />
Darin ist (RC2H, RC2L) der Inhalt der Nachladeregister RC2H and RC2L als 16-Bit Integerwert.<br />
• In diesem Betriebsmodus wird das Zeitgeberuberlaufflag TF2 bei einem U berlauf des TH2 Registers nicht gesetzt<br />
uns es wird kein Interrupt erzeugt. Deshalb muss der Interrupt des Zeitgebers 2 auch nicht disabled werden<br />
(Bit mit Index 5 im SFR Register IE: ET2).<br />
• Es ist zu beachten, dass die Zahlerregister TH2 und TL2 nicht gelesen oder beschrieben werden sollen, wenn<br />
der Zeitgeber eingeschaltet ist (TR2 =1). Die Nachladeregister RC2x durfen im laufenden Betrieb gelesen werden,<br />
sollten aber nicht beschrieben werden, da der Zugriff zeitgleich mit einem U berlauf-Nachladevorgang erfolgen<br />
konnte. Turn Zeitgeber 2 off ( CLR TR2;) before accessing the Zeitgeber 2 or RC2x registers.<br />
© B. Schwarz 3-15
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>5 Integrierte serielle Schnittstelle<br />
internal üC 8 bit bus<br />
Bild 3-9: Blockdiagramm des ü C-UART [9]<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Vollduplex-Modus: Senden und Empfangen<br />
ist gleichzeitig mo glich.<br />
• Die Empfangerhardware ist doppelt gepuffert<br />
(double buffered): Der empfangene Datenrahmen<br />
wird <strong>zum</strong> Lesen gespeichert, wahrend ein<br />
neuer Datenrahmen empfangen wird. Der gespeicherte<br />
Datenrahmen muss gelesen worden<br />
sein, bevor der zweite Rahmen komplett ist.<br />
• Der Zugriff auf das Sende- und das Empfangsregister<br />
erfolgt uber das gleiche SFR Register:<br />
SBUF Register (Adresse 99HEX).<br />
• Ein Schreibvorgang auf das SBUF Register<br />
ladt den Sendespeicher und startet automatisch<br />
den Sendevorgang.<br />
• Ein eintreffendes Startbit lost mit dem High-<br />
Low-U bergang am RXD-Pin (P<strong>3.</strong>0) den Empfangsvorgang<br />
aus.<br />
© B. Schwarz 3-16
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
TI<br />
(SCON.1<br />
)<br />
Bild 3-10: Serielles Datenprotokoll und Transmit-Interruptbit [9].<br />
<strong>3.</strong>5.1 Register der seriellen Schnittstelle<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Im Betriebsmodus 1 sendet der<br />
UART einen Datenrahmen mit 10<br />
Bits: Startbit, 8 Datenbits mit dem<br />
LSB zuerst und ein Stopbit.<br />
• Das Steuer- und Statusregister der seriellen Schnittstelle ist das Special Function Register SCON. Dieses Register<br />
enthalt ausser den Modusbits auch die Interruptbits TI and RI.<br />
© B. Schwarz 3-17
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• SM0,SM1 (Serial port operating mode selection bits): 0 1 Modus 1 - 8-Bit UART mit variabler Baudrate.<br />
• REN (Enable receiver of serial port): Freigabe des seriellen Empfangs. Muss mit Software gesetzt und ruckgesetzt<br />
werden.<br />
• TI (Serial port transmitter interrupt flag): TI wird von der Hardware im Modus 0 am Ende des 8ten Datenbits<br />
gesetzt. In den anderen Modi wird TI zu Beginn des Stopbits automatisch gesetzt. TI muss von der Software<br />
gelo scht werden. Durch U berwachung von TI ko nnen zyklische Sendevorgange gesteuert werden.<br />
• RI (Serial port receiver interrupt flag): RI wird von der Hardware im Modus 0 am Ende des 8ten Datenbits gesetzt.<br />
In den anderen Modi wird RI in der Mitte des Stopbits automatisch gesetzt. RI muss von der Software<br />
gelo scht werden.<br />
• RB8 (Serial port receiver bit 9): Im Modus 1 ist RB8 das empfangene Stopbit. In den Modi 2 und 3 ist RB8 das<br />
9te Datenbit, das empfangen wurde.<br />
© B. Schwarz 3-18
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>5.2 Ablaufe im Sendebetrieb des Modus 1<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• 10 Bits werden uber TXD gesendet oder uber RXD empfangen: Ein Startbit (Low), 8 Datenbits (LSB zuerst)<br />
und ein Stopbit (High). Beim Empfang geht das Stopbit ins RB8 Bit des SCON Registers. Die Baudrate wird<br />
von der U berlaufrate des Zeitgebers 1 (Empfang) oder von der des Zeitgebers 2 (Senden) bestimmt, oder von<br />
beiden, falls im Vollduplexbetrieb gearbeitet wird. Das Timing des Sendebetriebs ist in Bild 3-11 dargestellt.<br />
Ein vereinfachtes Blockdiagramm des UART-Senders zeigt Bild 3-12.<br />
• Der Sendevorgang wird von einem Assembler-Befehl gestartet, der das SBUF (send buffer) Register als Ziel benutzt.<br />
Das –Write to SBUF’ Signal ladt ein Stopbit (‘1‘) in die 9te Sende-Schieberegisterposition und signalisiert<br />
der Sendesteuerung TX am Start-Eingang, dass eine U bertragung angefordert wird.<br />
• Der Sendevorgang beginnt mit dem nachsten U berlauf des Modulo 16 Zahlers (divide-by-16 counter), der mit<br />
der Zeitgeber 2 U berlaufrate getaktet wird. Das U berlaufsignal TX Clock erzeugt den Pegelwechsel von<br />
SEND. Die Pulse der Datenbits sind also auf den Modulo 16 Zahlerausgang und nicht auf das –Write to<br />
SBUF’ Signal synchronisiert.<br />
• Die U bertragung startet mit der Aktivierung des Signals SEND, das das Startbit (Low) an den TXD-Ausgang<br />
bringt. Eine Pulsbreite spater wird das Steuersignal DATA aktiv, sodass das Ausgangsbit D0 des Sendeschieberegisters<br />
an den Sendeausgang TXD gelangt. Mit dem nachsten TX Clock U berlaufsignal erscheint der erste<br />
Schiebeimpuls Shift und das nachste Bit D1 wird ubertragen.<br />
• Wahrend die Datenbits Di aus dem Senderegister SBUF rechts herausgeschoben werden, nimmt das SBUF Register<br />
von links Nullen (D = —0—) auf. Wenn das MSB (D7) des Datenbytes am Ausgang des Schieberegisters<br />
SBUF erscheint, steht die zu Beginn in die 9te Position geladene —1— links vom MSB eine Position vor dem Ausgang.<br />
Alle 6 SBUF-Bits links davon sind mit —0— besetzt.<br />
© B. Schwarz 3-19
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Aufgrund dieser Bedingung signalisiert der Zero Detector an die Sendesteuerung TX, dass nur noch ein letzter<br />
Schiebevorgang (8ter) zu erfolgen hat. Dieser tritt auf mit dem 10ten U berlauf (TX Clock) des Modulo 16 Zahlers<br />
nach Aktivierung des –Write to SBUF– Pulses. Damit wird dann das Stopbit —1—<strong>zum</strong> Ausgang TXD geschoben,<br />
was vom TI Signal angezeigt wird. Der nachste (11te) Schiebeimpuls Shift deaktiviert SEND und DATA,<br />
sodass eine —1— am TXD Ausgang erhalten bleibt.<br />
Bild 3-11: Timing des Sendevorgangs der seriellen Schnittstelle im Betriebsmodus 1 [11]<br />
© B. Schwarz 3-20
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
Bild 3-12: Blockdiagramm der Senderkomponente des UART im Betriebsmodus 1 [11]<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
© B. Schwarz 3-21
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>5.3 Ablaufe im Empfangsbetrieb des Modus 1<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Die Empfangskomponente erhalt im Betriebsmodus 1 die U berlaufrate des Zeitgebers 2 als Taktsignal, das einen<br />
Modulo 16 Zahler taktet, der mit seinem U berlauf entsprechend der Senderbaudrate die RX Clock Pulse<br />
liefert (vgl. Bild 3-13; Bild 3-14).<br />
• Ein 1 ” 0 ” U bergang am Dateneingang RXD startet den Empfangsvorgang. Zu diesem Zweck wird der Eingang<br />
mit einer Frequenz abgetastet, die dem 16fachen der Sender-Baudrate entspricht. Nachdem dem Start Eingang<br />
der Empfangssteuerung ein Signalubergang (Startbit) signalisiert wurde, erfolgt unmittelbar ein Reset des Modulo<br />
16 Zahlers und der Wert 1FFHex wird ins 9 Bit breite Empfangsschieberegister geladen. Mit dem erkannten<br />
Beginn des Startbits ist der Empfanger auf den Senderbitstrom synchronisiert worden.<br />
• Die 16 Zahlzustande des Modulo 16 Zahlers teilen die Pulsbreite der empfangenen Datenbits in 16tel. In den<br />
Zahlzustanden 7, 8 und 9 tastet der Bit Detector die Pegel am RXD Eingang ab. Derjenige Pegel wird danach<br />
als Datenbit akzeptiert und von rechts nach links ins Schieberegister aufgenommen, der mindestens zweimal<br />
erkannt wurde. Diese Majoritatsauswahl dient der Rauschunterdruckung.<br />
• Wenn zu Beginn nach dem 1 ” 0 U bergang vom Bit Detector kein Low-Pegel festgestellt wird, dann geht die<br />
Empfangsschaltung zuruck in den Anfangszustand, in dem das Polling des 1 ” 0 U berganges erfolgt. Mit diesem<br />
Schritt werden falsche Startbits eliminiert. Liegt ein korrektes Startbit vor, dann wird dieses von rechts ins<br />
Schieberegister getaktet und der Empfang des restlichen Rahmens schreitet fort.<br />
© B. Schwarz 3-22
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Wahrend die Datenbits von rechts geladen werden, erscheinen —1—sen am linken Schieberegisterausgang. Sobald<br />
das Startbit (—0—) dort erscheint, wird der Empfangssteuerung (RX Control) signalisiert, nur noch einen weiteren<br />
Schiebevorgang (10tes Shift)) durchzufuhren, das Empfangspufferregister SBUF sowie RB8 im SCON mit<br />
—1—zu laden und das Empfangsinterruptbit RI zusetzen.<br />
• Das Signal <strong>zum</strong> Laden des SBUF Registers und des RB8 Bits im sowie <strong>zum</strong> Setzen des RI Bits wird nur dann<br />
generiert, wenn <strong>zum</strong> Zeitpunkt des letzten Shift Pulses die beiden folgenden Bedingungen erfullt sind:<br />
1) RI = 0 ; RI muss nach dem letzten empfangenen Byte durch die Software gelo scht worden sein.<br />
2) Das empfangene Stopbit ist ‘1‘.<br />
• Wenn eine der Bedingungen nicht erfullt ist, geht der empfangene Rahmen unwiederbringbar. Sofern beide<br />
Bedingungen erfullt sind, ubernimmt RB8 das Stopbit, das Datenbyte geht uber in SBUF und RI wird aktiviert.<br />
Unabhangig davon, ob die Bedingungen erfullt sind, wechselt die Empfangsschaltung in den Anfangszustand, in<br />
dem das Polling des 1 ” 0 U berganges am RXD Eingang erfolgt.<br />
© B. Schwarz 3-23
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
Bild 3-13: Timing des Empfangsvorgangs der seriellen Schnittstelle im Betriebsmodus 1 [11]<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
© B. Schwarz 3-24
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
Bild 3-14: Blockdiagramm der Empfangerkomponente des UART im Betriebsmodus 1 [11]<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
© B. Schwarz 3-25
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>6 Aufbau des Assembler-Codes<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Es wird empfohlen, den Assembler-Code mit einem konsistenten Aufbau zu entwerfen, gerade auch dann wenn<br />
der Code schrittweise entwickelt wird. Generell sollten die Abschnitte des Codes in folgender Reihenfolge angeordnet<br />
sein:<br />
Code-Segment- und Daten-Segment-Deklarationen fur die verschiedenen Speicherbereiche:<br />
DATA interner Speicher adressierbar mit direkter Adressierung (00Hex ” 7F Hex)<br />
IDATA interner Speicher adressierbar mit indirekter Adressierung (00Hex ” 7F Hex),<br />
(00Hex ” FFHex) im üC <strong>8052</strong><br />
XDATA externer Datenbereich<br />
Equate Direktiven fur Symbole und Konstanten<br />
Code Segment mit:<br />
v Initialisierung der Peripheriekomponenten (z. B. T2CON, SCON)<br />
v Hauptprogramm<br />
v Subroutinen<br />
v Daten-Konstantendefinitionen (DB Define Byte und DW Define Word)<br />
Code-Abschnitt mit Interrupt-Serviceroutinen<br />
END Direktive<br />
© B. Schwarz 3-26
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
• Code- und Datensegmente sind separiert, da der Code in vielen Fallen mit ROMs oder EEPROMs gespeichert<br />
wird und Daten in RAM-Speichern immer gelesen und geschrieben werden. Hinzu kommt, dass der Mikrocontroller<br />
verschiedene RAM-Bereiche fur Daten zur Verfugung stellt, die bei der Adressierung unterschieden<br />
werden mussen.<br />
• Datenkonstanten und Strings, die durch DB und DW Direktiven definiert sind geho ren <strong>zum</strong> Codesegment, da<br />
diese als nicht veranderbare Daten <strong>zum</strong> Assembler-Instruktionen eines Programms geho ren.<br />
© B. Schwarz 3-27
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
Simple Source Code Template for A51 Assembler<br />
$NOMOD51 ; disable predefined 8051 registers<br />
$INCLUDE (REG52.INC) ; include CPU definition file (for example, <strong>8052</strong>)<br />
;------------------------------------------------------------------------------------------------------<br />
;Segment and variable declarations<br />
;DATA SEGMENT--Reserves space in DATA RAM<br />
;The internal data space accessible by direct addressing : 00 HEX ” 7F HEX<br />
;-----------------------------------------------------------------------------data_seg_name<br />
SEGMENT DATA ; relocatable segment for DATA RAM.<br />
RSEG data_seg_name ; switch to this data segment<br />
data_variable: DS 1 ; reserve 1 Bytes for data_variable<br />
data_variable1: DS 2 ; reserve 2 Bytes for data_variable1<br />
;------------------------------------------------------------------------------------------------------<br />
;IDATA SEGMENT--Reserves space in IDATA RAM<br />
;The entire internal data space accessible by indirect addressing: 00 HEX ” 7F HEX,<br />
; 00 HEX ” FF HEX on the <strong>8052</strong><br />
;-----------------------------------------------------------------------------idata_seg_name<br />
SEGMENT IDATA ; relocatable segment for DATA RAM.<br />
RSEG idata_seg_name ; switch to this data segment<br />
idata_variable: DS 1 ; reserve 1 Bytes for idata_variable<br />
idata_variable1: DS 2 ; reserve 2 Bytes for idata_variable1<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
© B. Schwarz 3-28
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
;------------------------------------------------------------------------------<br />
; XDATA SEGMENT--Reserves space in XDATA RAM The external data space<br />
;-----------------------------------------------------------------------------xdata_seg_name<br />
SEGMENT XDATA ; relocatable segment for XDATA RAM<br />
RSEG xdata_seg_name ; switch to this xdata segment<br />
xdata_variable: DS 1 ; reserve 1 Bytes for xdata_variable<br />
xdata_array: DS 500 ; reserve 500 Bytes for xdata_array<br />
;-------------------------------------------------------------------------------<br />
; ABSOLUTE XDATA SEGMENT--Reserves space in XDATA RAM at absolute addresses.<br />
; ABSOLUTE segments are useful for memory mapped I/O ( address bus is connected to other devices)<br />
;------------------------------------------------------------------------------<br />
XSEG AT 8000H ; switch absolute XDATA segment @ 8000H<br />
XIO: DS 1 ; reserve 1 Bytes for XIO port<br />
XCONFIG: DS 1 ; reserve 1 Bytes for XCONFIG port<br />
;------------------------------------------------------------------------------<br />
; BIT SEGMENT--Reserves space in BIT RAM<br />
;The bit space; overlapping byte locations 20 HEX ” 2F HEX of the internal data space<br />
;-----------------------------------------------------------------------------bit_seg_name<br />
SEGMENT BIT ; segment for BIT RAM.<br />
RSEG bit_seg_name ; switch to this bit segment<br />
bit_variable: DBIT1 ; reserve 1 Bit for bit_variable<br />
bit_variable1: DBIT4 ; reserve 4 Bits for bit_variable<br />
© B. Schwarz 3-29
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
;------------------------------------------------------------------------------<br />
; Add constant (typeless) numbers here.<br />
;-----------------------------------------------------------------------------typeless_number<br />
EQU 0EDH ; assign 0ED HEX<br />
typeless_num1 EQU typeless_number - 8 ; evaluate typeless_num1<br />
;------------------------------------------------------------------------------<br />
; Provide an LJMP to start at the reset address (address 0) in the main module.<br />
; After a reset the program counter PC is loaded with 0000HEX .<br />
;------------------------------------------------------------------------------<br />
CSEG AT 0 ; absolute Segment at Address 0<br />
LJMP start ; reset location (jump to start)<br />
;------------------------------------------------------------------------------<br />
; CODE SEGMENT--Reserves space in CODE ROM for assembler instructions.<br />
;-----------------------------------------------------------------------------code_seg_name<br />
SEGMENT CODE<br />
RSEG code_seg_name ; switch to this code segment<br />
;------------------------------------------------------------------------------<br />
; Insert your assembly program here. <strong>No</strong>te, the code below is non-functional.<br />
;-----------------------------------------------------------------------------start:<br />
ORL IE,#82H ; enable interrupt system (Zeitgeber 0)<br />
SETB TR0 ; enable Zeitgeber 0<br />
repeat_label: MOV A,data_symbol;<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
© B. Schwarz 3-30
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
ADD A,code_table; direct addressing<br />
CALL code_symbol<br />
MOV DPTR,#xdata_symbol<br />
MOVX A,@DPTR<br />
MOV R1,A<br />
PUSH AR1<br />
CALL sub_routine1<br />
POP AR1<br />
ADD A,R1<br />
JMP repeat_label; end of main program body<br />
;<br />
code_<strong>entry</strong>: CALL<br />
RET<br />
code_symbol<br />
sub_routine1: NOP<br />
RET<br />
; Data constants in program storage space<br />
code_table: DB typeless_number<br />
DB —string‘,‘c‘,‘h‘,00H<br />
;------------------------------------------------------------------------------<br />
; The END directive is ALWAYS required.<br />
;------------------------------------------------------------------------------<br />
END ; End Of File<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
© B. Schwarz 3-31
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>7 Befehlsubersicht des üC 8051 Assemblers<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Mnemonic Description Mnemonic Description Mnemonic Description<br />
Arithmetic Operations<br />
ADD A,source<br />
ADD A,#data<br />
ADDC A,#source<br />
ADDC A,#data<br />
SUBB A,source<br />
SUBB A,#data<br />
INC A<br />
INC source<br />
DEC A<br />
DEC source<br />
INC DPTR<br />
MUL AB<br />
DIV AB<br />
DA A<br />
Logical Operations<br />
ANL A,source<br />
ANL A,#data<br />
ANL direct,A<br />
ANL direct,#data<br />
ORL A,source<br />
QRL A,#data<br />
OAL direct,A<br />
ORL direct,#data<br />
XRL A,source<br />
XRL A,#data<br />
XRL direct,A<br />
XRL direct,#data<br />
CLR A<br />
CPL A<br />
RL A<br />
RLC A<br />
RR A<br />
RRC A<br />
SWAP A<br />
add source to A<br />
add with carry<br />
subtract from A<br />
with borrow<br />
increment<br />
decrement<br />
increment DPTR<br />
multiply A & B<br />
divide A by B<br />
decimal adjust A<br />
logical AND<br />
logical OR<br />
logical XOR<br />
clear A<br />
complement<br />
rotate A Ieft<br />
through C<br />
rotate A right<br />
through C<br />
swap nibbles<br />
Data Transfer<br />
Operations<br />
MOV A,source<br />
MOV A,#data<br />
MOV dest,A<br />
MOV dest,source<br />
MOV dest,#data<br />
MOV DPTR,#datal6<br />
MOVC A,@A+DPTR<br />
MOVC A,@A+PC<br />
MCVX A,@Ri<br />
MOVX A,@DPTR<br />
MOVX @Ri,A<br />
MOVX @DPTR,A<br />
PUSH direct<br />
POP direct<br />
XCH A,source<br />
XCHD A,@Ri<br />
Boolean Variable<br />
Manipulation<br />
CLR C<br />
CLR bit<br />
SETB C<br />
SETB bit<br />
CPL C<br />
CPL bit<br />
ANL C,bit<br />
ANL C,/bit<br />
ORL C,bit<br />
ORL C,/bit<br />
MOV C,bit<br />
MOV bit,C<br />
JC rel<br />
JNC rel<br />
move source<br />
to destination<br />
move from code memory<br />
move from data memory<br />
push onto stack<br />
pop from stack<br />
exchange bytes<br />
exchange low order digits<br />
clear bit<br />
set bit<br />
complement bit<br />
AND bit with C<br />
AND NOT bit with C<br />
OR bit with C<br />
OR NOT bit with C<br />
move bit<br />
jump if C set<br />
jump if C not set<br />
JB bit,rel<br />
JNB bit,rel<br />
JBC bit,rel<br />
Program Branching<br />
ACALL addr11<br />
LCALL addr16<br />
RET<br />
RETI<br />
AJMP addr11<br />
LJMP addr16<br />
SJMP rel<br />
JMP @A+DPTR<br />
JZ rel<br />
JNZ rel<br />
CJNE A,direct,rel<br />
CJNE A,#data,rel<br />
CJNE Rn,#data,rel<br />
CJNE @Rn,#data,rel<br />
DJNZ Rn, rel<br />
DJNZ direct,rel<br />
NOP<br />
jump if bit set<br />
if bit not set<br />
jump if bit set then clear<br />
call subroutine<br />
return from subroutine<br />
return from interrupt<br />
jump<br />
jump if A = 0<br />
jump if A not = 0<br />
compare and jump if not<br />
equal<br />
decrement and jump if not<br />
zero<br />
no operation<br />
LEGEND<br />
Rn register addressing using RO R7<br />
direct 8-bit internal address (OOH-FFH)<br />
@Ri indirect addressing using RO or R1<br />
source any of [Rn,direct,@Rn]<br />
dest any of [Rn,direct,@Rn]<br />
#data 8-bit constant included in instr.<br />
#data 16 16-bit constant<br />
bit 8-bit direct address of bit<br />
Rel signed 8-bit offset<br />
addr11 11-bit address in current 2k page<br />
addrl6 16-bit address<br />
© B. Schwarz 3-32
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>8 <strong>8052</strong> Interrupt Organisation<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Sechs Interruptquellen stehen zur Verfugung: zwei externe Interrupts, drei Timer-Interrupts und der Interrupt<br />
der seriellen Schnittstelle.<br />
Alle Interrupts sind nach dem Systemreset inaktiv und mussen einzeln freigegeben werden (Register IE 0A8Hex)<br />
<strong>3.</strong>8.1 Interrupt Freigabe und Prioritat<br />
Jede Interruptquelle muss jeweils separat mit einem speziellen Freigabebit des Interrupt Enable (IE) Registers im<br />
SFR aktiviert werden. Zusatzlich ist ein globales Freigabebit EA (IE.7) zu beachten, mit dem alle Interrupts freigeschaltet<br />
werden.<br />
Bit Symbol Bitadresse Beschreibung: 1 gesetzt = Interrupt aktiv<br />
IE.0 EX0 A8H Externer 0 Interrupt, P<strong>3.</strong>2 low aktiv (B2H)<br />
IE.1 ET0 A9H Timer 0 Interrupt<br />
IE.2 EX1 AAH Externer 1 Interrupt, P<strong>3.</strong>3 low aktiv (B3H)<br />
IE.3 ET1 ABH Timer 1 Interrupt<br />
IE.4 ES ACH Interruptquellen des DUART (TI und RI)<br />
IE.5 ET2 ADH Timer 2 Interupt<br />
IE.6 - AEH Nicht definiert<br />
IE.7 EA AFH Globale Freigabe fur alle Interrupts<br />
Zwei Bits mussen fur jeden Interrupt<br />
gesetzt werden:<br />
;Im jeweiligen Programmabschnitt<br />
SETB ES ; Freigabe des DUART<br />
SETB EA ; Allgemeine Freigabe<br />
; oder<br />
MOV IE,#10010000; Initialisierung<br />
© B. Schwarz 3-33
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Jedem Interrupt kann individuell eine von zwei Anforderungsprioritaten zugeordnet werden. Diese Rangfolge<br />
erlaubt es einem Interrupt der Prioritat 1 eine laufende Interrupt Service Routine (ISR) der Prioritat 0 zu unterbrechen.<br />
Die Bearbeitung der unterbrochenen ISR wird erst fortgesetzt, wenn die Behandlung des Interrupts mit<br />
der Priortat 1 abgeschlossen ist. Die Bearbeitung des Hauprogramms wird erst nach Abschluss beider ISRs wieder<br />
aufgenommen.<br />
Die Interrupt Prioritaten werden uber das bitadressierbare Register IP an der Adresse 0B8Hex des Special Function<br />
Registers (SFR) gesteuert:<br />
Bit Symbol Bitadresse Beschreibung: 1 gesetzt = ho here Prioritat<br />
IP.0 PX0 B8H Externer 0 Interrupt, P<strong>3.</strong>2 low aktiv (B2H)<br />
IP.1 PT0 B9H Timer 0 Interrupt<br />
IP.2 PX1 BAH Externer 1 Interrupt, P<strong>3.</strong>3 low aktiv (B3H)<br />
IP.3 PT1 BBH Timer 1 Interrupt<br />
IP.4 PS BCH Interruptquellen des DUART (TI und RI)<br />
IP.5 PT2 BDH Timer 2 Interupt<br />
IP.6 - - Nicht definiert<br />
IP.7 - - Nicht definiert<br />
Wenn zwei Interrupts der gleichen<br />
Prioritatsebene gleichzeitig<br />
auftreten, dann wird uber eine<br />
festgelegte sogenannte Polling<br />
Sequenz entschieden welcher Interrupt<br />
als erster bedient wird:<br />
Extern 0, Timer 0, Extern 1,<br />
Timer 1, DUART, Timer 2<br />
© B. Schwarz 3-34
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>8.2 Interrupt Flaggen und Ausfuhrung<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Zu jedem Interrupt geho rt eine Flagge, die gesetzt wird, wenn das zugeho rige Ereignis in der Peripheriekomponente<br />
oder an dem extenen Anschluss aufgetreten ist. Unabhangig von der jeweiligen Interruptfreigabe (IE Programmierung)<br />
sind die Flaggen durch die Software lesbar (z.B. JB TI, Label).<br />
Ein Interrupt des DUART resultiert aus der ODER-Verknupfung des Empfangs- (Receive RI) mit dem Sendeinterrupt<br />
(Transmit TI). Interrrupts des Timer 2 werden durch einen Timer-U berlauf mit TF2 oder ein externes<br />
Eingangsbit EXF2 erzeugt.<br />
Interrupt Flagge SFR Register und Bitposition<br />
Extern 0 IE0 TCON.1 (timer control reg. 88Hex)<br />
Extern 1 IE1 TCON.3<br />
Timer 1 TF1 TCON.7<br />
Timer 0 TF0 TCON.5<br />
DUART TI SCON.1<br />
DUART RI SCON.0<br />
Timer 2 TF2 T2CON.7 (<strong>8052</strong>)<br />
Timer 2 EXF2 TECON.6<br />
© B. Schwarz 3-35
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Wenn ein Interrupt auftritt, den die CPU akzeptiert, wird die Bearbeitung des Hauptprogrammes unterbrochen<br />
und folgende Schritte werden vom üC automatisch durchgefuhrt:<br />
Die momentane Befehlsbearbeitung wird zu Ende gefuhrt.<br />
Der Programmzahlerstand (Progam Counter PC) wird auf den Stack (interner RAM-Bereich) gespeichert.<br />
Der aktuelle Interruptstatus wird intern gespeichert.<br />
Alle Interrupts mit gleicher Prioritat werden blockiert.<br />
Der Programmzahler PC wird mit der speziellen Vektoradresse des jeweiligen Interrupts geladen.<br />
Die Interrupt Service Routine ISR wird ausgefuhrt. Die Interrupt Flaggen des Timer 2 und des DUART mussen<br />
von der Anwendersoftware zuruckgesetzt werden.<br />
Die ISR wird mit einem RETI Befehl abgeschlossen.<br />
Der alte PC Stand wird aus dem Stack gelesen und der vorherige Interruptstatus wird restauriert.<br />
© B. Schwarz 3-36
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>8.3 Interrupt Vektoren<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
Wenn ein Interrupt akzeptiert ist (Prioritat hoher als ein ggf. aktiver Interrupt), wird ein sogenannter Interrupt<br />
Vektor in den PC geladen.<br />
Dieser Vektor ist die festgelegte Anfangsadresse einer ISR, die der jeweiligen Interruptquelle zugeordnet ist.<br />
Interrupt Flagge Vektor Adresse<br />
System Reset RST 0000H<br />
Extern 0 IE0 0003H<br />
Timer 0 TF0 000BH<br />
Extern 1 IE1 0013H<br />
Timer 1 TF1 001BH<br />
DUART TI oder RI 0023H<br />
Timer 2 TF2 oder EXF2 002BH<br />
Fur die einzelnen Interrrupts stehen also im unteren<br />
Programmspeicherbereich 8 Byte pro Quelle fur jede<br />
ISR zur Verfugung.<br />
Aufgrund dieses geringen Speicherberumfanges, enpfiehlt<br />
es sich, an der jeweiligen Stelle nur einen<br />
Sprungbefehl zu platzieren, der mit seinem Label auf<br />
den tatsachlichen ersten Befehl einer ISR zeigt.<br />
Um diesen unteren Programmspeicherbereich nicht mit dem Hauptprogramm zu belegen, sollte nach einem Reset,<br />
der den PC auf die Adresse 0000H setzt, nur ein Sprungbefehl z.B. LJUMP 0030H ausgefuhrt werden.<br />
© B. Schwarz 3-37
Prof. Dr. J. Reichardt<br />
Prof. Dr. B. Schwarz UART - CPLD 95108 - C <strong>8052</strong><br />
<strong>3.</strong>8.4 Programmbeispiel<br />
CSEG at 0; Code segment<br />
ORG 0000H<br />
LJMP MAIN ;Reset <strong>entry</strong> <strong>point</strong><br />
ORG 000BH<br />
LJMP TI0ISR<br />
ORG 0023H<br />
LJMP DUATISR<br />
ORG 002BH<br />
LJMP TI2ISR<br />
ORG 0030H ; Above interrupt vectors<br />
MAIN: MOV T2CON,#010H; Ti. 2 mode 1 , TR2 = 0<br />
...<br />
TI0ISR: CPL P1.0<br />
RETI<br />
DUATISR: CLR TI<br />
RETI<br />
TI2ISR: CLR TF2<br />
RETI<br />
END<br />
haw hamburg<br />
FACHBEREICH ELEKTROTECHNIK<br />
UND INFORMATIK<br />
© B. Schwarz 3-38