Wst臋p
Jednym z najpopularniejszych obecnie mikrokontroler贸w 8-bitowych, jest uk艂ad 8051. Na jego bazie powsta艂a du偶a rodzina mikrokontroler贸w. Poszczeg贸lne uk艂ady rodziny r贸偶ni膮 si臋 mi臋dzy sob膮 zestawem, scalonych razem z procesorem, urz膮dze艅 peryferyjnych. Strona ta ma na celu przedstawienie og贸lnej architektury oraz budowy jednego z najpopularniejszych obecnie: mikrokontroler 8051. Uk艂ad ten jest jedn膮 z najlepszych metod nauczenia si臋 metod i sposob贸w programowania. Mikrokontroler 8051 jest programowany na poziomie asemblera (tzw. J臋zyk programowania niskiego poziomu).Dla u偶ytkownika rozkazy zapisane s膮 w postaci symbolicznej, znacznie czytelniejszej dla cz艂owieka ni偶 ca艂a masa zer i jedynek. Umo偶liwia on r贸wnie偶 prac臋 na komputerze po艂膮czonym z uk艂adem DSM-51 Za pomoc膮 kabla RS232 (port COM1 systemu z wolnym portem komputera). Po w艂膮czeniu zasilania system wypisuje na wy艣wietlaczu: DSM-51 MODE 0 >>PC CONTROL<< i oczekuje na polecenia z komputera. Polecenia te mog膮 by膰 wydawane przez program DSM51.EXE lub DSM51RUN.EXE. S艂u偶膮 one przede wszystkim do przes艂ania programu u偶ytkownika z komputera i uruchomieniu go w systemie DSM-51. Dzi臋ki systemowi transmisji r贸wnoleg艂ej 8255 (zawartym w uk艂adzie) jest mo偶liwe r贸wnie偶 do艂膮czenie do mikrokontrolera zewn臋trznych uk艂ad贸w sterowanych przez system DSM-51. Najprostszym przyk艂adem jest model przedstawiaj膮cy skrzy偶owanie dr贸g, kt贸re po pod艂膮czeniu do uk艂adu steruje sygnalizacj膮 艣wietln膮 skrzy偶owania. Uk艂ad ten posiada mas臋 innych zalet tu nie wymienionych tak wi臋c niew膮tpliwie mikrokontroler 8051 jako jeden z najuniwersalniejszych, a zarazem najprostszych urz膮dze艅 tego typu zas艂uguje na uwag臋 i zainteresowanie.
Podstawowe informacje
Aby pozna膰 i zrozumie膰 dzia艂anie i zastosowania mikrokontrolera 8051 nale偶y najpierw zrozumie膰 czym s膮 mikrokontrolery oraz czym r贸偶ni膮 si臋 one od mikroprocesor贸w. Tak wi臋c mikrokontroler to pojedynczy uk艂ad scalony, w kt贸rym w jednej strukturze zawarto mikroprocesor oraz pewien zestaw cz臋sto potrzebnych element贸w zewn臋trznych. Takie po艂膮czenie umo偶liwia budow臋 kompletnych sterownik贸w mikroprocesorowych, w kt贸rych wszystkie funkcje spe艂nia jeden uk艂ad scalony.
Z kolei mikroprocesor (碌P) jest automatem sekwencyjnym, synchronicznym wykonuj膮cym do艂膮czony z zewn膮trz program. Cz臋stotliwo艣膰 zegara 碌P. decyduj膮ca m.in. o szybko艣ci pracy jest ograniczona zawsze od g贸ry i przewa偶nie od do艂u. Wykonywany program sk艂ada si臋 z tzw. rozkaz贸w (instrukcji), s膮 to niepodzielne dla programisty czynno艣ci, kt贸re mo偶e wykona膰 碌P. Zwykle wyst臋puj膮 碌P. z tzw. sta艂膮 list膮 instrukcji narzucon膮 przez projektanta 碌P. kt贸ra mo偶e by膰 albo uniwersalna albo zorientowana (np. w kierunku przetwarzania danych, sterowania, przetwarzania sygna艂贸w analogowych w postaci cyfrowej). Ponadto wyst臋puj膮 tak偶e rozwi膮zania w kt贸rych wykorzystuj膮cy 碌P. definiuje w艂asn膮 list臋 rozkaz贸w, sk艂adaj膮c je z czynno艣ci prostych. Sekwencje tych czynno艣ci s膮 zawarte w do艂膮czonej zewn臋trznie, tzw. sta艂ej pami臋ci mikroprogramu. W 碌P. o sta艂ej li艣cie instrukcji pami臋膰 taka znajduje si臋 wewn膮trz struktury. Namiastk膮 w艂asnych rozkaz贸w s膮 tak zwane emulatory, tj. Instrukcje wywo艂uj膮ce zdefiniowan膮 wcze艣niej sekwencj臋 rozkaz贸w nie na zasadzie instrukcji CALL, lecz posi艂kuj膮c si臋 numerem emulatora (adres znajduje si臋 w tabeli stan贸w wyj膮tkowych). W zale偶no艣ci od tego ile bit贸w mo偶e r贸wnolegle przetwarza膰 碌P. m贸wimy o uk艂adach 4, 8, 12, 16, 32, 64-bitowych. Aby powsta艂 system 碌P. musimy do艅 do艂膮czy膰 pami臋膰 programu, pami臋膰 danych i niezb臋dne uk艂ady peryferyjne (wej艣cia / wyj艣cia). W sk艂ad typowego 碌P. wchodz膮 nast臋puj膮ce podzespo艂y:
飩 Licznik programu PC (program counter). S艂u偶y do adresacji pobieranego przez 碌P. kodu programu z do艂膮czonej pami臋ci.
飩 Uk艂ad arytmetyczno-logiczny ALU. Z tym uk艂adem wykonawczym zwi膮zany jest rejestr tzw. bit贸w warunkowych (statusowy, flagowy), kt贸rego poszczeg贸lne bity informuj膮 o efekcie przeprowadzonej w ALU operacji.
飩 Wska藕nik stosu SP (stack pointer). Podstawowym zastosowaniem SP jest zapami臋tywanie adresu powrotnego przy wywo艂aniu z r贸偶nych miejsc tej samej procedury.
飩 Rejestry. Rejestry wewn臋trzne dost臋pne software'owo s艂u偶膮 do chwilowego przechowywania danych, adres贸w, tzw. przesuni臋膰, b膮d藕 warto艣ci indeksuj膮cych co zwi膮zane jest z r贸偶nymi trybami adresacji argument贸w.
飩 Uk艂ady sterowania, synchronizacji, zegarowe, multipleksery, bufory szyn zewn臋trznych, dekodery instrukcji, kt贸re zapewniaj膮 w艂a艣ciwe dzia艂anie 碌P., uk艂ady te z oczywistych wzgl臋d贸w nie wyst臋puj膮 w zapisie kodu program贸w. 碌P. 艂膮czy si臋 z pami臋ciami i uk艂adami we. / wy. Za pomoc膮 szeregu sygna艂贸w (jedno-, dwukierunkowe, tr贸jstanowe, typu otwarty kolektor OC). Sygna艂y te 艂膮czymy w zespo艂y funkcjonalne tzw. szyny. Wyr贸偶niamy szyny:
- adresow膮
- danych
- steruj膮c膮
Pozosta艂e cechy uk艂adu 8051 to:
飩 rozbudowane zasoby wewn臋trzne (np. programowalne uk艂ady czasowe, uk艂ad transmisji szeregowej, uk艂ad przerwa艅, wewn臋trzna pami臋膰 programu i danych),
飩 mo偶liwo艣膰 do艂膮czenia zewn臋trznej pami臋ci programu i danych po 64 kB ka偶da,
飩 rozwini臋ta, jednolita lista rozkaz贸w.
Wady uk艂adu to:
飩 brak mo偶liwo艣ci wsp贸艂pracy z innymi uk艂adami czynnymi (np. DMA) na wsp贸lnej szynie,
飩 brak mo偶liwo艣ci wsp贸艂pracy z wolnymi uk艂adami we/wy i wolnymi pami臋ciami.
Mikrokomputery rodziny MCS-51 s膮 aktualnie produkowane w wielu odmianach przez wiele firm. Poszczeg贸lne uk艂ady s膮 jednak zgodne pod wzgl臋dem programowym z ich pierwowzorem, zazwyczaj posiadaj膮 jakie艣 dodatkowe elementy lub rozbudowane zasoby 8051.
Opis wyprowadze艅 mikrokontrolera 8051
Porty s膮 to wyprowadzenia 8-bitowe. Port mo偶e pe艂ni膰 role wyj艣cia informacji binarnej. Tak wi臋c, je偶eli zachodzi potrzeba procesor mo偶e wpisa膰 do portu dowoln膮 liczb臋 binarn膮 z zakresu 0...255, np. 48 (binarnie 48=00110000). Ko艅c贸wki dowolnego portu procesora mog膮 pe艂ni膰 zar贸wno rol臋 wej艣膰 jak i wyj艣膰.
1. PORT 1 (P1) to ko艅c贸wki o numerach 1...8
- Oznaczenia poszczeg贸lnych ko艅c贸wek portu P1 wskazuj膮 nam kolejn膮 pozycje bitu. Istotn膮 zalet膮 port贸w uniwersalnych procesora (w tym tak偶e P1) jest mo偶liwo艣膰 indywidualnego ustawiania poziomu logicznego na ka偶dym wyprowadzeniu nie zale偶nie. Nie trzeba zatem zapisywa膰 ca艂ej liczby do portu aby np. zmieni膰 stan tylko na jednym wyprowadzeniu, wystarczy ustawi膰 w (rozkazem SETB) lub wyzerowa膰 (rozkazem (CLR)odpowiedni bit rejestru portu P1. Port mo偶na ustawi膰 tak偶e jako wej艣cie informacji logicznej. Ka偶de z wyprowadze艅 staje si臋 wtedy wyj艣ciem o wysokiej impedancji, dzi臋ki temu dowolny poziom logiczny podany z wyj艣cia jakiego艣 uk艂adu cyfrowego mo偶e by膰 odczytany poprzez piny portu a informacja czy tym stanem by艂a logiczna "1" czy "0" zostaje wykorzystana przez procesor dla dalszego jego dzia艂ania w zale偶no艣ci od spe艂nianej funkcji. Procesor mo偶e odczyta膰 stany logiczne, jakie z zewn膮trz podano na ko艅c贸wki portu.. poziomy logiczne napi臋膰 wej艣ciowych port贸w musz膮 zawiera膰 si臋 w przedziale napi臋膰 mikrokontrolera, czyli w zakresie 0...5V. detekcja poziom贸w logicznych odbywa si臋 jak dla bramek CMOS, st膮d warto艣ci progowe napi臋膰 tych stan贸w s膮 zbli偶one do po艂owy napi臋cia zasilaj膮cego. W trybie odczytu z portu P1 ko艅c贸wki s膮 wewn臋trznie podczepiane do plusa zasilania poprzez wbudowane w 80C51 rezystory co wymusza odczyt wysoki z portu w wypadku nie pod艂膮czenia ko艅c贸wki portu .
2. PORT 3 (P3) to ko艅c贸wki o numerach 10...17
- podobnie jak w przypadku portu P1, port P3 mo偶e by膰 wyj艣ciem lub wej艣ciem..
- pinyP3.0(RXD) i P3.1(TXD) mog膮 pe艂ni膰 rol臋 portu transmisji szeregowej.
W praktyce poprzez te dwa wyprowadzenia mo偶na przes艂a膰 informacj臋 (bajty i bity) z i do procesora z innych uk艂ad贸w cyfrowych w spos贸b szeregowy, tzn. bit po bicie.
- alternatywn膮 funkcj膮 ko艅c贸wek P3.2 (INTO\ ) oraz P3.3 (INT1) jest funkcja detekcji przerwa艅 zewn臋trznych. Przerwanie w tym przypadku odnosi si臋 do zmiany stanu logicznego ( na omawianym wyprowadzeniu P3.2 lub P3.3) z "1" na "0". W efekcie "we wn臋trzu" procesora 8051 zosta艂a ustawiona tak zwana flaga - znacznik zg艂oszenia przerwania.
- ko艅c贸wki (P3.4 i P3.5) oznaczone na diagramie z rysunku 2 jako T0 i T1 pe艂ni膮 dodatkow膮 funkcj臋 wej艣膰 uniwersalnych, programowalnych licznik贸w wbudowanych w struktur臋 8051. Procesor 80C51 zawiera dwa bli藕niacze liczniki T0 iT1 maksymalnie mog膮 one zlicza膰 do 216= 65536, po czym zostaj膮 wyzerowane liczniki. Liczniki te opr贸cz zliczania impuls贸w z wej艣膰 T0 i T1 mog膮 tak偶e zlicza膰 impulsy wewn臋trzne, pochodz膮ce z generatora mikrokontrolera. Liczniki mog膮 by膰 programowane przez u偶ytkownika a wi臋c mo偶na np. zmniejszy膰 ich pojemno艣膰 do 28 lub 213 , mo偶na tak偶e zapisa膰 w nich warto艣膰 pocz膮tkow膮 lub zatrzyma膰 je w dowolnym momencie lub uruchomi膰.
- ko艅c贸wki P3.6 (WR\) i P3.7(RD\) pin WR\ jest sygna艂em zapisu do zewn臋trznej pami臋ci danych , a ko艅c贸wka RD\ wysy艂a sygna艂 do odczytu.. W praktycznych zastosowaniach jako elementy pami臋ci wykorzystuje si臋 uk艂ady statycznych RAM - czyli w skr贸cie SRAM. Procesor potrafi zaadresowa膰 maksymalnie 65536 kom贸rek pami臋ci (bajt贸w).
3. PORT 2 (P2) to ko艅c贸wki o numerach 21...28
- s膮 to wyprowadzenia drugiego 8- bitowego portu procesora.
- port P2 spe艂nia wszystkie funkcje podobnie jak P1.
- dodatkowo przez ko艅c贸wki portu P2 podawane jest w razie potrzeby starsza cz臋艣膰 adresu (A8...A15) przy dost臋pie do zewn臋trznej pami臋ci danych (SRAM) a tak偶e programu (np. EPROM).
4. PORT 0 (P0) to ko艅c贸wki o numerach 32...39
- podstawowe funkcje portu jako dwukierunkowej bramy do wymiany danych s膮 takie same jak w przypadku port贸w P1 i P2
- r贸偶nic膮 jest zwi臋kszona obci膮偶alno艣膰 tego portu oraz fakt nie posiadania wbudowanych rezystor贸w podci膮gaj膮cych ko艅c贸wki portu do plusa zasilania w wypadku odczytu.. Bardzo wa偶n膮 rol臋 jak膮 pe艂ni P0, jest funkcja multipleksowanej magistrali danych i m艂odszej cz臋艣ci adresu. multipleksowanej w praktyce znaczy prze艂膮czalnej czyli raz na ko艅c贸wkach portu P0 procesor mo偶e wystawi膰 bajt danych np. do zapisu zewn臋trznej pami臋ci danych, w innym przypadku adres w celu wybrania potrzebnej kom贸rki pami臋ci SRAM do kt贸rej ma by膰 zapisana.
5. Ko艅c贸wka 9 (RST) czyli reset.
- powoduje skasowanie uk艂adu, a wi臋c natychmiastowe przerwanie wykonywanych czynno艣ci i rozpocz臋cie cyklu dzia艂ania procesora od samego pocz膮tku (od w艂膮czenia zasilania uk艂adu). Czas trwania dodatniego impulsu kasuj膮cego zale偶y od cz臋stotliwo艣ci z jak膮 pracuje mikroprocesor. Z regu艂y w typowych zastosowaniach czas 1ms zupe艂nie wystarczy. W uk艂adach praktycznych RST do艂膮czamy uk艂ad kt贸ry generuje wymagany impuls zeruj膮cy. G艂贸wnym elementem uk艂adu "reset" jest kondensator elektrolityczny warto艣膰 jego wynosi od 10 do 22 F jest on niezb臋dny do prawid艂owej generacji impulsu resetu przez uk艂ady wewn臋trzne mikrokontrolera. Widoczny na rysunku klawisz s艂u偶y do resetowania procesora bez konieczno艣ci wy艂膮czania napi臋cia zasilaj膮cego.
6. Ko艅c贸wki 18 i 19 (XTAL1 i XTAL2)
- ko艅c贸wki te s艂u偶膮 do 艂膮czenia zewn臋trznego rezonatora kwarcowego o cz臋stotliwo艣ci zale偶nej od potrzeb u偶ytkownika, ale tak偶e od wersji uk艂adu 8051. W praktyce cz臋stotliwo艣膰 ta mo偶e wynosi膰 od 1,2MHz do 12...16MHz. do艂膮czony do tych pin贸w rezonator kwarcowy umo偶liwia prac臋 wbudowanemu w 8051 generatorowi, kt贸ry "nap臋dza" ca艂y mikroprocesor. Od cz臋stotliwo艣ci rezonatora 艣ci艣le zale偶y szybko艣膰 dzia艂ania mikrokontrolera .
7. Ko艅c贸wka 20 (Vss)
- ko艅c贸wka ujemnego napi臋cia zasilaj膮cego - masy (GND)
8. Ko艅c贸wka 29 (PSEN\)
- w przypadku pracy procesora z zewn臋trzn膮 pami臋ci膮 programu (np. EPROM) ko艅c贸wka ta wysy艂a sygna艂 odczytu z tej pami臋ci. W praktyce jest do艂膮czona do wej艣cia OE\ wsp贸艂pracuj膮cej pami臋ci EPROM. Procesor chc膮c odczyta膰 kolejne rozkazy z zewn臋trznej pami臋ci programu podaje poziom niski na ko艅c贸wk臋 "PSEN" a nast臋pnie dokonuje odczytu .
9. Ko艅c贸wka 30 (ALE)
- sygna艂 pojawiaj膮cy si臋 na tym wyprowadzeniu mo偶na nazwa膰 "sygna艂em zapisu adresu" do dodatkowego zewn臋trznego uk艂adu.
10. Ko艅c贸wka 31 (EA\)
- powinna by膰 do艂膮czona do masy je偶eli mikroprocesor pobiera rozkazy w zewn臋trznej pami臋ci programu lub do plusa zasilania (+5V) je偶eli z wewn臋trznej. W pewnych uk艂adach procesor pomimo 偶e posiada wewn臋trzn膮 pami臋膰 programu , ze wzgl臋du na zbyt ma艂膮 pojemno艣膰 musi si臋ga膰 do zewn臋trznej pami臋ci w takim przypadku pin EA\ powinien by膰 do艂膮czony do plusa zasilania , tak aby procesor po jego "resecie" m贸g艂 rozpocz膮膰 prac臋 pobieraj膮c rozkazy z wbudowanej pami臋ci programu. Do艂膮czenie pinu EA\ do masy blokuje wewn臋trzn膮 pami臋膰 programu.
11. Ko艅c贸wka 40 (Vcc)
- ko艅c贸wka zasilania mikroprocesora 8051. Napi臋cie wzgl臋dem ko艅c贸wki Vss (czyli masy) z regu艂y nie mo偶e przekroczy膰 6,5V .Dlatego uk艂ad mikrokontrolera zasilany jest napi臋ciem 5V 0,25V.
Architektura mikrokontrolera 8051
W mikrokontrolerze 8051 mo偶emy wyr贸偶ni膰 nast臋puj膮ce bloki:
Rysunek przedstawia uproszczony schemat blokowy mikrokontrolera 8051.
Cykl maszynowy mikrokontrolera 8051 sk艂ada si臋 z sze艣ciu stan贸w oznaczonych S1 do S6. Ka偶dy ze stan贸w trwa dwa okresy sygna艂u taktuj膮cego, oznaczonych jako fazy P1 i nbsp;P2. Wynika z nbsp;tego, 偶e czas trwania cyklu maszynowego wynosi 12 takt贸w zegara, co dla cz臋stotliwo艣ci rezonatora r贸wnej 12MHz daje czas 1us. Czas wykonywania instrukcji wynosi jeden, dwa lub cztery cykle maszynowe, w zale偶no艣ci od instrukcji. Na rysunku przedstawiono cztery r贸偶ne cykle rozkazowe dla czterech r贸偶nych instrukcji.
Przebieg a) przedstawia cykl rozkazowy instrukcji jednobajtowej wykonywanej w nbsp;pojedynczym cyklu maszynowym, przebieg b) przedstawia przypadek wykonywania instrukcji dwubajtowej wykonywanej w pojedynczym cyklu maszynowym, przebieg c) obrazuje wykonanie instrukcji jednobajtowej wykonywanej w nbsp;ci膮gu dw贸ch cykli maszynowych.
W zwi膮zku z nbsp;multipleksowaniem szyny adresowej A0-A7 i szyny danych, mikrokontroler musi generowa膰 dodatkowy sygna艂 steruj膮cy zewn臋trznym buforem zatrzaskowym - tym sygna艂em jest ALE. Sygna艂 ten jest generowany podczas pobierania ka偶dego s艂owa rozkazu dwukrotnie w ka偶dym cyklu maszynowym. Wyj膮tek stanowi rozkaz MOVX (oraz MOVC przy dost臋pie do zewn臋trznej pami臋ci programu) realizuj膮cy dost臋p do pami臋ci zewn臋trznej. Instrukcja ta jest jednobajtowa, wykonywana w nbsp;dw贸ch cyklach maszynowych. W nbsp;pierwszym cyklu nast臋puje odczyt kodu instrukcji (pierwszy sygna艂 ALE) oraz ustawienie adresu 偶膮danej kom贸rki pami臋ci (drugi sygna艂 ALE). W nbsp;drugim cyklu maszynowym nast臋puje odczyt/zapis szyny danych - nie mo偶e w贸wczas wyst膮pi膰 sygna艂 ALE, gdy偶 zniszczy艂by on nbsp; wcze艣niej ustawiony adres kom贸rki pami臋ci.
ARYTMOMETR
Podstawowymi elementami sk艂adowymi arytmometru s膮:
8-bitowa jednostka arytmetyczno-logiczna z uk艂adem korekcji dziesi臋tnej,
rejestry pomocnicze u偶ywane przy wykonywaniu oblicze艅 (niedost臋pne dla programisty),
dekoder rozkaz贸w.
Z arytmometrem wsp贸艂pracuj膮 ponadto dwa rejestry bloku rejestr贸w specjalnych: akumulator (ACC) irejestr B. Akumulator najcz臋艣ciej zawiera jeden zoperand贸w i zapisywany jest w nim wynik operacji, rejestr B jest natomiast wykorzystywany przy operacjach mno偶enia i dzielenia.
Argumentami operacji wykonywanych przez arytmometr mog膮 by膰 r贸wnie偶 inne rejestry specjalne, kom贸rki pami臋ci lub dane podawane bezpo艣rednio.
Arytmometr mo偶e wykonywa膰 nast臋puj膮ce operacje za argumentach o艣miobitowych:
dodawanie,
dodawanie z nbsp;przeniesieniem,
odejmowanie z nbsp;po偶yczk膮,
inkrementacja,
dekrementacja,
mno偶enie w nbsp;naturalnym kodzie binarnym daj膮ce 16-bitowy wynik,
dzielenie w nbsp;naturalnym kodzie binarnym daj膮ce 8-bitowy wynik i nbsp;8-bitow膮 reszt臋,
iloczyn logiczny, suma logiczna i nbsp;suma modulo 2,
zerowanie, negacja i nbsp;rotacja zawarto艣ci akumulatora,
korekcja dziesi臋tna zawarto艣ci akumulatora.
Arytmometr mo偶e wykonywa膰 operacje logiczne r贸wnie偶 na pojedynczych bitach. Dla tych operacji akumulatorem jest bit przeniesienia C s艂owa stanu PSW.
Rejestr specjalny PSW nbsp; bezpo艣rednio wsp贸艂pracuje z nbsp;arytmometrem. Jego zawarto艣膰 opisuje cechy wyniku ostatnio wykonywanej operacji.
bit 7 |
bit 6 |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit 1 |
bit 0 |
C |
AC |
F0 |
RS1 |
RS0 |
OV |
- |
P |
S艂owo stanu PSW |
Znaczenie poszczeg贸lnych bit贸w jest nast臋puj膮ce:
P (ang. parity) - znacznik parzysto艣ci; ustawiony na "1" informuje o nbsp;nieparzystej liczbie jedynek w nbsp;akumulatorze. Jest ustawiany po wykonaniu ka偶dego rozkazu, w nbsp;zale偶no艣ci od zawarto艣ci akumulatora.
OV (ang. overflow) - znacznik nadmiaru dla dodawania i odejmowania w nbsp;kodzie U2. Dla mno偶enia "1" wskazuje niezerow膮 warto艣膰 rejestru B, dla dzielenia "1" oznacza wyst膮pienie dzielenia przez zero.
RS0, RS1 - bity wyboru bloku rejestr贸w roboczych.
RS1 |
RS0 |
Wybrany blok: |
0 |
0 |
blok 0 |
0 |
1 |
blok 1 |
1 |
0 |
blok 2 |
1 |
1 |
blok 3 |
Znaczenie bit贸w RS0 i RS1 |
F0 - znacznik uniwersalny do dowolnego wykorzystania.
AC (ang. auxiliary carry) - znacznik przeniesienia po艂贸wkowego; ustawiany w nbsp;przypadku wyst膮pienia przeniesienia z nbsp;ACC.3 na ACC.4.
C (ang. carry) - znacznik przeniesienia; ustawiany w przypadku wyst膮pienia przeniesienia z nbsp;pozycji si贸dmego bitu akumulatora.
Pami臋膰 danych
Na wewn臋trzn膮 pami臋膰 danych sk艂adaj膮 si臋 dwa bloki: 128 bajt贸w ci膮g艂ego obszaru pami臋ci RAM oraz obszar 128 bajt贸w niesp贸jnego bloku rejestr贸w specjalnych (SFR) mikrokontrolera.
Adresy 48-127 (30H-7FH) |
Pami臋膰 danych u偶ytkownika |
Adresy 32-47 (20H-2FH) |
Pami臋膰 adresowana bitowo (adresy 0-127 (0H-7FH)) |
Adresy 24-31 (18H-1FH) |
Rejestry R0-R7 - blok 3 |
Adresy 16-23 (10H-17H) |
Rejestry R0-R7 - blok 2 |
Adresy 8-15 (8H-0FH) |
Rejestry R0-R7 - blok 1 |
Adresy 0-7 (0H-7H) |
Rejestry R0-R7 - blok 0 |
Mapa pami臋ci RAM mikrokontrolera 8051. |
Obszar od adresu 0 do 31 (0H-1FH) zajmuj膮 cztery banki rejestr贸w roboczych, po osiem rejestr贸w w banku (wybierane bitami RS1 i RS0 rejestru PSW). Rejestry te maj膮 oznaczenia R0 do R7 i mog膮 by膰 wykorzystywane do przechowywania danych. Wyj膮tek stanowi膮 rejestry R0 i R1 ka偶dego bloku, kt贸re mog膮 by膰 wykorzystane do indeksowego adresowania wewn臋trznej i zewn臋trznej pami臋ci danych. Po wyzerowaniu mikrokontrolera sygna艂em RST u偶ytkownik ma do dyspozycji blok 0.
Obszar pami臋ci o adresach 32-47(20H-2FH) mo偶e by膰 u偶ywany do przechowywania dowolnych danych wykorzystywanych wprogramie. Cech膮 tego obszaru jest to, 偶e mo偶liwe jest zaadresowanie pojedynczego bitu kom贸rki pami臋ci. Bity te s膮 dost臋pne pod adresami 0-127 (0H-7FH), aadres bitu, kt贸ry chcemy zaadresowa膰, mo偶na okre艣li膰 przy u偶yciu wzoru: (n-32)*8+i, gdzie n jest adresem s艂owa pami臋ci, a i jest numerem bitu w tym s艂owie. Wynika z tego, 偶e adresy te pokrywaj膮 si臋 z adresami kom贸rek pami臋ci, jednak nie stanowi to przeszkody, gdy偶 do pojedynczych bit贸w odwo艂uj膮 si臋 specyficzne rozkazy mikrokontrolera, co pozwala jednoznacznie stwierdzi膰 czy adresowana jest kom贸rka czy pojedynczy bit.
Obszar pami臋ci o adresach 48-127 (30H-7FH) nie posiada ju偶 偶adnych specyficznych w艂asno艣ci i wykorzystywany jest jak zwyk艂a pami臋膰 o organizacji bajtowej.
Mimo r贸偶nych w艂asno艣ci poszczeg贸lnych obszar贸w pami臋ci, ca艂a pami臋膰 mo偶e by膰 adresowana jak pami臋膰 o bajtowej organizacji w spos贸b bezpo艣redni lub indeksowy przy u偶yciu rejestr贸w R0 i R1.
W wewn臋trznej pami臋ci danych umieszczany jest stos programu. Mo偶e on by膰 umieszczony w dowolnym miejscu przez zapis odpowiedniego adresu do rejestru SP b臋d膮cego wska藕nikiem stosu, jednak po wyzerowaniu mikrokontrolera sygna艂em RST wska藕nik stosu przyjmuje warto艣膰 7. SP nale偶y do bloku rejestr贸w specjalnych, a jego zawarto艣膰 wskazuje na ostatnie zaj臋te s艂owo stosu. Wska藕nik stosu jest inkrementowany przed ka偶dym zapisem na stos i dekrementowany po ka偶dym odczycie.
Opr贸cz pami臋ci wewn臋trznej danych mo偶liwe jest do艂膮czenie do mikrokontrolera zewn臋trznej pami臋ci danych o pojemno艣ci do 64kB. Poniewa偶 mikrokontroler nie posiada osobnych rozkaz贸w do dost臋pu do urz膮dze艅 wej艣cia-wyj艣cia, to w obszarze adresowym 64kB zewn臋trznej pami臋ci danych mog膮 by膰 r贸wnie偶 umieszczane rejestry do艂膮czanych do systemu urz膮dze艅 we/wy.
Blok rejestr贸w specjalnych mikrokontrolera 8051
Blok rejestr贸w specjalnych (SFR; ang. Special Function Registers) znajduje si臋 w niesp贸jnym obszarze pami臋ci danych mikrokontrolera o adresach 128-240 (80H-0F0H). Obszar rejestr贸w SFR mikrokontrolera '51 jest wykorzystywany dwojako - z jednej strony umieszczone s膮 w nim wszystkie (za wyj膮tkiem licznika rozkaz贸w i czterech bank贸w rejestr贸w R0-R7) rejestry steruj膮ce prac膮 mikrokontrolera lub wykorzystywane bezpo艣rednio przy wykonywaniu programu; z drugiej za艣 strony rejestry SFR stanowi膮 rodzaj interfejsu pomi臋dzy mikroprocesorem a uk艂adami peryferyjnymi umieszczonymi wewn膮trz mikrokontrolera. Wszystkie operacje sterowania wewn臋trznymi uk艂adami peryferyjnymi oraz przesy艂ania danych mi臋dzy nimi a CPU, odbywaj膮 si臋 w艂a艣nie za po艣rednictwem rejestr贸w SFR. Dost臋p do ka偶dego z tych rejestr贸w mo偶liwy jest wy艂膮cznie w trybie adresowania bezpo艣redniego. Nazwy rejestr贸w SFR s膮 zazwyczaj nazwami predefiniowanymi w asemblerach mikrokontroler贸w rodziny '51, wi臋c najcz臋艣ciej nie trzeba zna膰 adresu danego rejestru - wystarczy pami臋ta膰 jego nazw臋.
Nazwa |
Adres |
Pe艂niona funkcja |
P0 |
128 (80H) |
Port we/wy 0 |
SP |
129 (81H) |
Wska藕nik stosu |
DPL |
130 (82H) |
Rejestr indeksowy DPTR (mniej znacz膮cy bajt) |
DPH |
131 (83H) |
Rejestr indeksowy DPTR (bardziej znacz膮cy bajt) |
PCON |
135 (87H) |
Rejestr steruj膮cy stanami u艣pienia |
TCON |
136 (88H) |
Rejestr steruj膮cy uk艂ad贸w czasowych 0 i 1 |
TMOD |
137 (89H) |
Rejestr trybu pracy uk艂ad贸w czasowych 0 i 1 |
TL0 |
138 (8AH) |
Rejestr danych uk艂adu czasowego 0 (mniej znacz膮cy) |
TL1 |
139 (8BH) |
Rejestr danych uk艂adu czasowego 1 (mniej znacz膮cy) |
TH0 |
140 (8CH) |
Rejestr danych uk艂adu czasowego 0 (bardziej znacz膮cy) |
TH1 |
141 (8DH) |
Rejestr danych uk艂adu czasowego 1 (bardziej znacz膮cy) |
P1 |
144 (90H) |
Port we/wy 1 |
SCON |
152 (98H) |
Rejestr steruj膮cy uk艂adu transmisji szeregowej |
SBUF |
153 (99H) |
Rejestr danych uk艂adu transmisji szeregowej |
P2 |
160 (0A0H) |
Port we/wy 2 |
IE |
168 (0A8H) |
Rejestr maski przerwa艅 |
P3 |
176 (0B0H) |
Port we/wy 3 |
IP |
184 (0B8H) |
Rejestr priorytet贸w przerwa艅 |
PSW |
208 (0D0H) |
S艂owo stanu procesora |
ACC |
224 (0E0H) |
Akumulator |
B |
240 (0F0H) |
Rejestr og贸lnego przeznaczenia |
Rejestry specjalne mikrokontrolera 8051. |
Dodatkowo wszystkie rejestry umieszczone pod adresami podzielnymi przez 8 dost臋pne s膮 tak偶e bitowo. Adres okre艣lonego bitu mo偶na okre艣li膰 pos艂uguj膮c si臋 zale偶no艣ci膮 adres=m+n, gdzie "m" jest adresem rejestru SFR, a "n" jest numerem adresowanego bitu (licz膮c od 0).
Rejestry SFR adresowalne bitowo.
Nazwy i adresy poszczeg贸lnych bit贸w.
SFR |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
P0 |
P0.7 |
P0.6 |
P0.5 |
P0.4 |
P0.3 |
P0.2 |
P0.1 |
P0.0 |
TCON |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
P1 |
P1.7 |
P1.6 |
P1.5 |
P1.4 |
P1.3 |
P1.2 |
P1.1 |
P1.0 |
SCON |
SM0 |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
Ti |
RI |
P2 |
P2.7 |
P2.6 |
P2.5 |
P2.4 |
P2.3 |
P2.2 |
P2.1 |
P2.0 |
IE |
EA |
- |
ET2 |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
P3 |
P3.7 |
P3.6 |
P3.5 |
P3.4 |
P3.3 |
P3.2 |
P3.1 |
P3.0 |
IP |
- |
- |
PT2 |
PS |
PT1 |
PX1 |
PT0 |
PX0 |
PSW |
C |
AC |
F0 |
RS1 |
RS0 |
OV |
- |
P |
ACC |
ACC.7 |
ACC.6 |
ACC.5 |
ACC.4 |
ACC.3 |
ACC.2 |
ACC.1 |
ACC.0 |
B |
B.7 |
B.6 |
B.5 |
B.4 |
B.3 |
B.2 |
B.1 |
B.0 |
Niekt贸re spo艣r贸d rejestr贸w SFR, kt贸re nie s膮 aktualnie wykorzystywane do sterowania zasobami mikrokontrolera mo偶na wykorzysta膰 jako pami臋膰 o dost臋pie bezpo艣rednim, jednak pod warunkiem, 偶e zmiana zawarto艣ci danego rejestru nie wp艂ynie na prac臋 programu i funkcjonowanie mikrokontrolera
Pami臋膰 programu mikrokontrolera 8051
Standardowy mikrokontroler 8051 posiada 4KB pami臋ci programu typu ROM programowane mask膮. Niekt贸re wersje uk艂adu posiadaj膮 pami臋膰 EPROM lub EEPROM. Pami臋膰 programu przechowuje kody operacji przeznaczonych do wykonania przez mikroprocesor, mo偶e tak偶e s艂u偶y膰 do przechowywania sta艂ych u偶ywanych w programie. Pami臋膰 programu adresowana jest przez 16-bitowy licznik rozkaz贸w (PC, ang. Program Counter). Mikrokontroler 8051 mo偶e tak偶e korzysta膰 z zewn臋trznej pami臋ci programu o pojemno艣ci do 64KB. To, z kt贸rej z tych pami臋ci pobierane s膮 rozkazy zale偶y od stanu wyprowadzenia EA'. W przypadku korzystania z wewn臋trznej pami臋ci programu, wyprowadzenie EA' musi by膰 ustawione w stan wysoki. Je艣li pojemno艣膰 wewn臋trznej pami臋ci programu jest niewystarczaj膮ca, cz臋艣膰 programu mo偶e by膰 umieszczona w pami臋ci zewn臋trznej. W贸wczas dop贸ki warto艣膰 licznika rozkaz贸w nie przekracza rozmiaru wewn臋trznej pami臋ci programu, rozkazy pobierane s膮 z pami臋ci wewn臋trznej. Przekroczenie przez licznik rozkaz贸w warto艣ci 0FFFH powoduje pobieranie rozkaz贸w z zewn臋trznej pami臋ci programu. Je艣li mikrokontroler ma korzysta膰 wy艂膮cznie z zewn臋trznej pami臋ci programu, wyprowadzenie EA' musi by膰 ustawione w stan niski. W wi臋kszo艣ci mikrokontroler贸w rodziny '51 wyprowadzenie EA' nie posiada wewn臋trznego rezystora podci膮gaj膮cego i nie mo偶e pozostawa膰 nie pod艂膮czone ("wisie膰 w powietrzu").
Zerowanie (RST) mikrokontrolera powoduje ustawienie licznika rozkaz贸w w stan 0000H, tak wi臋c pocz膮tek programu musi by膰 umieszczony pod adresem 0000H. Zwykle umieszczana jest tam instrukcja skoku do dalszego obszaru pami臋ci programu, poniewa偶 pocz膮wszy od adresu 0003H pierwsze kilkadziesi膮t bajt贸w wykorzystywane jest przez procedury obs艂ugi przerwa艅:
Adres |
Zawarto艣膰 |
0003H |
Pocz膮tek procedury obs艂ugi przerwania zewn臋trznego INT0' |
000BH |
Pocz膮tek procedury obs艂ugi przerwania z uk艂adu czasowego T0 |
0013H |
Pocz膮tek procedury obs艂ugi przerwania zewn臋trznego INT1' |
001BH |
Pocz膮tek procedury obs艂ugi przerwania z uk艂adu czasowego T1 |
0023H |
Pocz膮tek procedury obs艂ugi przerwania z uk艂adu transmisji szeregowej |
Umieszczenie procedur obs艂ugi przerwa艅 8051 w pami臋ci programu. |
PC zawiera adres aktualnego rozkazu przeznaczonego do wykonania. Rozkaz ten jest pobierany z pami臋ci do rejestru rozkaz贸w (rejestr ten nie jest dost臋pny programowo). Na podstawie zawarto艣ci rejestru rozkaz贸w, dekoder rozkaz贸w steruje wyborem 藕r贸d艂a argumentu, miejsca umieszczenia wyniku, funkcjami arytmometru itp. - w ten spos贸b mikroprocesor wykonuje zadan膮 operacj臋. Je偶eli nie jest wykonywany rozkaz skoku, to zawarto艣膰 licznika rozkaz贸w jest inkrementowana po odczycie ka偶dego bajtu z pami臋ci programu.
Porty wej艣cia/wyj艣cia mikrokontrolera 8051
Linie we/wy mikrokontrolera 8051 pogrupowane s膮 w cztery 8-bitowe porty:
Wszystkie linie port贸w P0-P3 pracuj膮ce jako standardowe linie wej艣cia/wyj艣cia s膮 niezale偶ne pod wzgl臋dem kierunku przesy艂ania informacji. Rejestry P0-P3 z艂o偶one z przerzutnik贸w poszczeg贸lnych linii wchodz膮 w sk艂ad bloku rejestr贸w specjalnych, przy czym mo偶liwe jest adresowanie ich poszczeg贸lnych bit贸w, co umo偶liwia bezpo艣rednie sterowanie pojedynczymi liniami we/wy. Funkcje i struktura linii we/wy s膮 odmienne dla ka偶dego z uk艂ad贸w P0-P3
Na rysunku przedstawiono struktur臋 pojedynczej linii portu P0. Osiem takich struktur tworzy port P0 dost臋pny poprzez blok rejestr贸w specjalnych. W czasie normalnej pracy jako wej艣cie/wyj艣cie (stan 0 na linii sterowanie) tranzystor T1 jest wy艂膮czony, a stan tranzystora T2 zale偶y bezpo艣rednio od stanu przerzutnika D, kt贸ry wchodzi w sk艂ad rejestru P0 bloku SFR. Je偶eli w przerzutniku zapisana jest jedynka, to tranzystor T2 jest wy艂膮czony i wyj艣cie uk艂adu przechodzi w聽stan wysokiej impedancji. W聽przypadku wpisania zera, T2 jest w艂膮czony i na wyj艣ciu panuje stan niski. Wyj艣cia uk艂adu P0 podczas wyprowadzania informacji zachowuj膮 si臋 jak linie typu otwarty dren. Wymaga to do艂膮czenia zewn臋trznego rezystora podci膮gaj膮cego w celu uzyskania wysokiego poziomu napi臋cia odpowiadaj膮cego jedynce wpisanej do przerzutnika. Podczas wprowadzania informacji stan linii zewn臋trznej jest wprowadzany poprzez bufor na wewn臋trzn膮 szyn臋 danych, jednak aby odczyt linii portu by艂 mo偶liwy, wcze艣niej do przerzutnika musi zosta膰 wpisana jedynka.
Istnieje grupa rozkaz贸w mikrokontrolera, kt贸re odczytuj膮, modyfikuj膮 i ponownie zapisuj膮 zawarto艣膰 rejestru P0 (P1, P2, P3). S膮 to rozkazy typu RMW (ang. Read-Modify-Write). Poszczeg贸lne bity rejestru odczytywane s膮 przez bufory do艂膮czone do wyj艣cia Q przerzutnika, ich warto艣膰 jest przekazywana do arytmometru, gdzie nast臋puje wykonanie operacji, a nast臋pnie nowa warto艣膰 jest ponownie wprowadzana do przerzutnika.
Uk艂ad P0 opr贸cz funkcji we/wy pe艂ni rol臋 szyny danych multipleksowanej z mniej znacz膮c膮 cz臋艣ci膮 szyny adresowej podczas realizacji dost臋pu do pami臋ci zewn臋trznej. Wtedy stan linii steruj膮cej S=1 i tranzystory T1 i T2 s膮 sterowane wewn臋trzn膮 lini膮 adresu/danych. Poziom niski w艂膮cza T2 i wy艂膮cza T1 co powoduje stan "0" na wyj艣ciu uk艂adu; poziom wysoki wy艂膮cza T2 i w艂膮cza T1 powoduj膮c stan wysoki na wyj艣ciu - nie ma przy tym konieczno艣ci instalowania rezystora podci膮gaj膮cego. Dane z szyny danych odczytywane s膮 w taki sam spos贸b jak przy pracy portu jako wej艣cie/wyj艣cie.
Wykonanie dost臋pu do pami臋ci zewn臋trznej powoduje zapisanie samych jedynek do rejestru P0, niszcz膮c tym samym przechowywan膮 w nim informacj臋. Z tego powodu korzystanie z pami臋ci zewn臋trznej wyklucza w zasadzie mo偶liwo艣膰 korzystania z P0 jako wej艣cia/wyj艣cia. Ka偶d膮 lini臋 portu P0 mo偶na obci膮偶y膰 o艣mioma wej艣ciami TTL-LS.
Na rysunku przedstawiono pojedyncz膮 lini臋 portu P1. Przerzutnik D b臋d膮cy jej elementem wchodzi w sk艂ad rejestru P1 bloku SFR. Modyfikacji stanu przerzutnika D mo偶na dokona膰 rozkazami zapisu lub RMW, tak jak w przypadku uk艂adu P0. Przerzutnik D steruje bezpo艣rednio tranzystorem wyj艣ciowym. Rezystor zapewnia ustalenie wysokiego poziomu napi臋cia przy wy艂膮czonym tranzystorze (jedynka w przerzutniku). Podczas wprowadzania informacji rozkazami odczytu linii zewn臋trznej wymagane jest zapisanie jedynki do przerzutnika D. Linie uk艂adu P1 nie pe艂ni膮 偶adnych dodatkowych funkcji. Mo偶na je obci膮偶a膰 czterema wej艣ciami TTL-LS.
Na rysunku przedstawiono budow臋 pojedynczej linii portu P2. Zasada dzia艂ania linii portu P2 jest taka sama jak portu P1, pod warunkiem, 偶e dodatkowe funkcje tego uk艂adu nie s膮 wykorzystywane (stan niski na linii sterowanie). Dodatkowo jednak, podczas dost臋pu do pami臋ci zewn臋trznej, port P2 pe艂ni rol臋 bardziej znacz膮cej cz臋艣ci szyny adresowej (A8-A15). Wtedy przy pomocy linii S=1 (sterowanie) zostaje prze艂膮czony multiplekser i sterowanie tranzystora wyj艣ciowego pochodzi z wewn臋trznej linii adresu. Zawarto艣膰 przerzutnika D nie jest niszczona i jego zapisany w nim stan pojawia si臋 na wyj艣ciu portu po zako艅czeniu cyklu dost臋pu o pami臋ci.
W przypadku realizacji dost臋pu do zewn臋trznej pami臋ci danych przy u偶yciu rejestr贸w indeksowych R0 i R1 mikroprocesor ustawia tylko m艂odsze osiem bit贸w adresu, a stan portu P2 nie zmienia si臋. Linie portu P2 mo偶na obci膮偶a膰 czterema wej艣ciami TTL-LS.
W porcie P3 wszystkie linie pe艂ni膮 dodatkowe funkcje, jednak w podstawowym trybie pracy jako wej艣cie/wyj艣cie dzia艂anie portu P3 nie r贸偶ni si臋 w niczym od dzia艂ania port贸w P1 i P2.W zale偶no艣ci od tego czy realizowana funkcja dodatkowa jest wyj艣ciem (TxD, RD', WR') czy wej艣ciem (pozosta艂e opr贸cz RxD) lub pe艂ni obie funkcje (RxD), r贸偶na jest struktura linii portu. Wykorzystanie dodatkowej funkcji linii jest mo偶liwe jedynie po zapisaniu jedynki do przerzutnika D. W聽przypadku wyj艣膰 (P3.1/TxD', P3.6/WR', P3.7/RD') tranzystor T sterowany jest odpowiednim sygna艂em wewn臋trznym realizuj膮cym dan膮 funkcj臋. Dla realizacji funkcji b臋d膮cej wyj艣ciem stan wyprowadzenia zewn臋trznego podawany jest za po艣rednictwem stale otwartego bufora na wewn臋trzn膮 lini臋 mikrokontrolera. Linie portu P3 mo偶na obci膮偶a膰 czterema wej艣ciami TTL-LS.
Tranzystor symbolizuj膮cy stopie艅 wyj艣ciowy linii port贸w jest w rzeczywisto艣ci bardziej skomplikowan膮 struktur膮, kt贸rej schemat przedstawia rysunek.
Zapis do przerzutnika nast臋puje w ostatniej fazie cyklu maszynowego, a wpisana warto艣膰 pojawia si臋 na wyj艣ciu linii portu w pierwszej fazie nast臋pnego cyklu maszynowego - wyj艣ciowy bufor linii portu sprawdza stan przerzutnika tylko podczas pierwszej fazy ka偶dego cyklu zegarowego, a wykryty stan utrzymuje przez czas trwania drugiej fazy. Zmiana zawarto艣ci przerzutnika ze stanu niskiego na wysoki powoduje w艂膮czenie tranzystora T1, kt贸ry pozostaje aktywny przez dwa cykle zegarowe. Tranzystor ten ma du偶膮 wydajno艣膰 pr膮dow膮, spe艂nia rol臋 rezystora podci膮gaj膮cego o ma艂ej warto艣ci rezystancji, a jego w艂膮czenie ma na celu przyspieszenie przej艣cia ze stanu logicznego 0 do 1. Wpisanie do przerzutnika "1" powoduje dodatkowo w艂膮czenie T2, kt贸ry jest w艂膮czony do momentu zmiany zawarto艣ci przerzutnika na "0". T2 stanowi rezystor podci膮gaj膮cy o du偶ej warto艣ci rezystancji i ma za zadanie utrzymanie linii w stanie wysokim. W艂膮czenie T1 powoduje r贸wnie偶 w艂膮czenie T3, kt贸ry r贸wnie偶 stanowi rezystor podci膮gaj膮cy o du偶ej rezystancji. T3 jest jednak aktywny tylko wtedy, gdy napi臋cie na linii portu jest wy偶sze ni偶 1-1.5V. Je偶eli zostanie na linii portu wymuszony stan niski, to T3 jest wy艂膮czony i jako jedyne obci膮偶enie pozostaje tranzystor T2, co wp艂ywa korzystnie na zmniejszenie strat mocy w uk艂adzie. Je偶eli za艣 linia pracuje jako wyj艣cie, to r贸wnoczesna praca T2 i T3 powoduje zwi臋kszenie wydajno艣ci pr膮dowej wyj艣cia. Je偶eli do przerzutnika zostaje wpisane "0" to aktywny jest tylko tranzystor T4.
Uk艂ady licznikowe mikrokontrolera 8051
Mikrokontroler 8051 wyposa偶ony jest w聽dwa uk艂ady licznikowe T0 i聽T1.Ka偶dy z聽tych licznik贸w sk艂ada si臋 z聽dw贸ch o艣miobitowych po艂贸wek. Po艂贸wki te s膮 widziane przez mikroprocesor jako rejestry specjalne TH0 i聽TL0 dla uk艂adu T0 oraz TH1 i聽TL1 dla uk艂adu T1. Ka偶dy z obu licznik贸w mo偶e pracowa膰 jako licznik (zlicza w贸wczas impulsy zewn臋trzne) lub jako czasomierz (zlicza cykle maszynowe mikrokontrolera). Uk艂ady licznikowe mog膮 pracowa膰 w聽trybach 0, 1, 2 i聽3. Wyb贸r trybu pracy i聽sterowanie zliczaniem odbywa si臋 za po艣rednictwem rejestr贸w SFR: TCON i TMOD:
Rejestr: |
bit 7 |
bit 6 |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit 1 |
bit 0 |
TCON |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
TMOD |
GATE |
C/T' |
M1 |
M0 |
GATE |
C/T' |
M1 |
M0 |
Rejestry steruj膮ce prac膮 uk艂ad贸w licznikowych. |
Znaczenie poszczeg贸lnych bit贸w jest nast臋puj膮ce:
Rejestr TCON:
TF1 - wska藕nik przerwania od licznika T1. Bit ustawiany sprz臋towo wskutek przepe艂nienia licznika T1, zerowany sprz臋towo w聽chwili rozpocz臋cia wykonywania procedury obs艂ugi przerwania. Mo偶liwe programowe wywo艂anie przerwania.
TR1 - bit w艂膮czaj膮cy (TR1=1) uk艂ad licznikowy T1.
TF0 - wska藕nik przerwania od licznika T0. Bit ustawiany sprz臋towo wskutek przepe艂nienia licznika T0, zerowany sprz臋towo w聽chwili rozpocz臋cia wykonywania procedury obs艂ugi przerwania.Mo偶liwe programowe wywo艂anie przerwania.
TR0 - bit w艂膮czaj膮cy (TR0=1) uk艂ad licznikowy T0.
IE1 - wska藕nik przerwania zewn臋trznego INT1'. Ustawiany sprz臋towo w wyniku wykrycia opadaj膮cego zbocza (lub niskiego poziomu w聽zale偶no艣ci od trybu pracy) na wyprowadzeniu INT1' mikrokontrolera. Zerowany sprz臋towo w wyniku rozpocz臋cia wykonywania procedury obs艂ugi przerwania (tylko je艣li przerwanie jest aktywowane zboczem).Je艣li przerwanie jest aktywowane poziomem, to stan bitu odpowiada stanowi na wyprowadzeniu INT1' mikrokontrolera.
IT1 - bit okre艣laj膮cy stan wyprowadzenia INT1' aktywuj膮cy przerwanie: 0 - przerwanie aktywowane niskim poziomem, 1 - przerwanie aktywowane opadaj膮cym zboczem.
IE0 - jak IE1, dotyczy wyprowadzenia INT0'.
IT0 - jak IT1, dotyczy wyprowadzenia INT0'.
Rejestr TMOD:
Rejestr jest podzielony na dwie 4-bitowe cz臋艣ci zawieraj膮ce bity o聽jednakowym znaczeniu. Cztery starsze bity rejestru tycz膮 si臋 uk艂adu licznikowego T1, m艂odsze cztery bity dotycz膮 uk艂adu T0.
GATE - bit steruj膮cy bramkowaniem licznika. Dla GATE=1 zliczanie nast臋puje, gdy sygna艂 INTn' i聽bit TRn odpowiadaj膮ce danemu licznikowi s膮 w stanie wysokim. Je偶eli GATE=0, to zliczanie nast臋puje, gdy bit TRn danego licznika jest ustawiony.
C/T' - bit okre艣laj膮cy 藕r贸d艂o zliczanych impuls贸w przez dany uk艂ad licznikowy: "0" oznacza zliczanie cykli maszynowych (impuls贸w o聽cz臋stotliwo艣ci Fxtal/12), "1" oznacza zliczanie impuls贸w zewn臋trznych (z wyprowadzenia Tn odpowiadaj膮cego danemu licznikowi).
M1, M0 - bity wyboru trybu pracy dla danego uk艂adu licznikowego:
M1 |
M0 |
Tryb pracy: |
0 |
0 |
Tryb 0 |
0 |
1 |
Tryb 1 |
1 |
0 |
Tryb 2 |
1 |
1 |
Uk艂ad T0 - tryb 3, uk艂ad T1 zatrzymany |
Znaczenie bit贸w M1 i M0 rejestru TMOD. |
Przy pracy licznik贸w w trybie czasomierza inkrementacja licznika nast臋puje w ka偶dym kolejnym cyklu maszynowym. W przypadku wykorzystywania uk艂adu w trybie licznika, jego zawarto艣膰 jest zwi臋kszana w odpowiedzi na opadaj膮ce zbocze sygna艂u wej艣ciowego. Detekcja zbocza odbywa si臋 jednak synchronicznie z cyklem pracy mikrokontrolera przez testowanie stanu odpowiedniej linii wej艣ciowej w ka偶dym cyklu maszynowym. Je偶eli w pierwszym cyklu wykryto stan wysoki, a w nast臋pnym stan niski, to nast臋puje zwi臋kszenie zawarto艣ci licznika. Aby ka偶de zbocze opadaj膮ce zosta艂o wykryte, to ka偶dy stan na linii wej艣ciowej nie mo偶e trwa膰 kr贸cej ni偶 czas trwania jednego cyklu maszynowego, zatem maksymalna cz臋stotliwo艣膰 sygna艂u o wype艂nieniu 50% jest ograniczona do warto艣ci 1/24 Fxtal.
Tryby pracy uk艂ad贸w licznikowych mikrokontrolera 8051 posiadaj膮 nast臋puj膮ce w艂a艣ciwo艣ci:
Tryb 0.
Tryb pracy 0 jest identyczny dla obu licznik贸w. Na rysunku przedstawiono struktur臋 logiczn膮 licznika T0 pracuj膮cego w ;trybie 0 (analogiczna jest struktura licznika T1 w trybie 0).
Stan licznika jest okre艣lony zawarto艣ci膮 odpowiedniego rejestru THn oraz pi臋ciu m艂odszych bit贸w rejestru TLn. Przepe艂nienie tego 13-bitowego licznika spowoduje ustawienie odpowiedniego bitu przerwania TFn. Przebieg zliczania i 藕r贸d艂o impuls贸w s膮 okre艣lane za pomoc膮 odpowiednich ustawie艅 bit贸w steruj膮cych prac膮 licznik贸w (TCON, TMOD).
Tryb 1.
Tryb 1 jest identyczny dla obu licznik贸w. Struktur臋 licznika T0 pracuj膮cego w trybie 1 przedstawiono na rysunku. Tryb pracy 1 pod wzgl臋dem logicznym jest identyczny z trybem 0. R贸偶nica polega na d艂ugo艣ci licznika: w trybie 1 zliczanie nast臋puje w 16-bitowym liczniku z艂o偶onym z rejestr贸w TLn i THn odpowiedniego uk艂adu licznikowego.
Tryb 2.
Tryb 2 jest identyczny dla obu licznik贸w. Struktur臋 licznika T0 pracuj膮cego w trybie 2 przedstawiono na rysunku. W trybie 2 liczniki pracuj膮 jako 8-bitowe z automatycznym prze艂adowywaniem. Przepe艂nienie licznika TLn nie tylko ustawia odpowiedni znacznik przerwania TFn, lecz r贸wnie偶 powoduje przepisanie zawarto艣ci THn do odpowiedniego rejestru TLn. Nie powoduje to zmiany zawarto艣ci rejestru THn.
Tryb 3.
Tryb 3 jest jedynym trybem r贸偶nym dla uk艂ad贸w T1 i T0. Schemat logiczny uk艂adu licznikowego T0 pracuj膮cego w trybie 3 przedstawiono na rysunku.
W trybie 3 mo偶e pracowa膰 tylko uk艂ad T0. Wprowadzenie uk艂adu T1 w tryb 3 powoduje jego zatrzymanie. Uk艂ad T0 w trybie 3 stanowi dwa niezale偶ne liczniki 8-bitowe, utworzone z rejestr贸w TL0 i TH0. Rejestr TL0 pracuje w uk艂adzie identycznym jak w trybach 0 i 1, z t膮 r贸偶nic膮, 偶e zliczanie nast臋puje w liczniku 8-bitowym. Rejestr TH0 pracuje r贸wnie偶 jako licznik 8-bitowy, mo偶e on jednak zlicza膰 wy艂膮cznie impulsy o czasie trwania cykli maszynowych mikrokontrolera. Do sterowania zliczania TH0 wykorzystano bity steruj膮ce TR1 i TF1 uk艂adu czasowego T1. Wprowadzenie uk艂adu T0 w tryb 3 ogranicza zatem wykorzystanie uk艂adu T1 do zastosowa艅 nie wymagaj膮cych wykorzystania przerwania (wy艂膮czenie licznika T1 nast臋puje w wyniku wprowadzenia go w jego w艂asny tryb 3) i w贸wczas uk艂ad T1 jest najcz臋艣ciej wykorzystywany do generacji sygna艂u taktuj膮cego dla uk艂adu transmisji szeregowej.
Uk艂ad transmisji szeregowej mikrokontrolera 8051
艁膮cze szeregowe mikrokontrolera 8051 umo偶liwia prowadzenie synchronicznej lub asynchronicznej transmisji danych. Transmisja asynchroniczna jest transmisj膮 full-duplex, natomiast synchroniczna jest transmisj膮 half-duplex. Uk艂ad odbiornika posiada bufor odbiorczy, co pozwala na realizacj臋 procesu odbierania kolejnej danej przed pobraniem przez mikroprocesor danej ju偶 odebranej. Jest to jednak bufor jednobajtowy, wi臋c nie odczytanie danej przez mikroprocesor przed ko艅cem kolejnej transmisji powoduje utrat臋 odebranego wcze艣niej bajtu.
Podczas realizacji transmisji asynchronicznej nadawane dane wysy艂ane s膮 lini膮 TxD, za艣 odbierane przez lini臋 RxD. Podczas transmisji synchronicznej dane s膮 odbierane i nadawane po linii RxD, a na lini臋 TxD wysy艂any jest sygna艂 taktuj膮cy.
Do konfiguracji pracy uk艂adu transmisji szeregowej s艂u偶y rejestr SCON z bloku SFR:
bit 7 |
bit 6 |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit 1 |
bit 0 |
SM0 |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
TI |
RI |
Rozmieszczenie bit贸w rejestru SCON. |
SM0, SM1 okre艣laj膮 tryb pracy uk艂adu transmisji szeregowej:
SM1 |
SM0 |
Tryb pracy uk艂adu: |
0 |
0 |
|
0 |
1 |
|
1 |
0 |
|
1 |
1 |
|
Konfiguracja tryb贸w pracy uk艂adu transmisji szeregowej. |
SM2 steruje przej艣ciem w tryb komunikacji wieloprocesorowej. Dla transmisji synchronicznej zalecane SM2=0, dla transmisji asynchronicznej SM2=1 powoduje ustawienie wska藕nika przerwania RI tylko wtedy, je偶eli bit stopu (transmisja 8-bitowa) lub dziewi膮ty bit (transmisja 9-bitowa) jest r贸wny jeden.
REN - bit w艂膮czaj膮cy odbiornik: 1 - w艂膮czenie, 0 - wy艂膮czenie.
TB8 - dziewi膮ty bit danych nadawanych podczas transmisji dziewi臋ciobitowej.
RB8 - dziewi膮ty bit odebranej danej podczas transmisji dziewi臋ciobitowej.
TI - wska藕nik przerwania nadajnika. Informuje o zako艅czeniu transmisji danej i gotowo艣ci nadajnika do przesy艂ania nast臋pnej. Bit musi by膰 zerowany programowo przez procedur臋 obs艂ugi przerwania.
RI - wska藕nik przerwania odbiornika. Informuje o prawid艂owym odbiorze danej i jej gotowo艣ci do pobrania przez mikroprocesor. Bit musi by膰 zerowany programowo przez procedur臋 obs艂ugi przerwania.
Tryb 0.
Tryb 0 posiada nast臋puj膮ce cechy:
transmisja synchroniczna,
pr臋dko艣膰 transmisji sta艂a i r贸wna 1/12 Fxtal,
przesy艂ane 8 bit贸w danych.
Nadawanie danych nast臋puje wnast臋pnym cyklu maszynowym po wpisaniu danej przez mikroprocesor do rejestru SBUF. Dane nadawane s膮 po linii RxD pocz膮wszy od najmniej znacz膮cego bitu. Jednocze艣nie na linii TxD pojawiaj膮 si臋 impulsy taktuj膮ce. Po nadaniu o艣miu bit贸w linie RxD i TxD powracaj膮 do stanu "1" i ustawiany jest bit TI.
Odbi贸r informacji rozpoczyna si臋 poprzez ustawienie bitu REN=1 i RI=0. W nast臋pnym cyklu maszynowym podany zostaje sygna艂 taktuj膮cy na lini臋 TxD i nast臋puje odczyt informacji bit po bicie (pocz膮wszy od najmniej znacz膮cego). Po odebraniu o艣miu bit贸w, ca艂a odebrana informacja przepisywana jest do rejestru SBUF i ustawiany jest wska藕nik przerwania RI.
Tryb 1.
Tryb 1 posiada nast臋puj膮ce cechy:
transmisja asynchroniczna,
p艂ynnie regulowana pr臋dko艣膰 transmisji,
przesy艂any jest bit startu r贸wny "0", osiem bit贸w danych (od LSB), bit stopu r贸wny "1",
Sygna艂em taktuj膮cym transmisji s膮 impulsy przepe艂nienia licznika T1 uk艂adu czasowego. Na szybko艣膰 transmisji ma r贸wnie偶 wp艂yw stan bitu SMOD rejestru PCON. Wyzerowanie bitu SMOD powoduje dwukrotne zmniejszenie pr臋dko艣ci transmisji. Szybko艣膰 transmisji mo偶emy okre艣li膰 wed艂ug wzoru V=(2SMOD*F przepe艂niania T1)/32. Licznik T1 mo偶e pracowa膰 w dowolnym z tryb贸w, jednak nale偶y pami臋ta膰 o jego cyklicznym prze艂adowywaniu w razie konieczno艣ci. Cz臋sto stosuje si臋 tutaj tryb 2 licznika T1 (z automatycznym prze艂adowywaniem - odpada konieczno艣膰 programowego prze艂adowywania licznika), wtedy wz贸r na pr臋dko艣膰 transmisji ma nast臋puj膮c膮 posta膰: V=(Fxtal*2SMOD)/(32*12*(256-TH1)).
Transmisj臋 rozpoczyna zapis bajtu do rejestru SBUF. W贸wczas w takt impuls贸w o cz臋stotliwo艣ci Fprzepe艂nienia T1/16 rozpoczyna si臋 wysy艂anie po linii TxD: bitu startu ("0"), 8 bit贸w danych, bitu stopu ("1"). Po wys艂aniu bitu stopu ustawiony zostaje wska藕nik przerwania TI i linia TxD jest ustawiona w stan "1".
Je偶eli odbiornik jest w艂膮czony (REN=1), to bada on ca艂y czas stan na wej艣ciu RxD. Je偶eli wykryje opadaj膮ce zbocze, to traktuje je jako pocz膮tek bitu startu i nast臋pnie dokonuje kolejnego pr贸bkowania w po艂owie czasu trwania bitu startu (wed艂ug ustalonej pr臋dko艣ci transmisji) i je偶eli na linii RxD nadal panuje stan niski, to oznacza to, 偶e zosta艂 odebrany bit startu i nast臋pnie linia RxD jest pr贸bkowana w po艂owie czasu trwania ka偶dego bitu danych. Spos贸b zako艅czenia odbioru zale偶y od bit贸w RI i SM2 oraz od warto艣ci odebranego bitu stopu:
Je偶eli RI=1 to ca艂y odebrany bajt jest ignorowany i odbiornik rozpoczyna na nowo nas艂uchiwanie linii RxD.
Je偶eli RI=0 i bit stopu ma warto艣膰 "1", to odbi贸r ko艅czy si臋 w spos贸b poprawny, czyli nast臋puje w贸wczas przepisanie odebranego bajtu do rejestru SBUF, warto艣膰 bitu stopu jest zapisywana do bitu RB8 i nast臋puje ustawienie wska藕nika przerwania RI.
Je偶eli RI=0 i bit stopu ma warto艣膰 "0", a SM2=1, to odebrany bajt jest ignorowany. Je偶eli za艣 SM2=0, to odbi贸r ko艅czy si臋 w spos贸b poprawny. Sterowanie bitem SM2 umo偶liwia sprz臋towe odrzucanie bajt贸w odebranych z b艂臋dem ramki.
Tryb 2.
Tryb 2 posiada nast臋puj膮ce cechy:
transmisja asynchroniczna,
dwie, zale偶ne od cz臋stotliwo艣ci taktowania mikrokontrolera, pr臋dko艣ci transmisji,
przesy艂any jest bit startu r贸wny "0", dziewi臋膰 bit贸w danych, bit stopu r贸wny "1".
W trybie pracy mo偶liwe s膮 do uzyskania dwie pr臋dko艣ci transmisji - kt贸ra z nich zostanie wybrana zale偶y od warto艣ci bitu SMOD rejestru PCON. Pr臋dko艣膰 mo偶na wyznaczy膰 z zale偶no艣ci: V=Fxtal*2SMOD/64.
Transmisja danych w trybie 2 zachodzi identycznie jak w trybie 1, z tym, 偶e jest transmitowany dziewi膮ty bit danych zapisany w bicie TB8, a odbierany dziewi膮ty bit jest zapisywany w bicie RB8. Warunki poprawnego odebrania informacji s膮 identyczne jak w trybie 1, z tym, 偶e pod uwag臋 bierze si臋 tu dziewi膮ty bit danych, a nie bit stopu (w trybie 2 bit stopu nie wp艂ywa na proces odbioru).
Transmitowany i odbierany dziewi膮ty bit mo偶e zosta膰 wykorzystany do przesy艂ania bitu kontroli parzysto艣ci.
Tryb 3.
Tryb 3 posiada nast臋puj膮ce cechy:
transmisja asynchroniczna,
p艂ynnie regulowana pr臋dko艣膰 transmisji,
przesy艂any jest bit startu r贸wny "0", dziewi臋膰 bit贸w danych, bit stopu r贸wny "1".
Tryb 3 stanowi po艂膮czenie w艂a艣ciwo艣ci tryb贸w 1 i 2. W trybie tym uk艂ad transmisji szeregowej jest taktowany sygna艂em przepe艂nienia licznika T1, tak samo okre艣la si臋 r贸wnie偶 pr臋dko艣膰 transmisji. Logiczne cechy transmisji s膮 identyczne jak w trybie 2.
Uk艂ad przerwa艅 mikrokontrolera 8051
Mikrokontroler 8051 jest wyposa偶ony w priorytetowy, dwupoziomowy uk艂ad przerwa艅. Uk艂ad przerwa艅 jest specjalizowan膮 struktur膮 logiczn膮, kt贸rej zadaniem jest monitorowanie stanu wska藕nik贸w przerwa艅 i zg艂aszanie faktu ustawienia okre艣lonego wska藕nika do uk艂adu sterowania. W mikrokontrolerze 8051 przerwanie mo偶e zosta膰 wywo艂ane przez jedno z pi臋ciu wska藕nik贸w. Cztery ze wska藕nik贸w umieszczone s膮 w rejestrze TCON:
bit 7 |
bit 6 |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit 1 |
bit 0 |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
Bity rejestru TCON. |
Znaczenie poszczeg贸lnych bit贸w jest nast臋puj膮ce:
TF1 - wska藕nik przerwania od licznika T1 uk艂adu czasowego.
TF0 - wska藕nik przerwania od licznika T0 uk艂adu czasowego.
TR1, TR0 - sterowanie licznikami T1 i聽T0 (nie istotne dla uk艂adu przerwa艅).
IE1 - wska藕nik przerwania zewn臋trznego INT1'.
IE0 - wska藕nik przerwania zewn臋trznego INT0'.
IT0, IT1 - spos贸b zg艂aszania odpowiednich przerwa艅 zewn臋trznych: 0 - zg艂aszanie niskim poziomem napi臋cia, 1 - zg艂aszanie zboczem opadaj膮cym.
Pi膮tym 藕r贸d艂em przerwania jest uk艂ad transmisji szeregowej. Przerwanie to jest zg艂aszane przez ustawienie dowolnego z bit贸w RI lub TI rejestru SCON.
W przypadku przerwa艅 zewn臋trznych i od uk艂ad贸w czasowych, wska藕niki przerwania s膮 sprz臋towo zerowane po przyj臋ciu zg艂oszenia przerwania (za wyj膮tkiem sytuacji, gdy przerwanie zewn臋trzne jest zg艂aszane niskim poziomem). Wska藕niki przerwania z uk艂adu transmisji szeregowej musz膮 by膰 zerowane programowo przez procedur臋 obs艂ugi przerwania, gdy偶 sprz臋towe zerowanie uniemo偶liwi艂oby okre艣lenie, kt贸ry ze wska藕nik贸w (RI czy TI) przerwanie wywo艂a艂.
Do uaktywniania poszczeg贸lnych przerwa艅 i okre艣lania ich priorytet贸w przeznaczone s膮 rejestry steruj膮ce IE i IP.
Rejestr |
bit 7 |
bit 6 |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit 1 |
bit 0 |
IE |
EA |
- |
- |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
IP |
- |
- |
- |
PS |
PT1 |
PX1 |
PT0 |
PX0 |
Rejestry steruj膮ce uk艂adu przerwa艅. |
Znaczenie bit贸w rejestru IE:
EA - ustawienie bitu w艂膮cza uk艂ad przerwa艅, wyzerowanie wy艂膮cza uk艂ad przerwa艅 (blokuje wszystkie przerwania).
ES - ustawienie bitu powoduje w艂膮czenie obs艂ugi przerwania z uk艂adu transmisji szeregowej.
ET1, ET0 - ustawienie bit贸w powoduje w艂膮czenie obs艂ugi przerwa艅 z odpowiednich licznik贸w (T1 i T0).
EX1, EX0 - ustawienie bit贸w powoduje w艂膮czenie obs艂ugi odpowiednich przerwa艅 zewn臋trznych.
Rejestr IP s艂u偶y do okre艣lenia poziomu poszczeg贸lnych przerwa艅. "0" lub "1" na poszczeg贸lnych pozycjach przyporz膮dkowuj膮 dane przerwanie do poziomu odpowiednio 0 lub 1.
PS - ustalanie poziomu priorytetu przerwania z uk艂adu transmisji szeregowej.
PT1, PT0 - poziomy priorytet贸w przerwa艅 z odpowiednich licznik贸w.
PX1, PX0 - poziomy priorytet贸w odpowiednich przerwa艅 zewn臋trznych.
Podczas realizacji procedury obs艂ugi przerwania poziomu 0 mo偶e nast膮pi膰 jej przerwanie przez procedur臋 obs艂ugi przerwania o poziomie 1 - nie mo偶e jednak wyst膮pi膰 sytuacja odwrotna. Nie mo偶e r贸wnie偶 wyst膮pi膰 wzajemne przerywanie procedur obs艂ugi przerwa艅 z tego samego poziomu.
Dodatkowo podczas realizacji programu mo偶e wyst膮pi膰 jednoczesne zg艂oszenie dw贸ch lub wi臋cej przerwa艅 o tym samym poziomie. Powoduje to wybranie do wykonania przez uk艂ad przerwa艅 obs艂ugi przerwania o najwy偶szym priorytecie wed艂ug kolejno艣ci: INT0' (priorytet najwy偶szy), TF0, INT1', TF1, RI+TI (priorytet najni偶szy).
Przyj臋cie przerwania powoduje sprz臋tow膮 generacje rozkazu LCALL z adresem procedury obs艂ugi przerwania, w艂a艣ciwym dla ka偶dego przerwania (patrz "Pami臋膰 programu"). Przyj臋cie przerwania jest mo偶liwe jednak tylko wtedy, gdy obecnie nie jest wykonywane przerwanie o r贸wnym lub wy偶szym priorytecie, trwa aktualne wykonywanie jakiego艣 rozkazu (uk艂ad obs艂ugi przerwania musi poczeka膰 do zako艅czenia wykonywania tego rozkazu) lub je偶eli jest wykonywany adres powrotu z聽procedury obs艂ugi przerwania RETI, rozkaz dost臋pu do rejestr贸w IE i IP, lub jakikolwiek rozkaz po nich wykonywany.
Generator sygna艂u taktuj膮cego
Mikrokontroler 8051 posiada wbudowany generator sygna艂u zegarowego, mog膮cy wsp贸艂pracowa膰 z rezonatorem kwarcowym lub ceramicznym. Generator wytwarza sygna艂 taktuj膮cy mikrokontroler o cz臋stotliwo艣ci r贸wnej cz臋stotliwo艣ci zastosowanego rezonatora (uk艂ad powoduje wzbudzenie rezonatora na cz臋stotliwo艣ci podstawowej).
Przygotowanie generatora (a zarazem ca艂ego mikrokontrolera) do pracy polega na do艂膮czeniu do wyprowadze艅 XTAL1 i XTAL2 rezonatora (kwarcowego lub ceramicznego) oraz dw贸ch kondensator贸w wed艂ug poni偶szego schematu:
Warto艣膰 pojemno艣ci kondensator贸w nie jest zbyt istotna: dla rezonatora kwarcowego producent zaleca warto艣ci w granicach 20-40pF, dla rezonatora ceramicznego 45-60pF.
Mo偶liwe jest r贸wnie偶 taktowanie mikrokontrolera sygna艂em z zewn臋trznego generatora. Cz臋stotliwo艣膰 sygna艂u powinna zawiera膰 si臋 w przedziale zalecanym przez producenta (dla uk艂adu 8051 w granicach 1.2-12MHz), a wype艂nienie powinno by膰 r贸wne 50% (cho膰 niekt贸rzy producenci dopuszczaj膮 taktowanie sygna艂em o innym wype艂nieniu). Spos贸b pod艂膮czenia generatora do mikrokontrolera jest r贸偶ny w zale偶no艣ci od technologii wykonania uk艂adu. Dla mikrokontroler贸w wykonanych w technologii NMOS sygna艂 z generatora nale偶y pod艂膮czy膰 do wyprowadzenia XTAL2, a wyprowadzenie XTAL1 po艂膮czy膰 z mas膮 uk艂adu. W przypadku mikrokontroler贸w wykonanych w technologii CMOS (z liter膮 C w nazwie, np. 80C51) sygna艂 generatora pod艂膮cza si臋 do wyprowadzenia XTAL1, natomiast wyprowadzenie XTAL2 pozostawia si臋 nie pod艂膮czone. Producenci mikrokontroler贸w stawiaj膮 r贸wnie偶 wymagania co do parametr贸w elektrycznych sygna艂u taktuj膮cego. Najcz臋艣ciej od sygna艂u generatora oczekuje si臋 nast臋puj膮cych parametr贸w: w stanie niskim napi臋cie nie powinno przekracza膰 0.75V, natomiast w stanie wysokim nie powinno by膰 ni偶sze ni偶 2.5V w przypadku uk艂ad贸w NMOS lub 3.5V w przypadku mikrokontroler贸w CMOS.
Powy偶sze cechy generatora taktuj膮cego b臋d膮cego na wyposa偶eniu mikrokontrolera 8051 s膮 w wi臋kszo艣ci przypadk贸w identyczne dla innych mikrokontroler贸w rodziny '51 (tak偶e dla uk艂adu 80C552). Zazwyczaj najbardziej znacz膮c膮 r贸偶nic膮 jest maksymalna cz臋stotliwo艣膰 rezonatora (zewn臋trznego generatora) taktuj膮cego mikrokontroler. Dla uk艂adu 80C552 maksymalna cz臋stotliwo艣膰 taktuj膮ca wynosi 20MHz (dla niekt贸rych wersji 30MHz).
Uk艂ad sterowania mikrokontroler贸w '51
Najwa偶niejszym zadaniem uk艂adu sterowania jest dekodowanie przes艂anego z pami臋ci programu rozkazu i generacja na jego podstawie odpowiednich sygna艂贸w steruj膮cych pozosta艂ymi elementami mikrokontrolera. Z uk艂adem sterowania wsp贸艂pracuje licznik rozkaz贸w PC (16-bitowy rejestr zawieraj膮cy adres kolejnego rozkazu przeznaczonego do wykonania) i rejestr rozkaz贸w (rejestr przechowuj膮cy ostatnio pobrany rozkaz). Wsp贸艂pracuje z nim tak偶e uk艂ad przerwa艅 (uk艂ad sterowania jest odpowiedzialny za sprz臋tow膮 generacj臋 rozkazu LCALL wywo艂ania procedury obs艂ugi przerwania).
Uk艂ad sterowania jest odpowiedzialny za generacj臋 nast臋puj膮cych sygna艂贸w zewn臋trznych:
PSEN' - strob odczytu z zewn臋trznej pami臋ci programu.
RD' - strob odczytu z zewn臋trznej pami臋ci danych.
WR' - strob zapisu do zewn臋trznej pami臋ci danych.
ALE - sygna艂 steruj膮cy buforem zatrzaskuj膮cym m艂odszy bajt adresu pami臋ci zewn臋trznej.
Do uk艂adu sterowania s膮 natomiast doprowadzone nast臋puj膮ce sygna艂y zewn臋trzne:
EA' - linia wy艂膮czaj膮ca wewn臋trzn膮 pami臋膰 programu.
RST - linia zerowania mikrokontrolera.
Poniewa偶 po do艂膮czeniu zasilania do mikrokontrolera jego rejestry i uk艂ady mog膮 przyjmowa膰 trudne do przewidzenia stany, natychmiast po w艂膮czeniu zasilania powinien zosta膰 wygenerowany sygna艂 zeruj膮cy. Prawid艂owe wyzerowanie mikrokontrolera polega na podaniu na wyprowadzenie RST stanu "1" przez co najmniej 2 cykle maszynowe. Podczas w艂膮czania zasilania poziom wysoki powinien by膰 utrzymywany d艂u偶ej (ok. 10-20ms) w zwi膮zku z konieczno艣ci膮 wzbudzenia si臋 wewn臋trznego generatora, a czynno艣膰 t膮 wykonuje poni偶szy uk艂ad:
Po w艂膮czeniu zasilania uk艂adu, poziom wysoki utrzymuje si臋 na wyprowadzeniu RST przez czas 艂adowania kondensatora. Sta艂a czasowa obwodu RC z zapasem zapewnia konieczny czas wyst臋powania poziomu wysokiego na wyprowadzeniu. Podczas normalnej pracy mo偶liwe jest wyzerowanie mikrokontrolera przez naci艣ni臋cie przycisku RESET, co spowoduje doprowadzenia poziomu wysokiego do wyprowadzenia RST i roz艂adowanie kondensatora. Po zwolnieniu przycisku poziom wysoki na wyprowadzeniu RST utrzyma si臋 do czasu na艂adowania kondensatora (podobnie jak przy w艂膮czeniu zasilania). Sygna艂 RESET powoduje inicjacj臋 wszystkich zasob贸w mikrokontrolera:
ustawienie zawarto艣ci wska藕nika stosu SP=7.
ustawienie jedynek na wszystkich liniach port贸w we/wy.
wyzerowanie pozosta艂ych rejestr贸w specjalnych (jedynie SBUF przyjmuje nieokre艣lon膮 zawarto艣膰).
zawarto艣膰 pami臋ci danych pozostaje nie zmieniona (po w艂膮czeniu zasilania jest nieokre艣lona).
Uk艂ad sterowania mikrokontrolera wykonanego w technologii CMOS (80C51) steruje r贸wnie偶 trybami oszcz臋dzania energii. Od strony programowej ustawienie okre艣lonego trybu odbywa si臋 za po艣rednictwem rejestru PCON:
bit 7 |
bit 6 |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit 1 |
bit 0 |
SMOD |
- |
- |
- |
GF1 |
GF0 |
PD |
IDL |
Bity rejestru PCON mikrokontrolera 80C51 |
SMOD - odpowiedzialny za okre艣lenie pr臋dko艣ci transmisji przez uk艂ad transmisji szeregowej.
GF1, GF0 - bity og贸lnego przeznaczenia.
PD - bit steruj膮cy przej艣ciem mikrokontrolera w stan u艣pienia PD (ang. Power Down); ustawienie powoduje przej艣cie do stanu u艣pienia, zerowany jest sprz臋towo przy wyj艣ciu ze stanu u艣pienia.
IDL - bit steruj膮cy przej艣ciem mikrokontrolera w stan u艣pienia IDL (ang. Idle); ustawienie powoduje przej艣cie do stanu u艣pienia, zerowany jest sprz臋towo przy wyj艣ciu ze stanu u艣pienia.
Uk艂ady wykonane w technologii NMOS posiadaj膮 w rejestrze PCON tylko bit SMOD. Ustawienie bitu IDL powoduje wprowadzenie mikrokontrolera w stan u艣pienia IDL. Nast臋puje w贸wczas od艂膮czenie wewn臋trznego sygna艂u taktuj膮cego od jednostki centralnej i mikrokontroler nie wykonuje 偶adnego rozkazu. Zachowany zostaje stan pami臋ci wewn臋trznej, wszystkich rejestr贸w specjalnych i linii we/wy. Dzia艂a uk艂ad transmisji szeregowej, uk艂ad czasowy i uk艂ad przerwa艅. Wyj艣ciowe sygna艂y ALE i PSEN' przyjmuj膮 poziomy nieaktywne. Wyprowadzenie mikrokontrolera nast臋puje przez zg艂oszenie dowolnego, w艂膮czonego przerwania. Nast臋puje w贸wczas wyzerowanie bitu IDL, wykonanie programu obs艂ugi przerwania i przej艣cie do wykonywania programu g艂贸wnego od miejsca, w kt贸rym zosta艂 ustawiony stan u艣pienia.
Ustawienie bitu PD powoduje wprowadzenie mikrokontrolera w stan u艣pienia PD. Nast臋puje w贸wczas wy艂膮czenie generatora sygna艂u taktuj膮cego i zatrzymanie wszystkich funkcji mikrokontrolera. Sygna艂y ALE i PSEN' przyjmuj膮 poziomy niskie, a napi臋cie zasilaj膮ce Vcc mo偶e by膰 w贸wczas obni偶one do warto艣ci 3V. Zachowana zostaje zawarto艣膰 pami臋ci wewn臋trznej, rejestr贸w specjalnych i linii we/wy. Aby wyprowadzi膰 mikrokontroler ze stanu u艣pienia PD, nale偶y przywr贸ci膰 normaln膮 warto艣膰 napi臋cia Vcc i wygenerowa膰 sygna艂 RESET. Stracona w贸wczas zostaje zawarto艣膰 rejestr贸w i linii port贸w we/wy.
Jednoczesne ustawienie bit贸w IDL i PD powoduje wywo艂anie trybu u艣pienia PD. Mikroprocesory rodziny '51 w stanach u艣pienia pobieraj膮 oko艂o 0.2 do 15% mocy pobieranej podczas normalnej pracy.
W zestawieniu zastosowano nast臋puj膮ce oznaczenia:
Rr - rejestry R0-R7.
direct - obszar wewn臋trznej pami臋ci danych (128B) i rejestry SFR.
@Ri - adres z rejestr贸w indeksowych R0 lub R1.
bit - bity pami臋ci danych i SFR adresowalne bezpo艣rednio.
#data - sta艂a 8-bitowa.
#data16 - sta艂a 16-bitowa.
addr16 - adres 16-bitowy (obszar 64kB).
addr11 - adres 11-bitowy (w stronie 2kB).
rel - adres wzgl臋dny -128...+127.
/bit - negacja bitu.
(n) - rozkaz wykonywany w n cyklach maszynowych. Brak oznaczenia oznacza 1 cykl.
Operacje arytmetyczne:
ADD - dodawanie.
Dzia艂anie: A=A+dana.
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data
Modyfikowane znaczniki: C, AC, OV.
ADDC - dodawanie z przeniesieniem.
Dzia艂anie: A=A+dana+C.
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data
Modyfikowane znaczniki: C, AC, OV.
SUBB - odejmowanie z po偶yczk膮.
Dzia艂anie: A=A-dana-C.
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data
Modyfikowane znaczniki: C, AC, OV.
INC - inkrementacja.
Dzia艂anie: argument=argument+1
Dozwolone argumenty: A Rr direct @Ri DPTR(2)
DEC - dekrementacja.
Dzia艂anie: argument=argument-1.
Dozwolone argumenty: A Rr direct @Ri
MUL - mno偶enie liczb 8-bitowych, wynik 16-bitowy.
Dzia艂anie: A*B, do A zapisywana m艂odsza cz臋艣膰 wyniku, do B starsza.
Dozwolone argumenty: AB
Modyfikowane znaczniki: OV, bit C zerowany.
DIV - dzielenie liczb 8-bitowych, 8-bitowy wynik i 8-bitowa reszta.
Dzia艂anie: A/B, A - wynik, B - reszta.
Dozwolone argumenty: AB
Modyfikowane znaczniki: OV, bit C zerowany.
DA - poprawka dziesi臋tna.
Dzia艂anie: wykonuje poprawk臋 dziesi臋tn膮 liczby 8-bitowej, przekszta艂caj膮c j膮 do postaci 2 cyfr w kodzie BCD.
Dozwolone argumenty: A
Modyfikowane znaczniki: C.
Operacje logiczne:
ANL - iloczyn logiczny AND.
Dzia艂anie: wykonuje logiczny iloczyn na odpowiednich bitach argument贸w, wynik zapisuje do pierwszego argumentu.
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data direct,A direct,#data(2)
ORL - suma logiczna OR.
Dzia艂anie: wykonuje sum臋 logiczn膮 odpowiednich bit贸w argument贸w, wynik zapisuje do pierwszego argumentu.
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data direct,A direct,#data(2)
XRL - suma mod 2 (XOR).
Dzia艂anie: wykonuje sumowanie mod 2 odpowiednich bit贸w argumentu, wynik zapisuje do pierwszego z nich.
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data direct,A direct,#data(2)
CLR - zerowanie (bajtowe).
Dzia艂anie: zeruje wszystkie bity argumentu.
Dozwolone argumenty: A.
CPL - negowanie (bajtowe).
Dzia艂anie: neguje wszystkie bity argumentu.
Dozwolone argumenty: A.
RL - obr贸t w lewo.
Dzia艂anie: przesuwa w lewo zawarto艣膰 akumulatora.
Dozwolone argumenty: A.
RR - obr贸t w prawo.
Dzia艂anie: przesuwa w prawo zawarto艣膰 akumulatora.
Dozwolone argumenty: A.
RLC - obr贸t w lewo przez C.
Dzia艂anie: przesuwa w lewo zawarto艣膰 akumulatora, na miejsce najm艂odszego bitu wpisywana jest dotychczasowa zawarto艣膰 bitu C, bit najstarszy jest wpisywany jako nowa warto艣膰 C.
Dozwolone argumenty: A.
RRC - obr贸t w prawo przez C.
Dzia艂anie: przesuwa w prawo zawarto艣膰 akumulatora, na miejsce najstarszego bitu wpisywana jest dotychczasowa zawarto艣膰 bitu C, bit najm艂odszy jest wpisywany jako nowa warto艣膰 C.
Dozwolone argumenty: A.
SWAP - zamiana 4 bit贸w bajtu.
Dzia艂anie: zamienia miejscami 4 starsze i 4 m艂odsze bity bajtu.
Dozwolone argumenty: A.
Operacje logiczne na bitach:
CLR - zerowanie.
Dzia艂anie: zeruje podany bit.
Dozwolone argumenty: C bit.
SETB - ustawienie bitu.
Dzia艂anie: przypisuje danemu bitowi warto艣膰 1.
Dozwolone argumenty: C bit.
CPL - negacja.
Dzia艂anie: neguje podany bit.
Dozwolone argumenty: C bit.
ANL(2) - iloczyn logiczny AND.
Dzia艂anie: wykonuje iloczyn logiczny dw贸ch bit贸w, wynik zapisuje w pierwszym.
Dozwolone argumenty: C,bit C,/bit.
ORL(2) - suma logiczna OR.
Dzia艂anie: wykonuje sum臋 logiczn膮 dw贸ch bit贸w, wynik zapisuje w pierwszym.
Dozwolone argumenty: C,bit C,/bit.
MOV - kopiuj.
Dzia艂anie: wpisuje do pierwszego bitu warto艣膰 zapisan膮 w drugim.
Dozwolone argumenty: C,bit bit,C(2).
Przesy艂anie danych:
MOV - kopiuj.
Dzia艂anie: wpisuje do pierwszego operandu zawarto艣膰 drugiego.
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data Rr,A Rr,direct(2) Rr,#data direct,A direct,Rr(2) direct,direct(2) direct,@Ri(2) direct,#data(2) @Ri,A @Ri,direct(2) @Ri,data DPTR,#data16(2).
MOVC(2) - kopiuj z pami臋ci programu.
Dzia艂anie: kopiuje bajt kodu (zawarto艣ci pami臋ci programu).
Dozwolone argumenty: A,@A+DPTR A,@A+PC.
MOVX(2) - kopiuj z/do zewn臋trznej pami臋ci danych.
Dzia艂anie: kopiuje bajt z/do kom贸rki zewn臋trznej pami臋ci danych wskazanej rejestrem indeksowym.
Dozwolone argumenty: A,@Ri A,@DPTR @Ri,A @DPTR,A.
XCH - zamie艅.
Dzia艂anie: wymienia mi臋dzy sob膮 zawarto艣膰 dw贸ch rejestr贸w.
Dozwolone argumenty: A,Rr A,direct A,@Ri.
XCHD - zamie艅 m艂odsze 4 bity.
Dzia艂anie: wymienia mi臋dzy dwoma rejestrami zawarto艣膰 ich 4 m艂odszych bit贸w.
Dozwolone argumenty: A,@Ri.
PUSH(2) - przes艂anie bajtu na stos.
Dzia艂anie: inkrementuje zawarto艣膰 rejesru SP i kopiuje zawarto艣膰 kom贸rki pod adres wskazywany przez SP.
Dozwolone argumenty: direct.
POP(2) - pobranie bajtu ze stosu.
Dzia艂anie: kopiuje zawarto艣膰 kom贸rki wskazywanej przez SP do kom贸rki podanej w wywo艂aniu i dekrementuje zawarto艣膰 SP.
Dozwolone argumenty: direct.
Skoki(2):
ACALL - wywo艂anie podprogramu w stronie 2kB.
Dzia艂anie: zapisuje na stos zawarto艣膰 PC i wykonuje skok do adresu pocz膮tku procedury.
Dozwolone argumenty: addr11.
LCALL - wywo艂anie podprogramu.
Dzia艂anie: zapisuje na stos zawarto艣膰 PC i wykonuje skok do adresu pocz膮tku procedury.
Dozwolone argumenty: addr16.
RET - powr贸t z procedury.
Dzia艂anie: pobiera ze stosu zawarto艣膰 licznika rozkaz贸w i przekazuje sterowanie do znajduj膮cego si臋 tam adresu.
RETI - powr贸t z procedury obs艂ugi przerwania.
Dzia艂anie: pobiera ze stosu zawarto艣膰 licznika rozkaz贸w i przekazuje sterowanie do znajduj膮cego si臋 tam adresu.
LJMP - rozkaz skoku w obszarze 64kB.
Dzia艂anie: wpisuje do licznika rozkaz贸w podany adres.
Dozwolone argumenty: addr16.
AJMP - rozkaz skoku w stronie 2kB.
Dzia艂anie: zast臋puje 11 m艂odszych bit贸w PC warto艣ci膮 podan膮 w wywo艂aniu.
Dozwolone argumenty: addr11.
SJMP - rozkaz skoku w obszarze 256B.
Dzia艂anie: nast臋puje zmiana zawarto艣ci PC o warto艣膰 w kodzie U2 podan膮 w wywo艂aniu.
Dozwolone argumenty: rel.
JMP - rozkaz skoku w trybie po艣rednim.
Dzia艂anie: przepisuje do PC warto艣膰 b臋d膮c膮 sum膮 zawarto艣ci rejestru indeksowego i bazowego.
Dozwolone argumenty: @A+DPTR.
JZ - skok warunkowy.
Dzia艂anie: wykonuje skok, je偶eli zawarto艣膰 akumulatora r贸wna jest 0.
Dozwolone argumenty: rel.
JNZ - skok warunkowy.
Dzia艂anie: wykonuje skok, je偶eli zawarto艣膰 akumulatora jest r贸偶na od 0.
Dozwolone argumenty: rel.
JC - skok warunkowy.
Dzia艂anie: wykonuje skok, je偶eli bit przeniesienia C jest ustawiony.
Dozwolone argumenty: rel.
JNC - skok warunkowy.
Dzia艂anie: wykonuje skok, je偶eli bit przeniesienia C jest wyzerowany.
Dozwolone argumenty: rel.
JB - skok warunkowy.
Dzia艂anie: wykonuje skok, je偶eli dany bit jest ustawiony.
Dozwolone argumenty: bit,rel.
JNB - skok warunkowy.
Dzia艂anie: wykonuje skok, je偶eli dany bit jest wyzerowany.
Dozwolone argumenty: bit,rel.
JBC - skok warunkowy.
Dzia艂anie: gdy dany bit jest ustawiony, to nast膮pi skok i wyzerowanie bitu.
Dozwolone argumenty: bit,rel.
CJNE - skok warunkowy, zale偶ny od wyniku por贸wnania.
Dzia艂anie: nast臋puje por贸wnanie operand贸w, je偶eli s膮 r贸偶ne, to nast臋puje skok.
Dozwolone argumenty: A,direct,rel A,#data,rel Rr,#data,rel @Ri,#data,rel.
Modyfikowane znaczniki: C (ustawiany, je偶eli pierwszy operand mniejszy od drugiego).
DJNZ - skok warunkowy, zale偶ny od wyniku dekrementacji.
Dzia艂anie: nast臋puje dekrementacja zawarto艣ci operandu, je偶eli zawarto艣膰 nie osi膮gn臋艂a zera, to nast膮pi skok.
Dozwolone argumenty: Rr,rel direct,rel.
Specyficznym rozkazem nie kwalifikuj膮cym si臋 do powy偶szych grup jest rozkaz NOP (jego kod binarny to 00H). Jego wykonanie nie wywo艂uje 偶adnych efekt贸w, zajmuje jedynie czas 1 cyklu maszynowego. Cz臋sto jest on wykorzystywany jako rezerwacja miejsca pami臋ci przeznaczonego na p贸藕niejsz膮 rozbudow臋 programu, lub jako niewielkie (1 cykl) op贸藕nienie w wykonywaniu programu.