O mnie
Kim jestem? Wejdź tu, a się dowiesz..

Mikrokontroler 89C2051
Wiesz co to jest procesor? A wiesz czym różni się on od mikrokontrolera? A potrafisz już programować mikrokontrolery? To naprawdę fajna zabawa. Przekonaj się :)

Połącz dwa komputery
Jak połączyć dwa komputery bez karty sieciowej? Poczytaj o komunikacji szeregowej i równoległej, i zrób sobie coś takiego

Linki
Odwiedź też inne strony w Internecie

Księga Gości
Zostaw jakiś ślad po sobie. Napisz to, co chcesz, byle kulturalnie

Kontakt
Podoba Ci się ta stronka? A może masz pomysł jak ją ulepszyć? Każda uwaga mile widziana. Złap mnie na skrzynce lub GG
dosu@op.pl
GG 2101711

Home
Powrót do wstępniaka


Co to jest komputer? /  Pamięć i rejestry /  Budowa 89C2051 /  Programujemy

Pamięć i rejestry

W zależności od tego z jakim typem mamy do czynienia, możemy spotkać się z różną wielkością wewnętrznej pamięci programu. W przypadku mikrokontrolera 8051 ta pamięć jest dla nas całkowicie bezużyteczna gdyż tak naprawdę nie wiadomo jaki program jest w niej zapisany. Sam proces zapisu odbywa się podczas produkcji danego mikrokontrolera i nie można w żaden sposób tego zmienić. Potrzeba jest zatem aby dołączyć do niego dodatkową zewnętrzną pamięć programu. Swego czasu w miesięczniku "Elektronika dla Wszystkich" ukazał się cykl artykułów pt. "Mikrokontrolery? To takie proste", gdzie dokładnie ten temat poruszono. My jednak mamy się zajmować procesorkiem 89C2051, a on posiada w swym wnętrzu pamięć programu typu EEPROM. Dzięki temu TY jako programista możesz napisać jakiś bardziej lub mniej ładny program i go tam umieścić. W tym właśnie tkwi jego potęga. Dokładniej zostanie to omówione w następnej części.

Jeśli chodzi o pamięć danych (czyli RAM), to jak już wcześniej wspomniałem mamy do dyspozycji 128 bajtów. Dostęp do tych komórek mamy poprzez adresy od 0-7Fh (notacja szesnastkowa). Powyżej, od adresów 80h-FFh znajdują się Rejestry Specjalne, tak zwane SFR. Przestrzeń ta nie jest wykorzystana cała. Puste miejsca są przeznaczone do wykorzystania w przyszłości przez producentów. Procesor odwołując się do do SFR używa tego samego trybu adresowania co w przypadku odwołań do RAM'u. Na przykład chcąc zapisać jakąś daną pod adresem 50h procesor wysyła tą daną pod ten adres. Jest to oczywiste. Jeśli jednak chcemy wystawić jakąś daną np. na port P1, to musimy wpisać ją do jednego z rejestrów SFR który jest odpowiedzialny za port P1. Jego adres w SFR to 90h. Zatem wystawiając daną na port P1, procesor adresuje komórkę pamięci 90h. Uprzywilejowany pod tym względem jest akumulator i rejestr DPTR. Do tych rejestrów odwołujemy się poprzez inne kody. W niczym jednak nie komplikuje to sprawy. Warto w tym momencie wspomnieć, że 16-bitowy rejestr DPTR nie występuje w procesorze 89C2051. Jest on swego rodzaju pomostem między procesorem a zewnętrzną pamięcią. Ponieważ 89C2051 nie obsługuje jej, więc temat rejestru DPTR w tym miejscu pominę.

A oto wykaz rejestrów specjalnych (od razu zaznaczam, że nie wszystkie z nich są do wykorzystania w 89C2051):

Adres (hex)SymbolNazwa
E0ACCAkumulator
F0BRejestr B
D0PSWRejestr stanu
81SPWskaźnik stosu
83DPHBity 8-15 wskaźnika DPTR
82DPLBity 0-7 wskaźnika DPTR
80P0Port 0
90P1Port 1
A0P2Port 2
B0P3Port 3
B8IPPriorytet przerwań
A8IESterowanie przerwaniami
88TCONSterowanie i kontrola liczników
89TMODWybór trybu pracy liczników
8CTH0Bity 8-15 licznika T0
8ATL0Bity 0-7 licznika T0
8DTH1Bity 8-15 licznika T1
8BTL1Bity 0-7 licznika T1
C8T2CONSterowanie licznikiem T2
CDTH2Bity 8-15 licznika T2
CCTL2Bity 0-7 licznika T2
CBRLDHBity 8-15 słowa ładowanego do T2
CARLDLBity 0-7 słowa ładowanego do T2
98SCONSterowanie portem szeregowym
99SBUFBufor portu szeregowego
87PCONSterowanie zasilaniem

Oczywiście każdy procesor potrzebuje również tzw. rejestrów operacyjnych na których wykonywane są działania arytmetyczne, czy przechowywane jakieś dane. Do operacji arytmetycznych posługujemy się rejestrem A (Akumulator), a w przypadku mnożenia i dzielenia również rejestrem B. Obydwa te rejestry możemy wykorzystać również do chwilowego przechowywania danych.

Oprócz tego nasz procesor udostępnia nam 4 banki rejestrów po 8 w każdym. Oznaczane są one jako R0, R1...R7. W danej chwili mamy dostęp do jednego banku. Odwołując się więc np. do R2 odwołujemy się do rejestru R2 z aktywnego banku. Wybór aktywnego banku wybiera się poprzez odpowiednie ustawienie konkretnych dwóch bitów w rejestrze stanu procesora.

Gdyby bliżej przyjrzeć się tym rejestrom, to zauważyć można że ich zawartość pokrywa się z pewnymi obszarami w pamięci RAM. I tak bank pierwszy odpowiada komórkom pamięci 0-7h. Bank drugi to adresy 8-0Fh i tak dalej. Zatem dla banku pierwszego zapis danej do rejestru np. R3 jest równoznaczny z zapisem tej danej do komórki o adresie 3h. No i po co to całe zamieszanie skoro to jest to samo? Wykorzystując rejestry mamy dostęp do pewnych trybów adresowania, których nie możemy użyć przy adresowaniu pamięci (gdy podajemy adres komórki zamiast nazwy rejestru). Dokładniej zrozumiesz to na przykładach programów zamieszczonych w dalszej części.

Warto w tym miejscu również zwrócić uwagę na to , że stos procesora również znajduje się w pamięci danych. Standardowo (po załączeniu naszego procesorka i w przypadku wyresetowania go) aktywny jest pierwszy bank rejestrów, a a stos znajduje tuż za nim. Struktura stosu jest jednak odmienna niż w większości procesorów. Otóż, odkładając jakieś dane na stos, wskaźnik stosu ROŚNIE. Zdejmując daną ze stosu, zmniejszamy wskaźnik stosu. We wszystkich znanych mi dotychczas procesorach sytuacja ta wygląda odwrotnie.

W następnej części znajdziesz kilka niezbędnych informacji z którymi musisz zapoznać się przed programowaniem. Zapraszam Cię więc do dalszej części

dalej >>