opis_8051.pdf

(413 KB) Pobierz
Microsoft Word - opis_8051.doc
Laboratorium Podstaw Techniki Mikroprocesorowej
Instytut Mikroelektroniki i Optoelektroniki PW
Obszar rejestrów specjalnych
MIKROKONTROLER 8051 - wiadomości podstawowe
1. Schemat blokowy mikrokontrolera 8051
F8H FFH
F0H B F8H
E8H EFH
E0H ACC E7H
D8H DFH
D0H PSW D7H
C8H T2CON RCAP2L RCAP2H TL2 TH2 CFH
C0H C7H
B8H IP BFH
B0H P3 B7H
A8H IE AFH
A0H P2 A7H
98H SCON SBUF 9FH
90H P1 97H
88H TCON TMOD TL0 TL1 TH0 TH1 8FH
80H P0 SP DPL DPH 87H
Adresowane
bitowo
3. Wybrane rejestry specjalne:
3.1 Rejestr stanu PSW (program status word)
Rejestr adresowany bitowo.
2. Struktura wewnętrznej pamięci danych mikrokontrolera Intel 8051
CY AC F0 RS1 RS0 OV - P
RAM dla użytkownika
CY PSW.7 - wskaźnik przeniesienia (symbol w asemblerze C)
AC PSW.6 - wskaźnik przeniesienia połówkowego
F0 PSW.5 - wskaźnik ogólnego przeznaczenia do wykorzystania przez programistę
RS1 PSW.4 - bit wyboru banku rejestrów
RS0 PSW.3 - bit wyboru banku rejestrów
OV PSW.2 - wskażnik nadmiaru (dla obliczeń w kodzie BCD)
-
007FH
obszar adresowany
bajtowo
0030H
002FH
obszar adresowany
bitowo
PSW.1 - wskaźnik definiowany przez użytkownika
0020H
P
PSW.0 - wskaźnik parzystości (ustawiany sprzętowo jeżeli liczba jedynek w akumulatorze jest
nieparzysta, zerowany w przeciwnym przypadku)
001FH
bank rejestrów nr
3
0018H
Wybór ban ku rejestrów
0017H
bank rejestrów nr
2
RS1
RS0
Bank rejestrów
Adres
0010H
0
0
1
1
0
1
0
1
0
1
2
3
00H-07H
08H-0FH
10H-17H
18H-1FH
bank rejestrów nr
1
0007H R7
0008H
3.2 Rejestry związane systemem przerwań
Mikrokontroler 8051 posiada 5 źródeł przerwań: 2 przerwania zewnętrzne, przerwanie od liczników
T0 i T1 oraz od portu szeregowego. Wektory przerwań przypisane konkretnym źródłom przerwań są
następujące:
0
0000H R0
bank rejestrów nr
1
000FH
321892725.051.png 321892725.062.png 321892725.073.png 321892725.084.png 321892725.001.png 321892725.002.png 321892725.003.png 321892725.004.png 321892725.005.png 321892725.006.png 321892725.007.png 321892725.008.png 321892725.009.png 321892725.010.png 321892725.011.png 321892725.012.png 321892725.013.png 321892725.014.png 321892725.015.png 321892725.016.png 321892725.017.png 321892725.018.png 321892725.019.png 321892725.020.png 321892725.021.png 321892725.022.png 321892725.023.png 321892725.024.png 321892725.025.png 321892725.026.png 321892725.027.png 321892725.028.png 321892725.029.png 321892725.030.png 321892725.031.png 321892725.032.png 321892725.033.png 321892725.034.png 321892725.035.png 321892725.036.png 321892725.037.png 321892725.038.png 321892725.039.png 321892725.040.png 321892725.041.png 321892725.042.png 321892725.043.png 321892725.044.png 321892725.045.png 321892725.046.png 321892725.047.png 321892725.048.png
Źródło przerwania
Znacznik przerwania
Wektor przerwania
IT0 TCON.0 - bit wyboru typu przerwania z zewnętrznego źródła nr 0 (programowe
ustawienie/zerowanie bitu powoduje, że przerwanie jest wywoływane przez opadające
zbocze/niski poziom).
źródło zewnętrzne nr 0
licznik T0
źródło zewnętrzne nr 1
licznik T1
port szeregowy
IE0
TF0
IE1
TF1
RI&TI
0003H
000BH
0013H
001BH
0023H
3.3.2 Rejestr sterowania trybem pracy liczników TMOD (Timer/Counter Mode Control Register)
Rejestr nie jest adresowany bitowo.
GATE C/T
M1
M0 GATE C/T
M1
M0
3.2.1 Rejestr aktywacji przerwań IE (Interrupt Enable Register)
Rejestr adresowany bitowo. Jeżeli dany bit jest równy zero, związane z nim przerwanie nie jest aktywne.
Nadanie bitowi wartości równej 1 uaktywnia związane z nim przerwanie.
1444442444443 1444442444443
licznik T1 icznik T0
GATE - bramkowanie licznika sygnałem zewnętrznym, jeżeli GATE=1
C/T - wybór funkcji: C/T=1 - licznik impulsów zewn., C/T=0 - czasomierz (zlicza impulsy zegara).
M1 - bit wyboru trybu pracy
M0 - bit wyboru trybu pracy
EA -
- ES ET1 EX1 ET0 EX0
EA IE.7 - globalny bit aktywacji przerwań. Jeżeli EA=0, żadne przerwanie nie zostanie
przyjęte, jeżeli EA=1, aktywacja przerwań z danego źródła zależy od stanu
indywidualnego bitu aktywacji przerwań tego źródła.
ES IE.4 - indywidualny bit aktywacji przerwań z portu szeregowego
ET1 IE.3 - indywidualny bit aktywacji przerwań z licznika T1
EX1 IE.2 - indywidualny bit aktywacji przerwań ze źródła zewnętrznego nr 1
ET0 IE.1 - indywidualny bit aktywacji przerwań z licznika T0
EX0 IE.0 - indywidualny bit aktywacji przerwań ze źródła zewnętrznego nr 0
M1 M0 Tryb pracy
Opis
0
0
1
1
0
1
0
1
0
1
2
3
13-bitowy czasomierz
16-bitowy czasomierz/licznik
8-bit. licznik/czasomierz z automatycznym przeładowaniem
oba rejestry licznika T0 stają się niezależnymi 8-bitowymi
licznikami/czasomierzami. Licznik T1 zatrzymany.
3.2.2 Rejestr priorytetów przerwań IP (Interrupt Priority Register)
W systemie przerwań mikrokontrolera 8051 przewidziano 2 poziomy priorytetu: wyższy i niższy.
Jeżeli odpowiedni bit ma wartość 1, przerwania z nim związane ma priorytet wyższy, jeżeli wartość bitu wynosi
0, odpowiadające mu przerwanie ma priorytet niższy.
-
-
- PS PT1 PX1 PT0 PX0
PS IP.4 - określa priorytet przerwania z portu szeregowego
PT1 IP.3 - określa priorytet przerwania z licznika T1
PX1 IP.2 - określa priorytet przerwania ze źródła zewnętrznego nr 1
PT0 IP.3 - określa priorytet przerwania z licznika T0
PX0 IP.2 - określa priorytet przerwania ze źródła zewnętrznego nr 0
Aby uniknąć konfliktu w obrębie danego poziomu, została ustalona następująca kolejność:
3.3. Rejestry związane z licznikami T0 i T1
3.3.1 Rejestr sterowania licznikami TCON (Timer/Counter Control Register)
Rejestr adresowany bitowo.
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF1 TCON.7 - wskaźnik przerwania z licznika T1 (ustawiany i zerowany sprzętowo)
TR1 TCON.6 - bit aktywacji licznika T1 (ustawiany/zeroany programowo, aby uruchomić/zatrzymać
licznik).
TF0 TCON.5 - wskażnik przerwania z licznika T0 (ustawiany i zerowany sprzętowo)
TR0 TCON.4 - bit aktywacji licznika T0 (ustawiany/zeroany programowo, aby uruchomić/zatrzymać
licznik).
IE1 TCON.3 - wskaźnik przerwania z zewnętrznego źródła nr 1 (ustawiany i zerowany sprzętowo).
IT1 TCON.2 - bit wyboru typu przerwania z zewnętrznego źródła nr 1 (programowe
ustawienie/zerowanie bitu powoduje, że przerwanie jest wywoływane przez opadające
zbocze/niski poziom).
IE0 TCON.1 - wskaźnik przerwania z zewnętrznego źródła nr 0 (ustawiany i zerowany sprzętowo).
2
321892725.049.png 321892725.050.png 321892725.052.png 321892725.053.png 321892725.054.png 321892725.055.png 321892725.056.png 321892725.057.png
SCON.1 (TI) - znacznik przerwania związanego z transmisją (zerowany programowo)
SCON.0 (RI) - znacznik przerwania związanego z odbiorem (zerowany programowo)
SM01 SM1 Tryb pracy
Opis
Częstotliwość
0
0
1
1
0
1
0
1
0
1
2
3
przesył synchroniczny
przesył asynchroniczny (8 bitów)
przesył asynchroniczny (9 bitów)
przesył asynchroniczny (9 bitów)
f osc /12
regulowana
f osc /32 lub f osc /64
regulowana
2
SMOD
Częstotliwość w trybie 2:
f
f
64
osc
Częstotliwość w trybach 1 i 3 jest określona przez zawartość rejestru TH1:
2
SMOD
f
f
=
osc
32
12
[
256
(
TH1
)
]
Licznik T1 zwykle pracuje wówczas jako czasomierz w trybie 2 (licznik 8-bitowy z automatycznym
przeładowaniem).
3.4.2. Rejestr PCON
Bit SMOD znajduje się w rejestrze PCON (adres 87H):
Rejestr PCO N nie jest adresowany bitowo.
SMOD -
-
-
GF1 GF0 PD IDL
SMOD -
bit podwojenia częstotliwości przesyłu danych w trybach 1, 2 i 3 portu szeregowego
GF1 -
wskaźnik (flaga) ogólnego przeznaczenia
GF0 -
wskaźnik (flaga) ogólnego przeznaczenia
PD -
bit aktywacji trybu POWER DOWN (tryb pracy z obniżonym poborem mocy)
IDL -
bit aktywacji trybu IDLE (tryb pracy z obniżonym poborem mocy)
4. Lista rozkazowa
3. 4 Rejestry związane z portem szeregowym
Port szeregowy jest w pełni dwukierunkowy (full duplex). Odbiór danych jest buforowany, tzn.
można rozpocząć odbiór drugiego bajtu zanim jego poprzednik zostanie odczytany z rejestru odbiornika (jeżeli
jednak w momencie gdy zakończył się odbiór drugiego bajtu, poprzedni nadal nie został odczytany, jeden bajt
zostanie bezpowrotnie stracony). Rejestr nadajnika i odbiornika są dostępne jako rejestr specjalny SBUF,
chociaż w rzeczywistości są to dwa odrębne rejestry (zapis do SBUF powoduje załadowanie wartości do rejestru
nadajnika, natomiast odczyt z SBUF to odczyt z rejestru odbiornika).
oznaczenia:
A
-
akumulator
C
-
wskaźnik przeniesienia
DPTR
-
wskaźnik danych, rejestr 16-bitowy
Rn
-
rejestr R0-R7 z aktywnego banku rejestrów
direct
-
8-bitowy adres lokacji w wewnętrznej pamięci danych (adresowanie
bezpośrednie)
@Ri
-
8-bitowa lokacja w wewnętrzej pamięci danych dostępna pośrednio poprzez
zawartość rejstru R1 lub R0 (adresowanie rejestrow pośrednie)
3.4.1 Rejestr SCON sterujący pracą portu szeregowego
#n
-
8-bitowa stała (adresowanie natychmiastowe)
#nn
-
16-bitowa stała (adresowanie natychmiastowe)
Rejestr SCON dostępny bitowo
bit
-
adres bitu dostępnego bezpośrednio (z obszaru 20H-2FH wewnętrznej pamięci
danych lub z niektórych rejestrów specjalnych)
SM0 SM1 SM2 REN TB8 RB8
TI
RI
/bit
-
negacja zawartości bitu o adresie "bit"
SCON.7 (SM0) - wybór trybu pracy portu szeregowego
SCON.6 (SM1) - wybór trybu pracy portu szeregowego
SCON.5 (SM2) - jeżeli SM2=1, to przerwanie związane z odebraniem znaku zgłasza się tylko wtedy, gdy
RB8=1.
SCON.4 (REN) - bit odblokowania odbioru (REN=1 odblokowuje odbiór)
SCON.3 (TB8) - 9-ty bit danych transmitowany w trybie 2 lub 3, wartość nadawana programowo
SCON.2 (RB8) - 9-ty bit danych odebrany w trybie 2 lub 3, albo bit stopu w trybie 0 lub 1
rel
-
przesunięcie 8-bitowe o wartościach zawartych w przedziale <-128, 127>
etykieta
-
adres 11-bitowy lub 16-bitowy
3
=
321892725.058.png 321892725.059.png 321892725.060.png 321892725.061.png 321892725.063.png 321892725.064.png 321892725.065.png 321892725.066.png 321892725.067.png 321892725.068.png 321892725.069.png 321892725.070.png 321892725.071.png 321892725.072.png
Tryby adresowania wewnętrznej pamięci danych:
a) Adresowanie bezpośrednie (możliwe dla całego obszaru) np. instrukcja:
mov A, 32H ⇒ (A)←(32H)
oznacza, że do akumulatora podstawiana jest zawartość komórki pamięci o adresie 32H.
UWAGA !!! Jeżeli trzeba zastosować adresowanie bezpośrednie w stosunku do akumulatora, to występuje on
jako ACC , np. instrukcje push ACC i pop ACC .
b)
Instrukcja
Długość
(bajty)
Czas
(cykle)
Opis
DEC A
DEC n
DEC direct
DEC i
1
1
2
1
1
1
1
1
Dekrementacja
(zmniejszanie o 1)
Adresowanie natychmiastowe, np. instrukcja:
mov A, #32H
(A)←32H
MUL B
1
4 Mnożenie A⋅B (młodszy bajt wyniku w A, starszy w B)
oznacza, że do akumulatora podstawiana jest wartość 32H.
c) Adresowanie przez nazwę rejestru, dotyczy akumulatora, rejestru DPTR oraz rejestrów R0-R7 z
wybranego banku rejestrów, np. instrukcja:
mov A , R0
DIV B
1
4 Dzielenie całkowite A/B (wynik dzielenia w A, reszta
dzielenia w B)
(A)←(R0)
DA A
1
1 Korekcja dziesiętna (dla kodu BCD)
oznacza, że do akumulatora jest podstawiana zawartość rejestru R0
d) Adresowanie rejestrowe pośrednie (dla obszaru 0000H-007FH), np. instrukcja
mov A, @R0 ⇒ (A)←((R0))
oznacza, że do akumulatora wpisywana jest zawartość komórki pamięci, której adres znajduje się w rejestrze
R0.
e) Adresowanie bezpośrednie bitów (dla obszaru 0020H-002FH oraz rejestrów specjalnych,
adresowanych bitowo np. instrukcja:
mov C , ACC.7 ⇒ (C)←(ACC.7)
oznacza, że do wskaźnika przeniesienia C (PSW.7) wpisywana jest wartość najstarszego bitu akumulatora
Inne przykłady adresowania bezpośredniego bitów:
mov TCON.5, C
jb 21H.3, skacz
jnb P1.0, pętla
4.2 Operacje logiczne
Instrukcja
Długość
(bajty)
Czas
(cykle)
Opis
ANL A, Rn
ANL A, direct
ANL A, @Ri
ANL A, #n
ANL direct, A
ANL direct, #n
1
2
1
2
2
3
1
1
1
1
1
2
iloczyn logiczny (wynik w pierwszym argumencie)
ORL A, Rn
ORL A, direct
ORL A, @Ri
ORL A, #n
ORL direct, A
ORL direct, #n
1
2
1
2
2
3
1
1
1
1
1
2
suma logiczna (wynik w pierwszym argumencie)
4.1 Operacje arytmetyczne
Jednym z argumentów dwuargumentowych operacji arytmetycznych jest zawsze akumulator, wynik operacji
również jest umieszczony w akumulatorze.
XRL A, Rn
XRL A, direct
XRL A, @Ri
XRL A, #n
XRL direct, A
XRL direct, #n
1
2
1
2
2
3
1
1
1
1
1
2
suma rozłączna - exclusive-or (wynik w pierwszym
argumencie)
Instrukcja
Długość
(bajty)
Czas
(cykle)
Opis
ADD A, Rn
ADD A, direct
ADD A, @Ri
ADD A, #n
1
2
1
2
1
1
1
1
Dodawanie bez przeniesienia
CLR A
1
1 zerowanie akumulatora
CPL A
1
1 negacja poszczególnych bitów akumulatora
RL A
1
1 rotacja akumulatora w lewo
ADDC A, Rn
ADDC A, direct
ADDC A, @Ri
ADDC A, #n
1
2
1
2
1
1
1
1
Dodawanie z przeniesieniem
RLC A
1
1 rotacja w lewo poprzez bit przeniesienia
RR A
1
1 rotacja akumulatora w prawo
RRC A
1
1 rotacja w prawo poprzez bit przeniesienia
SWAP A
1
1 zamiana połówek akumulatora
SUBB A, Rn
SUBB A, direct
SUBB A, @Ri
SUBB A, #n
1
2
1
2
1
1
1
1
Odejmowanie (zawsze z pożyczką)
INC A
INC n
INC direct
INC i
INC P R
1
1
2
1
1
1
1
1
1
2
Inkrementacja (zwiększanie o 1)
4
321892725.074.png 321892725.075.png
4.3 Przesłania danych
Instrukcja
Długość
(bajty)
Czas
(cykle)
Opis
4.5 Skoki w programie
Instrukcja
Długość
(bajty)
Czas
(cykle)
Opis
MOV A, Rn
MOV A, direct
MOV ,@i
MOV A,#n
MOV Rn, A
MOV Rn, direct
MOV Rn, #n
MOV direct, A
MOV direct, Rn
MOV direct, direct
MOV direct, @Ri
MOV direct, #n
MOV @Ri, A
MOV @Ri, direct
MOV @Ri, #n
MOV DPTR, #nn
1
2
1
2
1
2
2
2
2
3
2
3
1
2
2
3
1
1
1
1
1
2
1
1
2
2
2
2
1
2
1
2
przesłanie w obrębie wewnętrznej pamięci danych
(pierwszy argument jest celem, drugi źródłem)
*) CALL etykieta
-
- wywołanie procedury etykieta
RET
RETI
1
1
´2
2
powrót z procedury
powrót z procedury obsługi przerwania
*) JMP etykieta
-
- skok bezwarunkowy
JZ rel
JNZ rel
2
2
2
2
skok warunkowy, jeżeli A=0
skok warunkowy, jeżeli A≠0
CJNE A, direct, rel
CJNE A, #n, rel
CJNE Rn, #n, rel
CJNE @Ri, #n, rel
3
3
3
3
2
2
2
2
porównaj dwa pierwsze argumenty i skacz jeżeli nie są
sobie równe
DJNZ Rn, rel
DJNZ direct, rel
2
3
2
2
zdekrementuj pierwszy argument i skacz, jeżeli wynik
różny od zera
NOP
1
1 nic nie rób
5. Komunikacja z zewnętrzną pamięcią danych
MOVC A, @A+DPTR
MOVC A, @A+PC
1
1
2
2
przesłania pomiędzy pamięcią programu i akumulatorem
MOVX A, @DPTR
MOVX A, @Ri
MOVX @DPTR, A
MOVX @Ri, A
1
1
1
1
2
2
2
2
przesłania z /do zewnętrznej pamięci danych
PUSH direct
POP direct
2
2
2
2
położenie na stos
zdjęcie ze stosu
XCH ,n
XCH A,direct
XCH ,i
1
2
1
1
1
1
wymiana zawartości między rejestrami
XCHD A, @Ri
1
1 wymiana młodszej cyfry
4.4 Operacje na bitach
Instrukcja
Długość
(bajty)
Czas
(cykle)
Opis
6. Komunikacja z zewnętrzną pamięcią programu
CLR C
CLR bit
1
2
1
1
zerowanie wskaźnia przeniesienia C
zerowanie bitu
SETB C
SETB bit
1
2
1
1
ustawianie wskaźnia przeniesienia C
ustawianie bitu
CPL C
CPL bit
1
2
1
1
negacja wskaźnia przeniesienia C
negacja bitu
ANL C,bit
ANL C, /bit
2
2
2
2
iloczyn logiczny
ORL C,bit
ORL C, /bit
2
2
2
2
suma logiczna
MOV C, bit
MOV bit, C
2
2
1
2
przesłanie
JC rel
JNC rel
2
2
2
2
skacz, jeżeli C=1
skacz, jeżeli C=0
JB bit, rel
JNB bit, rel
3
3
2
2
skacz, jeżeli bit=1
skacz, jeżeli bit=0
*) W rzeczywistoœci istnieje więcej wariantów tej instrukcji. W zależności od sytuacji asembler przetłumaczy formę podaną
w tabeli na odpowiedni wariant .
JBC bit, rel
3
2 skacz, jeżeli bit=1i wyzeruj bit
5
321892725.076.png 321892725.077.png 321892725.078.png 321892725.079.png 321892725.080.png 321892725.081.png 321892725.082.png 321892725.083.png 321892725.085.png 321892725.086.png 321892725.087.png 321892725.088.png 321892725.089.png 321892725.090.png 321892725.091.png 321892725.092.png
Zgłoś jeśli naruszono regulamin