PROGRAMOWALNE SYSTEMY MECHATRONIKI

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

SYSTEM PRZERWAŃ ATmega 32

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Programowanie mikrokontrolerów. 8 listopada 2007

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Programowanie mikrokontrolerów. 5 grudnia 2007

Instytut Teleinformatyki

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Metody obsługi zdarzeń

Instytut Teleinformatyki

Przerwania, polling, timery - wykład 9

Instytut Teleinformatyki

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

Mikrokontrolery AVR Wprowadzenie

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

Sterowanie multipleksowe 4-cyfrowego wyświetlacza siedmiosegmentowego w oparciu o system przerwao mikrokontrolera ATmega16 w języku Asembler

Programowanie w językach asemblera i C

Komunikacja w mikrokontrolerach. Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski

Mikroprocesor Operacje wejścia / wyjścia

Schemat blokowy architektury AVR

Hardware mikrokontrolera X51

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

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

Instytut Teleinformatyki

2. PORTY WEJŚCIA/WYJŚCIA (I/O)

MIKROPROCESORY architektura i programowanie

Instytut Teleinformatyki

Komunikacja w mikrokontrolerach Laboratorium

Wstęp Architektura... 13

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32)

2. Architektura mikrokontrolerów PIC16F8x... 13

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

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Wbudowane układy peryferyjne cz. 1 Wykład 7

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

2.1 Porównanie procesorów

Architektura systemów komputerowych. dr Artur Bartoszewski

Przerwania w systemie mikroprocesorowym. Obsługa urządzeo wejścia/wyjścia

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

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Szkolenia specjalistyczne

Mikrokontroler ATmega32. Tryby adresowania Rejestry funkcyjne

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

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

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Konfiguracja i programowanie sterownika GE Fanuc VersaMax z modelem procesu przepływów i mieszania cieczy

Wbudowane układy komunikacyjne cz. 1 Wykład 10

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

Podstawy techniki mikroprocesorowej. Dr inż. Grzegorz Kosobudzki p.311a A-5. Tel

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

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

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

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Mechanizm przerwań i menadżer zdarzeń procesora sygnałowego F/C240

Komunikacja w mikrokontrolerach. Podstawy programowania. Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski

Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:

Programowanie mikrokontrolerów - laboratorium

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Sterowniki Urządzeń Mechatronicznych laboratorium. Ćw. 3: Timer v1.0

SYSTEMY MIKROPROCESOROWE W AUTOMATYCE. Projekt bariery świetlnej.

Instytut Teleinformatyki

Mikroprocesory i mikrosterowniki Wydział Elektroniki Mikrosystemów i Fotoniki Politechniki Wrocławskiej Ćwiczenie nr 4

Systemy wbudowane. Wprowadzenie. Struktura. Mikrokontrolery AVR. Wprowadzenie do programowania w C

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Przetwornik ADC procesora sygnałowego F/C240 i DAC C240 EVM

Programowanie mikrokontrolerów. 15 stycznia 2008

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

Instytut Teleinformatyki

INDU-22. Przemysłowy Sterownik Mikroprocesorowy. Przeznaczenie. masownica próżniowa

Architektura mikrokontrolera MCS51

PMiK Programowanie Mikrokontrolera 8051

dokument DOK wersja 1.0

Instrukcja do oprogramowania ENAP DEC-1

Architektura mikrokontrolera MCS51

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

IIPW_SML3_680 (Z80) przewodnik do ćwiczeń laboratoryjnych

Organizacja typowego mikroprocesora

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Układy czasowo-licznikowe w systemach mikroprocesorowych

Mikrokontrolery AVR ATmega

Instytut Teleinformatyki

Programowanie mikrokontrolerów 2.0

Programowanie mikrokontrolerów AVR z rodziny ATmega.

TECHNIKA MIKROPROCESOROWA

Start Bity Bit Stop 1 Bit Par Rys. 1

Wbudowane układy peryferyjne cz. 3 Wykład 9

Kompilator języka C na procesor 8051 RC51 implementacja

Techniki mikroprocesorowe i systemy wbudowane

Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2

INDU-40. Przemysłowy Sterownik Mikroprocesorowy. Przeznaczenie. Dozowniki płynów, mieszacze płynów.

PRZERWANIA. P1 - Procedura obslugi przerwania. Obsługa zdarzenia Z1 poprzez procedurę obsługi przerwania P1

2.1 Przesył danych między procesorem a tabelą zmiennych

Zewnętrzne układy peryferyjne cz. 1 Wykład 12

NT-01 Instrukcja obsługi pilota zdalnego sterowania. Widok pilota zdalnego sterowania

Przerwania w architekturze mikrokontrolera X51

Podstawy techniki cyfrowej Układy wejścia-wyjścia. mgr inż. Bogdan Pietrzak ZSR CKP Świdwin

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Transkrypt:

PROGRAMOWALNE SYSTEMY MECHATRONIKI Laboratorium nr 5 Podstawy programowania mikrokontrolerów. Przerwania.

1. System przerwań informacje ogólne Programy sterujące mikrokontrolerów rzadko mają postać listy instrukcji wykonywanych po kolei. Zazwyczaj program służy do realizacji złożonych zadań, w odpowiedzi na zaistniałe warunk. Odpowiednie procedury muszą być uruchamiane w zależności od występujących warunków zewnętrznych oraz stanu poszczególnych modułów mikrokontrolera. Jest to możliwe z zastosowaniem rozkazów testujących i tzw. instrukcji rozgałęzień, które umożliwiają wykonanie sekwencji poleceń z różnych obszarów programu. System przerwań jest mechanizmem ułatwiającym współpracę mikrokontrolera z układami peryferyjnymi, wewnętrznymi (np. układami licznikowymi, portami we/wy) czy zewnętrznymi (np. zewnętrzną pamięcią). W przypadku, gdy programista zezwoli na obsługę przerwań, a układ zgłosi potrzebę obsługi przerwania, mikrokontroler przerywa aktualnie realizowaną część programu i przystępuje do wykonania części kodu związanej ze zgłoszonym źródłem przerwania. Po zakończeniu realizacji procedury obsługi przerwania, mikrokontroler kontynuuje realizację programu głównego. Stosowanie przerwań umożliwia szybką reakcję na występujące zdarzenia poprzez wykonanie podprogramów przerwań, przez co jednostka centralna nie jest zaangażowana w ciągłe odpytywanie w celu sprawdzenia spełnienia warunków realizacji jakiegoś podzadania. Przykładem zastosowania systemu przerwań może być aplikacja realizująca termometr pokojowy zdalnie komunikujący się z komputerem PC poprzez interfejs USART RS-232. Mikroprocesor zajmuje się akwizycją danych z czujnika temperatury, następnie wysyła te dane poprzez port USART. Wysłanie ramki danych z zadaną prędkością transferu odbywa się automatycznie, i trwa pewien okres. W tym czasie mikroprocesor zajmuje się akwizycją danych. Bez zastosowania przerwania modułu USART związanego z zakończeniem procesu wysyłania ramki danych, należałoby cyklicznie sprawdzać gotowość modułu transmisji do wysłania kolejnej porcji danych, z jednoczesnym pomiarem temperatury, przykładowo obsługą wyświetlacza, sterowaniem wentylatorem itd. 2. Realizacja przerwań Warunkiem realizacji wszystkich przerwań jest wystąpienie globalnego zezwolenia obsługi przerwań. Aktywuje się je ustawiając znacznik I w rejestrze SREG, przy czym po restarcie mikroprocesora globalne zezwolenie obsługi przerwań jest nieaktywne. Zarządzanie globalnym zezwoleniem obsługi przerwań ułatwiają instrukcje: sei cli - zezwolenie na obsługę przerwań, ustawienie znacznika I=1, - blokowanie obsługi przerwań, ustawienie znacznika I=0. Obsługa zgłoszenia przerwania przez odpowiedni moduł jest możliwa przy globalnym zezwoleniu na przerwania oraz odpowiednim ustawieniu rejestru sterującego danym modułem. W układach AVR wiele modułów może generować żądania obsługi przerwania, w przypadku gdy dwa lub więcej przerwań wystąpi w danym cyklu zegara, są one realizowane w ściśle określonej kolejności charakterystycznej dla danego typu mikroprocesora i szczegółowo opisanej w jego nocie katalogowej (odgórne określenie priorytetów przerwań). Wygenerowanie żądania obsługi przerwania przez moduł mikrokontrolera powoduje przejście realizacji programu do wektora danego przerwania (adres pamięci zwykle w początkowej części pamięci flash), w którym powinien znajdować się program obsługi przerwania. Objętość obszaru pamięci przydzielonego poszczególnym wektorom przerwań

wynosi jedno lub dwa słowa rozkazowe, w zależności od typu mikrokontrolera. Z powodu tych ograniczeń w wektorach przerwań można umieścić jedynie instrukcje skoku do początku właściwego podprogramu obsługi przerwania. Priorytet obsługi przerwania związany jest z jego wektorem, im wyższy adres pamięci wektor przerwania (dalej znajduje się on w pamięci), tym niższy jest jego priorytet, i w przypadku wystąpienia kilku przerwań w tej samej chwili, tym później przerwanie to zostanie obsłużone. Program demonstrujący zastosowanie wektorów przerwań i procedur ich obsługi: Assembler:.org 0x000 jmp Reset.org 0x012 jmp Int_timer_0_comp // dyrektywa wymuszająca umieszczenie kolejnych rozkazów w obszarze pamięci zaczynając od adresu 0x000 // skok bezpośredni do procedury Reset, inicjalizującej pracę mikrokontrolera, wektor przerwania o adresie 0x000 // dyrektywa wymuszająca umieszczenie kolejnych rozkazów w obszarze pamięci zaczynając od adresu 0x012 // skok bezpośredni do procedury obsługi przerwania wywołanego przepełnieniem timera0 // dalsze wektory przerwań Reset: // procedura realizująca przerwanie inicjalizujące, przeważnie na początku ładuje się wskaźnik stosu ldi R16, high(ramend) out SPH, R16 ldi R16, low(ramend) out SPL, R16 sei // globalne zezwolenie na przerwania aktywne jmp Main // skok do pętli programu głównego Main: jmp Main Int_timer_0_comp: reti // początek pętli programu głównego // zapętlenie programu głównego // procedura obsługi przerwania // powrót z procedury obsługi przerwania z aktywacją globalnego pozwolenia na obsługę przerwań Język programowania C: #include <avr/io.h> #include <avr/interrupt.h> int main(void)

{ } sei(); Katedra Mechaniki Stosowanej i Robotyki ISR (TIMER0_COMP_vect) { } // procedura obsługi przerwania Uwaga: Istotne jest przestrzeganie następujących zasad w programowaniu procedur obsługi przerwań: 1. Wszystkie zmienne używane w procedurze obsługi przerwania powinny być zadeklarowane z użyciem opcji volatile np.: volatile unsigned int a; 2. Nie należy używać funkcji realizujących oczekiwanie w procedurze obsługi przerwania. 3. Nie należy włączać obsługi przerwań w procedurze obsługi przerwań, kompilator zrealizuje włączenie przerwań poprzez zastosowanie instrukcji reti. 4. Nie należy wykonywać złożonych obliczeń w funkcji obsługi przerwań. 3. Obsługa przerwań Prawie każdemu źródłu przerwania odpowiada dedykowany rejestr w przestrzeni adresowej wejścia-wyjścia, w którym znajduje się między innymi znacznik przerwania (ang. interrupt flag). Wartość bitu znacznika przerwania może ustawić jedynie źródło przerwania (np. układ licznikowy), jest to równoznaczne z wystąpieniem żądania obsługi przerwania. Zerowanie znacznika (flagi) następuje przeważnie automatycznie po zakończeniu procedury obsługi przerwania. Po wystąpieniu żądania przerwania, jeśli globalna obsługa przerwań jest aktywna (bit I=1 rejestru SREG), zostaje ona wyłączona (bit I=0), licznik programu zostaje zachowany na stosie i wywołana zostaje procedura obsługi przerwania. Realizacja procedury obsługi przerwania powinna się rozpoczynać zapamiętaniem stanu rejestru SREG np. poprzez tymczasowe umieszczenie jego wartości na stosie. Po zakończeniu realizacji procedury obsługi przerwania należy przywrócić wartości rejestru SREG w celu kontynuacji przerwanego programu głównego zgodnie z intencją programisty (zmiana stanu rejestru przez procedurę obsługi przerwania może zakłócić działanie dalszej części programu). Procedura_obsługi_przerwania: push R16 - zachowanie na stosie wartości rejestru R16 push XL - zachowanie na stosie niższej wartości (LSB) wskaźnika indeksowego X push XH - zachowanie na stosie wyższej wartości (MSB) wskaźnika indeksowego X in R16, SREG - przypisanie wartości rejestru SREG do R16 push R16 - odłożenie wartości rejestru SREG w R16 na stosie

Katedra Mechaniki Stosowanej i Robotyki - procedura obsługi przerwania pop R16 - zdjęcie ze stosu wartości rejestru R16 (wartość rejestru SREG) out SREG, R16 - przywrócenie wartości rejestru SREG sprzed rozpoczęcia procedury obsługi przerwania pop XH - zdjęcie ze stosu MSB wskaźnika indeksowego X pop XL - zdjęcie ze stosu LSB wskaźnika indeksowego X pop R16 reti - zdjęcie ze stosu rejestru R16 - powrót z procedury obsługi przerwania z globalnym odblokowaniem obsługi przerwań (flaga I=1 rejestru SREG) Powrót z procedury obsługi przerwania następuje przez użycie instrukcji reti (zdjęcie ze stosu adresu powrotnego, wykonanie skoku do przerwanej części programu i aktywowanie globalnego zezwolenia na przerwania), lub ret (działa podobnie jak reti, ale nie powoduje odblokowania globalnego zezwolenia na przerwania, po powrocie nadal I=0). Objętość procedur obsługi przerwań powinna być jak najmniejsza, należy w nich umieszczać jedynie operacje, których wykonanie jest sprawą krytyczną z punktu widzenia prawidłowego działania programu. 4. Przerwania zewnętrzne na portach wejścia-wyjścia Procesory ATmega umożliwiają generowanie przerwań na podstawie zmiany sygnałów na wybranych wyprowadzenia portów wejścia-wyjścia. Przykładowo mikrokontroler ATmega 128 umożliwia generowanie przerwań na podstawie zmiany stanu 8 wyprowadzeń portów (wyprowadzenia portu D: PD0 (INT0 przerwanie 0), PD1 (INT1 przerwanie 1), PD2 (INT2) i PD3 (INT3), oraz portu E: PE4 (INT4), PE5 (INT5), PE6 (INT6), PE7 (INT7). Wektory tych przerwań znajdują się w następujących adresach pamięci programu: Tab. 1. Rozłożenie wektorów przerwań wyprowadzeń mikrokontrolera Nr Adres w pamięci Nazwa wektora Źródło przerwania: programu: przerwania (C): 2 0x0002 INT0_vect INT0 3 0x0004 INT1_vect INT1 4 0x0006 INT2_vect INT2 5 0x0008 INT3_vect INT3 6 0x000A INT4_vect INT4 7 0x000C INT5_vect INT5 8 0x000E INT6_vect INT6 9 0x0010 INT7_vect INT7 Odpowiednie ustawienie trybu pracy wyprowadzeń portów jako źródeł przerwań jest możliwe poprzez nastawy rejestrów:

a) EICRA rejestr kontroli zewnętrznych przerwań A (ang. External Interrupt Control Register A) Bit 7 6 5 4 3 2 1 0 EICRA ISC31 ISC30 ISC21 ISC20 ISC11 ISC10 ISC01 ISC00 Sposób wyzwalania przerwań zewnętrznych 3-0 (INT3-INT0) jest sterowany poprzez nastawy rejestru ECIRA. Odpowiednie ustawienie bitów ISCn1 oraz ISCn2 (gdzie n=3,2,1,0) powoduje wywołanie żądania obsługi przerwania. W przypadku ustawienia: - ISCn1=0, ISCn2=0 poziom niski wejścia INTn (PDn) powoduje żądanie przerwania, - ISCn1=0, ISCn2=1 zarezerwowano, - ISCn1=1, ISCn2=0 opadające zbocze na wejściu INTn (PDn) generuje asynchroniczne żądanie przerwania, - ISCn1=1, ISCn2=1 rosnące zbocze na wejściu INTn (PDn) generuje asynchroniczne żądanie przerwania, b) EICRB rejestr kontroli zewnętrznych przerwań B (ang. External Interrupt Control Register B) Bit 7 6 5 4 3 2 1 0 EICRB ISC71 ISC70 ISC61 ISC60 ISC51 ISC50 ISC41 ISC40 Sposób wyzwalania przerwań zewnętrznych 7-4 (INT7-INT4) jest analogiczny jak w przypadku przerwań 3-0 (szczegóły w nocie katalogowej). c) EIMSK rejestr maski przerwań zewnętrznych (ang. External Interrupt Mask Register) Bit 7 6 5 4 3 2 1 0 EIMSK INT7 INT6 INT5 INT4 INT3 INT2 INT1 INT0 Domyślna wartość rejestru EIMSK po inicjalizacji wynosi 0b00000000. Ustawienie danego bitu rejestru na wartość 1 powoduje aktywację przerwania zewnętrznego przyporządkowanego odpowiedniemu wyprowadzeniu portu (PD0-PD3 lub PE4-PE7). Konfiguracja sposobu wyzwalania przerwania powinna być ustawiona wcześniej poprzez odpowiednie nastawy rejestrów EICRA i EICRB. d) EIFR rejestr znaczników (flag) przerwań zewnętrznych (ang. External Interrupt Flag Register) Bit 7 6 5 4 3 2 1 0 EIFR INTF7 INTF6 INTF5 INTF4 INTF3 INTF2 INTF1 INTF0 Uwaga: szczegółowe informacje na temat konfiguracji przerwań zewnętrznych można znaleźć w nocie katalogowej mikrokontrolera ATmega 128. 5. Przykładowy program z zastosowaniem przerwań zewnętrznych. Program na podstawie rosnącego zbocza sygnału na wyprowadzeniu PD0 (INT0) generuje przerwanie sprzętowe i realizuje zmianę stanu wyprowadzenia portu A (PA0) z PA0=0 na PA0=1 w procedurze obsługi przerwania. Assembler:

.INCLUDE "m128def.inc".org 0x0000 jmp Reset jmp Ext_int0 - wektory przerwań Reset: /* standardowa procedura inicjalizacji */ ldi R16, 0b00000001 out PORTD, R16 ldi R16, 0b00000011 sts EICRA, R16 ldi R16, 0b00000001 out EIMSK, R16 jmp Main Main: jmp Main - ustawienie portu D do pracy w trybie wejścia - konfiguracja przerwania, reakcja na wznoszące zbocze sygnału - aktywacja przerwania zewnętrznego linii PD0 - skok do głównej pętli programu - główna pętla programu Ext_int0: - procedura obsługi przerwania zewnętrznego lini PD0 ldi R16, 0b00000001 out DDRA, R16 out PORTA, R16 reti - powrót do pętli głównej programu z globalną inicjalizacją przerwań Język programowania C: #define F_CPU 16000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> // definicja częstotliwości taktowania mikrokontrolera w Hz // zawiera funkcje obsługi przerwań // zawiera funkcje wstrzymujące działanie program na pewien okres int main(void) { PORTD = 0xFF; // włączenie rezystorów podciągających EICRA = (1<<ISC01) (1<<ISC00); // reakcja na rosnące zbocze EIMSK = (1<<INT0); // włączenie przerwania INT0

sei(); Katedra Mechaniki Stosowanej i Robotyki // włączenie przerwań } ISR (INT0_vect) { DDRA = (1<<DDA0); PORTA = (1<<PA0); } // funkcja obsługi przerwania INT0 // ustawienie kierunku linii portu A - tryb pracy jako wyjście // ustawienie stanu wysokiego na wyprowadzeniu PA0 Uwaga: Istotne jest przestrzeganie następujących zasad w programowaniu procedur obsługi przerwań: 1. Wszystkie zmienne używane w procedurze obsługi przerwania powinny być zadeklarowane z użyciem opcji volatile np.: volatile unsigned int a; 2. Nie należy używać funkcji realizujących oczekiwanie w procedurze obsługi przerwania. 3. Nie należy włączać obsługi przerwań w procedurze obsługi przerwań, kompilator zrealizuje włączenie przerwań poprzez zastosowanie instrukcji reti. 4. Nie należy wykonywać złożonych obliczeń w funkcji obsługi przerwań. 6. Zadania do wykonania a) Zadanie 1: 1) Zespoły 1,2,3,4 napisać program reagujący na rosnące zbocze sygnału na linii 0-3 portu D, zależnie od nr zespołu (zespoły 1,2,3,4). Wygenerowane przerwanie powoduje ustawienie bitu odpowiadającego numerowi zespołu minus 1 (np. bit 2 (PA2) dla zespołu nr 3) portu A. 2) Zespoły 5,6,7,8 napisać program reagujący na opadające zbocze sygnału na linii 0-3 portu D, zależnie od nr zespołu (zespoły 5,6,7,8). Wygenerowane przerwanie powoduje ustawienie bitu odpowiadającego numerowi zespołu minus 1 (np. bit 5 (PB5) dla zespołu 6) portu B. b) Zadanie 2: 1) Zespoły 1,3,5,7 - napisać program korzystający z przerwań zewnętrznych portu D, który po ustawieniu przycisku w pozycji on (przycisk bistabilny) powoduje ustawienie wyjścia portu C odpowiadającego numerowi zespołu minus 1 (np. bit 2 (PC2) dla zespołu nr 3) w stan wysoki, natomiast wyjścia portu B odpowiadającego numerowi zespołu minus 1 w stan niski. Przełączenie przycisku w pozycję off powoduje ustawienie odpowiedniego wyjścia portu C w stan niski, natomiast wyjścia portu B w stan wysoki. Odpowiednie wyjście portu B jest inicjalizowane w stanie

wysokim, natomiast odpowiednie wyjście portu C jest inicjalizowane w stanie niskim po uruchomieniu mikrokontrolera. Narysować ogólny schemat elektryczny takiego układu (przycisk, mikrokontroler z wyszczególnieniem używanych linii poszczególnych portów, diody na wyprowadzeniach portów B i C), opisać działanie układu. Skorzystać z przerwań zewnętrznych. 2) Zespoły 2,4,6,8 - napisać program korzystający z przerwań zewnętrznych portu D, który po ustawieniu przycisku w pozycji on (przycisk bistabilny) powoduje ustawienie wyjścia portu A odpowiadającego numerowi zespołu minus 1 (np. bit 2 (PC2) dla zespołu nr 3) w stan wysoki, natomiast wyjścia portu E odpowiadającego numerowi zespołu minus 1 w stan niski. Przełączenie przycisku w pozycję off powoduje ustawienie odpowiedniego wyjścia portu A w stan niski, natomiast wyjścia portu E w stan wysoki. Odpowiednie wyjście portu E jest inicjalizowane w stanie wysokim, natomiast odpowiednie wyjście portu A jest inicjalizowane w stanie niskim po uruchomieniu mikrokontrolera. Narysować ogólny schemat elektryczny takiego układu (przycisk, mikrokontroler z wyszczególnieniem używanych linii poszczególnych portów, diody na wyprowadzeniach portów A i E), opisać działanie układu. Skorzystać z przerwań zewnętrznych. Sprawozdanie powinno zawierać: 1. Wstęp teoretyczny. 2. Opis realizowanych zadań. 3. Listingi programów z komentarzem dotyczącym funkcji poszczególnych linii kodu. 4. Opis działania programów. 5. Wnioski.