07.10.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!