|
Wyjście Spis treści Wstecz Dalej
Autor artykułu |
©2026 mgr Jerzy Wałaszek
|

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s
permission is not required when using copyrighted material in:
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
W rozdziale pojawiają się terminy angielskie Input Capture oraz Output Compare. Nie tłumaczyłem ich, ponieważ w języku polskim brak jest dobrych odpowiedników.
Termin Input Capture oznacza reakcję na zdarzenia, które mogą się pojawić w trakcie pracy mikrokontrolera. Reakcja ta polega na zapisaniu czasu wystąpienia tego zdarzenia, czyli na Rejestracji Czasu Zdarzenia Wejściowego. Odbywa się to w ten sposób, iż w momencie wykrycia zdarzenia (np. zmiany poziomu sygnału na określonej końcówce mikrokontrolera) następuje zapamiętanie w osobnym rejestrze stanu timera/licznika (stąd słowo Capture, które po angielsku oznacza "przechwycenie" lub "zarejestrowanie"). Stan ten jest znacznikiem czasu (ang. time-stamp), w którym wystąpiło zdarzenie i może być w różny sposób wykorzystywany w aplikacji.
Termin Output Compare odnosi się do zmiany stanu wybranej końcówki, jeśli wewnętrzny licznik odmierzy odpowiedni czas. Odbywa się to w ten sposób, iż stan licznika jest porównywany z rejestrem przechowującym znacznik czasu. Gdy licznik osiągnie wartość znacznika czasu, występuje zgodność porównania (ang. Compare Match) i w tym momencie mikrokontroler może wykonać różne operacje, np. zmienić stan logiczny określonej końcówki. Pozwala to generować różne przebiegi czasowe.
Wszystkie porty AVR posiadają możliwość pracy jako wejście lub wyjście danych, gdy używa się ich jako ogólne, cyfrowe porty wejścia/wyjścia. Oznacza to, iż kierunek pracy jednego portu (wejście lub wyjście) można zmieniać bez ryzyka niezamierzonej zmiany kierunku innych portów za pomocą instrukcji SBI i CBI. To samo dotyczy stanów wyjściowych (jeśli dany port pracuje jako wyjście) lub włączania/wyłączania oporników podciągających (ang. pull-up resistors). Każdy z buforów wyjściowych posiada symetryczne Parametry obciążenia z możliwością pochłaniania lub wyprowadzania prądu. Porty posiadają wystarczającą obciążalność do sterowania bezpośrednio wyświetlaczami LED. Wszystkie porty posiadają indywidualnie wybierane oporniki podciągające o oporności niezależnej od napięcia zasilającego. Wszystkie końcówki we/wy posiadają diody zabezpieczające zarówno do VCC jak i do masy, co zaznaczono na rysunku poniżej. Kompletną listę parametrów znajdziesz w rozdziale "Parametry elektryczne: TA = -40°C do 85°C".

Wszystkie rejestry i odwołania do bitów w tym rozdziale są zapisane w sposób ogólny. Mała litera “x” reprezentuje literową nazwę portu, a mała litera "n" reprezentuje numer bitu. Jednakże, gdy stosuje się definicje rejestru lub bitu w programie, należy stosować precyzyjną postać nazwy. Na przykład PORTB3 dla bitu nr 3 w porcie B, tutaj ogólnie zapisanego jako PORTxn. Fizyczne rejestry we/wy i pozycje ich bitów opisane są dalej w tym rozdziale.
Dla każdego portu przydzielone są trzy adresy w pamięci we/wy, po jednym dla rejestru danych – PORTx (ang. Data Register), dla rejestru kierunku danych – DDRx (ang. Data Direction Register) i dla rejestru portu wejściowego – PINx (ang. Port Input Pins). Rejestr portu wejściowego znajduje się w komórce pamięci we/wy, której zawartość można tylko odczytywać, natomiast pozostałe komórki portów danych i można odczytywać i zapisywać. Jednakże zapis bitu o wartości 1 do bitu PINnx spowoduje odwrócenie stanu logicznego odpowiadającego mu bitu PORTxn w rejestrze danych. Dodatkowo bit wyłączania oporników podciągających (ang. Pull-up Disable, PUD w MCUCR) wyłącza funkcję podciągania dla wszystkich końcówek portów, jeśli został ustawiony.
Użycie portu we/wy jako ogólnego portu cyfrowego opisane jest w następnym podrozdziale. Większość końcówek portów jest multipleksowana z alternatywnymi funkcjami mikrokontrolera, co opisano w podrozdziale "Alternatywne funkcje Portu". Opis tych funkcji znajdziesz w dalszych rozdziałach.
Zauważ, iż włączenie alternatywnej funkcji na niektórych wyprowadzeniach portu nie wpływa na używanie innych wyprowadzeń w porcie jako ogólnego cyfrowego we/wy.

Uwaga: 1. WPx, WDx, RRx, RPx, i RDx są wspólne dla wszystkich końcówek w obrębie tego samego portu. clkI/O, SLEEP i PUD są wspólne dla wszystkich portów.
Każda końcówka portu składa się z trzech bitów rejestrowych: DDxn, PORTxn i PINxn. Jak pokazano w podrozdziale "Opis rejestrów" bity DDxn są dostępne pod adresem we/wy DDRx, bity PORTxn pod adresem we/wy PORTx, a bity PINxn pod adresem we/wy PINx.
Bit DDxn w rejestrze DDRx wybiera kierunek pracy tej końcówki. Jeśli w DDxn jest zapisany stan logiczny 1, to Pxn zostaje skonfigurowane jako wyjście. Jeśli DDxn jest wyzerowane,, Pxn jest skonfigurowane jako końcówka wejścia.
Jeśli w PORTxn zostanie zapisany stan logiczny 1, gdy ta końcówka pracuje jako wejście, to uaktywniony będzie opornik podciągający. Aby wyłączyć opornik podciągający, należy wpisać do PORTxn zero lub skonfigurować tę końcówkę jako końcówkę wyjścia. Gdy warunek resetu staje się aktywny, końcówki portu przechodzą w stan wysokiej rezystancji, nawet jeśli nie pracuje żaden zegar.
Jeśli w PORTxn zostanie zapisany stan logiczny 1, gdy końcówka ta jest skonfigurowana jako końcówka wyjścia, to zostaje ona wysterowana w stan wysoki 1. Jeśli do PORTxn zostanie wpisane zero logiczne, gdy końcówka pracuje jako wyjście, to zostanie ona wysterowana w stan niski 0.
Gdy występuje przełączenie pomiędzy stanem wysokiej
impedancji ({DDxn, PORTxn} = 0b00) a
wyjściem w stanie wysokim 1 ({DDxn, PORTxn} =
0b11), musi pojawić się stan pośredni albo z włączonym
opornikiem podciągającym
Przełączenie pomiędzy wejściem z podciąganiem oraz wyjściem w
stanie niskim daje ten sam problem. Użytkownik musi użyć albo
stanu wysokiej impedancji
| DDxn | PORTxn | PUD (w MCUCR) |
we/wy | Podciąganie | Komentarz |
| 0 | 0 | X | Wejście | Nie | Stan wysokiej impedancji (Hi-Z) |
| 0 | 1 | 0 | Wejście | Tak | Pxn będzie wyprowadzać prąd, gdy zewnętrznie wysterowane stanem niskim |
| 0 | 1 | 1 | Wejście | Nie | Stan wysokiej impedancji (Hi-Z) |
| 1 | 0 | X | Wyjście | Nie | Wyjście w stanie niskim (pobieranie prądu) |
| 1 | 1 | X | Wyjście | Nie | Wyjście w stanie wysokim (wyprowadzanie prądu) |
Niezależnie od ustawienia bitu kierunku danych DDxn końcówka portu może być odczytywana poprzez bit rejestrowy PINxn. Jak pokazano na schemacie z początku podrozdziału bit rejestrowy PINxn i poprzedzający go przerzutnik latch tworzą synchronizator. Jest on potrzebny, aby uniknąć metastabilności, jeśli fizyczna końcówka zmienia wartość w pobliżu zbocza wewnętrznego zegar, lecz wprowadza on również pewne opóźnienie.
Poniższy rysunek pokazuje wykres czasowy synchronizacji, gdy odczytywany jest stan logiczny przykładany zewnętrznie do końcówki portu. Maksymalne i minimalne czasy opóźnień propagacyjnych są oznaczone odpowiednio jako tpd,max i tpd,min.

Rozważmy sytuację, gdy okres zegarowy rozpoczyna się tuż za pierwszą opadającą krawędzią zegara systemowego. Przerzutnik latch jest zatrzaśnięty przy niskim poziomie sygnału zegarowego, a staje się przezroczysty (na wyjściu pojawia się sygnał z wejścia D), gdy sygnał zegara przyjmuje stan wysoki, co pokazuje na powyższym wykresie zakreskowany na czerwono obszar. Gdy sygnał zegara wróci do stanu niskiego, wartość sygnału z wejścia zostaje zatrzaśnięta w przerzutniku latch. Przy następnej krawędzi narastającej zegara stan wyjścia Q przerzutnika latch zostaje przepisany do bitu rejestru PINxn. Jak pokazują czasy tpd,max i tpd,min, przejście sygnału z końcówki do bitu portu PINxn będzie opóźnione o czas pomiędzy ½ a 1½ okresu zegara systemu.
Gdy odczytywana jest wartość końcówki portu ustawiona programowo, należy wstawić instrukcję NOP, jak pokazano na poniższym wykresie. Instrukcja OUT ustawia przerzutnik latch przy dodatniej krawędzi zegara (przejście z 0 na 1). W tym przypadku opóźnienie tpd wprowadzane przez synchronizator wynosi jeden okres zegara systemowego.

Poniższy przykład kodu pokazuje, jak ustawić końcówki portu B 0 i 1 w stan wysoki, 2 i 3 w stan niski, i zdefiniować końcówki 4...7 jako wejścia z opornikiem podciągającym podpiętym do końcówek 6 i 7. Końcówki są odczytywane z powrotem, lecz jak przedyskutowano poprzednio, została wstawiona instrukcja NOP, aby móc odczytać wartość poprzednio przypisaną do niektórych z końcówek.
| Przykład w kodzie maszynowym(1) |
...
; Zdefiniuj podciąganie i ustaw wyjścia w stan wysoki
; Zdefiniuj kierunki dla końcówek portu
ldi r16,(1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0)
ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)
out PORTB,r16
out DDRB,r17
; Wstaw NOP dla synchronizacji
nop
; Odczytaj końcówki portu
in r16,PINB
...
|
| Przykład w języku C |
unsigned char i;
...
/* Zdefiniuj podciąganie i ustaw wyjścia w stan wysoki */
/* Zdefiniuj kierunki dla końcówek portu */
PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);
DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
/* Wstaw NOP dla synchronizacji */
_NOP( );
/* Odczytaj końcówki portu */
i = PINB;
...
|
Jak pokazano na schemacie z początku rozdziału, wejściowy sygnał cyfrowy może zostać zwarty do masy przed wejściem bramki Schmitta:

Sygnał oznaczony na tym rysunku jako SLEEP jest ustawiany przez sterownik usypiania mikrokontrolera w trybie wyłączania napięcia oraz w trybie gotowości, aby uniknąć wysokiego poboru energii, jeśli jakieś sygnały wejściowe pozostawiono w stanie pośrednim np. w pobliżu wartości VCC/2. Sygnał SLEEP zostaje anulowany dla końcówek portu aktywowanych jako końcówki przerwań zewnętrznych. Jeśli żądanie przerwania zewnętrznego nie jest włączone, to sygnał SLEEP jest aktywny również dla tych końcówek.
Sygnał SLEEP jest również anulowany przez różne inne funkcje alternatywne, jak opisano w kolejnym podrozdziale.
Jeśli wysoki stan logiczny utrzymuje się na końcówce asynchronicznego przerwania zewnętrznego skonfigurowanej jako "przerwanie przy narastającym zboczu, opadającym zboczu lub zmianie stanu końcówki", gdy przerwanie zewnętrzne nie jest uaktywnione, to odpowiadający tej końcówce znacznik przerwania zewnętrznego zostanie ustawiony, gdy mikrokontroler wybudzi się z powyżej wspomnianego trybu uśpienia, ponieważ zwarcie do masy w tych trybach uśpienia powoduje zmianę stanu logicznego.
Jeśli niektóre końcówki są nieużywane, to zaleca się, aby te końcówki posiadały zdefiniowany poziom. Nawet jeśli większość wejść cyfrowych jest wyłączona w głębokich trybach uśpienia, jak opisano powyżej, niepodłączonych wejść należy unikać, aby zmniejszyć pobór prądu we wszystkich innych trybach, gdzie cyfrowe wejścia są włączone (reset, tryb aktywny i tryb bezczynności).
Najprostszą metodą zapewnienia zdefiniowanego poziomu nieużywanej końcówki jest włączenie wewnętrznych oporników podciągających. W tym wypadku opornik podciągający będzie wyłączony podczas resetu. Jeśli niski pobór prądu podczas resetu jest ważny, to zaleca się użycie zewnętrznych oporników podciągających w górę lub w dół (dołączonych do Vcc lub do GND). Nie jest zalecane bezpośrednie podłączanie nieużywanych końcówek do Vcc lub do GND, ponieważ może to spowodować pobór nadmiernego prądu, jeśli końcówka zostanie przypadkowo skonfigurowana jako wyjście.

| PUOExn: | Pxn PULL-UP OVERRIDE ENABLE włączenie anulacji opornika podciągającego dla Pxn |
PUD: | PULLUP DISABLE wyłączenie funkcji podciągania |
|
| PUOVxn: | Pxn PULL-UP OVERRIDE VALUE stan opornika podciągającego dla Pxn po anulacji |
WDx: | WRITE DDRx zapis DDRx |
|
| DDOExn: | Pxn DATA DIRECTION OVERRIDE
ENABLE włączenie anulacji kierunku danych dla Pxn |
RDx: | READ DDRx odczyt DDRx |
|
| DDOVxn: | Pxn DATA DIRECTION OVERRIDE
VALUE kierunek danych dla Pxn po anulacji |
RRx: | READ PORTx REGISTER odczyt rejestru PORTx |
|
| PVOExn: | Pxn PORT VALUE OVERRIDE
ENABLE włączenie anulacji stanu wyjściowego portu Pxn |
WRx | WRITE PORTx zapis rejestru PORTx |
|
| PVOVxn: | Pxn PORT VALUE OVERRIDE
VALUE stan wyjściowy portu Pxn po anulacji |
RPx: | READ PORTx PIN odczyt końcówki PORTx |
|
| DIEOExn: | Pxn DIGITAL INPUT-ENABLE
OVERRIDE ENABLE włączenie anulacji włączenia wejścia cyfrowego dla Pxn |
WPx: | WRITE PINx zapis PINx |
|
| DIEOVxn: | Pxn DIGITAL INPUT-ENABLE
OVERRIDE VALUE stan włączenia wejścia cyfrowego Pxn po anulacji |
clkI/O: | I/O CLOCK zegar we/wy |
|
| SLEEP | sterowanie uśpieniem | DIxn: | DIGITAL INPUT PIN n ON PORTx końcówka wejścia cyfrowego w PORTx |
|
| AIOxn: | ANALOG INPUT/OUTPUT PIN n ON
PORTx końcówka n we/wy analogowego w PORTx |
| Uwaga: | Sygnały WPx, WDx, RRx, RPx i RDx są wspólne dla wszystkich końcówek wewnątrz tego samego portu. Sygnały clkI/O i SLEEP są wspólne dla wszystkich portów. Wszystkie pozostałe sygnały są indywidualne dla każdej końcówki. |
Ilustracja na powyższym obrazku służy jako ogólny opis, który odnosi się do wszystkich końcówek portów w rodzinie mikrokontrolerów AVR. Niektóre sygnały anulujące mogą nie występować we wszystkich końcówkach portów.
Poniższa tabela podsumowuje funkcje sygnałów anulujących. Indeksy końcówek i portów z obrazka powyżej nie będą pokazywane w następnych tabelach. Sygnały anulujące są generowane wewnętrznie w modułach posiadających alternatywną funkcję.
| Nazwa sygnału | Pełna nazwa | Opis |
| PUOE | Pull-up Override Enable włączenie anulacji opornika podciągającego |
Jeśli sygnał ten ma wysoki poziom logiczny, to sterowanie przyłączaniem opornika podciągającego jest kontrolowane przez sygnał PUOV. Jeśli sygnał ten ma niski stan logiczny, to opornik podciągający zostanie podłączony do linii portu, gdy PUExn = 0b1. |
| PUOV | Pull-up Override Value stan opornika podciągającego po anulacji |
Jeśli PUOE jest w stanie wysokim, to opornik podciągający jest podłączany/odłączany przez stan sygnału PUOV bez względu na ustawienie bitu rejestrowego PUExn. |
| DDOE | Data Direction Override Enable włączenie anulacji kierunku danych |
Jeśli sygnał ten ma stan wysoki, kierunek działania portu jest kontrolowany przez sygnał DDOV. Jeśli ten sygnał ma stan niski, to kierunkiem pracy portu steruje bit rejestrowy DDxn. |
| DDOV | Data Direction Override Value kierunek danych po anulacji |
Jeśli DDOE ma stan wysoki, to kierunkiem pracy portu steruje sygnał DDOV bez względu na ustawienie bitu rejestrowego DDxn. |
| PVOE | Port Value Override Enable włączenie anulacji stanu wyjściowego portu |
Jeśli sygnał ten ma stan wysoki i aktywne jest wyjście portu, to stan na tym wyjściu kontroluje sygnał PVOV. Jeśli PVOE ma stan niski i wyjście portu jest aktywne, to stan na tym wyjściu określa bit rejestrowy PORTxn. |
| PVOV | Port Value Override Value stan wyjścia portu po anulacji |
Jeśli PVOE jest w stanie wysokim, to stan wyjścia portu (jeśli port pracuje jako wyjście) określa PVOV, bez względu na ustawienie bitu rejestrowego PORTxn. |
| DIEOE | Digital Input Enable Override Enable włączenie anulacji włączenia wejścia cyfrowego |
Jeśli sygnał ten jest ustawiony, to włączanie/wyłączanie wejścia cyfrowego jest kontrolowane stanem sygnału DIEOV. Jeśli sygnał DIEOE ma stan niski to włączanie/wyłączanie wejścia cyfrowego określa stan mikrokontrolera (tryb normalny, tryb uśpienia). |
| DIEOV | Digital Input Enable Override Value stan włączenia wejścia cyfrowego po anulacji |
Jeśli sygnał DIEOE jest ustawiony, to wejście cyfrowe jest włączane/wyłączane stanem sygnału DIEOV, bez względu na stan mikrokontrolera (tryb normalny, tryb uśpienia). |
| DI | Digital Input wejście cyfrowe |
Jest to wejście cyfrowe dla alternatywnych funkcji. Na rysunku powyżej jest ono połączone z wyjściem bramki Schmitta przed synchronizatorem. O ile wejście cyfrowe nie będzie używane jako źródło zegarowe, moduł z alternatywną funkcją będzie korzystał ze swojego własnego synchronizatora. |
| AIO | Analog Input/Output wejście/wyjście analogowe |
Jest to analogowe wejście/wyjście dla alternatywnych funkcji. Sygnał jest bezpośrednio podłączony do końcówki mikrokontrolera i może być używany w obu kierunkach. |
Kolejne podrozdziały krótko opisują alternatywne funkcje dla każdego portu oraz łączą sygnały anulujące z tymi funkcjami. Więcej szczegółów znajdziesz w opisie funkcji alternatywnych w dalszych rozdziałach.
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x30 (0x50) | – | – | – | – | ACME | PUD | PSR2 | PSR10 | SFIOR |
| Zapis/Odczyt | O | O | O | O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Gdy ten bit zostanie zapisany logiczną jedynką, oporniki podciągające w
portach we/wy są wyłączone, nawet jeśli rejestry DDxn i PORTxn skonfigurowano do
włączenia tych oporników

| Końcówka portu | Funkcja alternatywna |
| PB7 |
XTAL2 (końcówka 2 oscylatora
zegarowego układu) TOSC2 (końcówka 2 oscylatora timera) |
| PB6 |
XTAL1 (końcówka 1 oscylatora
zegarowego układu lub wejście zegara zewnętrznego) TOSC1 (końcówka 1 oscylatora timera) |
| PB5 | SCK (wejście zegarowe Master magistrali SPI) |
| PB4 | MISO (wejście Master magistrali SPI/wyjście Slave magistrali SPI) |
| PB3 |
MOSI (wyjście Master magistrali
SPI/wejście Slave magistrali SPI) OC2 (wyjście zgodności porównania timera/licznika 2) |
| PB2 |
SS (wybór układu Slave przez
magistralę SPI) OC1B (wyjście B zgodności porównania timera/licznika 1) |
| PB1 | OC1A (wyjście A zgodności porównania timera/licznika 1) |
| PB0 | ICP1 (końcówka Input Capture timera/licznika 1) |
XTAL2: Końcówka 2 oscylatora zegarowego układu. Używana jako końcówka zegarowa dla oscylatora kwarcowego lub oscylatora kwarcowego niskiej częstotliwości. Gdy jest używana jako końcówka zegarowa, nie może pełnić funkcji końcówki we/wy.
TOSC2: Końcówka 2 oscylatora timera. Używana tylko w przypadku wybrania wewnętrznego, kalibrowanego oscylatora RC na źródło zegarowe układu, a asynchroniczny timer został uaktywniony przez właściwe ustawienie w rejestrze ASSR. Gdy bit AS2 w ASSR zostanie ustawiony w celu włączenia asynchronicznego taktowania timera/licznika 2, końcówka PB7 jest odłączana od portu i staje się odwracającym wyjściem wzmacniacza oscylatora. W tym trybie oscylator kwarcowy jest podłączany do tej końcówki, a końcówka nie może być juz używana jako końcówka we/wy. Gdy końcówka PB7 jest używana jako końcówka zegarowa, bity DDB7, PORTB7 i PINB7 dadzą przy odczycie zero.
XTAL1: Końcówka 1 oscylatora zegarowego układu. Używana dla wszystkich źródeł zegarowych układu z wyjątkiem wewnętrznego, kalibrowanego oscylatora RC. Gdy jest używana jako końcówka zegarowa, nie może pełnić funkcji końcówki we/wy.
TOSC1: Końcówka 1 oscylatora timera. Używana tylko w przypadku wybrania wewnętrznego, kalibrowanego oscylatora RC na źródło zegarowe układu, a asynchroniczny timer został uaktywniony przez właściwe ustawienie w rejestrze ASSR. Gdy bit AS2 w ASSR zostanie ustawiony w celu włączenia asynchronicznego taktowania timera/licznika 2, końcówka PB6 jest odłączana od portu i staje się odwracającym wejściem wzmacniacza oscylatora. W tym trybie oscylator kwarcowy jest podłączany do tej końcówki, a końcówka nie może być juz używana jako końcówka we/wy. Gdy końcówka PB6 jest używana jako końcówka zegarowa, bity DDB6, PORTB6 i PINB6 dadzą przy odczycie zero.
SCK: końcówka wyjścia zegara dla Master/wejścia zegara dla Slave dla kanału SPI. Gdy SPI pracuje w trybie Slave, to końcówka ta staje się wejściem bez względu na ustawienie bitu DDB5. Gdy SPI pracuje w trybie Master, kierunek danych tej końcówki sterowany jest bitem DDB5. Gdy SPI wymusza na tej końcówce tryb wejścia, opornik podciągający wciąż jest sterowany bitem PORTB5.
MISO: Końcówka wejścia danych dla trybu Master/wyjścia danych dla trybu Slave (ang. Master Data input, Slave Data output pin) dla kanału SPI. Gdy SPI pracuje w trybie Master, końcówka ta jest skonfigurowana jako wejście bez względu na ustawienie bitu DDB4. Gdy SPI pracuje jako Slave, kierunek danych tej końcówki jest kontrolowany bitem DDB4. Gdy SPI wymusza na tej końcówce tryb wejścia, opornik podciągający wciąż jest sterowany bitem PORTB4.
MOSI: Wyjście danych SPI w trybie Master/wejście danych SPI w trybie Slave dla kanału SPI (ang. SPI Master Data output, Slave Data input). Gdy SPI pracuje w trybie Slave, końcówka jest skonfigurowana jako wejście bez względu na stan bitu DDB3. Gdy SPI pracuje jako Master, kierunek danych tej końcówki jest kontrolowany bitem DDB3. Gdy SPI wymusza na tej końcówce tryb wejścia, opornik podciągający wciąż jest sterowany bitem PORTB3.
OC2, wyjście zgodności Output Compare: Końcówka PB3 może służyć jako zewnętrzne wyjście dla zgodności porównania w timerze/liczniku 2. Dla tej funkcji końcówka PB3 musi być skonfigurowana jako wyjście (bit DDB3 ustawiony na jeden). Końcówka OC2 jest również końcówką wyjściową dla funkcji trybu PWM timera.
SS: Wejście wyboru układu (ang. Slave Select input). Gdy SPI zostaje włączone w trybie Slave, to ta końcówka pracuje jako wejście bez względu na ustawienie bitu DDB2. W trybie Slave SPI uaktywnia się, gdy ta końcówka zostanie wysterowana stanem niskim. Gdy SPI zostaje włączone w trybie Master, kierunek danych na tej końcówce kontrolowany jest bitem DDB2. Gdy SPI wymusza na tej końcówce tryb wejścia, opornik podciągający wciąż jest sterowany bitem PORTB2.
OC1B, wyjście zgodności Output Compare (ang. Output Compare Match output): Końcówka PB2 może służyć jako zewnętrzne wyjście zgodności porównania B timera licznika 1. Końcówka PB2 musi zostać skonfigurowana jako wyjście (bit DDB2 ustawiony na jeden), aby mogła służyć tej funkcji. Końcówka OC1B jest również końcówką wyjściową dla funkcji trybu PWM timera.
OC1A, wyjście zgodności Output Compare (ang. Output Compare Match output): Końcówka PB1 może służyć jako zewnętrzne wyjście zgodności porównania A timera licznika 1. Końcówka PB1 musi zostać skonfigurowana jako wyjście (bit DDB1 ustawiony na jeden), aby mogła służyć tej funkcji. Końcówka OC1A jest również końcówką wyjściową dla funkcji trybu PWM timera.
ICP1 – Końcówka Input Capture (ang. Input Capture Pin): Końcówka PB0 może służyć jako końcówka Input Capture dla timera/licznika 1.
Poniższe tabele odwzorowują funkcje alternatywne portu B w zależności od sygnałów sterujących.
| Nazwa sygnału |
PB7/XTAL2/ TOSC2(1)(2) |
PB6/XTAL1/ TOSC1(1) |
PB5/SCK | PB4/MISO |
| PUOE | EXT • (INTRC + AS2) | INTRC + AS2 | SPE • MSTR | SPE • MSTR |
| PUO | 0 | 0 | PORTB5 • PUD | PORTB4 • PUD |
| DDOE | EXT • (INTRC + AS2) | INTRC + AS2 | SPE • MSTR | SPE • MSTR |
| DDOV | 0 | 0 | 0 | 0 |
| PVOE | 0 | 0 | SPE • MSTR | SPE • MSTR |
| PVOV | 0 | 0 | WYJŚCIE SCK | WYJŚCIE SPI SLAVE |
| DIEOE | EXT • (INTRC + AS2) | INTRC + AS2 | 0 | 0 |
| DIEOV | 0 | 0 | 0 | 0 |
| DI | – | – | WEJŚCIE SCK | WEJŚCIE SPI MSTR |
| AIO | Wyjście oscylatora | Wejście oscylatora/zegara | – | – |
| Nazwa sygnału |
PB3/MOSI/OC2 | PB2/SS/OC1B | PB1/OC1A | PB0/ICP1 |
| PUOE | SPE • MSTR | SPE • MSTR | 0 | 0 |
| PUO | PORTB3 • PUD | PORTB2 • PUD | 0 | 0 |
| DDOE | SPE • MSTR | SPE • MSTR | 0 | 0 |
| DDOV | 0 | 0 | 0 | 0 |
| PVOE | SPE • MSTR + WŁĄCZENIE OC2 | WŁĄCZENIE OC1B | WŁĄCZENIE OC1A | 0 |
| PVOV | SPI MSTR OUTPUT + OC2 | OC1B | OC1A | 0 |
| DIEOE | 0 | 0 | 0 | 0 |
| DIEOV | 0 | 0 | 0 | 0 |
| DI | WEJŚCIE SPI SLAVE | SPI SS | – | WEJŚCIE ICP1 |
| AIO | – | – | – | – |

| Końcówka portu | Funkcja alternatywna |
| PC6 | RESET (końcówka resetu) |
| PC5 |
ADC5 (kanał wejściowy 5
przetwornika A/C) SCL (linia zegara 2-przewodowej magistrali szeregowej) |
| PC4 |
ADC4 (kanał wejściowy 4
przetwornika A/C) SDA (linia wejścia/wyjścia danych 2-przewodowej magistrali szeregowej) |
| PC3 | ADC3 (kanał wejściowy 3 przetwornika A/C) |
| PC2 | ADC2 (kanał wejściowy 2 przetwornika A/C) |
| PC1 | ADC1 (kanał wejściowy 1 przetwornika A/C) |
| PC0 | ADC0 (kanał wejściowy 0 przetwornika A/C) |
RESET, końcówka resetu: Gdy zostanie zaprogramowany bit bezpiecznikowy RSTDISBL, końcówka ta pełni funkcję normalnej końcówki we/wy, a mikrokontroler będzie musiał polegać na resecie przy włączeniu i na resecie przy spadku zasilania jako swoich źródłach resetu. Gdy bit bezpiecznikowy RSTDISBL nie jest zaprogramowany, to obwód resetowania jest podłączony do tej końcówki i nie można jej używać jako końcówki we/wy. Gdy PC6 pełni funkcję końcówki resetu, bity DDC6, PORTC6 i PINC6 dają przy odczycie zero.
SCL, zegar 2-przewodowego interfejsu szeregowego: Gdy bit TWEN w rejestrze TWCR jest ustawiony na jeden w celu włączenia 2-przewodowego interfejsu szeregowego (ang. Two-wire Serial Interface), końcówka PC5 zostaje odłączona od portu i staje się końcówką we/wy zegara szeregowego dla 2-przewodowego interfejsu szeregowego. W tym trybie na końcówkę zostaje nałożony filtr zakłóceń impulsowych, który eliminuje impulsy krótsze od 50 ns w sygnale wejściowym, a końcówka jest sterowana ze źródła typu otwarty dren z ograniczeniem szybkości narastania sygnału.
Końcówka PC5 może być również używana jako kanał wejściowy 5 dla przetwornika A/C. Zwróć uwagę, iż kanał wejściowy 5 przetwornika A/C używa zasilania cyfrowego.
SDA, dane 2-przewodowego interfejsu szeregowego: Gdy bit TWEN w rejestrze TWCR jest ustawiony na jeden w celu włączenia 2-przewodowego interfejsu szeregowego, końcówka PC4 zostaje odłączona od portu i staje się końcówką we/wy danych szeregowych dla 2-przewodowego interfejsu szeregowego. W tym trybie na końcówkę zostaje nałożony filtr zakłóceń impulsowych, który eliminuje impulsy krótsze od 50 ns w sygnale wejściowym, a końcówka jest sterowana ze źródła typu otwarty dren z ograniczeniem szybkości narastania sygnału.
Końcówka PC4 może być również używana jako kanał wejściowy 4 dla przetwornika A/C. Zwróć uwagę, iż kanał wejściowy 4 przetwornika A/C używa zasilania cyfrowego.
Końcówka PC3 może być również używana jako kanał wejściowy 3 dla przetwornika A/C. Zwróć uwagę, iż kanał wejściowy 3 przetwornika A/C używa zasilania analogowego.
Końcówka PC2 może być również używana jako kanał wejściowy 2 dla przetwornika A/C. Zwróć uwagę, iż kanał wejściowy 2 przetwornika A/C używa zasilania analogowego.
Końcówka PC1 może być również używana jako kanał wejściowy 1 dla przetwornika A/C. Zwróć uwagę, iż kanał wejściowy 1 przetwornika A/C używa zasilania analogowego.
Końcówka PC0 może być również używana jako kanał wejściowy 0 dla przetwornika A/C. Zwróć uwagę, iż kanał wejściowy 0 przetwornika A/C używa zasilania analogowego.
Poniższe tabele odwzorowują funkcje alternatywne portu C w zależności od sygnałów sterujących.
| Nazwa sygnału |
PC6/RESET | PC5/SCL/ADC5 | PC4/SDA/ADC4 |
| PUOE | RSTDISBL | TWEN | TWEN |
| PUOV | 1 | PORTC5 • PUD | PORTC4 • PUD |
| DDOE | RSTDISBL | TWEN | TWEN |
| DDOV | 0 | SCL_OUT | SDA_OUT |
| PVOE | 0 | TWEN | TWEN |
| PVOV | 0 | 0 | 0 |
| DIEOE | RSTDISBL | 0 | 0 |
| DIEOV | 0 | 0 | 0 |
| DI | – | – | – |
| AIO | WEJŚCIE RESET | WEJŚCIE ADC5 / WEJŚCIE SCL | WEJŚCIE ADC4 / WEJŚCIE SDA |
| Nazwa sygnału |
PC3/ADC3 | PC2/ADC2 | PC1/ADC1 | PC0/ADC0 |
| PUOE | 0 | 0 | 0 | 0 |
| PUOV | 0 | 0 | 0 | 0 |
| DDOE | 0 | 0 | 0 | 0 |
| DDOV | 0 | 0 | 0 | 0 |
| PVOE | 0 | 0 | 0 | 0 |
| PVOV | 0 | 0 | 0 | 0 |
| DIEOE | 0 | 0 | 0 | 0 |
| DIEOV | 0 | 0 | 0 | 0 |
| DI | – | – | – | – |
| AIO | WEJŚCIE ADC3 | WEJŚCIE ADC2 | WEJŚCIE ADC1 | WEJŚCIE ADC0 |

| Końcówka portu | Funkcja alternatywna |
| PD7 | AIN1 (wejście odwracające komparatora analogowego) |
| PD6 | AIN0 (wejście nieodwracające komparatora analogowego) |
| PD5 | T1 (zewnętrzne wejście taktowania timera/licznika 1) |
| PD4 |
XCK (wejście/wyjście zegara
zewnętrznego USART) T0 (zewnętrzne wejście taktowania timera/licznika 0) |
| PD3 | INT1 (wejście przerwania zewnętrznego 1) |
| PD2 | INT0 (wejście przerwania zewnętrznego 0) |
| PD1 | TXD (końcówka wyjścia USART) |
| PD0 | RXD (końcówka wejścia USART) |
AIN1, wejście odwracające komparatora analogowego. Skonfiguruj końcówkę portu jako wejście z odłączonym opornikiem podciągającym, aby uniknąć interferencji cyfrowej funkcji portu z tą funkcją komparatora analogowego.
AIN0, wejście nieodwracające komparatora analogowego. Skonfiguruj końcówkę portu jako wejście z odłączonym opornikiem podciągającym, aby uniknąć interferencji cyfrowej funkcji portu z tą funkcją komparatora analogowego.
T1, źródło zliczania timera/licznika 1.
XCK, zewnętrzny zegar USART.
T0, źródło zliczania timera/licznika 0.
INT1, źródło 1 przerwania zewnętrznego: końcówka PD3 może służyć jako źródło przerwań zewnętrznych.
INT0, źródło 0 przerwania zewnętrznego: końcówka PD2 może służyć jako źródło przerwań zewnętrznych.
TXD, dane transmitowane (końcówka wyjścia danych dla USART). Gdy zostanie włączony nadajnik USART, końcówka ta będzie skonfigurowana jako wyjście bez względu na wartość bitu DDD1.
RXD, dane odbierane (końcówka wejścia danych dla USART). Gdy zostanie włączony odbiornik USART, końcówka ta będzie skonfigurowana jako wejście bez względu na wartość bitu DDD0. Gdy USART wymusza tryb pracy końcówki jako wejście, opornik podciągający można wciąż kontrolować bitem PORTD0.
Poniższe tabele odwzorowują funkcje alternatywne portu D w zależności od sygnałów sterujących.
| Nazwa sygnału |
PD7/AIN1 | PD6/AIN0 | PD5/T1 | PD4/XCK/T0 |
| PUOE | 0 | 0 | 0 | 0 |
| PUO | 0 | 0 | 0 | 0 |
| OOE | 0 | 0 | 0 | 0 |
| OO | 0 | 0 | 0 | 0 |
| PVOE | 0 | 0 | 0 | UMSEL |
| PVO | 0 | 0 | 0 | WYJŚCIE XCK |
| DIEOE | 0 | 0 | 0 | 0 |
| DIEO | 0 | 0 | 0 | 0 |
| DI | – | – | WEJŚCIE T1 | WEJŚCIE XCK / WEJŚCIE T0 |
| AIO | WEJŚCIE AIN1 | WEJŚCIE AIN0 | – | – |
| Nazwa sygnału |
PD3/INT1 | PD2/INT0 | PD1/TXD | PD0/RXD |
| PUOE | 0 | 0 | TXEN | RXEN |
| PUO | 0 | 0 | 0 | PORTD0 • PUD |
| OOE | 0 | 0 | TXEN | RXEN |
| OO | 0 | 0 | 1 | 0 |
| PVOE | 0 | 0 | TXEN | 0 |
| PVO | 0 | 0 | TXD | 0 |
| DIEOE | WŁĄCZENIE INT1 | WŁĄCZENIE INT0 | 0 | 0 |
| DIEO | 1 | 1 | 0 | 0 |
| DI | WEJŚCIE INT1 | WEJŚCIE INT0 | – | RXD |
| AIO | – | – | – | – |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x18 (0x38) | PORTB7 | PORTB6 | PORTB5 | PORTB4 | PORTB3 | PORTB2 | PORTB1 | PORTB0 | PORTB |
| Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x17 (0x37) | DDB7 | DDB6 | DDB5 | DDB4 | DDB3 | DDB2 | DDB1 | DDB0 | DDRB |
| Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x16 (0x36) | PINB7 | PINB6 | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 | PINB |
| Zapis/Odczyt | O | O | O | O | O | O | O | O | |
| Wartość początkowa | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x15 (0x35) | – | PORTC6 | PORTC5 | PORTC4 | PORTC3 | PORTC2 | PORTC1 | PORTC0 | PORTC |
| Zapis/Odczyt | O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x14 (0x34) | – | DDC6 | DDC5 | DDC4 | DDC3 | DDC2 | DDC1 | DDC0 | DDRC |
| Zapis/Odczyt | O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x13 (0x33) | – | PINC6 | PINC5 | PINC4 | PINC3 | PINC2 | PINC1 | PINC0 | PINC |
| Zapis/Odczyt | O | O | O | O | O | O | O | O | |
| Wartość początkowa | 0 | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x12 (0x32) | PORTD7 | PORTD6 | PORTD5 | PORTD4 | PORTD3 | PORTD2 | PORTD1 | PORTD0 | PORTD |
| Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x11 (0x31) | DDD7 | DDD6 | DDD5 | DDD4 | DDD3 | DDD2 | DDD1 | DDD0 | DDRD |
| Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x10 (0x30) | PIND7 | PIND6 | PIND5 | PIND4 | PIND3 | PIND2 | PIND1 | PIND0 | PIND |
| Zapis/Odczyt | O | O | O | O | O | O | O | O | |
| Wartość początkowa | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.