51.doc

(132 KB) Pobierz
Rozkaz CJNE – działanie, warianty, bajty, cykle m-li

Rozkaz CJNE – działanie, warianty, bajty, cykle m-li

CJNE ma trzy warianty: CJNE A,#n,d ; CJNE Rr,#n,d – 1)pobr. rozkazu, 2)pobr. danej natychmiastowej, 3)pobr. przesunięcia ; CJNE @Rr,#n,d – 1)pobr. rozkazu, 2)pobr. danej natychmiastowej, 3)pobr. przesunięcia, 4)pobr. danej wskazywanej przez adres zawarty w rej. Rr

@ -w mnemoniku poprzedza adres pośredni,

# -w mnemoniku poprzedza argument bezpośredni.

CJNE porównuje daną z daną natychmiastową i wykonuje skok względny o przesunięcie d pod warunkiem, że dane nie są równe. Skok zawiera się     [-128,127]

CJNE zmienia stan flagi C:

C=0 gdy A>=n  ;  C=1 gdy A<n

 

Jakie błędy może wykryć mC na linii RXD

mC nie posiada sprzętowego mechanizmu wykrywania błędów. Można takie wykrywanie zrealizować programowo dla interfejsu szeregowego pracującego w trybie 2,3 (przesyłane 9 bitów). mC musi wykonać następujące czynności: 1)przenieść bit RB9 do rej. np.F0, 2)przenieść zawartość bufora SBUF do akumulatora, 3)porównać flagę F0 z flagą P

- jeżeli te flagi są równe to znak został przesłany poprawnie dla transmisji z kontrolą parzystości,

- jeżeli flagi nie są równe tzn. że znak został przesłany poprawnie dla transmisji z kontrolą nieparzystości

 

MOV F0,RB9

MOV A,SBUF

EXL F0,P   (exor logiczny)

 

 

 

Co to jest obszar rejestrów specjalnych SFR?

W ramach wewn. pamięci danych w obszarze 128-255 (80h-FFh) jest umieszczona grupa rej. specjalnych SFR (PCON, TCON, SBUF, TMOD, PSW, ACC, B, DPTR itp.). Dostęp do obszaru SFR pamięci jest możliwy wyłącznie poprzez adresowanie bezpośrednie. Tylko do niektórych z rej. specjalnych (np. ACC, B, DPTR) można się odwoływać poprzez nazwę. Wśród tych rej. znajdują się m.in. porty we-wy oraz rej. sterujące pracą bloków funkcjonalnych mC.

 

Organizacja stosu

W wewnętrznej pamięci danych w obszarze pamięci użytkowej może być umieszczony stos o dowolnej wielkości (ograniczony pojemnością pamięci), adresowany przez 8bitowy wskaźnik stosu SP (SFR adres 81h) wskazujący jego wierzchołek. Wskaźnik przed każdym zapisem na stos jest zwiększany o 1, a po każdym odczycie zmniejszany o 1. Na stosie podczas wykonywania rozkazu skoku do podprogramu (CALL) oraz po przyjęciu przerwania jest zapisywana automatycznie zawartość licznika rozkazów (2 bajty). Ponadto za pomocą rozkazu PUSH może być tam także zapisana zawartość dowolnej (adresowanej bezpośrednio) komórki wewnętrznej pamięci danych (również rej. specjalnych). Zdejmowanie informacji ze stosu następuje w wyniku wykonania rozkazów powrotu RET lub RETI, powodujących odtworzenie stanu licznika rozkazów, oraz rozkazu POP powodującego wpisanie zdejmowanych danych pod wskazany adres bezpośredni w pamięci.

 

 

 

 

 

SP i PC

SP – wskaźnik stosu umieszczony w SFR 81h-wierzchołek, pamięć programu jest adresowana przez PC.

PC – licznik rozkazów 16bitowy. Bity 11 do 15 wyznaczają numer strony pamięci, bity 0 do 10 określają adres na stronie. W czasie zerowania (RESET) PC jest zerowany.

 

Programowanie bitowe

Rozkazy działające na bitach umożliwiają przesyłanie i wykonywanie operacji logicznych (AND, OR, NOT) na pojedynczych bitach z adresowanego bitowo obszaru wewnętrznej pamięci danych. Funkcję akumulatora dla operacji logicznych na bitach spełnia znacznik przeniesienia CY.

 

Adresowanie bitowe

Rejestry umieszczone w wewnętrznej pamięci danych jako rej. specjalne SFR, które mogą być adresowane bitowo, a więc zapisywanie i odczytywanie danych może odbywać się za pomocą dowolnych rozkazów z adresem bezpośrednim dotyczącym wewnętrznej pamięci danych, oraz za pomocą rozkazów wykonujących operacje na bitach. Adresowanie bezpośrednie (8bitowy adres w treści rozkazu) obejmuje:

- pamięć urzytkową RAM, tzn. adresy 0-127,

- obszar rej. spec. tzn. adresy 128-255, jest to jedyny sposób adresowania rej. z obszaru SFR.

Cała wewn. pamięć danych może być adresowana bitowo np. MOV A,25  . Adresowanie bezpośrednie bitów (8bitowy adres w treści rozkazu) obejmuje obszar pamięci użytkowej ROM o adresach 32-47 i cześć rej. spec.

 

Instrukcje do tworzenia pętli programowych

8051 nie posiada gotowych instrukcji do tworzenia pętli programowych. Można je realizować poprzez rozkazy skoków warunkowych (JZ, JNZ, JC, JNC, JB,JNB, JBC, CJNE, DJNZ). Są to skoki krótkie w obrębie 256bajtów       [-128-127]. Można to realizować poprzez skok w tył o jakąś wartość w powyższym zakresie.

 

Do czego służy bit nr 9 w transmisji szeregowej

W trybach 2, 3 bit 9 (D8) jest pobierany do wysłania z pozycji TB8, a ten odebrany jest wpisywany na pozycję RB8 w rej. SCON. Jeżeli w słowie SCON jest SM2=0 , to wartość bitu D8 jest nieistotna. Przed wysłaniem znaku może być ona ustalona programowo i wpisana do znacznika TB8, a po odebraniu znaku, odczytana ze znacznika RB8 i przeanalizowana programowo, zgodnie z przyjętym protokołem transmisji, np. jako bit parzystości.

W komunikacji wieloprocesorowej, gdy procesor nadrzędny wysyła bajt adresu określający procesor docelowy, to bajt danych i adresu różnią się tym, że bit 9 bajtu adresu jest „1”, a bit 9 bajtu danych jest „0”

 

Co się dzieje po sygnale RESET (SBUF, PC, SP)?

Po sygnale RESET   PC jest zerowany i mC staruje od lokacji 0000h.

Do wskaźnika stosu SP (81h) wpisuje się wartość 07h. Wartość rej. SBUF po sygnale RESET jest nieokreślona.

 

 

 

 

 

 

Najdłuższa instrukcja 8051

Dzielenie:  DIV AB    (A)15-8     [A/B]           1bajt

                                  (B)7-0                         4cykle

Mnożenie: MUL AB   (B)15-8     [A*B]          1bajt

                                  (A)7-0                         4cykle

8bitowa liczba bez znaku, znajdująca się w akumulatorze, jest dzielone/mnożone przez 8bitową liczbę bez znaku z rej. B

 

Operacje arytmetyczne

operacja

ADD

ADDC

SUBB

INC

DEC

                                                                        

MUL

DIV

DA

 

Multipleksowana szyna danych i adresów

Kiedy zachodzi potrzeba komunikacji z pamięcią zewn. 8051 wysyła starszy bajt adresu przez port P2, a młodszy bajt adresu i dane przez port P0. Współpracują przy tym także sygnały ALE, PSEN oraz dwa wyjścia P3 (RD, WR) do sterowania pamięcią. Sygnał ALE jest wykorzystywany do zatrzaskiwania adresu wybierającego żądany bajt pamięci zewnętrznej. Sygn. PSEN odczytuje daną z pamięci programu za pomocą P0. RD odczytuje daną z zewn. pamięci danych przez port P0, zaś sygn. WR zapisuje daną do zewn. pamięci danych. Wszystko to odbywa się poprzez zapamiętanie w dodatkowym rej. adresu wysłanego do portu P0. Może do tego służyć np. rej. statyczny 8212, 8282. Otrzymuje się wtedy typową strukturę z 16bitową m-lą adresową i 8bitową m-lą danych

Jak mC pobiera(odczytuje) programy z zewnątrz

Komunikacja mC z zewn. układami pamięci programu i danych odbywa się poprzez port P0, który pełni fkcję we-wy dwukierunkowej multipleksowanej m-li adresowej/danych. Do portu P0 jest wysyłanych 8 mniej znaczących bitów adresu strobowanych sygnałem ALE. 8 bardziej znaczących bitów jest wysyłanych do portu P2. Przesyłanie danych odbywa się za pomocą sygnałów:

PSEN – odczytanie z zewn. pamięci programu

RD (P3.7) – odczytanie z zewn. pamięci danych

WR (P3.6) – zapis do zewn. pamięci danych

Odczytanie z zewn. pamięci programu jest wykonywane przez mC przy pobieraniu z pamięci programu kodu rozkazu, argumentu bezpośredniego lub danej, spod adresu większego lub równego 4096(1000h), oraz przy każdym pobraniu z pamięci programu we wszystkich układach ’51, gdy na wejściu EA jest stan niski (LOW TTL).

Odczytywanie z pamięci programu jest wykonywane dwukrotnie w każdym cyklu maszynowym.

 

Podłączenie zewn. pamięci do 8051 (linie sterujące)

Komunikacja mC z zewn. układami pamięci programu i danych odbywa się poprzez port P0, który pełni fkcję we-wy dwukierunkowej multipleksowanej m-li adres/dane. Do portu P0 jest wysłane 8 mniej znaczących bitów adresu, strobowanych sygnałem ALE. 8 bardziej znaczących bitów adresu jest wysyłanych do portu P2. Przesyłanie danych jest sterowane za pomocą sygnałów:

PSEN – odczytanie z zewn. pamięci programu

RD (P3.7) – odczytanie z zewn. pamięci danych

WR (P3.6) – zapis do zewn. pamięci danych

 

Źródła przerwań

8051 przyjmuje zgłoszenia przerwań od:

a) zewnętrzne:

- z wejścia INT0 (IE0 – TCON.1)

- z wejścia INT1 (IE1 – TCON.3)

b) z układu czasowo licznikowego:

- przepełnienie licznika T0 (TF0 – TCON.5)

- przepełnienie licznika T1 (TF1 – TCON.7)

c) z portu szeregowego:

- koniec nadawania znaku (TI – SCON.1)

- koniec odbierania znaku (RI – SCON.0)

 

Jak wygląda początek obsługi przerwania?

Jeżeli w słowie IE jest EA=1 (włączony system przerwań) to w stanie S6 każdego cyklu maszynowego są przeglądane znaczniki zgłoszenia niemaskowanych przerwań. Wykrycie zgłoszenia (ustawienia któregoś ze znaczników) spowoduje, że jeśli wykonywany w danej chwili cykl maszynowy nie jest ostatnim w cyklu rozkazowym lub w danej chwili jest wykonywany rozkaz RETI albo program obsługi przerwania z poziomu priorytetu wyższego lub równego zgłoszenia to przyjęcie przerwania zostaje wstrzymane. Jeśli powyższe warunki nie są spełnione to w następnym cyklu maszynowym rozpocznie się wykonywanie cyklu przyjęcia przerwania o najwyższym ze zgłoszonych priorytetów:

- ustawienie wewnętrznego przerzutnika poziomu przerw.,

- wyzerowanie znacznika zgłoszenia przyjętego przerwania (bez TI, RI, TF2, EXF2),

- zapisanie na stosie zawartości PC

- wpisanie do licznika PC początku programu obsługi przerwania (0003h – INT0 ; 000Bh – timer T0 ; 0013h – INT1 ; 001Bh – timer T1 ; 0023h – serial port ; 002Bh – timer T2 (dla 8052))

Które flagi zgłaszające przerwanie nie są kasowane?

Jedynie znaczniki TI, RI oraz TF2, EX F2 nie są zerowane automatycznie (TI, RI –SCON ; TF2, EXF2 – T2CON-8052)

Flagi te nie są kasowane ponieważ można je wyzerować tylko programowo.

 

Rozkazy powrotów

RET     PC15-8 – (SP)      22h                  1bajt

            SP – SP-1                                   2cykle

            PC7-0 – (SP)

            SP – SP-1

- powrót z podprogramu,

RETI    PC15-8 – (SP)      32h                  1bajt

            SP – SP-1                                   2cykle

            PC7-0 – (SP)

            SP – SP-1

- powrót z przerwania,

 

Maksymalna częstotliwość impulsów zewn. zliczanych przez 8051

                           fCNTmax = fXTAL/24   

dla fXTAL = 12MHz       fCNTmax = 12/24 = 0,5 MHz

 

Dualna praca portu P3

P3.0 – P3.7 (końcówki 10-17) – 8bitowy port we/wy

   (B0h)                         - alternatywnie:

                P3.0 – RXD – we.szereg.

                P3.1 – TXD – wy. szereg.

                P3.2 – INT0   we. przerwań zewn.

                P3.3 – INT1

                P3.4 – T0  we. zegarowe ukł. czasowo licznik.

                P3.5 – T1

                P3.6 – WR – zapis do pam. zewn.

                P3.7 – RD – odczyt z pam. zewn.

 

Port P0 – opis

P0.0 – P0.7 (końcówki 39-32 w 8051), 8bitowy, dwukierunkowy port we/wy (wy. z otwartym kolektorem, we. o dużej impedancji). Przy pracy z zewn. pamięcią programu lub danych stanowi multipleksowaną m-lę adres/dane. Adres portu 80h.

 

Jak można zwiększyć lub zmniejszyć rej. DPTR?

Zwiększyć można instrukcją inkrementacji INC DPTR. Natomiast nie można dekrementować całego rej. DPTR.

DPTR składa się z dwóch DPH-starszy i DPL-młodszy. Należy zdekrementować DPL i sprawdzić warunek czy DPL=255 (FFh). Jeżeli warunek jest spełniony (tzn. że DPL przeskoczył z 0 na 255 czyli cofną się o bajt) to należy zdekrementować DPH

DEC DPL

MOV A,DPL

CJNE A,#FF,SKOK

DEC DPH

SKOK:

...
Zgłoś jeśli naruszono regulamin