Pracownia elektryczno-elektroniczna klasa IV

Podobne dokumenty
MIKROPROCESORY architektura i programowanie

Instytut Teleinformatyki

Instytut Teleinformatyki

Systemy wbudowane. Wprowadzenie. Wprowadzenie. Mikrokontroler 8051 Budowa

MIKROPROCESORY architektura i programowanie

Celem ćwiczenia jest zapoznanie z obsługą klawiatury sekwencyjnej i matrycowej w systemie DSM-51.

ad a) Konfiguracja licznika T1 Niech nasz program składa się z dwóch fragmentów kodu: inicjacja licznika T1 pętla główna

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Hardware mikrokontrolera X51

Przerwania w architekturze mikrokontrolera X51

Architektura mikrokontrolera MCS51

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe

Architektura mikrokontrolera MCS51

Ćwiczenie 9 Częstościomierz oparty na µc 8051(8052)

Instytut Teleinformatyki

architektura komputerów w 1 1

Obszar rejestrów specjalnych. Laboratorium Podstaw Techniki Mikroprocesorowej Instytut Mikroelektroniki i Optoelektroniki PW

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

Ćwiczenie 30. Techniki mikroprocesorowe Programowanie w języku Asembler mikrokontrolerów rodziny '51

Zerowanie mikroprocesora

START: ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec dec)

LABORATORIUM nr 2. Temat: Obsługa wyświetlacza siedmiosegmentowego LED

SYSTEM PRZERWA Ń MCS 51

Programowanie mikrokontrolera 8051

Informacje ogólne o układzie 8051.

Politechnika Warszawska

LABORATORIUM. TIMERY w mikrokontrolerach MCS 51

Pracownia elektryczno-elektroniczna klasa IV

TECHNIKA MIKROPROCESOROWA

Temat: System przerwań, liczniki i wyświetlacz w STRC51. Ćwiczenie 3.

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

Start Bity Bit Stop 1 Bit Par Rys. 1

Omówimy przykłady 8-mio bitowego licznika z wyposażenia ADuC812 (CISC 51) oraz mikrokontrolera ATMega128 należącego do rodziny AVR.

Lista rozkazów mikrokontrolera 8051

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla

Praktyka Techniki Mikroprocesorowej. Mikrokontroler ADuC834

Lista instrukcji procesora 8051 część 2 Skoki i wywołania podprogramów, operacje na stosie, operacje bitowe

Ćw. 5. Obsługa portu szeregowego UART w mikrokontrolerach 8051.

Technika mikroprocesorowa I Wykład 4

Architektura systemów komputerowych

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

Temat: System przerwań, liczniki i wyświetlacz w STRC51. Ćwiczenie 3.

Struktura programu w asemblerze mikrokontrolera 8051

Ćwiczenie 1 Wędrujące światełko

Programowanie mikrokontrolerów. 8 listopada 2007

Lista rozkazów mikrokontrolera 8051 część pierwsza: instrukcje przesyłania danych, arytmetyczne i logiczne

Asembler - język maszynowy procesora

Opis mikrokontrolera AT89C2051

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Program Laboratorium Rok akademicki 2003/2004. Semestr zimowy

Ćwiczenie 7 Matryca RGB

Programowanie mikrokontrolerów (CISC)

Metody obsługi zdarzeń

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

MIKROKONTROLERY I MIKROPROCESORY

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

Opis mikrokontrolera 8051 Lista rozkazowa Timery

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Ćwiczenie 2 Transmisja a szeregowa µc 8051(8052) - PC

ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM

2. Architektura mikrokontrolerów PIC16F8x... 13

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

Układy czasowo-licznikowe w systemach mikroprocesorowych

Laboratorium 1: Wprowadzenie do środowiska programowego. oraz podstawowe operacje na rejestrach i komórkach pamięci

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Programowanie w językach asemblera i C

Liczniki, rejestry lab. 09 Mikrokontrolery 8051 cz. 1

Ćwiczenie 6 Komunikacja z komputerem (łącze RS232)

LABORATORIUM UKŁADY WY Ś WIETLANIA INFORMACJI Z WY Ś WIETLACZAMI 7-SEGMENTOWYMI LED

MIKROPROCESORY architektura i programowanie

Pracownia elektryczno-elektroniczna klasa IV

Zagadnienia zaliczeniowe z przedmiotu Układy i systemy mikroprocesorowe elektronika i telekomunikacja, stacjonarne zawodowe

PC 3 PC^ TIMER IN RESET PC5 TIMER OUT. c 3. L 5 c.* Cl* 10/H CE RO WR ALE ADO AD1 AD2 AD3 AD4 A05 A06 LTJ CO H 17 AD7 U C-"

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

TMiK Podstawy Techniki Mikroprocesorowej. Lidia Łukasiak

Analizowanie działania układów mikroprocesorowych 311[50].O1.06

Opis procedur asemblera AVR

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Mikrokontroler Intel dr inż. Wiesław Madej

Ćwiczenie 3 Wyświetlacz ciekłokrystaliczny

Dokumentacja Licznika PLI-2

(Rysunek z książki T.Starecki. Mikokontrolery jednoukładowe rodziny 51. NOZOMI W-wa 1996)

Badanie modułów wewnętrznych mikrokontrolera 311[07].Z4.02

Licznik rewersyjny MD100 rev. 2.48

Programowanie mikrokontrolerów. 5 grudnia 2007

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

Opis Ogólny OPIS OGÓLNY LICZNIKA AL154LI01.

Gdzie przyjęto, że: IR7...IR4 to starsze bity przesyłanej danej lub rozkazu, IR3...IR0 to młodsze bity przesyłanej danej lub rozkazu.

Przerwania, polling, timery - wykład 9

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

Struktura i działanie jednostki centralnej

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Część I - Sterownik przerwań 8259A i zegar/licznik 8253

Przykładowe pytania DSP 1

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro

Transkrypt:

Ćwiczenie nr 5 Cel ćwiczenia: Ćwiczenie ma na celu zaznajomienie z metodami odliczania czasu z wykorzystaniem układów czasowo - licznikowych oraz poznanie zasad zgłaszania przerwań i sposobów ich wykorzystywania w mikrokontrolerze 8051. Wiadomości wstępne: W mikrokontrolerze 8051 najprostszą metodą odliczania czasu to wykonanie jakiejś operacji, która zajmuje jakiś czas. Muszą to być oczywiście rozkazy, które nie robią nic, np. rozkaz NOP nie wykonuje żadnego zadania, a trwa jeden cykl maszynowy. Jeden cykl maszynowy to 12 taktów z podłączonego rezonatora kwarcowego (tutaj 12 MHz), czyli jeden cykl maszynowy trwa w przybliżeniu 1us. W mikrokontrolerze 8051: rozkaz NOP trwa 1 cykl maszynowy (1us); rozkazy mnożenia i dzielenia trwają po 4 cykle maszynowe (4us); pozostałe rozkazy trwają po 2 cykle maszynowe (2us). Aby odliczyć dany czas wystarczy w programie wstawić określoną liczbę rozkazów NOP np. 10us = 10 linii rozkazu NOP. Ale w praktyce mija się to z celem. Do odliczania nieco dłuższych czasów można użyć pętli programowych np. MOV A,#299 DJNZ ACC,$ ; 2 cykle 2us ; 229 * 2 = 458 cykli razem 460 cykli, czyli 460 us Maksymalny tak uzyskany czas to ok. 512 us (dla kwarcu 12 MHz) aby ten czas wydłużyć należy umieścić pętle w pętli. PRZYKŁAD_1 PĘTLA CZASOWA ;Pętla mrugania diody TEST CPL LED MOV A,#10 ;czekaj czas 10*100ms=1s TIME_N100: PUSH ACC ;przechowaj na stosie licznik zewnętrzny MOV A,#200 ;zacznij odliczać 100ms TIME_100: ;odliczanie 200 * 0.5ms PUSH ACC ;2 cykle MOV A,#226 ;2 cykle DJNZ ACC,$ ;226*2=452 cykle POP ACC ;2 cykle DJNZ ACC,TIME_100 ;2 cykle razem 460 cykli=0.5ms POP ACC ;odtwórz licznik DJNZ ACC,TIME_N100;odlicz N*100ms W przykładzie_1 do odliczania czasu zastosowano pętle, które trwają określoną liczbę cyklów maszynowych. Wykorzystano to do zapalania i gaszenia diody LED. Ten sposób ma jedną podstawową wadę. Przez cały czas wykonywania pętli procesor jest zajęty i nie może robić nic innego. Do odliczania czasu znacznie lepiej nadają się timery. Istnieją dwa timery T0 i T1. Timery to 16 bitowe liczniki cyfrowe, mogą one pracować jako liczniki (zliczać impulsy podawane na ich wejście) albo jako układy czasowe odmierzające czas. Przepełnienie w liczniku ( T0 lub T1), tzn. przejście ze stanu FFFFh do 0000h, jest sygnalizowane odpowiednią flagą. W tym momencie może być również zgłaszane przerwanie do mikrokontrolera. Stan początkowy liczników może być dowolnie ustawiany tak, aby zakończenie zliczania oznaczało odliczenie zadanego czasu. Każdy z liczników składa się z dwóch ośmiobitowych połówek, są one widziane jako rejestry specjalne TH0 i TL0 dla timera T0 oraz TH1 i TL1 dla układu T1.Timery w mikrokontrolerze 8051 mogą pracować w czterech różnych trybach: 0, 1, 2, 3. Wybór trybu pracy i sterowanie zliczaniem odbywa się za pośrednictwem rejestrów SFR: TCON i TMOD. 1

Rejestr: Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT1 TMOD GATE C/T M1 M0 GATE C/T M1 M0 Znaczenie poszczególnych bitów jest następujące: Rejestr TCON: TF1 wskaźnik przerwania od licznika T1. Bit ustawiany sprzętowo wskutek przepełnienia licznika T1, zerowany sprzętowo w chwili rozpoczęcia wykonywania procedury obsługi przerwania. Możliwe programowe wywołanie przerwania; TR1 bit włączający (TR1=1) układ licznikowy T1; TF0 to co TF1 lecz dotyczy licznika T0. TR0 bit włączający (TR0=1) układ licznikowy T0; IE1 wskaźnik przerwania zewnętrznego INT1. Ustawiany sprzętowo w wyniku wykrycia opadającego zbocza (lub niskiego poziomu) na wyprowadzeniu INT1 mikrokontrolera. Zerowany sprzętowo w wyniku rozpoczęcia wykonywania procedury obsługi przerwania (tylko jeśli przerwanie jest aktywowane zboczem). Jeśli przerwanie jest aktywowane poziomem, to stan bitu odpowiada stanowi na wyprowadzeniu INT1 mikrokontrolera; IT1 bit określający stan wyprowadzenia INT1 aktywujący przerwanie: 0 przerwanie aktywowane niskim poziomem, 1 przerwanie aktywowane zboczem opadającym; IE0 jak IE1, dotyczy wyprowadzenia INT0 IT0 jak It1, dotyczy wyprowadzenia INT0 Rejestr TMOD: Rejestr jest podzielony na dwie 4 bitowe części zawierające bity o jednakowym znaczeniu. Cztery starsze dotyczą licznika T1, cztery młodsze licznika T0. GATE bit sterujący bramkowaniem licznika. Dla GATE=1 zliczanie następuje, gdy sygnał INTn i bit TRn odpowiadające danemu licznikowi są w stanie wysokim. Jeżeli GATE=0, to zliczanie następuje, gdy bit TRn danego licznika jest ustawiony. C/T bit określający źródło zliczania impulsów: 0 oznacza zliczanie cykli maszynowych ; 1 oznacza zliczanie impulsów zewnętrznych; M1,M0 bity wyboru trybu pracy dla danego licznika M0 = 0; M1= 0 tryb 0 Tryb pracy 0 jest identyczny dla obu liczników. Liczniki pracują w konfiguracji 13 bitowej. Starszy bit THn zawiera 8 bardzie znaczących bitów, natomiast 5 pozostałych bitów to najstarsze z TLn trzy młodsze TLx są ignorowane. Maksymalna wartość (przy kwarcu 12MHz) wynosi około 8,191 ms, po osiągnięciu tego czasu licznik wyzeruje się i zgłosi przerwanie informujące o tym fakcie. M0 = 0; M1= 1 tryb 1 Podobny do trybu 0 (identyczny dla obu liczników), z tym że do zliczania wykorzystywane są wszystkie 16 bitów licznika. Maxymalny czas to ok. 65 ms. M0 = 0; M1= 1 tryb 2 Identyczny dla obu liczników. W licznik pracuje tylko młodsza połówka licznika (8 bitów 255 stanów). Młodsza połówka zlicza aż do wartości maxymalnej 255, po czym automatycznie zostaje przepisana do niego zawartość starszej połówki. M0 = 0; M1= 1 tryb 3 Tryb ten dotyczy obu liczników T0 i T1 na raz. W tym trybie licznik T1 jest zatrzymany i nie pracuje. Dwa bajty licznika TH0 i TL0 pracują jako dwa niezależne 8 bitowe liczniki, przy czym istnieje pewne ograniczenie co do ich funkcji, a mianowicie: o TL0 może liczyć impulsy z wejścia T0 lub pracować jako czasomierz zliczając impulsy wewnętrzne (Xtal / 12); o TH0 może pracować tylko jako czasomierz, czyli zliczać impulsy wewnętrzne. Tryb ten został zaimplementowany po to, aby w wypadkach kiedy licznik T1 używany jest do określenia szybkości transmisji port szeregowego, a programiście niezbędne są dwa dodatkowe liczniki, których role spełniają TH0 i TL0. 2

PRZYKŁAD_2 LICZNIK ZDARZEŃ SEG_ON EQU P1.6 ;włączenie wyśw.7-segm. KEY_COD EQU 01010101B ;wybrane klawisze-1,3,5 ;********* Ustawienie TIMER - ów ********* T0_M EQU 0 ;MODE (0..3) T1_C EQU 1 ;COUNTER/-TIMER TL1_SET EQU 0 ;wartość początkowa ;************************************** MOV TMOD,#TMOD_SET ;Timer 1 licznik MOV TL1,#TL1_SET SETB TR1 ;start Timera 1 MOV R0,#30H ;statyczna obsługa klaw. MOV A,#KEY_COD ;i wyświetlacza MOVX @R0,A ;wpis wybranych klawiszy i wskaźników MOV R0,#38H ;adres danych wskaźnika CLR SEG_ON ;włącz wyświetlacz ;przepisanie zawartości MOV A,TL1 ;licznika jako dane MOVX @R0,A ;dla wyświetlacza W przykładzie_2 klawisze 1, 3, 5 zostały podporządkowane wyświetlaczom 1, 3, 5 oraz dodatkowo 7. Młodszy bajt licznika jest bezpośrednio wpisywany do bufora do bufora danych wskaźnika, a więc bitowi 0odpowiada segment a, bitowi 1 segment b, itd. Kolejne naciskanie klawiszy powoduje zwiększanie się zawartości licznika, a tym samym wyświetlanie kolejnych liczb binarnych liczb binarnych na wyświetlaczach. Timer zlicza opadające zbocza impulsów przychodzących zwalnianie klawiszy klawiatury. PRZYKŁAD_3 TRYBY PRACY KEY_COD EQU 00111111B ;wszystkie klawisze T0_M EQU 0 ;MODE (0..3) T1_C EQU 1 ;COUNTER/-TIMER TL1_SET EQU 0 ;wartość początkowa TH1_SET EQU 0 ;wartość początkowa MOV TMOD,#TMOD_SET ;Timer 1 licznik MOV TL1,#TL1_SET MOV TH1,#TH1_SET SETB TR1 ;start Timera 1 MOV R0,#CSDS MOV A,#KEY_COD MOVX @R0,A ;wybrane klawisze SJMP DISPLAY MOV A,R2 ;wpisz zawartość licznika CJNE A,TL1,DISPLAY ;jeżeli jego wartość uległa zmianie 3

DISPLAY: ;wpisanie zawartości licznika LCALL LCD_CLR ;na wyświetlacz LCD MOV R2,TL1 ;zapamiętaj młodszą część MOV A,TH1 ;wpisz starszą LCALL WRITE_HEX MOV A,R2 ;i młodszą część licznika LCALL WRITE_HEX JNB TF1,LOOP CLR TF1 ;sygnalizuj przepełnienie CPL LED ;licznika Przykład_3 w działaniu podobny jest do przykładu_2, z tym że wyniki z timerów przedstawia na LCD. Dzięki przykładowi można przebadać różne tryby pracy, które omówione są wyżej. PRZYKŁAD_4 ODLICZANIE CZASU T0_M EQU 1 ;MODE (0..3) T1_C EQU 0 ;COUNTER/-TIMER ;50[ms] = 50 000[ćS]*(11.0592[MHz]/12) = 46 080 cykli = 180 * 256 TH0_SET EQU 256-180 TL0_SET EQU 0 MOV TMOD,#TMOD_SET ;Timer 0 liczy czas MOV TH0,#TH0_SET ;Timer 0 na 50ms MOV TL0,#TL0_SET SETB TR0 ;start Timera ;Pętla mrugania diody TEST CPL LED MOV A,#20 ;odczekaj czas 20*50ms=1s TIME_N50: JNB TF0,$ ;czekaj, aż Timer 0 odliczy 50ms MOV TH0,#TH0_SET ;TH0 na 50ms CLR TF0 ;zerowanie flagi Timera 0 DJNZ ACC,TIME_N50 ;odczekanie N*50ms W przykładzie_4 do odliczania czasu wykorzystano timer 0 pracujący w trybie 1. Maksymalny zakres liczenia to 65536 jednostek, czyli ok. 71ms. Przyjęto, że timer będzie odliczał równe odcinki czasu wynoszące 50 ms, więc timer musi liczyć do 46080 [(50000 us * 11.0592 Hz) / 12 ].Aby timer odliczał wartość 46080, należy wpisać wartość początkową TH0=256 180 TL0=0. Kiedy timer doliczy do pełnej wartości FFFFh, to przy następnym impulsie wystąpi przepełnienie (zgłaszane flagą TF0) i wartość timera wyniesie 0000h. W tym momencie należałoby od nowa załadować do timera, aby odliczał kolejne 50ms, ale nie jest to możliwe natychmiast. Zanim zostaną załadowane odpowiednie dane minie kilka cykli maszynowych, więc ładowane wartości muszą być odpowiednio korygowane. 4

SYSTEM PRZERWAŃ 8051. Mikrokontrolerze 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: Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT1 Znaczenie poszczególnych bitów jest następujące: TF1 wskaźnik przerwania od licznika T1. TF0 wskaźnik przerwania od licznika T0. TR1, TR0 sterowanie układami licznikowymi, nie istotne dla układów przerwań IE1 wskaźnik przerwania zewnętrznego INT1. IE0 wskaźnik przerwania zewnętrznego INT0 ITO, 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ł. Do uaktywnienia poszczególnych przerwań i określenia ich priorytetów przeznaczone są rejestry sterujące IE i IP. Rejestry sterujące układu przerwań: Rejestr: Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 IE EA - - ES ET1 EX1 ET0 EX0 IP - - - PS PT1 PX1 PT0 PX0 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ądkowuje dane przerwanie do poziomu odpowiednio 0 lub 1. PS ustalenie 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 przerwanie procedur obsługi przerwań z tego samego poziomu. Dodatkowa 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: INT0 (priorytet najwyższy), TF0, INT1, TF1, RI+TI (priorytet najniższy). 5

Przyjęcie przerwania powoduje sprzętową generacje rozkazu LCALL z adresem procedury obsługi przerwania, właściwym dla każdego przerwania. 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 lub jeżeli jest wykonywany adres powrotu z procedury obsługi przerwania RETI, rozkaz dostępu do rejestru IE i IP lub jakikolwiek rozkaz po nich wykonany. PRZYKŁAD_5 TIMERY T0_M EQU 1 ;MODE (0..3) T1_C EQU 0 ;COUNTER/-TIMER ;50[ms] = 50 000[uS]*(11.0592[MHz]/12) = ; = 46 080 cykli = 180 * 256 TH0_SET EQU 256-180 TL0_SET EQU 0 ORG 0BH MOV TH0,#TH0_SET ;TH0 na 50ms DJNZ ACC,NO_1SEK ;czy minęła 1 sek CPL LED ;mruganie diody TEST MOV A,#20 ;odczekaj kolejny czas 20*50ms=1s NO_1SEK: RETI ORG 100H MOV TMOD,#TMOD_SET ;Timer 0 liczy czas MOV TH0,#TH0_SET ;Timer 0 na 50ms MOV TL0,#TL0_SET SETB TR0 ;start Timera 0 MOV A,#20 ;odczekaj czas 20*50ms=1s SETB EA ;włącz zezwolenie ogólne na przerwania SETB ET0 ;włącz zezwolenie na przerwanie od Timera 0 SJMP $ ;koniec pracy programu głównego Przykład_5 jest programem obsługującym przerwanie, za każdym razem, a wiec co 50 ms, przeładowany jest rejestr TH0, aby kolejny odcinek czasu wynosił również 50 ms. Rejestr TL0 nie musi być przeładowany, tak jak w przykładzie w poprzedniej lekcji. Przy co dwudziestym przerwaniu (tj. co 1 s) wykonywana jest dodatkowo negacja linii LED. Obsługa przerwania jest zawsze zakończona rozkazem RETI. Odliczanie do dwudziestu, wykonywane na akumulatorze praktycznie uniemożliwia wykonanie jakiegokolwiek zadania przez program główny. PRZYKŁAD_6 TIMERY TIME EQU 30H T0_M EQU 1 ;MODE (0..3) T1_C EQU 0 ;COUNTER/-TIMER TH0_SET EQU 256-180 TL0_SET EQU 0 ORG 0BH PUSH PSW ;przechowanie rejestrów PUSH ACC ;na stosie 6

MOV TH0,#TH0_SET ;TH0 na 50ms DJNZ TIME,NO_1SEK ;czy minęła 1 sek CPL LED ;mruganie diody TEST MOV TIME,#20 ;odczekaj kolejny czas 20*50ms=1s NO_1SEK: POP ACC ;odtworzenie rejestrów POP PSW RETI MOV TMOD,#TMOD_SET ;Timer 0 liczy czas MOV TH0,#TH0_SET ;Timer 0 na 50ms MOV TL0,#TL0_SET SETB TR0 ;start Timera 0 MOV TIME,#20 ;odczekaj czas 20*50ms=1s SETB EA ;włącz zezwolenie ogólne na przerwania SETB ET0 ;włącz zezwolenie na przerwanie od Timera 0 LCALL LCD_CLR ;wpisywanie na LCD LCALL WAIT_KEY ;znaków odpowiadających ADD A,#30H ;użytym klawiszom LCALL WRITE_DATA W przykładzie tym po zainicjowaniu pracy Timera 0 program główny oczekuje na użycie klawisza klawiatury matrycowej i wypisuje go na wyświetlacz LCD. Akumulator jest tu stale wykorzystywany, a więc nie może być użyty do liczenia kolejnych przerwań. Licznik został przeniesiony do zdefiniowanej w tym celu komórki pamięci TIME. Jeżeli dokładnie przyjrzeć się programowi obsługi przerwania, to nie używa on akumulatora. Również żaden z rozkazów nie powoduje zmiany rejestru stanu. W zasadzie przechowywanie tych rejestrów na stosie nie wydaje się potrzebne. Jednak dobrą praktyką przy pisaniu programów jest przechowywanie przynajmniej rejestru stanu w czasie obsługi dowolnego przerwania. Pozwala to uniknąć niemiłych niespodzianek przy minimalnej (pozornie nieznaczącej) modyfikacji programu obsługi przerwania. 7