POLITECHNIKA KRAKOWSKA INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
Ćw. 4. Symulacja działania mikrokontrolerów 8051.
Timery, liczniki i system przerwań.
1. Wprowadzenie
Celem ćwiczenia jest poznanie działania systemu przerwań oraz liczników - czasomierzy
w mikrokontrolerach rodziny 8051.
2. Niezbędne wiadomości
Architektura i lista rozkazów 8051, w szczególności:
- mapa pamięci wewnętrznej RAM
- znaczenie początkowych adresów pamięci programu
- wykorzystanie stosu
- działanie przerwań sprzętowych
- zródła sygnałów przerwań
- priorytety przerwań
- struktura i działanie układów czasowo-licznikowych
3. Podstawy
3.1.Przerwania
Przerwania umożliwiają szybkie reagowanie na zdarzenia zewnętrzne bez zbędnego angażowania
programu głównego do sprawdzania stanu wybranych układów peryferyjnych.
Działanie systemu przerwań opiera się na zbiorze flag, które są ustawiane w chwili wystąpienia
danego zdarzenia. Aby konkretne przerwanie zostało zgłoszone musi być ono odblokowane poprzez
ustawienie bitu w rejestrze IE odpowiadającego temu przerwaniu. Rejestr ten zawiera również bit
EA - globalnego zezwolenia na przerwania. On także musi być ustawiony. Obrazowy schemat
ułatwiający odpowiednią konfigurację przerwań przedstawiono na rysunku 1.
Od momentu zgłoszenia przerwania do chwili jego podjęcia (rozpoczęcia wykonywania procedury
obsługi przerwania) mija pewien czas, który zależy od aktualnie wykonywanego rozkazu lub
obsługiwanego przerwania. Jest to spowodowane tym, że aktualnie wykonywany rozkaz nie może
być przerwany. Jak wynika z czasów wykonywania rozkazów opóznienie może trwać do trzech
cykli maszynowych. Dodatkowe opóznienie może wprowadzić bieżąca obsługa przerwania
o wyższym priorytecie, która musi się zakończyć.
Podjęcie obsługi przerwania polega na zapamiętaniu na stosie adresu następnego po bieżącym
rozkazu programu głównego lub procedury obsługi przerwania o priorytecie niższym niż
podejmowane, a następnie wykonaniu skoku pod ściśle określony adres w pamięci programu.
Każdemu przerwaniu przyporządkowany jest inny adres (Tabela 1).
Każda procedura obsługi przerwania musi się zakończyć rozkazem RETI, który powiadamia system
przerwań o zakończeniu obsługi bieżącego przerwania i odtwarza wartość licznika rozkazów PC
ze stosu.
1
POLITECHNIKA KRAKOWSKA INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
Przykładowy szkielet programu korzystający z przerwania zewnętrznego INT1.
CSEG AT 0
AJMP start po resecie wykonujemy skok do poczÄ…tku programu
CSEG AT 13h pod adresem 13h z pamięci programu umieszczamy
AJMP Obsluga_int1 instrukcję skoku do procedury obsługi przerwania
CSEG AT 30h
start: program główny zaczyna się od adresu 30h
. (za tablicą wektorów przerwań)
. Konfiguracja układu przerwań:
SETB IT1 przerwanie INT1 aktywowane zboczem
SETB EX1 zezwolenie na zewnętrzne przerwanie INT1
SETB EA globalne odblokowanie przerwań
loop:
.
. główna pętla programu
AJMP loop
Obsluga_int1: procedura obsługi przerwania
.
.
RETI
END
Uwaga!
Należy pamiętać o tym, że program główny może być przerwany w dowolnym momencie. Jeśli
zarówno program główny jak i procedura przerwania wykorzystuje ten sam rejestr w sposób jawny
(np. mov A,#5 modyfikuje akumulator) lub niejawny (np. cjne R2,#5,loop - modyfikuje
PSW), może dojść do wadliwego działania programu. W celu uniknięcia konfliktów wykorzystania
zasobów najczęściej w procedurze obsługi przerwania zachowuje się na stosie zawartości
wszystkich używanych w niej rejestrów. Dodatkowym ułatwieniem dla programisty są przełączalne
banki rejestrów ogólnego przeznaczenia. Wystarczy, że w procedurach obsługi przerwań będą
wykorzystywane różne zestawy rejestrów. Wówczas nie ma konieczności zachowywania ich na
stosie.
Poniżej pokazano przykład użycia stosu do zapamiętania słowa stanu i akumulatora.
Obsluga_INT: ;procedura
PUSH PSW ;zapamiętanie rejestrów
PUSH ACC
MOV A,P1
XRL A,#55h
ADD A,#1
MOV P2,A
POP ACC ;odtworzenie rejestrów
POP PSW
RETI ;zakończenie procedury
END
2
POLITECHNIKA KRAKOWSKA INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
3.2. Liczniki - timery
Podstawowa wersja mikrokontrolera 8051 posiada w swojej strukturze dwa programowalne układy
licznikowe - T0 i T1. Każdy z nich składa się z dwóch 8-bitowych rejestrów: THx, TLx (x oznacza
0 lub 1).
Na rysunkach 2 i 3 przedstawiono strukturę połączeń trzech z czterech różnych trybów pracy
liczników. W trybie 0 i 1 THx i TLx są połączone kaskadowo w licznik 16-to bitowy, natomiast
w trybie 2 8-mio bitowa część TLx jest ładowana wartością zapisaną w THx zawsze w momencie
przepełnienia TLx.
yródłem impulsów dla liczników może być sygnał podawany z zewnątrz (zliczanie impulsów) lub
zegar taktujący mikroprocesor (odmierzanie czasu). W chwili przepełnienia licznika ustawiana jest
flaga TFx.
Flagi przepełnień zgłaszają przerwania. Jeśli są odpowiednio ustawione bity zezwolenia ETx
rejestru IE i priorytetu PTx rejestru IP wówczas będzie podejmowane przerwanie związane
z przepełnieniem danego licznika. Flaga jest zerowana sprzętowo w chwili przejścia do procedury
obsługi przerwania.
Odpowiedni tryb pracy liczników ustawia się za pomocą rejestrów TCON i TMOD.
4. Zadanie do wykonania
Należy przeanalizować pracę mikrokontrolera poprzez wykonanie symulacji krokowej na
podstawie programów cw4p1.asm oraz cw4p2.asm.
4.1. Program cw4p1.asm
CSEG AT 0
AJMP reset
CSEG AT 03h
AJMP INT0service ; skok do procedury obsługi przerwania
; zewnętrznego INT0
CSEG AT 30h
reset:
SETB EX0 ; wlaczenie przerwania INT0
SETB EA ; odblokowanie wszystkich przerwan
loop:
ACALL delay ; przykładowy program główny
CPL P2.7
SJMP loop
INT0service: ; procedura obslugi przerwania INT0
;PUSH ACC ; zapamiętanie akumulatora
;PUSH PSW ; i rejestru stanu
CPL P2.0
;POP PSW
;POP ACC
RETI ; powrót z przerwania
delay:
MOV R0,#100
del2:
MOV R1,#255
del1:
3
POLITECHNIKA KRAKOWSKA INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
NOP
NOP
DJNZ R1,del1
DJNZ R0,del2
RET
END
a) Sprawdz działanie programu w symulatorze. Przerwanie należy uaktywnić przez ustawienie
0 na wejściu Pins portu P3 bit 2. Następnie sprawdzić działanie rzeczywistego układu.
W tym przypadku przerwanie jest aktywowane wciśnięciem przycisku S2.
b) Dopisz procedurę obsługi przerwania zewnętrznego INT1 i odpowiednio skonfiguruj
rejestry kontrolne. Sprawdz jak będzie wykonywany program:
" w przypadku wystąpienia jednocześnie obu sygnałów przerwań
" podczas wykonywania obsługi przerwania INT0 sygnał przerwania INT1 znika na kilka
cykli rozkazowych przed rozkazem RETI obsługi INT0
c) Zmień priorytet przerwania INT1 na wyższy
" sprawdz oba podpunkty pytania b)
" zamień priorytety INT0 i INT1 na przeciwne i sprawdz podpunkty pytania b)
d) Zmień sposób reakcji na przerwania zewnętrzne tak, aby były one wyzwalane zboczem
opadajÄ…cym.
4.2. Program cw4p2.asm
CSEG AT 0
AJMP reset
CSEG AT 30h
reset:
MOV TMOD,#00000010b ; tryb 2 licznik sygnału taktującego
MOV TH0,#-25 ; załadowanie wartości początkowej
SETB TR0 ; podłączenie sygnału do licznika
loop:
ACALL delay ; przykładowy program główny
CPL P2.7
JBC TF0,Przelacz ; sprawdzenie flagi przepełnienia timera
SJMP loop
Przelacz:
CPL P2.0 ; zmiana stanu linii portu na przeciwny
SJMP loop
delay:
MOV R0,#2
del2:
DJNZ R0,del2
RET
END
Podczas symulacji zaobserwuj reakcję na wystawienie flagi przepełnienia licznika.
W zamiarze program ma zmieniać stan wyprowadzenia portu P2.0 w stałych, ściśle określonych
interwałach czasowych wyznaczanych przez czasomierz T0. Przy okazji mają być realizowane
dodatkowe zadania nie krytyczne w czasie.
4
POLITECHNIKA KRAKOWSKA INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
a) Czy zmiana stanu P2.0 odbywa siÄ™ w regularnych chwilach czasowych? KorzystajÄ…c
z wykresu analizatora stanów debuggera zmierz kilka przedziałów czasowych pomiędzy
zmianami stanu P2.0, a także pomiędzy kolejnymi ustawieniami (zbocze narastające) flagi
TF0 (TCON.5). Odpowiedz uzasadnij.
b) Zmodyfikuj program tak, aby w momencie przepełnienia licznika następowało przerwanie,
a zmiana stanu p2.0 odbywała się w procedurze jego obsługi. Zaobserwuj jak w punkcie a)
Jaki jest sens stosowania przerwań?
c) Napisz program, który będzie zliczać sekundy. Niech zmienna sekund będzie prezentowana
w postaci binarnej za pomocą diod świecących podłączonych do portu P2. Użyj systemu
przerwań i odpowiedni licznik-timer w wybranym trybie wiedząc, że mikrokontroler jest
taktowany zegarem 11.0592MHz, a zatem jeden cykl maszynowy trwa okoÅ‚o 1,08507 µs.
Zliczanie sekund ma poprawnie działać niezależnie od złożoności programu głównego.
5
POLITECHNIKA KRAKOWSKA INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
5. Dodatek
IT0 EX0 EA
0
____
IE0
INT0
1
ET0
TF0
IT1 EX1
0
____
IE1
INT1
1
ET1
TF1
ES
RI
TI
Rys.1. Schemat blokowy systemu przerwań 8051
Adresy, od których zaczyna się wykonywanie programów obsługi przerwań:
03h zewnętrzne z wejścia /INT0
0Bh licznik T0 układu czasowo-licznikowego
13h zewnętrzne z wejścia /INT1
1Bh licznik T1 układu czasowo-licznikowego
23h zdarzenie portu szeregowego
6
POLITECHNIKA KRAKOWSKA INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
Rejestry specjalne znaczenie poszczególnych bitów
TCON
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TFx - znacznik przepełnienia licznika Tx, ustawiany sprzętowo, zerowany przy przyjęciu
przerwania
TRx - bit sterujący zliczaniem licznika Tx, 1 zapewnia podłączenie sygnału zliczającego do
licznika
IEx - znacznik zgłoszenia przerwania zewnętrznego /INTx ustawiany sprzętowo, zerowany
przy przyjęciu przerwania
ITx - bit określający wyzwalanie przerwania poziomem niskim na /INTx 0 lub zboczem 1
IE
EA - - ES ET1 EX1 ET0 EX0
EA - bit maski systemu przerwań
ES - bit maski przerwania z portu szeregowego
ET1 - bit maski przerwania z licznika-czasomierza T1
EX1 - bit maski przerwania zewnętrznego /INT1
ET0 - bit maski przerwania z licznika-czasomierza T0
EX0 - bit maski przerwania zewnętrznego /INT0
bit=1 przerwanie dozwolone
bit=0 przerwanie zablokowane
IP
- - - PS PT1 PX1 PT0 PX0
PS - bit priorytetu przerwania z portu szeregowego
PT1 - bit priorytetu przerwania z licznika-czasomierza T1
PX1 - bit priorytetu przerwania zewnętrznego /INT1
PT0 - bit priorytetu przerwania z licznika-czasomierza T0
PX0 - bit priorytetu przerwania zewnętrznego /INT0
bit=1 przerwanie o wyższym priorytecie
bit=0 przerwanie o niższym priorytecie
TMOD
licznik T1 licznik T0
GATE C/T M1 M0 GATE C/T M1 M0
GATE - uaktywnienie bramkowania licznika
GATE=0 - licznik Tx pracuje gdy TRx=1
GATE=1 - licznik Tx pracuje gdy TRx=1 i /INTx=1
C/T - określa funkcję licznika Tx
C/T=0 - czasomierz taktowany wewnętrznym zegarem f /12
XTAL
C/T=1 - licznik impulsów zewnętrznych z wejścia Tx
M1, M0 - tryb pracy licznika Tx
7
POLITECHNIKA KRAKOWSKA INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
M1 M0 tryb
0 0 0 8-bitowy licznik THx taktowany poprzez 5-bitowy dzielnik TLx
0 1 1 16-bitowy licznik THx.TLx
1 0 2 8-bitowy licznik TLx z automatycznym wpisywaniem wartości
poczÄ…tkowej z THx
1 1 3 T0 dwa niezależne liczniki 8-bit: TL0 sterowany bitami licznika T0
i TH0 sterowany bitami licznika T1; licznik T1 zatrzymany
a)
C/T
fXTAL/12
0
TLx THx
TFx
1
Tx
TRx
wyprowadzenie
portu P3
GATE
/INTx
wyprowadzenie
portu P3
b)
C/T
fXTAL/12
0
TLx
TFx
1
Tx
TRx
wyprowadzenie
wpis
portu P3
GATE
THx
/INTx
wyprowadzenie
portu P3
Rys. 2. Schemat blokowy działania liczników T0 i T1 w trybie 0 i 1 (a) i w trybie 2 (b)
8
Wyszukiwarka
Podobne podstrony:
ex uc prtadrpt1ex uc subsc1ucHughes, Susanna The Chaste Legacy [UC]Warsztaty AVR Programowanie uCHenry Kuttner Exit the Professor UCAshe, Aran The Forest Of Bondage [UC]test UCanon Devils Advocate [UC]Clement, Hal Half Life UCVale, Rena The Day after Doomsday [UC]ex uc sndpg2Holmes UC Systemuc inst03anon The New Story of O [UC]Gilchrist, Rupert 03 [UC]ucex uc sndpg1toc and intro UCwięcej podobnych podstron