8051

Badanie układów mikroprocesorowych

Sprawozdanie

Zespół:

Karol Magielnicki

Łukasz Kwiek

Marek Krawczyk

Mateusz Kołodziejczyk

Elektrotechnika 24

1. Wstęp Teoretyczny

1.1 Widok i opis wyprowadzeń:

Układ 8051 jest jednoukładowym mikrokontrolerem 8-bitowym. Mikrokontroler jest umieszczony w 40-nóżkowej obudowie typu DIL.

Poszczególne końcówki układu mają następujące funkcje:

Końcówki 1-8 (P1.0-P1.7): są to wyprowadzenia uniwersalnego portu wejścia/wyjścia Pi-

Końcówka 9 (RST): jest to końcówka Reset służąca do zerowania mikrokontrolera.

Końcówki 10-17 (P3.0-P3.7): są to wyprowadzenia uniwersalnego portu wejścia/wyjścia P3. Poszczególne końcówki mogą także pełnić inne funkcje -omówione przy opisie portu P3.

Końcówki 18,19 (XTAL1, XTAL2): są to wyprowadzenia służące do podłączenia rezonatora lub zewnętrznego generatora impulsów zegarowych.

Końcówka 20 (GND): wyprowadzenie masy układu.

Końcówki 21-28 (P2.0-P2.7): są to wyprowadzenia uniwersalnego portu

wejścia/wyjścia P2. Port ten pełni również rolę starszego bajtu szyny adresowej przy dostępie do pamięci zewnętrznej.

Końcówka 29 (PSEN'): końcówka informująca o odczycie zewnętrznej pamięci programu.

Końcówka 30 (ALE): sygnał wyjściowy służący do zatrzaskiwania młodszej części adresu przy dostępie do pamięci zewnętrznej.

Końcówka 31 (EA'): stan na tym wejściu określa sposób współpracy z pamięcią programu.

Końcówki 32-39 (P0.0-P0.7): są to wyprowadzenia uniwersalnego portu wejścia/wyjścia PO. Port ten pełni również rolę młodszego bajtu szyny adresowej multipleksowanego z szyną danych podczas dostępu do pamięci zewnętrznej.

Końcówka 40 (Vcc): końcówka zasilania układu. Vcc=5V +/- 0.25V

1.2 Układ przerwań

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:

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ł.

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: INTO' (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.

2. O programie uVision

uVision jest środowiskiem programowania mikrokontrolerów rodziny MCS51. Umożliwia edytowanie, asemblację i symulację pracy mikrokontrolera, podglądanie wszystkich wbudowanych komponentów jak rejestry (ogólnego przeznaczenia, rejestry specjalne, porty) i pamięć. Za jego pomocą możemy zobaczyć jak się będą zachowywać porty, wejścia u wyjścia mikrokontrolera w czasie jego pracy. Przydatną funkcją jest wykonywanie programu krok po kroku, co może nam pomóc w odnajdywaniu i eliminacji błędów. Przed wgraniem programu do mikrokontrolera możemy go dokładnie przetestować, czy działa tak jak chcieliśmy.

3. Ćwiczenie 1

3.1 Temat ćwiczenia 1

Program obliczający sumę dwóch liczb 16-bitowych zapisanych w kodzie U2:

WEJŚCIE:

p0, p2: pierwszy czynnik (p0 - 8 młodszych bitów, p2 - 8 starszych bitów);
p1, p3: drugi czynnik (p1 - 8 młodszych bitów, p2 - 8 starszych bitów);

WYJŚCIE:

p0, p1: suma (p0 - 8 młodszych bitów, p1 - 8 starszych bitów);
p3 - status ('00' - wynik prawidłowy; '-1' - wynik nie mieści się na 16 bitach);

3.2 Kod programu 1 (2.1)

; plik: cw1-1.a51

LJMP start
    ; rozkaz skoku w obszarze 64kB
    ; wpisuje do licznika rozkazów adres oznaczony etykietą 'start'

ORG 1000h
    ; dyrektywa specyfikujaca adres (1000h), pod którym ma zostać
    ; umieszczona następująca po niej sekcja programu oznaczona
    ; etykietą 'start'
start:

MOV r0, p0
    ; wpisz do rejestru r0 zawartość na porcie p0

MOV r1, p1
    ; wpisz do rejestru r1 zawartość na porcie p1

MOV r2, p2
    ; wpisz do rejestru r2 zawartość na porcie p2

MOV r3, p3
    ; wpisz do rejestru r3 zawartość na porcie p3

MOV a, r0
    ; wpisz do akumulatora zawartość rejestru r0

ADD a, r1
    ; dodaj do zaw. akumulatora zaw. rejestru r1
    ; zapisz wynik (r0 + r1) w akumulatorze

PUSH psw
    ; zapamiętaj zawartość rejestru specjalnego psw na stosie
    ; zawartość psw opisuje stan wyniku poprzedniej instr.
    ; (ADD a, r1), takie jak znacznik parzystości/nadmiaru

MOV p0, a
    ; wypisz na port p0 zawartość akumulatora

MOV a, r2
    ; umieść w akumulatorze zaw. rejestru r2

POP psw
    ; pobierz ze stosu zaw. rejestru stanu psw

ADDC a, r3
    ; dodawanie z przeniesieniem
    ; a = a + r3 + c, gdzie c (carry) jest 7-bitem w psw i
    ; jest znacznikiem wyst. przeniesienia z 7 bitu akumulatora

JNB ov, loop
    ; skocz do etykiety 'loop' jeśli bit ov jest wyzerowany
    ; ov (overflow) - znacznik nadmiaru będący 2 bitem w psw

MOV p3, #-1
    ; umieść na porcie p3 wartość '-1' (wystąpiło przepełnienie)

loop:
MOV p1, a
    ; umieść na porcie p1 zaw. akumulatora (8 starszych bitów wyniku)

END
    ; koniec programu

3.3 Temat ćwiczenia 2

Program porównujący dwie liczby 8-bitowe zapisane w kodzie U2:

WEJŚCIE: p0, p1;
WYJŚCIE: p3 - wynik porównania ('1' jeśli p0 <> p1, '0' jeśli p0 = p1 );

3.4 Kod programu 2 (2.3)

; plik: cw1-2.a51
LJMP start
ORG 1000h
start:
MOV r0, p0
    ; przenieś zaw. portu p0 do rejestru r0
MOV 01h, p1
    ; przenieś zaw. portu p1 pod adres 01h
MOV a, r0
    ; przenieś zaw. rejestru r0 do akumulatora

CJNE a, 01h, noteql
    ; porównaj zaw. akumulatora i pamięci pod adr. 01h
    ; skocz do etykiety 'noteql' jeśli wartości różne

MOV p3, #0
    ; wypisz na porcie p3 wartość '0' (p0 = p1)
SJMP stop
    ; wykonaj skok w obszarze 256kB do etykiety 'stop' (koniec)

noteql:
MOV p3, #1
    ; wypisz na porcie p3 wartość '1' (p0 <> p1)
stop:
    ; koniec programu
END

4. Ćwiczenie 2

4.1 Temat ćwiczenia 1

Wykonywanie podprogramów w zależności od stanu jednej z trzech linii (p1.0, p1.1, p1.2) portu p1:

4.2 Kod programu 3.1

; plik: cw2-1.a51
start:

etykieta1: JB p1.0, etykieta2
    ; skocz do adresu etykiety 'etykieta2' jesli bit p1.0 ustawiony
    ; w przeciwnym razie ...
ACALL program1
    ; wywolaj podprogram w stronie 2kB
    ; zapisz na stos aktualna wartość PC (Program Counter)
    ; i skocz do adr. procedury 'program1'

etykieta2: JB p1.1, etykieta3
    ; skocz do etykiety 'etykieta3' jeśli bit p1.1 ustawiony
    ; w przeciwnym razie ...
ACALL program2
    ; wykonaj podprogram 'program2'

etykieta3: JB p1.2, etykieta4
ACALL program3

etykieta4: ACALL start
    ; wywołaj podprogram 'start' (skocz na początek programu)

; kody poszczególnych podprogramów
; każdy wykonuje trzy puste rozkazy (NOP) zajmujące 1 cykl zegara
; instr. RET (powrot z procedury) pobiera ze stosu PC
; i przekazuje sterowanie do zaw. w nim adresu
program1:
NOP
NOP
NOP
RET
program2:
NOP
NOP
NOP
RET
program3:
NOP
NOP
NOP
RET
END

4.3 Temat ćwiczenia 2

Działanie obsługi przerwań na przykładzie obsługi przerwania zewnętrznego INT0 sterowanego na porcie p3:

4.4 Kod programu 3.2

; plik: cw2-2.a51
LJMP main

; procedura obslugi przerwania INT0
SETB 10h
    ; ustaw bit pod adr 10h
RETI
    ; powrot z procedury obslugi przerwania (RETurn from Interrupt)
    ; ustawia PC (Program Counter) na adr. zapamiętany na stosie
    ; w momencie wystąpienia przerwania

main:
MOV 0a8h, #81h
    ; załaduj pod adr. 0a8h (rejestr IE - Interrupt Enable) stałą 81h
    ; ustawia bit EA (IE[7]), co powoduje włączenie obsługi przerwań
    ; ustawia bit EX0 (IE[0]) - włączenie osbługi przerwania zewn INT0

ANL 088h, #0feh
    ; ustawia bity rejestru TCON jako iloczyn logiczny zaw. TCON i #0feh
    ; zeruje bit IT0 (TCON[0) - zgłaszanie przerw. INT0 na niskim
    ; poziomie napięcia

CLR 10h
    ; wyczyść bit pod adr. 10h

; następujący ciąg instr. prowadzi do zapętlenia
; o ile nie zostanie zgłoszone przerwanie INT0 na porcie p3
SETB p1.0
CLR p1.0
SETB p1.6
CLR p1.6
SETB p1.7
CLR p1.7
SETB p1.1
CLR p1.1
SETB p1.0
powrot1:
JB p1.0, koniec1
LJMP powrot1
koniec1:
SETB p1.6
powrot2:
JNB p1.6, koniec2
LJMP powrot2
koniec2:
SETB p1.7
powrot3:
JNB p1.7, koniec
LJMP powrot3
koniec: END

4.4 Temat ćwiczenia 3

Wpisz poniższy program, przeanalizuj jego działanie. Wykonaj program wykorzystując symulator uvision . W sprawozdaniu opisz działanie poszczególnych instrukcji programu wstawiając komentarz do każdej linii.


4.4 Kod programu 3.3

;program obrazujący działanie licznika T0
;oraz możliwość przerywania programu przy jego użyciu
start: ; rozpoczęcie działania programu

A113: ; etykieta A113

CLR TR0 ; zeruje bit TR0, zatrzymuje pracę licznika T0

CLR TF0 ; zeruje bit TF0, znacznik przepełnienia licznika T0

MOV TL0,#0 ; wpisanie liczby 0 do rejestru TL0

MOV TH0,#254 ; wpisanie liczby 254 do rejetru TH0

MOV P1,#01 ; wyprowadzenie na port P1 liczby 01

SETB TR0 ; ustawienie bitu TR0, uruchomienie licznika T0

A114: ; etykieta A114
MOV C,TF0 ; zapisanie w bicie C wartości bitu TF0

MOV P1.1,C ; wyprowadzenie bitu C na końcówkę 1 portu P1

NOP ; nic nie robi

JNC A114 ; jeżeli znacznik flagi przeniesienia jest równy 0
; to skocz do etykiety A114

JC A115 ; jeżeli znacznik flagi przeniesienia jest równy 1
; to skocz do etykiety A115

;JNB P1.1,A114 ; komentarz

;JB P1.1,A115 ; komentarz

NOP ; nic nie robi

NOP ; nic nie robi

NOP ; nic nie robi

NOP ; nic nie robi

A115: ; etykieta A115

JMP A113 ; skok do etykiety A113

END ; zakończenie pracy programu


Wyszukiwarka

Podobne podstrony:
Konfiguracja pamięci mikrokontrolera 8051 dla programów napisanych w języku C
8051 Tutorial uart
asembler 8051 opis rozkazow
Mikrokomputer edukacyjny z 8051 cz 2
8051 wyswietlacz 7seg
8051 id 47295 Nieznany
8051 przerwania
Lista rozkazow 8051
Mikrokontroler 8051
Podstawy Programowania Mikrokontrolera 8051
Programowanie mikrokontrolerow 8051 w jezyku C
Galka Galka Podstawy Programowania Mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051
Asm i C dla 8051 Nieznany (2)
bascom 8051 kotlhvni2l5w3emcxjq Nieznany (2)
08 mikrokontrolery rodziny 8051
8051

więcej podobnych podstron