POLITECHNIKA KRAKOWSKA – INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
Ćw. 4. Symulacja działania mikrokontrolerów 8051.
Timery, liczniki i system przerwań.
Opracowanie: mgr inż. Michał Lankosz
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
-
ź
ró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óźnienie może trwać do trzech
cykli maszynowych. Dodatkowe opóźnienie 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.
Ź
ró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) Sprawdź 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. Sprawdź 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
•
sprawdź oba podpunkty pytania b)
•
zamień priorytety INT0 i INT1 na przeciwne i sprawdź 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). Odpowiedź 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
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
____
INT0
IT0
0
1
EX0
EA
TF0
IE0
____
INT1
IT1
0
1
EX1
ET1
TF1
IE1
ES
RI
TI
ET0
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
XTAL
/12
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)
b)
Rys. 2. Schemat blokowy działania liczników T0 i T1 w trybie 0 i 1 (a) i w trybie 2 (b)
8
C/T
0
1
TFx
f
XTAL
/12
/INTx
wyprowadzenie
portu P3
TRx
GATE
Tx
wyprowadzenie
portu P3
TLx
THx
C/T
0
1
TFx
f
XTAL
/12
/INTx
wyprowadzenie
portu P3
TRx
GATE
Tx
wyprowadzenie
portu P3
TLx
THx
wpis