MIKROKOMPUTERY JEDNOUKŁADOWE RODZINY MCS - 51



Podobne dokumenty
MIKROPROCESORY architektura i programowanie

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe

MIKROPROCESORY architektura i programowanie

Hardware mikrokontrolera X51

Architektura mikrokontrolera MCS51

Architektura mikrokontrolera MCS51

Technika mikroprocesorowa I Wykład 4

Obszar rejestrów specjalnych. Laboratorium Podstaw Techniki Mikroprocesorowej Instytut Mikroelektroniki i Optoelektroniki PW

Instytut Teleinformatyki

architektura komputerów w 1 1

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Zerowanie mikroprocesora

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Ćwiczenie 9 Częstościomierz oparty na µc 8051(8052)

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Systemy wbudowane. Wprowadzenie. Wprowadzenie. Mikrokontroler 8051 Budowa

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

Organizacja typowego mikroprocesora

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

ad a) Konfiguracja licznika T1 Niech nasz program składa się z dwóch fragmentów kodu: inicjacja licznika T1 pętla główna

Start Bity Bit Stop 1 Bit Par Rys. 1

Układy czasowo-licznikowe w systemach mikroprocesorowych

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Technika mikroprocesorowa I Wykład 2

TECHNIKA MIKROPROCESOROWA

2. PORTY WEJŚCIA/WYJŚCIA (I/O)

Praktyka Techniki Mikroprocesorowej. Mikrokontroler ADuC834

Informacje ogólne o układzie 8051.

Instytut Teleinformatyki

Mikroprocesor Operacje wejścia / wyjścia

Wstęp Architektura... 13

organizacja procesora 8086

MIKROKONTROLERY I MIKROPROCESORY

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Przerzutnik ma pewną liczbę wejść i z reguły dwa wyjścia.

Przerwania w architekturze mikrokontrolera X51

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor.

Pracownia elektryczno-elektroniczna klasa IV

PC 3 PC^ TIMER IN RESET PC5 TIMER OUT. c 3. L 5 c.* Cl* 10/H CE RO WR ALE ADO AD1 AD2 AD3 AD4 A05 A06 LTJ CO H 17 AD7 U C-"

Temat: Pamięci. Programowalne struktury logiczne.

Przykładowe pytania DSP 1

Mikrokontroler Intel dr inż. Wiesław Madej

Programowanie w językach asemblera i C

Ćwiczenie 2 Transmisja a szeregowa µc 8051(8052) - PC

Instytut Teleinformatyki

Metody obsługi zdarzeń

Architektura komputerów

Lista rozkazów mikrokontrolera 8051

WPROWADZENIE Mikrosterownik mikrokontrolery

LICZNIKI Liczniki scalone serii 749x

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

CPU architektura i rejestry

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Układy sekwencyjne. Podstawowe informacje o układach cyfrowych i przerzutnikach (rodzaje, sposoby wyzwalania).

dwójkę liczącą Licznikiem Podział liczników:

Opis mikrokontrolera AT89C2051

1. Poznanie właściwości i zasady działania rejestrów przesuwnych. 2. Poznanie właściwości i zasady działania liczników pierścieniowych.

Mikrokontroler 80C51

Technika Mikroprocesorowa

architektura komputerów w 1 1

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

Struktura i działanie jednostki centralnej

Układy czasowo-licznikowe w systemach mikroprocesorowych

Ćwiczenie 30. Techniki mikroprocesorowe Programowanie w języku Asembler mikrokontrolerów rodziny '51

LICZNIKI PODZIAŁ I PARAMETRY

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

2. Architektura mikrokontrolerów PIC16F8x... 13

Techniki mikroprocesorowe i systemy wbudowane

Przerwania, polling, timery - wykład 9

Programowanie mikrokontrolera 8051

Magistrala systemowa (System Bus)

Opis układów wykorzystanych w aplikacji

ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM

Technika mikroprocesorowa. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Zagadnienia zaliczeniowe z przedmiotu Układy i systemy mikroprocesorowe elektronika i telekomunikacja, stacjonarne zawodowe

Odbiór i dekodowanie znaków ASCII za pomocą makiety cyfrowej. Znaki wysyłane przez komputer za pośrednictwem łącza RS-232.

Instrukcja do ćwiczenia : Matryca komutacyjna

Temat: Projektowanie i badanie liczników synchronicznych i asynchronicznych. Wstęp:

Ćw. 7: Układy sekwencyjne

UKŁAD SCALONY. Cyfrowe układy można podzielić ze względu na różne kryteria, na przykład sposób przetwarzania informacji, technologię wykonania.

Układy zegarowe w systemie mikroprocesorowym

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

Ćwiczenie 7 Matryca RGB

Podstawy działania układów cyfrowych...2 Systemy liczbowe...2 Kodowanie informacji...3 Informacja cyfrowa...4 Bramki logiczne...

Statyczne badanie przerzutników - ćwiczenie 3

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

A&Q PYTANIA I ODPOWIEDZI Z MIKROKONTROLERÓW

LEKCJA. TEMAT: Funktory logiczne.

Ćwiczenie 6 Komunikacja z komputerem (łącze RS232)

PRZERZUTNIKI: 1. Należą do grupy bloków sekwencyjnych, 2. podstawowe układy pamiętające

Logiczny model komputera i działanie procesora. Część 1.

Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:

(Rysunek z książki T.Starecki. Mikokontrolery jednoukładowe rodziny 51. NOZOMI W-wa 1996)

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

WFiIS CEL ĆWICZENIA WSTĘP TEORETYCZNY

Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1

Transkrypt:

INSTYTUT AUTOMATYKI POLITECHNIKI ŁÓDZKIEJ HENRYK MROCZEK MIKROKOMPUTERY JEDNOUKŁADOWE RODZINY MCS - 51 ŁÓDŹ 1995

Spis treści 1.Charakterystyka ogólna 3 2.Opis budowy i działania 7 2.1 Architektura 7 2.2 Przestrzeń adresowa pamięci ROM, RAM, SFR 10 2.3 Rejestry podstawowe procesora 12 2.4 Pamięć RAM 15 2.5 Rejestry SFR 16 2.6 Porty P0...P3 18 2.7 Programowalne układy czasowe 22 2.8 Układ transmisji szeregowej 29 2.9 System przerwań 36 2.10 Inicjalizacja i stan uśpienia procesora 40 3.Cykl maszynowy i rozkazowy procesora 42 4.Możliwości rozbudowy systemu MCS - 51 45 5.Lista instrukcji 46 5.1 Uwagi do listy instrukcji 46 5.2 Opis instrukcji 48 2

1.Charakterystyka ogólna Mikrokomputerami jednoukładowymi nazywana jest pewna klasa mikroprocesorów charakteryzująca się tym, że w jednym układzie scalonym zawarty jest procesor, pamięć programu, pamięć danych, jeden lub kilka liczników programowalnych oraz układy (porty) wejściowo-wyjściowe umożliwiające bezpośrednie przyłączanie urządzeń zewnętrznych. Ze względu na ograniczoną pojemność pamięci (np.4kb pamięci programu i 256 bajtów pamięci danych ) układy takie przeznaczone są do realizacji niezbyt złożonych układów sterowania (np. sterowanie krosnem ) lub dość złożonych, inteligentnych przyrządów pomiarowych (takich jak np. uniwersalny miernik mierzący napięcie, prąd, moc czynną, bierną i cosϕ). Mikrokomputery jednoukładowe nazywane są też często mikrokontrolerami. W dalszej części niniejszego opracowania będą nazywane także mikroprocesorami lub po prostu procesorami. W grupie mikroprocesorów 8-bitowych najbardziej rozpowszechnione są w chwili obecnej układy firmy INTEL należące do rodziny MCS-51 (ang. MCS-Microcomputer System) oraz 68HC11 firmy MOTOROLA. Mikroprocesory firmy INTEL są produkowane przez szereg innych firm, jak np. PHILIPS, SIEMENS, AMD, FUJITSU. Podstawowym układem rodziny MCS-51 jest procesor 8051. Wykonywany jest on w dwóch wersjach : w technologii HMOS i w technologii CHMOS. Ta druga wersja oznaczana jest symbolem 80C51 i charakteryzuje się znacznie mniejszym poborem mocy a ponadto posiada dwa reżimy pracy w stanie tzw. uśpienia (ang. Power Down Mode), w których pobór mocy ulega dalszemu zmniejszeniu, umożliwiając stosowanie zasilacza bateryjnego, co jest szczególnie ważne w przyrządach przenośnych. Mikroprocesor 8051 zawiera oprócz jednostki centralnej (ang.cpu-central Processing Unit) także pamięć programu ROM (ang. Read Only Memory) o pojemności 4kB, pamięć danych RAM (ang. Random Access Memory) o pojemności 128 bajtów, dwa 16-bitowe liczniki programowalne (ang. Counter/Timer), układ transmisji szeregowej oraz cztery 8-bitowe porty wejściowo wyjściowe (ang. I/O - Input/Output Ports). Procesor wyposażony jest w 5 wejściowy system przerwań (2 przerwania zewnętrzne, dwa od liczników, jedno od portu szeregowego). Przerwania te są dwupoziomowe, tzn. o dwóch poziomach zagnieżdżenia. 3

Częstotliwość impulsów zegarowych taktujących pracę procesora może zawierać się w granicach:1.2...12mhz. Procesor umożliwia bezpośrednie przyłączenie rezonatora kwarcowego, zazwyczaj o częstotliwości 12 MHz. Lista instrukcji obejmuje 111 pozycji. Instrukcje mogą być 1, 2, 3- bajtowe, przy czym większość z nich (58%) wykonywana jest w czasie 1 µs a pozostałe w czasie 2µs - przy częstotliwości zegara 12MHz. Przedstawiona wyżej charakterystyka oddaje w pierwszym przybliżeniu podstawowe właściwości procesora 8051. Procesor 8051 posiadający wewnętrzną pamięć programu ROM stosowany jest wtedy, gdy po zbudowaniu układu prototypowego i wszechstronnym zweryfikowaniu programu użytkownik zdecydował się na zamówienie dużej serii (co najmniej 1000 sztuk) mikroprocesorów. W tym przypadku zamawia się u producenta procesor z pamięcią ROM programowaną maską (specyfikację maski dostarcza się producentowi). Do celów budowy urządzeń prototypowych można wykorzystać procesor 8751 z pamięcią EPROM umożliwiającą zaprogramowanie jej (i skasowanie promieniami ultrafioletowymi) co najmniej kilkanaście razy. Tego rodzaju procesory są jednak stosunkowo drogie. Z tego względu do budowy urządzeń prototypowych wykorzystuje się najczęściej procesor 8031 bez wewnętrznej pamięci programu. W tym przypadku pamięć programu EPROM dołącza się z zewnątrz. Pojemność tej pamięci może wynosić max. 64kB. Procesor ten umożliwia przyłączenie także zewnętrznej pamięci RAM o pojemności do 64kB. Przy korzystaniu z pamięci zewnętrznej (RAM lub EPROM) traci się jednak znaczną liczbę linii wejściowo -wyjściowych, gdyż do tego celu trzeba zaangażować więcej niż dwa 8-bitowe porty procesora (18 linii we-wy). W tym przypadku zazwyczaj zachodzi potrzeba dołączenia zewnętrznych portów I/O (np. LS373, LS245), które wchodzą do przestrzeni adresowej pamięci zewnętrznej RAM, co odpowiednio zmniejsza użytkowany obszar pamięci. Pomimo tych ograniczeń urządzenia prototypowe projektowane są zazwyczaj przy wykorzystaniu procesorów nie posiadających wewnętrznej pamięci ROM. Do rodziny MCS-51 zalicza się także procesor 8052 i jego pochodne, które można oznaczyć ogólnie 8xx2. Procesory należące do tej rodziny (Tab.1) charakteryzują się tym, że mają dwukrotnie większą pamięć RAM (256 bajtów) oraz jeden dodatkowy licznik 16-bitowy (razem trzy) i jedno dodatkowe źródło przerwań. 4

Procesory zestawione w Tabeli 1 i oznaczone symbolami 8xx1,8xx2 tworzą tzw. zestaw podstawowy. Ten właśnie zestaw zostanie dalej opisany szczegółowo na przykładzie procesorów 8031 i 8032. Tab.1. Mikrokomputery rodziny 8051 - zestaw podstawowy Typ Zegar Wewnętrzna Wewnętrzna Porty (MHz) pamięć programu pamięć RAM I/O Liczniki Przerwania Liczba (w bajtach) (w bajtach) 8-bitowe 16-bitowe /poziomy końcówek 8051,80C51 4k ROM 8751,87C51 12 4k EPROM 128 4 2 5 / 2 40 8031,80C31-8052,80C52 8k ROM 8752, 12 8k EPROM 256 4 3 6 / 2 40 8032,80C32 - Jak już wspomniano, rodzina MCS-51 jest dalej rozwijana i osiągalne są procesory bogaciej wyposażone, ale też i znacznie droższe. Tab.2. Zaawansowane mikroprocesory rodziny 8051 firmy Philips (PCB) i Siemens (SAB) Zegar (MHz) PCB Wewn. pam.ram (w bajtach) 80C552 12 256 SAB 80532 12 128 SAB Porty I/O 8-bitowe Liczniki 16-bit. Przerwania /poziomy 5(I/O) + 1(I) 2 15/2 6(I/O) + 1(I) 2 6/2 80C535 12,16 256 6 3 12/4 SAB 7(I/O) + 80C537 12 256 1 1 / 2 (I) 4 14/4 ADC PWM Watchdog Wskaźniki DPTR Układ mnoż./ dziel. Liczba końcówek 8we /10bit 2 1 1-68 8we /8bit - 1 1-68 8we /8bit 4 1 1-68 12we /8bit 21 2 8 tak 84 W tabeli 2 zestawiono kilka wybranych procesorów z tej grupy jednak dla uproszczenia nie umieszczono ich odpowiedników z pamięcią ROM lub EPROM. Wszystkie te procesory korzystają z podstawowej listy instrukcji procesora 8051. Z tabeli 2 widać że wyszczególnione w niej procesory mają większą liczbę portów 5

I/O, większą liczbę liczników 16-bitowych, większą liczbę wejść przerwaniowych i większą liczbę poziomów zagnieżdżenia. Niektóre z mikroprocesorów wyposażone są w przetworniki analogowo-cyfrowe 8 lub 10-bitowe, a także wyjścia typu PWM (ang. Pulse Width Modulation) generujące przebiegi o stałej częstotliwości i współczynniku wypełnienia sterowanym cyfrowo. Procesory te wyposażone są też w tzw. Watch-dogi, czyli układy czuwające nad tym, czy wykonywane są prawidłowo pewne pętle programowe i zgłaszające przerwania przy wykryciu błędu. W jednym z najbardziej zaawansowanych procesorów (SAB80C537) wbudowano hardwarowy układ wielobajtowego mnożenia i dzielenia oraz wprowadzono aż 8 wskaźników DPTR (ang. Data Pointer). W tym miejscu należy wyjaśnić, że wskaźnik ten służy do adresowania danych w zewnętrznej pamięci RAM. We wszystkich procesorach oprócz w/w wskaźnik ten jest tylko jeden i obróbka danych zawartych w zewnętrznej pamięci RAM jest bardzo utrudniona. Niedogodność ta została w tym procesorze usunięta przez wprowadzenie ośmiu wskaźników DPTR. W danej chwili aktywny jest jednak dalej jeden wskaźnik a przełączanie między nimi dokonuje się przez maskowanie odpowiednich bitów w specjalnym rejestrze 8-bitowym. Ułatwia to znacznie obróbkę danych zawartych w zewnętrznej pamięci RAM. 6

2.Opis budowy i działania. 2.1.Architektura. Rys.1 Schemat blokowy mikrokomputera 8051 W przedstawionym na rys.1 schemacie blokowym obrazującym wnętrze mikroprocesora 8051 można wyróżnić następujące ważniejsze układy bądź pojedyncze rejestry istotne dla użytkownika: ALU- (ang. Arithmetic Logic Unit)-jednostka arytmetyczno logiczna PSW- (ang. Program Status Word)-rejestr statusowy ACC- (ang. Accumulator)-podstawowy rejestr procesora współpracujący z ALU B-rejestr pomocniczy używany przy mnożeniu i dzieleniu ROM-pamięć programu RAM-pamięć danych 7

PC-(ang. Program Counter) -licznik programu adresujący pamięć programu DPTR-(ang. Data Pointer) -wskaźnik danych adresujący zewnętrzną pamięć RAM SP-(ang. Stack Pointer) -wskaźnik stosu TH0, TL0- licznik nr 0 (T-Timer, H-High, L-Low) TH1, TL1- licznik nr 1 TMOD- rejestr trybu pracy liczników nr 0 i nr 1 TCON- rejestr sterujący liczników nr 0 i nr 1 SBUF- rejestr nadajnika / odbiornika portu szeregowego SCON- rejestr sterujący portem szeregowym PCON- rejestr sterujący stanami uśpienia (ang. Power Down Mode) IE- rejestr maski przerwań (IE - ang. Interrupt Enable) IP- rejestr priorytetów przerwañ (IP - ang. Interrupt Priority) P0...P3- porty I / O (ang. Input / Output Ports) Oprócz w/w układów w procesorze 8051 występuje szereg układów bądź rejestrów pomocniczych, o których użytkownik nie musi wiedzieć i dlatego nie zostały one wyodrębnione w w/w opisie. Sygnały WE - WY pochodzą z czterech portów 8-bitowych (P0...P3) ale oprócz tych sygnałów występują jeszcze cztery istotne sygnały sterujące. PSEN -(ang. Program Store Enable) sygnał odczytu danych z zewnętrznej pamięci programu ALE - (ang. Address Latch Enable) sygnał służący do zatrzaśnięcia w zewnętrznym rejestrze LATCH młodszej części adresowej wyprowadzanej przez port P0 przy współpracy z pamięciami zewnętrznymi: EPROM i RAM EA - (ang. External Access) sygnał wyboru pamięci programu; gdy sygnał ten jest zerem wtedy program odczytywany jest z zewnętrznej pamięci programu (EPROM), a gdy jedynką - z pamięci wewnętrznej (a poza jej obszarem adresowym także z pamięci zewnętrznej) RST - (ang. Reset) sygnał zerujący mikroprocesor (patrz p.2.10) powodujący przede wszystkim wyzerowanie licznika programu PC i w związku z tym start programu od zerowej komórki pamięci EPROM. Pamięć RAM nie jest zerowana. Procesor zasilany jest pojedynczym napięciem +5V. Pobór prądu wynosi 160mA dla procesorów NMOS, 125 ma dla HMOS, 24mA dla procesorów CHMOS (przy fxtal=12mhz). Procesor przystosowany jest do przyłączenia z zewnątrz oscylatora kwarcowego (lub ceramicznego) o częstotliwości 1.2...12MHz, przy czym standardowo stosuje się kwarc 12MHz. 8

Rys.2 Opis wyprowadzeń procesora 8031 Na rys.2 zestawiono wszystkie sygnały WE - WY procesora 8031. Jak widać, sygnały WE -WY niektórych portów mogą pełnić funkcje alternatywne. Jeżeli procesor pracuje z wewnętrzną pamięcią ROM (8051) i nie korzysta z układu transmisji szeregowej, wówczas wszystkie cztery porty (P0...P3) mogą być wykorzystane jako linie wejściowe lub wyjściowe, przy czym wejścia i wyjścia mogą być dowolnie między sobą przemieszane, np. P1.0 może być wejściem a P1.2 wyjściem itp. Jeżeli procesor współpracuje z pamięciami zewnętrznymi EPROM lub RAM, wtedy port P0 pełni rolę portu danych D7...0 i młodszej części adresowej A7...0. Starsza część adresu wysyłana jest przez port P2. Wynika stąd, że port P0 musi być portem dwukierunkowym oraz to, że dane i adresy muszą być wysyłane w różnych chwilach czasowych. Przy wyprowadzaniu młodszej części adresowej generowany jest sygnał ALE służący do zatrzaśnięcia tego adresu w rejestrze zewnętrznym (np. LS373). Do adresowania pamięci zewnętrznych EPROM i RAM używa się więc adresu, którego młodszy bajt pochodzi z w/w rejestru, a starszy z portu P2. W procesorach rodziny MCS-51 nie przewidziano specjalnej przestrzeni adresowej ani instrukcji do adresowania zewnętrznych układów WE - WY. 9

Jeżeli zamierza się stosować takie układy, to należy je tak adresować, jak gdyby to były komórki zewnętrznej pamięci RAM i do ich obsługi używać instrukcji MOVX służących do komunikacji procesora z zewnętrzną pamięcią RAM. Wszystkie linie WE - WY portu P3 mogą spełniać funkcje alternatywne. Jeżeli korzysta się z układu transmisji szeregowej, to dla trybów pracy 1, 2, 3 tego układu linia P3.0 jest wykorzystywana dla danych odbieranych RxD (ang. Receiving of Data) a P3.1 dla danych nadawanych TxD (ang. Transmitting of Data). Przy pracy układu transmisji szeregowej w trybie 0 linią P3.0 przekazywane są dane (nadawane lub odbierane) a linią P3.1 wysyłany jest sygnał zegarowy. Linie P3.2 i P3.3 mogą być wykorzystane jako wejścia sygnałów przerwań zewnętrznych odpowiednio: INT0 i INT1. Jeżeli wykorzystuje się liczniki nr 0 i nr 1, to wejścia te można użyć do bramkowania impulsów zliczanych przez te liczniki. Wejścia P3.4 i P3.5 można wykorzystać do doprowadzenia impulsów zewnętrznych do w/w liczników, przy czym T0 dotyczy licznika nr 0 a T1-licznika nr 1. Na liniach P3.6 i P3.7 generowane są sygnały zapisu WR (ang. Write) i odczytu RD (ang. Read) przy współpracy z zewnętrzną pamięcią RAM, tzn. przy wykonywaniu instrukcji MOVX. W przypadku procesora 8032 dodatkowo przewidziano 2 linie portu P1 do obsługi licznika nr 2 a mianowicie linią P1.0 oznaczoną jako T2 można doprowadzić impulsy zliczane przez licznik nr 2 a linią P1.1- sygnał T2EX wykorzystywany w pewnych trybach pracy licznika nr 2 lub służący jako trzecie źródło zgłoszenia przerwania zewnętrznego. Jak wynika z rys.2, w przypadku współpracy procesora z pamięciami zewnętrznymi oraz przy wykorzystaniu funkcji alternatywnych portu P3 i części portu P1 do dyspozycji użytkownika może pozostać zaledwie 6 linii WE -WY portu P1. Jeżeli okaże się to niewystarczające, to można zastosować dodatkowe, zewnętrzne porty I / O umieszczając je w przestrzeni adresowej zewnętrznej pamięci RAM. Jako porty wejściowe najczęściej wykorzystuje się układy LS244, LS245, LS640 a jako porty wyjściowe stosowane są rejestry LS373, LS273, LS374. 2.2.Przestrzeń adresowa pamięci ROM, RAM, SFR. W procesorach rodziny MCS-51 zastosowano specjalną architekturę (Harvard University Structure) polegającą na rozdzieleniu przestrzeni adresowej pamięci programu i pamięci danych. W wyniku tego można stosować pamięć programu 10

o pojemności max - 64kBajty i zewnętrzną pamięć danych o pojemności także do 64kBajtów. Oprócz tego w procesorze przewidziano 256-bajtową przestrzeń adresową wewnętrznej pamięci danych. Ta przestrzeń wewnętrzna dzieli się na dwa obszary. Obszar o adresach 0...127 zajmuje pamięć RAM, a obszar o adresach 127...255 zajmują tzw. rejestry specjalne SFR (ang. Specjal Function Registers). Rejestry SFR są to właśnie te rejestry, które wymieniono w p.2.1 a więc np. : PSW, ACC, TMOD, TCON itd. (rys.1). W procesorach 8xx2 istnieje dodatkowe 128 bajtów pamięci RAM, która zajmuje ten sam obszar (127...255), który przewidziano dla rejestrów SFR. Problem ewentualnego konfliktu powstającego przy odwołaniu się do tego samego adresu rozwiązano w ten sposób, że rejestry SFR adresowane są bezpośrednio (tzn. z podaniem adresu komórki w instrukcji) a komórki pamięci (127...255) można adresować tylko w sposób pośredni poprzez rejestry R0, R1; np. adres komórki umieszcza się w rejestrze R0 a następnie w celu odczytania danej do akumulatora wykonuje się instrukcję MOV A,@R0 - zostanie to omówione dokładniej w punkcie dotyczącym sposobów adresowania pamięci. Rys.3 Przestrzeń adresowa pamięci ROM, RAM, SFR Jak już wspomniano, zewnętrzna pamięć RAM (łącznie z ewentualnymi zewnętrznymi portami I / O może zajmować obszar 64kBajtów i niezależnie od tego można korzystać z wewnętrznej pamięci RAM. Nie zachodzi tu również kolizja przy 11

odwoływaniu się do adresu początkowego ( o adresach 0...255) tych pamięci gdyż dla każdej z nich przewidziano inny zestaw instrukcji. Jeżeli chodzi o pamięć programu, to łączna jej pojemność (wewnętrznej i zewnętrznej) nie może przekraczać 64 kbajtów. Jeżeli sygnał wyboru pamięci zewnętrznej EA jest jedynką (EA=1), to do zakresu 0...4095 odczytywana jest pamięć wewnętrzna ROM (lub EPROM np. w 8751) a powyżej tego zakresu - zewnętrzna pamięć EPROM. Jeśliby na przykład zastosowano zewnętrzną pamięć EPROM typu 27C512 o pojemności 64kB to pierwsze cztery kilobajty tej pamięci byłyby "przysłonięte" przez pamięć wewnętrzną ROM. Zazwyczaj jednak w przypadku zastosowania zewnętrznej pamięci EPROM daje się sygnał EA=0 i wtedy komórki tej pamięci będą mieć adresy rozpoczynające się od zera (0000H) 2.3. Rejestry podstawowe procesora Do rejestrów podstawowych zalicza się: ACC- akumulator PSW-rejestr statusowy PC- licznik programu SP- wskaźnik stosu Akumulator ACC jest rejestrem podstawowym w tym sensie, że wyniki prawie wszystkich operacji arytmetycznych i logicznych gromadzone są właśnie w tym rejestrze. Ponadto instrukcje skoków warunkowych typu JZ (ang. Jump if Zero-skocz jeśli zero) lub JNZ (Jump if Non Zero - skocz jeśli nie zero) wykonywane są na podstawie badania zerowej lub niezerowej zawartości akumulatora. Rys.4 Słowo stanu procesora Rejestr PSW jest rejestrem przechowującym słowo stanu procesora (rys.4.). Słowo to zawiera tzw. znaczniki zwane także flagami. Znaczenie tych flag jest następujące: 12

C - (ang. Carry) znacznik przeniesienia z pozycji bitu nr 7 akumulatora. Znacznik ten ustawiany jest na 1 np. przy dodawaniu dwóch liczb binarnych, których suma nie mieści się na pozycji 8 bitów (przykład: 8CH + 94H = 120H ) lub przy odejmowaniu liczby większej od mniejszej ( np. 2-3 daje wynik FF oraz C=1). AC - (ang. Auxiliary Carry) znacznik przeniesienia połówkowego tzn. występującego z bitu nr 3 do bitu nr 4. Znacznik ten wykorzystywany jest do korekcji dziesiętnej (za pomocą instrukcji DAA) liczb przedstawionych w postaci BCD (ang. Binary Coded Decimal) a sumowanych przy wykorzystaniu normalnego sumatora binarnego. F0 - znacznik softwarowy ogólnego przeznaczenia (pozostałość po rodzinie MCS-48) RS1, RS0 - dwa bity służące do wyboru zestawu rejestrów roboczych (ang. Bank Registers): 00 -Bank nr 0 ; (00H...07H $= R0...R7) 01 -Bank nr 1 ; (08H...0fH $= R0...R7) 10 -Bank nr 2 ; (10H...17H $= R0...R7) 11 -Bank nr 3 ; (18H...1FH $= R0...R7) W danej chwili aktywny jest jeden z zestawów rejestrów, przy czym każdy zestaw zawiera osiem rejestrów oznaczonych jako : R0...R7 (rys.5). OV - (ang. Overflow) - znacznik nadmiaru wykorzystywany przy dodawaniu liczb przedstawionych w kodzie dopełnienia dwójkowego D2. P - (ang. Parity ) - znacznik parzystości ustawiany na 1 przy parzystej liczbie jedynek w akumulatorze i zerowany w sytuacji przeciwnej. Licznik programu PC (zwany także licznikiem instrukcji lub licznikiem rozkazów) adresuje pamięć programu. Jego wartość początkowa wynosi 0000H a największa możliwa FFFFH. Po wykonaniu każdego kolejnego rozkazu zawartość tego licznika jest powiększana o 1, 2 lub 3 w zależności od tego ile bajtów liczy instrukcja. Przy wykonywaniu instrukcji skoków LJMP lub wywoływania podprogramów LCALL jego wartość ładowana jest odpowiednio adresem skoku lub adresem wywołania podprogramu podanym w drugim i trzecim bajcie instrukcji. 13

Rys.5 Organizacja pamięci RAM. Wskaźnik stosu SP (8-bitowy) adresuje położenie wierzchołka stosu w wewnętrznej pamięci RAM. Stos jest pewnym obszarem pamięci, do którego zapisywanie i pobieranie danych podlega tym samym regułom, co układanie i pobieranie talerzy ze stosu. Do operacji na stosie służą dwie instrukcje: PUSH (umieść na stosie) i POP (pobierz ze stosu). Dane zawsze umieszcza się na wierzchołku stosu jak również z wierzchołka się je pobiera. Adres wierzchołka zawarty jest we wskaźniku SP, który zwiększa się automatycznie przy operacjach PUSH i zmniejsza przy operacjach POP, a więc programista nie musi martwić się o adres, gdzie są umieszczane lub skąd są pobierane dane. Obowiązuje przy tym generalna zasada, że operacji POP powinno być tyle, ile wykonano operacji PUSH. Ze stosu korzystają także instrukcje CALL i RET. Początkowa wartość SP po sygnale RESET wynosi 07H i może być zmieniana pod kontrolą programu na dowolną wartość z zakresu adresowego pamięci RAM. W procesorze 8xx2 może to być także 14

obszar 80H...FFH. W procesorach rodziny 8051 stos rośnie w kierunku rosnących adresów np. jeśli SP=60H, DPTR=1234H, to sekwencja instrukcji: PUSH DPH PUSH DPL spowoduje umieszczenie liczby 12H pod adresem 61H, liczby 34H pod adresem 62H. Wskaźnik stosu adresuje ostatnio umieszczoną na stosie daną. Stos wykorzystywany jest do ochrony rejestrów przy wywoływaniu podprogramów oraz do automatycznego zapamiętywania zawartości licznika rozkazów przy wywoływaniu podprogramów i przy wejściach w procedury obsługi przerwań. 2.4 Pamięć RAM Wewnętrzna pamięć RAM w procesorze 8051 zawiera 128 bajtów o adresach 0...127 dziesiętnie lub 00...7FH w zapisie heksadecymalnym. Pierwsze 32 bajty (00...1FH ) podzielono na cztery zestawy rejestrów roboczych (ang. Bank Registers ). Każdy zestaw zawiera osiem rejestrów oznaczonych odpowiednio R0...R7. W zestawie pierwszym rejestrami R0...R7 są komórki pamięci o adresach 00...07, w drugim zestawie rejestrom tym odpowiadają komórki o adresach 08...0FH itd. Sens takiego przyporządkowania wynika stąd, że istnieje grupa instrukcji, która operuje na symbolach R0...R7 - nie ma więc potrzeby podawania adresu komórki pamięci. W danej chwili aktywny jest tylko jeden zestaw rejestrów a mianowicie ten, którego numer umieszczono na pozycji bitów RS1, RS0 w rejestrze PSW (rys.4). Korzystanie z kilku zestawów rejestrów ma sens przede wszystkim wtedy, gdy w procesorze wykorzystuje się przerwania; wtedy np. program główny korzysta z zestawu nr 0, procedura obsługi przerwania zewnętrznego INT0 z zestawu nr 1 a procedura obsługi przerwania od licznika nr 0 z zestawu nr 2. Oczywiście na początku tych procedur powinno nastąpić zapamiętanie na stosie rejestru PSW, przełączenie bitów RS1, RS0 na odpowiedni zestaw rejestrów a na końcu procedury obsługi przerwania ze stosu pobierana jest poprzednia wartość PSW i po instrukcji powrotu z przerwania RETI następuje powrót do programu głównego ze "starym " zestawem rejestrów. Jeżeli z jakiegoś zestawu nie korzysta się, to odpowiadające mu komórki pamięci można wykorzystać jako zwykłe komórki robocze adresując je bezpośrednio tzn. podając w instrukcji ich adresy. Szesnaście komórek o adresach 20H...2FH przeznaczonych jest do celów specjalnych. W tych szesnastu komórkach ponumerowano poszczególne bity w sposób pokazany na rys. 5 uzyskując zestaw 128 indywidualnych bitów o numerach 00...7FH. Otóż istnieje specjalny zestaw instrukcji przeznaczony do tzw. operacji boolowskich na 15

pojedynczych bitach z w/w obszaru. Instrukcje te umożliwiają indywidualne ustawianie i kasowanie pojedynczych bitów jak również istnieją instrukcje wykorzystujące rozgałęzienia w programie (skoki warunkowe) w zależności od wartości logicznej w/w bitów. Mówi się czasem, że procesor 8051 zawiera wewnątrz wbudowany procesor boolowski umożliwiający operacje na poszczególnych bitach wybranych komórek pamięci i niektórych rejestrów SFR. Bity te przy pisaniu programów grają rolę tzw. znaczników programowych umożliwiających podejmowanie decyzji odnośnie rozgałęzień programowych. Są szczególnie przydatne przy projektowaniu układów sterowania. Jeżeli nie wszystkie znaczniki są wykorzystywane w programie, to pozostałe wolne komórki mogą być wykorzystane jako zwykłe komórki robocze pamięci RAM. Pomimo, że adresy komórek bitowych i normalnych komórek bajtowych pokrywają się (są to liczby z zakresu 00...7FH), to program i tak będzie jednoznaczny, gdyż innego rodzaju instrukcje stosuje się do operacji bajtowych a innego do operacji bitowych. Na przykład instrukcja MOV 20H,#0 powoduje wyzerowanie wszystkich bitów komórki bajtowej o adresie 20H a instrukcja CLR 20H powoduje wyzerowanie bitu nr 20H czyli bitu nr.0 w komórce o adresie 24H. W procesorach 8xx2 występuje dodatkowy obszar 128 komórek pamięci o adresach 80H...FFH pokrywających się z obszarem adresowym rejestrów SFR o czym wspomniano już wcześniej. Tych komórek pamięci nie można adresować bezpośrednio (podając w instrukcji ich adresy) lecz pośrednio za pomocą rejestrów R0 i R1, np. aby zapisać wartość 3AH do komórki o adresie 82H nie można użyć instrukcji: MOV 82H,#3AH, lecz należy użyć sekwencji instrukcji : MOV R0,#82H MOV @R0,#3AH 2.5. Rejestry SFR Rejestry specjalnego przeznaczenia SFR (ang. Special Function Registers) leżą w obszarze adresowym pamięci wewnętrznej RAM z zakresu: 80H...FFH (rys.6). Niektóre spośród tych rejestrów (np.acc, PSW, PC, SP) omówiono już w p.2.3, zaś inne, związane z obsługą liczników i układu transmisji szeregowej, zostaną omówione dalej. Zestawienie ich na wspólnym rysunku ma taki sens, że pokazuje, iż nie cała przestrzeń adresowa jest wypełniona oraz to, że niektóre spośród nich mają możliwość adresowania bitowego. Dla tych, które posiadają taką możliwość, 16

w odpowiednich "kratkach" bitowych podano adresy bitowe. Jak widać, w niektórych rejestrach bitom tym nadano specjalne nazwy. Są to nazwy zastrzeżone dla programu MSB LSB B F7 F6 F5 F4 F3 F2 F1 F0 F0 Rejestr B ACC E7 E6 E5 E4 E3 E2 E1 E0 E0 Akumulator PSW C AC F0 RS1 RS0 OV - P Słowo stanu procesora D7 D6 D5 D4 D3 D2 D1 D0 D0 TH2 * CD liczn.2-starszy bajt TL2 * CC liczn.2-młodszy bajt RCAP2H * CB Rej.pomocn.liczn.2-starszy bajt RCAP2L * CA Rej.pomocn.liczn.2-młodszy bajt T2CON * TF2 EXF2 RCLK TCLK EXEN2 TR2 C/ T2 CP/ RL2 CF CE CD CC CB CA C9 C8 C8 Rejestr sterujący licznika nr 2 IP - - PT2 PS PT1 PX1 PT0 PX0 Rejestr priorytetów przerwań BF BE BD BC BB BA B9 B8 B8 P3 B7 B6 B5 B4 B3 B2 B1 B0 B0 Port P3 IE EA - ET2 ES ET1 EX1 ET0 EX0 Maska przerwań AF AE AD AC AB AA A9 A8 A8 P2 A7 A6 A5 A4 A3 A2 A1 A0 A0 Port P2 SBUF 99H Rejestr nadajnika/odbiornika SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 9F 9E 9D 9C 9B 9A 99 98 98H Rejestr ster. ukł. tr. szeregowej P1 97 96 95 94 93 92 91 90 90H Port P1 TH1 8DH liczn.1-starszy bajt TH0 8CH liczn.0-starszy bajt TL1 8BH liczn.1-młodszy bajt TL0 8AH liczn.0-młodszy bajt TMOD 89H Rejestr trybu pracy liczn. 0 i 1 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 8F 8E 8D 8C 8B 8A 89 88 88H Rejestr sterujący liczników 0 i 1 PCON SMOD x x x GF1 GF0 PD IDL 87H Rejestr stanów uśpienia ** DPH 83H Rejestr DPTR-starszy bajt DPL 82H Rejestr DPTR- młodszy bajt SP 81H Wskaźnik stosu P0 87 86 85 84 83 82 81 80 80H Port P0 *) dotyczy tylko 8xx2 **) w procesorach HMOS czynny jest tylko SMOD, w CHMOS - wszystkie Rys.6 Zestawienie rejestrów SFR 17

asemblera i nie można ich używać do innych celów np. jako nazw etykiet przy pisaniu programu. Na przykład w celu wyzerowania bitu nr 1 w rejestrze IP można użyć instrukcji: CLR 0B9H lub CLR PT0 lub też : CLR IP.1 2.6. Porty P0...P3 Jak wynika z rys.2, prawie wszystkie porty I/O mogą pełnić funkcje alternatywne, stąd też struktura każdego z portów jest nieco odmienna. Jeśli nie korzysta się z pamięci zewnętrznej, z przerwań i z transmisji szeregowej, wtedy każda linia każdego portu może być wykorzystana albo jako wejście, albo jako wyjście. Jeżeli jednak korzysta się z funkcji alternatywnych, wtedy dana linia nie może pełnić funkcji wejścia lub wyjścia. Na przykład przy współpracy z pamięcią zewnętrzną zajęty jest cały port P0 i część portu P2 - wtedy nie tylko linie zajęte ale również pozostałe wolne linie portu P2 nie mogą być wykorzystane do sterowania urządzeniami zewnętrznymi. Rys.7 Struktura linii portu P0 Strukturę linii portu P0 przedstawiono na rys.7. Jak widać, występuje tam przerzutnik typu D (latch) wchodzący w skład 8 - bitowego rejestru uwidocznionego na rys. 1. Przerzutnik ten poprzez multiplekser MPX steruje tranzystorem wyjściowym 18

T1 z którym związana jest linia P0.x, (x=0...7). Jeżeli procesor nie współpracuje z pamięcią zewnętrzną (S=0), wtedy tranzystor T2 jest wyłączony a wyjście Q przerzutnika połączone z bramką tranzystora T1. Jeżeli więc przerzutnik jest w stanie "0" (tzn.q=1), wtedy tranzystor T1 jest włączony i na wyjściu P0.x uzyskuje się sygnał "0". Jeżeli przerzutnik Q jest w stanie "1" (tzn. Q=0), wtedy tranzystor T1 jest zablokowany i na wyjściu P0.x potencjał jest nieokreślony. Aby uzyskać sygnał logiczny "1" należy wyjście P0.x przyłączyć przez opornik (np.30kω) do napięcia +Vc. Jest to tzw. opornik "Pull - Up" i jego zastosowanie jest niezbędne wtedy, gdy port P0 wykorzystuje się jako port wejściowo - wyjściowy. Wejście D przerzutnika przyłączone jest do odpowiedniej linii wewnętrznej szyny danych i procesor zapisuje informację binarną do tego przerzutnika generując odpowiedni sygnał zapisu na wejściu C przerzutnika. Odczytywanie stanu portu odbywać się może dwojako w zależności od typu instrukcji: albo odczytuje się stan przerzutnika przez bramkę 3-stanową BT1 albo bezpośrednio stan linii P0.x przez bramkę BT2. Istnieje pewna grupa instrukcji zwanych RWM (ang. Read - Write - Modify), w których odczytywany jest i modyfikowany stan portu. W instrukcjach tych odczyt linii I/O następuje przez bramkę BT1. Przykładem instrukcji RWM mogą być: ANL P0,#7FH -odczytaj port P0, wyzeruj bit nr 7 i zapisz wynik ponownie do portu P0. CLR P0.3 -wyzeruj bit nr 3 portu P0 -odbywa się to w ten sposób, że czytany jest cały rejestr portu P0, zerowany jest bit nr 3 i wynik z powrotem zapisywany do rejestru 8- bitowego sterującego portem P0. W pozostałych instrukcjach dotyczących portów nie jest czytany stan rejestru ale bezpośrednio stan linii P0.x przez bramkę BT2. Są to np. instrukcje: MOV R1,P0 -odczytaj port P0 do rejestru R1 ANL A,P0 -wykonaj logiczne AND zawartości akumulatora z zawartością odczytaną bezpośrednio z linii zewnętrznych portu i wynik umieść w akumulatorze. Stan sygnałów P0.x może być niezgodny ze stanem przerzutnika; może to wystąpić wtedy, gdy np. bezpośrednio z końcówki P0.x steruje się bazą tranzystora bipolarnego, co powoduje znaczny spadek sygnału "1" do około 0.7V. Podobny 19

mechanizm odczytu przerzutników lub bezpośrednio linii WE - WY dotyczy także portów P1...P3. Wszystkie przerzutniki we wszystkich portach P0...P3 są ustawiane do stanu "1" po sygnale RESET, a więc tranzystory T1 są wtedy zablokowane i porty są ustawiane jako wejściowe. Rezystancja opornika R (w porcie P0- zewnętrzny) wynosi ok.70kω w stanie statycznym ( w stanach dynamicznych jest kilkanaście razy mniejsza co przyśpiesza przełączanie) i w związku z tym na wszystkich wyprowadzeniach występują sygnały "1". Jeżeli dana linia (dowolnego portu ) ma pracować jako wejście, to nie należy nic robić, wystarczy ją tylko odczytywać wtedy, gdy zachodzi potrzeba, ale jeżeli dana linia pełnić ma funkcję wyjścia, to zazwyczaj przyłączone jest do niej wejście wzmacniacza wykonawczego, który w takim przypadku załączyłby sterowany przez niego element wykonawczy. W tym przypadku należy bezpośrednio jako jedną z pierwszych instrukcji programu wykonać operację zerowania rozważanej linii wyjściowej. Jeżeli port P0 przeznaczony jest do współpracy z pamięcią zewnętrzną, (S=1) wtedy przez multiplekser przechodzą odpowiednie sygnały adresów lub danych (A/D) a wyjście przerzutnika Q jest odłączone. Przy A/D =1 włączony zostaje tranzystor T2 a zablokowany T1, co daje P0.x=1, natomiast przy A/D =0 tranzystor T2 zostaje wyłączony a T1- włączony, co daje sygnał P0.x=0. Wynika stąd, że do współpracy z pamięcią zewnętrzną oporniki "Pull - Up" nie są potrzebne. Rys.8 Struktura linii portu P1 20