
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) | Symbol | Nazwa |
| E0 | ACC | Akumulator |
| F0 | B | Rejestr B |
| D0 | PSW | Rejestr stanu |
| 81 | SP | Wskaźnik stosu |
| 83 | DPH | Bity 8-15 wskaźnika DPTR |
| 82 | DPL | Bity 0-7 wskaźnika DPTR |
| 80 | P0 | Port 0 |
| 90 | P1 | Port 1 |
| A0 | P2 | Port 2 |
| B0 | P3 | Port 3 |
| B8 | IP | Priorytet przerwań |
| A8 | IE | Sterowanie przerwaniami |
| 88 | TCON | Sterowanie i kontrola liczników |
| 89 | TMOD | Wybór trybu pracy liczników |
| 8C | TH0 | Bity 8-15 licznika T0 |
| 8A | TL0 | Bity 0-7 licznika T0 |
| 8D | TH1 | Bity 8-15 licznika T1 |
| 8B | TL1 | Bity 0-7 licznika T1 |
| C8 | T2CON | Sterowanie licznikiem T2 |
| CD | TH2 | Bity 8-15 licznika T2 |
| CC | TL2 | Bity 0-7 licznika T2 |
| CB | RLDH | Bity 8-15 słowa ładowanego do T2 |
| CA | RLDL | Bity 0-7 słowa ładowanego do T2 |
| 98 | SCON | Sterowanie portem szeregowym |
| 99 | SBUF | Bufor portu szeregowego |
| 87 | PCON | Sterowanie 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 >>
|