Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATmega16

Moduł USART

obrazek

Educational and Non-Profit Use of Copyrighted Material:

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: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Cechy USART

USART (ang. Universal Synchronous and Asynchronous serial Receiver and Transmitter – uniwersalny synchroniczny i asynchroniczny nadajnik i odbiornik) jest wysoko elastycznym, szeregowym modułem do przesyłu i odbioru danych. Jego głównymi cechami są:
Na początek:  podrozdziału   strony 

Przegląd USART

Poniższy rysunek przedstawia uproszczony schemat blokowy nadajnika/odbiornika USART. Dostępne dla mikroprocesora rejestry i końcówki we/wy są opisane tłustym drukiem.

Obszary rozdzielone przerywanymi liniami na schemacie blokowym obrazują trzy główne części USART (wymienione kolejno z góry na dół): generator zegarowy, nadajnik i odbiornik. Rejestry sterujące są wspólnie używane przez wszystkie moduły. Logika generacji zegara składa się z układu synchronizacji dla wejścia zegara zewnętrznego, które jest używane w czasie pracy w synchronicznym trybie Slave, oraz z generatora szybkości transmisyjnej. Końcówka XCK (ang. External Transfer Clock – zewnętrzny zegar nadawania) jest używana tylko w synchronicznym trybie nadawania. Nadajnik składa się z pojedynczego bufora zapisu, szeregowego rejestru przesuwającego, generatora parzystości oraz logiki sterującej do obsługi różnych formatów ramek szeregowych. Bufor zapisu pozwala na ciągłe nadawanie danych bez żadnych opóźnień pomiędzy ramkami. Odbiornik jest najbardziej skomplikowanym elementem modułu USART z powodu jego modułów rekonstrukcji zegara i danych. Moduły te są używane przy asynchronicznym odbiorze danych. Oprócz modułów odtwarzających odbiornik zawiera układ sprawdzania parzystości, logikę sterującą, rejestr przesuwający oraz dwu-poziomowy bufor odbiorczy (UDR). Odbiornik obsługuje takie same formaty ramek jak nadajnik i może wykrywać błąd ramki, przekroczenie danych oraz błędy parzystości.

Kompatybilność pomiędzy AVR USART a AVR UART

Moduł USART jest w pełni kompatybilny z AVR UART (ang. Universal Asynchronous Receiver/Transmitter – uniwersalny, asynchroniczny nadajnik/odbiornik) odnośnie:

Jednakże buforowanie odbiorcze posiada dwa ulepszenia, które wpłyną na kompatybilność w niektórych przypadkach specjalnych:

Następujące bity sterujące zmieniły nazwy, lecz posiadają te same funkcje i położenia w rejestrach:

Na początek:  podrozdziału   strony 

Zegar USART

Logika generacji zegara wytwarza podstawowy zegar dla odbiornika i nadajnika. USART obsługuje cztery tryby pracy zegara: asynchroniczny normalny (ang. Normal asynchronous), asynchroniczny o podwójnej szybkości (ang. Double Speed asynchronous), synchroniczny Master  (ang. Master synchronous) oraz synchroniczny Slave (ang. Slave synchronous). Bit UMSEL w rejestrze C sterowania i stanu USART (ang. USART
Control and Status Register C, UCSRC)
dokonuje wyboru pomiędzy pracą asynchroniczną a synchroniczną. Podwójna szybkość (tylko w trybie asynchronicznym) jest włączana przez bit U2X w rejestrze UCSRA. Gdy używany jest tryb synchroniczny (UMSEL = 1), rejestr kierunku danych dla końcówki XCK (bit DDR_XCK) określa, czy źródło zegarowe jest wewnętrzne (tryb Master) lub zewnętrzne (tryb Slave). Końcówka XCK jest aktywna tylko przy korzystaniu z trybu synchronicznego.

Poniższy rysunek pokazuje schemat blokowy logiki generacji zegara.

Opis sygnałów:

txclk – zegar nadajnika (sygnał wewnętrzny).
rxclk – podstawowy zegar odbiornika (sygnał wewnętrzny).
xcki – wejście z końcówki XCK (sygnał wewnętrzny). Używane do synchronizacji pracy w trybie Slave.
xcko – wyjscie zegara na końcówkę XCK (sygnał wewnętrzny). Używane do synchronizacji pracy w trybie Master.
fosc – częstotliwość końcówki XTAL (zegar systemowy).

Generowanie zegara wewnętrznego – generator szybkości transmisji

Wewnętrzna generacja zegara wykorzystywana jest w asynchronicznych i synchronicznych trybach pracy.

Rejestr szybkości transmisji USART (ang. USART Baud Rate Register, UBRR) wraz z podłączonym do niego licznikiem zliczającym w dół funkcjonują jako programowalny preskaler lub generator szybkości transmisji. Licznik wsteczny, pracujący z częstotliwością zegara systemowego (fosc), jest ładowany wartością UBRR za każdym razem, gdy licznik ten osiągnie wartość zero lub gdy nastąpi zapis do rejestru UBRRL. Takt zegarowy jest generowany za każdym razem, gdy licznik osiąga zero. Zegar ten pojawia się na wyjściu generatora szybkości transmisji. Nadajnik dzieli zegar szybkości transmisji przez 2, 8 lub 16 w zależności od trybu pracy. Wyjście generatora szybkości transmisji jest używane bezpośrednio przez moduły zegara odbiornika i moduły rekonstrukcji danych. Jednakże moduły rekonstrukcji używają automatu stanu, który sam używa 2, 8 lub 16 stanów w zależności od trybu określanego ustawieniami bitów UMSEL, U2X i DDR_XCK.

Tabela poniżej zawiera równania do wyliczania szybkości  transmisji fT (w bitach na sekundę) oraz wyliczania wartości UBRR dla każdego trybu pracy korzystającego z generowanego wewnętrznie źródła zegarowego.

Tryb pracy Wzór na szybkość transmisji Wzór na wyliczenie wartości UBRR
Tryb asynchroniczny normalny (U2X = 0)
Tryb asynchroniczny podwójnej szybkości (U2X = 1)
Tryb synchroniczny Master
fT – szybkość transmisji w bitach na sekundę
fOSC – częstotliwość zegarowa oscylatora systemowego
UBRR – zawartość rejestrów UBRRH i UBRRL (0...4095)

Praca z podwójną szybkością (U2X)

Szybkość przesyłu można podwoić przez ustawienie bitu U2X w rejestrze UCSRA. Ustawienie tego bitu przynosi efekt tylko w trybie pracy asynchronicznej. Przy pracy synchronicznej ustaw ten bit na zero. Ustawienie bitu zmniejszy podzielnik w dzielniku częstotliwości transmisyjnej z 16 na 8, co w efekcie podwoi szybkość przesyłu danych w transmisjach asynchronicznych. Jednakże zauważ, iż odbiornik w tym przypadku będzie używał jedynie połowy próbek (ich liczba zmniejszy się z 16 na 8) przy próbkowaniu danych i rekonstrukcji sygnału zegarowego, a z tego powodu wymagane jest dokładniejsze ustawienie szybkości transmisji oraz zegara systemowego, gdy stosowany jest ten tryb. Dla nadajnika nie ma żadnych ograniczeń.

Zegar zewnętrzny

Taktowanie zewnętrzne wykorzystywane jest przez synchroniczne tryby pracy.

Wejście zegara zewnętrznego z końcówki XCK jest próbkowane przez rejestr synchronizacyjny w celu zminimalizowania szansy powstania metastabilności (stanu nietrwałej równowagi). Sygnał wyjściowy z rejestru synchronizacji musi następnie przejść przez detektor zbocza, zanim będzie mógł być użyty przez nadajnik lub odbiornik. Proces ten wprowadza opóźnienie o okresie dwóch taktów zegara mikroprocesora i dlatego maksymalna częstotliwość zewnętrznego zegara XCK jest ograniczona poniższym wzorem:

Zauważ, iż fOSC zależy od stabilności źródła zegara systemowego. Dlatego zaleca się dodanie pewnego marginesu w celu uniknięcia możliwej utraty danych z powodu zmian częstotliwości.

Praca synchroniczna

Gdy jest używany tryb synchroniczny (UMSEL = 1), końcówka XCK będzie wykorzystywana albo jako wejście zegara (Slave), albo jako wyjście zegara (Master). Zależność pomiędzy zboczami zegara a próbkowaniem danych lub zmianą danych pozostaje taka sama. Podstawową zasadą jest, iż wejście danych (na końcówce RxD) jest próbkowane na przeciwnym zboczu sygnału zegara XCK niż zmiana wyjścia danych (TxD).

Wykres czasowy dla trybu synchronicznego XCK

Bit UCPOL w rejestrze UCRSC wybiera zbocza zegara XCK, które będą używane do próbkowania danych oraz do zmiany danych. Zgodnie z rysunkiem powyżej, gdy UCPOL ma wartość zero, to dane będą zmieniane przy zboczu narastającym, a próbkowanie będzie się odbywało przy zboczu opadającym sygnału zegarowego XCK. Dla UCPOL ustawionego na jeden kolejność zboczy jest odwrotna.

Na początek:  podrozdziału   strony 

Formaty ramek

Ramkę szeregową (ang. serial frame) definiuje się jako jeden ciąg bitów danych wraz z bitami synchronizacji (bitami startu i stopu) oraz opcjonalnie z bitem parzystości do celów wykrywania błędów. USART akceptuje  jako poprawne formaty wszystkie 30 kombinacji poniższych parametrów:

Ramka rozpoczyna się bitem startowym, po którym następuje najmniej znaczący bit danych. Następnie kolejne bity danych do maksymalnie dziewięciu, kończące się bitem najbardziej znaczącym. Bit parzystości/nieparzystości jest dołączany po bitach danych i przed bitem stopu, jeśli ta opcja została włączona. Gdy przesłana zostanie pełna ramka, może za nią natychmiast wystąpić nowa ramka lub linia komunikacyjna może przejść w stan bezczynny (wysoki). Poniższy rysunek ilustruje możliwe kombinacje formatów ramki. Bity w klamrach są opcjonalne:

St bit startu, zawsze o stanie niskim.
(n) bity danych (0 do 8).
P bit parzystości/nieparzystości.
Sp bit stopu, zawsze o stanie wysokim.
BEZCZYNNY brak przesyłu przez linię komunikacyjną.
Linia w stanie bezczynnym zawsze jest w stanie wysokim.

Format ramki używany przez USART jest ustawiany za pomocą bitów UCSZ[2:0], UPM[1:0] i USBS w rejestrach UCSRB i UCSRC. Nadajnik i odbiornik wykorzystują te same ustawienia. Zauważ, iż zmiana tych ustawień w trakcie wykonywania transmisji zepsuje ją zarówno dla odbiornika jak i nadajnika. Bity liczby bitów w ciągu danych USART (UCSZ[2:0]) wybierają liczbę bitów danych w ramce. Bity trybu parzystości USART (UPM[1:0]) włączają oraz ustawiają rodzaj bitu parzystości. Wybór pomiędzy jednym lub dwoma bitami stopu dokonywany jest za pomocą bitu USBS. Odbiornik ignoruje drugi bit stopu. Z tego powodu błąd ramki (ang. Frame Error, FE) zostanie wykryty tylko wtedy, gdy pierwszy bit stopu będzie zerowy.

Obliczanie bitu parzystości/nieparzystości

Bit parzystości/nieparzystości wyliczany jest za pomocą operacji alternatywy rozłącznej (ang. Exclusive-OR, XOR) na bitach danych:

a b a XOR b
0 0 0
0 1 1
1 0 1
1 1 0

Jeśli zostanie wybrana nieparzystość, to wynik jest negowany. Wzory są następujące:

PP bit parzystości.
PN bit nieparzystości
dn bit danych.

Jeśli jest używany, to bit parzystości/nieparzystości jest umieszczany pomiędzy ostatnim bitem danych a bitem stopu w ramce szeregowej.

Na początek:  podrozdziału   strony 

Inicjalizacja USART

Układ USART musi zostać zainicjalizowany, zanim będzie mogła się odbyć jakakolwiek komunikacja. Na proces inicjalizacji zwykle składa się ustawienie szybkości przesyłu danych (ang. baud rate), formatu ramki oraz uaktywnienie nadajnika lub odbiornika w zależności od planowanego zastosowania. Dla pracy USART sterowanej przerwaniami należy wyzerować globalny znacznik przerwań przy dokonywaniu inicjalizacji.

Przy ponownej inicjalizacji ze zmienioną szybkością transmisji lub formatem ramki upewnij się, że nie trwa jakakolwiek transmisja podczas zmiany zawartości rejestrów sterujących. Znacznik TXC może być użyty do sprawdzenia, czy nadajnik zakończył wszystkie przesyły, a znacznik RXC można użyć do sprawdzenia, czy w buforze odbiorczym nie pozostały żadne nieodczytane jeszcze dane. Zwróć uwagę, że znacznik TXC należy wyzerować przed każdą transmisją (przed zapisem rejestru UDR), jeśli jest on używany do tego celu. Poniższe kody inicjalizujące USART pokazują jedną funkcję w asemblerze oraz jedną funkcję w języku C, które wykonują tę samą pracę. Przykłady zakładają pracę asynchroniczną wykorzystującą śledzenie (bez włączonych przerwań) oraz ustalony format danych. Szybkość transmisji jest podana jako parametr funkcji. Dla kodu asemblerowego zakłada się, iż parametr szybkości transmisji został umieszczony w rejestrach r17:r16.

Przykład w kodzie maszynowym
USART_Init:
    ; Ustaw szybkość transmisji
    out UBRRH, r17
    out UBRRL, r16
    ; Włącz odbiornik i nadajnik
    ldi r16, (1<<RXEN)|(1<<TXEN)
    out UCSRB,r16
    ; Ustaw format ramki: 8 bitów danych, 2 bity stopu
    ldi r16, (1<<USBS)|(3<<UCSZ0)
    out UCSRC,r16
    ret
Przykład w języku C
#define FOSC 1843200 // Szybkość zegara
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void main( void )
{
    ...
    USART_Init ( MYUBRR );
    ...
}
void USART_Init( unsigned int ubrr)
{
    /* Ustaw szybkość transmisji */
    UBRRH = (unsigned char)(ubrr>>8);
    UBRRL = (unsigned char)ubrr;
    /* Włącz odbiornik i nadajnik */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Ustaw format ramki: 8 bitów danych, 2 bity stopu */
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}

Można stworzyć bardziej zaawansowane funkcje inicjalizacji, które jako parametry posiadają format ramki, wyłączają przerwania, itd. Jednakże wiele aplikacji stosuje stałe ustawienia szybkości transmisji oraz zawartości rejestrów sterujących, a w takich typach aplikacji kod inicjalizujący może zostać umieszczony bezpośrednio w programie głównym lub być połączony z kodem inicjalizującym inne moduły we/wy.

Na początek:  podrozdziału   strony 

Nadawanie danych – nadajnik USART

Nadajnik USART jest włączany przez ustawienie  bitu uaktywnienia nadawania (ang. Transmit Enable, TXEN) w rejestrze UCSRB. Gdy włączony zostanie nadajnik, normalna praca portu końcówki TxD zostaje przejęta przez USART i otrzymuje funkcję wyjścia szeregowego nadajnika. Szybkość przesyłania danych, tryb pracy oraz format ramki muszą być ustawione przed wykonaniem jakiejkolwiek transmisji. Po wyborze pracy synchronicznej zegar na końcówce XCK zostanie przejęty i użyty jako zegar transmisji.

Wysyłanie ramek z liczbą bitów danych od 5 do 8

Transmisja danych rozpoczyna się po załadowaniu do bufora nadawczego danych do wysłania. Mikroprocesor może załadować bufor nadawczy przez wpis do komórki we/wy UDR. Buforowane dane w buforze nadawczym zostaną umieszczone w rejestrze przesuwającym, gdy będzie on gotowy na przesłanie nowej ramki. Rejestr przesuwający jest ładowany nowymi danymi, gdy znajduje się w stanie bezczynnym (nie jest wykonywana żadna transmisja) lub bezpośrednio po ostatnim bicie stopu poprzednio transmitowanej ramki. Gdy rejestr przesuwający zostanie załadowany nowymi danymi, prześle on jedną pełną ramkę z szybkością określoną przez rejestr szybkości transmisji oraz bit U2X lub XCK w zależności od trybu pracy.

Poniższe przykłady kodu pokazują prostą funkcję nadawczą USART opartą na śledzeniu stanu znacznika opróżnienia rejestru danych (ang. Data Register Empty, UDRE). Gdy wykorzystywane są ramki z mniej niż ośmioma bitami danych, najbardziej znaczące bity zapisane do rejestru UDR zostaną zignorowane. USART musi zostać zainicjalizowany przed użyciem tej funkcji. Dla kodu asemblerowego wysyłane dane powinny znajdować się w rejestrze R16.
Przykład w kodzie maszynowym
USART_Transmit:
    ; Czekaj na pusty bufor nadawczy
    sbis UCSRA,UDRE
    rjmp USART_Transmit
    ; Umieść dane (r16) w buforze, co je wyśle
    out  UDR,r16
    ret
Przykład w języku C
void USART_Transmit( unsigned char data )
{
    /* Czekaj na pusty bufor nadawczy */
    while ( !( UCSRA & (1<<UDRE)) )
    ;
    /* Umieść dane (r16) w buforze, co je wyśle */
    UDR = data;
}

Funkcja po prostu oczekuje aż bufor nadawczy będzie pusty przez sprawdzanie znacznika UDRE, zanim załaduje go nowymi danymi do wysłania. Jeśli będzie wykorzystywane przerwanie przy pustym rejestrze danych (ang. Data Register Empty interrupt), to procedura obsługi tego przerwania zapisze dane do bufora.

Wysyłanie ramek z 9 bitami danych

Jeśli używane są ciągi danych 9-bitowe (UCSZ = 7), to dziewiąty bit musi być wpisany do bitu TXB8 w rejestrze UCSRB, zanim młodszy bajt ciągu danych zostanie wpisany do UDR. Poniższe przykłady kodu pokazują funkcję, która zajmuje się ciągami 9-bitowymi. Dla kodu asemblerowego dane do wysłania powinny być umieszczone w rejestrach R17:R16.

Przykład w kodzie maszynowym(1)
USART_Transmit:
    ; Czekaj na pusty bufor nadawczy
    sbis UCSRA,UDRE
    rjmp USART_Transmit
    ; Skopiuj 9-ty bit z r17 do TXB8
    cbi  UCSRB,TXB8
    sbrc r17,0
    sbi  UCSRB,TXB8
    ; Umieść LSB danych (r16) w buforze, co je wyśle
    out  UDR,r16
    ret
Przykład w języku C(1)
void USART_Transmit( unsigned int data )
{
    /* Czekaj na pusty bufor nadawczy */
    while ( !( UCSRA & (1<<UDRE))) )
    ;
    /* Skopiuj 9-ty bit z r17 do TXB8 */
    UCSRB &= ~(1<<TXB8);
    if(data & 0x0100) UCSRB |= (1<<TXB8);
    /* Umieść LSB danych (r16) w buforze, co je wyśle */
    UDR = data;
}
Uwaga: 1. Te funkcje nadawcze zostały napisane ogólnie. Można je zoptymalizować dla stałej zawartości rejestru UCSRB. Na przykład, po inicjalizacji używany jest tylko bit TXB8 rejestru UCSRB.

Dziewiąty bit można wykorzystać do oznaczania ramek adresowych w trybie komunikacji wieloprocesorowej lub do obsługi innych protokołów.

Znaczniki nadajnika a przerwania

Nadajnik USART posiada dwa znaczniki, które wskazują jego stan: znacznik opróżnienia rejestru danych USART (ang. USART Data Register Empty, UDRE) oraz znacznik zakończenia nadawania (ang. Transmit Complete, TXC). Oba znaczniki można użyć do wygenerowania przerwań. Znacznik UDRE informuje, czy bufor nadawczy jest gotowy na przyjęcie nowych danych. Bit ten zostaje ustawiony, gdy bufor nadawczy staje się pusty, natomiast zostaje wyzerowany, gdy bufor zawiera dane, które nie zostały jeszcze przeniesione do rejestru przesuwającego. Dla zachowania kompatybilności z przyszłymi mikrokontrolerami zawsze zapisuj ten bit stanem zero przy zapisie do rejestru UCSRA. Gdy bit uaktywnienia przerwań przy pustym rejestrze danych (ang. Data Register Empty Interrupt Enable bit,  UDRIE) w UCSRB zostanie zapisany stanem jeden, to będzie generowane przerwanie tak długo, jak bit UDRE jest ustawiony (pod warunkiem globalnego włączenia przerwań). Bit UDRE jest zerowany przez zapis rejestru UDR. Gdy używana jest transmisja sterowana za pomocą przerwań, to procedura obsługi przerwania od pustego rejestru danych (ang. Data Register Empty interrupt) musi albo wpisać nowe dane do rejestru UDR w celu wyzerowania bitu UDRE, albo wyłączyć to przerwanie, w przeciwnym razie nowe przerwanie zostanie wygenerowane tuż po zakończeniu obsługi obecnego.

Bit znacznika zakończenia nadawania (ang. Transmit Complete flag bit, TXC) jest ustawiany na jeden, gdy cała ramka w nadawczym rejestrze przesuwającym została wysłana, a w buforze nadawczym nie ma obecnie żadnych nowych danych. Bit znacznika TXC jest automatycznie zerowany po wywołaniu przerwania od zakończenia nadawania, lub można go wyzerować przez zapis jedynki na pozycji jego bitu. Znacznik TXC przydaje się w interfejsach transmisji pół-dupleksowych (takich jak standard RS-485)), gdzie aplikacja nadawcza musi wejść w tryb odbiorczy i zwolnić linię komunikacyjną natychmiast po zakończeniu transmisji.

Gdy jest ustawiony bit uaktywnienia przerwania przy zakończeniu nadawania (ang. Transmit Compete Interrupt Enable bit, TXCIE) w rejestrze UCSRB, przerwanie to zostanie wykonane w momencie ustawienia na 1 znacznika TXC (pod warunkiem globalnego włączenia przerwań). Gdy wykorzystywane jest przerwanie od zakończenia nadawania, procedura jego obsługi nie musi zerować znacznika TXC, ponieważ jest to robione automatycznie przy wywołaniu tej procedury.

Generator parzystości

Generator parzystości (ang. Parity Generator) oblicza wartość bitu parzystości dla danych ramki szeregowej. Gdy bit parzystości zostanie uaktywniony (UPM1 = 1), logika sterująca transmisją wstawia ten bit parzystości pomiędzy ostatnim bitem danych a pierwszym bitem stopu wysyłanej ramki.

Wyłączanie nadajnika

Wyłączenie nadajnika (ustawienie bitu TXEN na zero) nie wejdzie w życie aż do zakończenia obecnej transmisji oraz transmisji oczekujących, tj. do czasu aż nadawczy rejestr przesuwający oraz rejestr bufora nadawczego nie będą zawierać danych do wysłania. W stanie wyłączenia nadajnik nie będzie dalej przechwytywał końcówki TxD.

Na początek:  podrozdziału   strony 

Odbiór danych – odbiornik USART

Odbiornik USART jest włączany przez zapis stanem jeden bitu uaktywniania odbioru (ang. Receive Enable bit, RXEN) w rejestrze UCSRB. Gdy odbiornik zostaje włączony, normalne działanie końcówki RxD jest przejmowane przez USART i otrzymuje ona funkcję wejścia szeregowego dla odbiornika. Szybkość transmisji, tryb pracy oraz format ramki muszą być jednokrotnie ustawione zanim będzie mógł być wykonany jakikolwiek odbiór szeregowy. Jeśli jest ustawiona praca synchroniczna, to zegar na końcówce XCK będzie wykorzystywany jako zegar przesyłu.

Odbiór ramek z liczbą bitów danych od 5 do 8

Odbiornik rozpoczyna odbiór danych po wykryciu poprawnego bitu startu. Każdy bit po bicie startu będzie próbkowany wg wybranej szybkości  transmisji lub wg zegara XCK, a następnie przesuwany do odbiorczego rejestru przesuwającego aż do odebrania pierwszego bitu stopu ramki. Drugi bit stopu zostanie zignorowany przez odbiornik. Gdy zostanie odebrany pierwszy bit stopu, tj. gdy pełna ramka szeregowa znajdzie się w odbiorczym rejestrze przesuwającym, to zawartość tego rejestru przesuwającego jest przenoszona do bufora odbiorczego, który może zostać następnie odczytany pod adresem we/wy UDR.

Poniższy przykład kodu pokazuje prostą funkcję odbiorczą USART opartą na badaniu stanu znacznika zakończenia odbioru (ang. Receive Complete flag, RXC). Dla ramek posiadających mniej niż osiem bitów danych bity najbardziej znaczące w rejestrze UDR zostaną ustawione na zero. USART musi być zainicjalizowany przed użyciem tej funkcji.

Przykład w kodzie maszynowym
USART_Receive:
    ; Czekaj na odbiór danych
    sbis UCSRA, RXC
    rjmp USART_Receive
    ; Pobierz odebrane dane z bufora
    in r16, UDR
    ret
Przykład w języku C
unsigned char USART_Receive( void )
{
    /* Czekaj na odbiór danych */
    while ( !(UCSRA & (1<<RXC)) )
    ;
    /* Pobierz odebrane dane z bufora */
    return UDR;
}

Funkcja po prostu czeka na pojawienie się danych w buforze odbiorczym poprzez sprawdzanie stanu znacznika RXC, po czym odczytuje zawartość bufora.

Odbiór ramek z 9 bitami danych

Jeśli wykorzystywane są ciągi danych 9-bitowe (UCSZ=7), to ten dziewiąty bit należy odczytywać z bitu RXB8 w rejestrze UCSRB zanim odczytane zostaną  młodsze bity z rejestru UDR. Reguła ta odnosi się również do znaczników stanu FE, DOR i UPE. Odczytaj stan z rejestru UCSRA, a później dane z UDR. Odczyt komórki UDR w obszarze we/wy zmienia stan bufora odbiorczego FIFO, a w konsekwencji zmienia również bity TXB8, FE, DOR i UPE, które wszystkie znajdują się w FIFO.

Poniższy przykład kodu pokazuje prostą funkcję odbiorczą USART, która obsługuje zarówno 9-bitowe ciągi danych jak i bity stanu.

Przykład w kodzie maszynowym
USART_Receive:
    ; Czekaj na odbiór danych
    sbis UCSRA, RXC
    rjmp USART_Receive
    ; Pobierz stan i 9-ty bit, a następnie dane z bufora
    in r18, UCSRA
    in r17, UCSRB
    in r16, UDR
    ; Przy błędzie zwróć -1
    andi r18,(1<<FE)|(1<<DOR)|(1<<UPE)
    breq USART_ReceiveNoError
    ldi r17, HIGH(-1)
    ldi r16, LOW(-1)
USART_ReceiveNoError:
    ; Odfiltruj 9-ty bit i zakończ
    lsr r17
    andi r17, 0x01
    ret
Przykład w języku C
unsigned int USART_Receive( void )
{
    unsigned char status, resh, resl;
    /* Czekaj na odbiór danych */
    while ( !(UCSRA & (1<<RXC)) )
    ;
    /* Pobierz stan i 9-ty bit, a następnie dane z bufora */
    status = UCSRA;
    resh = UCSRB;
    resl = UDR;
    /* Przy błędzie zwróć -1 */
    if ( status & (1<<FE)|(1<<DOR)|(1<<UPE) )
    return -1;
    /* Odfiltruj 9-ty bit i zakończ */
    resh = (resh >> 1) & 0x01;
    return ((resh << 8) | resl);
}

Powyższy przykład funkcji odbiorczej wczytuje wszystkie potrzebne rejestry we/wy do zestawu rejestrów roboczych przed wykonaniem obliczeń. Daje to w wyniku optymalne wykorzystanie bufora odbiorczego, ponieważ odczyt komórki bufora zwolni go i umożliwi przyjęcie nowych danych tak szybko, jak jest to możliwe.

Znacznik zakończenia odbioru a przerwanie

Odbiornik USART posiada jeden znacznik wskazujący na jego stan.

Znacznik zakończenia odbioru (ang. Receive Complete flag, RXC) określa. czy w buforze odbiorczym znajdują się nieodczytane przez procesor dane. Znacznik przyjmuje stan jeden, gdy takie dane znajdują się w buforze, a zero, gdy bufor odbiorczy jest pusty. (tj. nie zawiera żadnych nieodczytanych jeszcze danych). Jeśli odbiornik zostanie wyłączony (RXEN = 0), to bufor odbiorczy jest czyszczony i w efekcie bit RXC przyjmuje stan zero. Jeśli jest ustawiony bit włączenia przerwań przy zakończeniu odbioru (ang. Receive Complete Interrupt Enable bit, RXCIE) w rejestrze UCSRB, to przerwanie od zakończenia odbioru będzie wykonywane tak długo, jak jest ustawiony znacznik RXC (pod warunkiem globalnego włączenia przerwań). Gdy stosowany jest odbiór danych sterowany przerwaniami, to procedura obsługi zakończenia odbioru musi odczytać odebrane dane z rejestru  UDR w celu wyzerowania znacznika RXC, w przeciwnym razie wystąpi nowe przerwanie tuż po zakończeniu tej procedury obsługi przerwania.

Znaczniki błędów odbiornika

Odbiornik USART ma trzy znaczniki błędów: błąd ramki (ang. Frame Error, FE), błąd przekroczenia limitu danych (ang. Data OverRun, DOR) oraz  błąd parzystości (ang. Parity Error, UPE). Dostęp do nich wszystkich jest poprzez odczyt rejestru UCSRA. Wspólną cechą tych znaczników błędów jest to, iż umieszczone są w buforze odbiorczym wraz z ramką, której stan opisują. Z powodu buforowania znaczników błędów rejestr UCSRA musi być odczytany przed odczytem bufora odbiorczego (UDR), ponieważ odczyt komórki we/wy UDR zmienia zawartość tego bufora. Inną cechą wspólną tych znaczników błędów jest to, iż nie można ich zmienić programowo poprzez zapis na pozycji bitów znaczników. Jednakże wszystkie znaczniki należy ustawić na zero podczas zapisu do rejestru UCSRA, aby zachować kompatybilność z przyszłymi implementacjami USART. Żaden z tych znaczników nie potrafi wygenerować przerwania. Znacznik błędu ramki (ang. Frame Error flag, FE) oznacza stan pierwszego bitu stopu następnej czytelnej ramki umieszczonej w buforze odbiorczym.

Znacznik FE ma wartość zero, gdy bit stopu został poprawnie odczytany (jako jeden), natomiast przyjmuje stan 1, gdy bit stopu był niepoprawny (zero). Znacznik ten można użyć do wykrycia warunków zerwania synchronizacji, warunków przerwania oraz obsługi protokołu. Na stan znacznika FE nie wpływa ustawienie bitu USBS w rejestrze UCSRC, ponieważ odbiornik ignoruje wszystkie bity stopu poza pierwszym. Dla kompatybilności z przyszłymi mikrokontrolerami zawsze ustawiaj ten bit na zero przy zapisie do rejestru UCSRA.

Znacznik przekroczenia limitu danych (ang. Data OverRun, DOR) wskazuje utratę danych z powodu zapełnienia bufora odbiorczego. Przekroczenie limitu danych występuje, gdy bufor odbiorczy jest pełen (dwa ciągi danych), w odbiorczym rejestrze przesuwającym czeka nowy ciąg, a zostaje wykryty nowy bit startu. Jeśli zostanie ustawiony znacznik DOR, to zgubiona została jedna lub więcej ramek szeregowych pomiędzy ramką ostatnio odczytaną z rejestru UDR, a następną ramką odczytaną z UDR. Dla kompatybilności z przyszłymi mikrokontrolerami zawsze ustawiaj ten bit na zero przy zapisie do rejestru UCSRA. Znacznik DOR jest zerowany, gdy odebrana ramka została z powodzeniem przeniesiona z rejestru przesuwającego do bufora odbiorczego.

Znacznik błędu parzystości (ang. Parity Error, UPE) wskazuje, iż następna ramka w buforze odbiorczym miała przy odbiorze błąd parzystości. Jeśli sprawdzanie parzystości nie zostało włączone, to bit UPE będzie przy odczycie zawsze miał stan zero. Dla kompatybilności z przyszłymi mikrokontrolerami zawsze ustawiaj ten bit na zero przy zapisie do rejestru UCSRA.

Układ sprawdzania parzystości

Układ sprawdzania parzystości jest aktywny po ustawieniu bitu trybu parzystości USART (ang. USART Parity mode bit, UPM1). Rodzaj testu parzystości do wykonania (parzystość lub nieparzystość) jest wybierany bitem  UPM0. Gdy układ ten jest aktywny, to wylicza parzystość/nieparzystość bitów danych w nadchodzących ramkach i porównuje wynik z bitem parzystości w ramce szeregowej. Wynik testu zostaje umieszczony w buforze odbiorczym razem z odebranymi bitami danych i stopu. Znacznik błędu parzystości (ang. Parity Error flag, UPE) można następnie odczytać programowo w celu sprawdzenia, czy dana ramka miała błąd parzystości. Znacznik UPE jest ustawiany, jeśli następny ciąg danych, który można odczytać z bufora odbiorczego, miał przy odbiorze błąd parzystości i sprawdzanie parzystości jest włączone w tym momencie (UPM1 = 1). Bit ten jest ważny do chwili odczytu bufora odbiorczego (UDR).

Wyłączanie odbiornika

W przeciwieństwie do nadajnika wyłączenie odbiornika następuje natychmiastowo. Dane z bieżącego odczytu zostaną z tego powodu utracone. Po wyłączeniu (tj. po wyzerowaniu bitu RXEN) odbiornik przestaje przechwytywać normalną funkcję końcówki portu RxD. Gdy odbiornik jest wyłączany, jego bufor odbiorczy FIFO jest opróżniany. Dane przebywające w tym buforze są tracone.

Opróżnianie bufora odbiorczego

Bufor odbiorczy FIFO zostanie opróżniony, gdy odbiornik jest wyłączany, tj. z bufora zostanie usunięta jego zawartość. Nieodczytane dane będą stracone. Jeśli bufor ten ma być opróżniony w trakcie normalnej pracy, np. z powodu wystąpienia błędu, czytaj komórkę we/wy UDR aż znacznik RXC zostanie wyzerowany.

Poniższy przykład kodu pokazuje, jak należy opróżniać bufor odbiorczy.

Przykład w kodzie maszynowym
USART_Flush:
    sbis UCSRA, RXC
    ret
    in r16, UDR
    rjmp USART_Flush
Przykład w języku C
void USART_Flush( void )
{
    unsigned char dummy;
    while ( UCSRA & (1<<RXC) ) dummy = UDR;
}
Na początek:  podrozdziału   strony 

Asynchroniczny odbiór danych

USART zawiera moduły rekonstrukcji sygnału zegarowego i danych do obsługi asynchronicznego odbioru danych. Układ rekonstrukcji zegara używany jest do synchronizowania wewnętrznego zegara szybkości transmisji z nadchodzącymi asynchronicznymi ramkami szeregowymi na końcówce RxD. Układ rekonstrukcji danych próbkuje i przepuszcza przez filtr dolnoprzepustowy każdy nadchodzący bit, co poprawia odporność odbiornika na zakłócenia. Zakres działania odbioru asynchronicznego zależy od dokładności wewnętrznego zegara szybkości transmisji, szybkości transmitowania nadchodzących ramek oraz ich rozmiaru określonego liczbą bitów.

Asynchroniczna rekonstrukcja sygnału zegarowego

Układ rekonstrukcji zegara synchronizuje zegar wewnętrzny do nadchodzących ramek szeregowych. Poniższy rysunek ilustruje proces próbkowania bitu startu nadchodzącej ramki. Dla trybu normalnego szybkość próbkowania jest 16 razy większa od szybkości transmisji, a w trybie podwójnej szybkości jest osiem razy większa. Poziome strzałki ilustrują odchyłki w synchronizacji spowodowane przez proces próbkowania. Zwróć uwagę na większe odchylenia czasu w trybie pracy z podwójną szybkością (U2X = 1). Próbki oznaczone jako 0 są próbkami przy stanie bezczynnym linii RxD (tj. w czasie bez wykonywania transmisji).

Gdy układ rekonstrukcji zegara wykryje przejście ze stanu wysokiego (bezczynność) do stanu niskiego (start) na linii RxD, rozpoczyna się sekwencja rozpoznawania bitu startowego. Niech próbka 1 oznacza pierwszą zerową próbkę, jak pokazuje powyższy rysunek. Wtedy układ rekonstrukcji zegara wykorzystuje próbki 8, 9 i 10 w trybie normalnym, a w trybie o podwójnej szybkości są wykorzystywane próbki 4, 5 i 6 (na rysunku numery tych próbek umieszczono wewnątrz prostokątów) do zdecydowania, czy odebrano poprawny bit startu. Jeśli dwie lub więcej z tych trzech próbek posiadają wysoki poziom logiczny (większość wygrywa), to bit startu zostanie odrzucony jako zakłócenie impulsowe, a odbiornik rozpocznie poszukiwanie następnego przejścia z poziomu wysokiego w niski. Jednakże gdy zostanie wykryty poprawny bit startu, to układ rekonstrukcji zegara zsynchronizuje się z nim i może rozpocząć się rekonstrukcja danych. Ten proces synchronizacji powtarza się dla każdego bitu startu.

Asynchroniczna rekonstrukcja danych

Gdy zegar odbiornika zostanie zsynchronizowany z bitem startu, może rozpocząć się rekonstrukcja danych. Układ wykonujący to zadanie wykorzystuje automat stanu posiadający 16 stanów dla każdego bitu w trybie normalnym oraz osiem stanów dla każdego bitu w trybie o podwójnej szybkości. Poniższy rysunek pokazuje próbkowanie bitów danych oraz bitu parzystości. Każda z tych próbek ma nadany numer odpowiadający stanowi układu rekonstrukcji.

Określenie poziomu logicznego odbieranego bitu ustalane jest na podstawie głosowania większości wartości logicznych trzech próbek w środku odbieranego bitu. Na rysunku te środkowe próbki są umieszczone w kolorowych prostokątach. Proces głosowania większościowego wykonywany jest następująco: jeśli dwie lub więcej próbek posiada wysokie poziomy logiczne, to odebrany bit zostanie zarejestrowany jako bit o poziomie logicznym 1. Jeśli dwie lub więcej próbek ma niskie poziomy, to odebrany bit zostanie zarejestrowany z poziomem logicznym 0. Ten proces głosowania większościowego działa jak filtr dolnoprzepustowy dla nadchodzącego sygnału na końcówce RxD. Proces rekonstrukcji jest następnie powtarzany aż do odebrania całej ramki. Łącznie z pierwszym bitem stopu. Zauważ, iż odbiornik używa tylko pierwszego bitu stopu z ramki.

Poniższy rysunek pokazuje próbkowanie bitu stopu oraz najwcześniejszy możliwy początek bitu startu następnej ramki.

Takie samo głosowanie większościowe wykonywane jest dla bitu stopu jak dla innych bitów w ramce. Jeśli bit stopu zostanie zarejestrowany z wartością logiczną 0, to zostanie ustawiony znacznik błędu ramki (ang. Frame Error, FE). Nowe przejście z poziomu wysokiego w niski oznaczające bit startu nowej ramki może wystąpić bezpośrednio za ostatnią próbką użytą do głosowania większościowego. W trybie normalnej szybkości pierwsza próbka o niskim stanie może pojawić się w punkcie oznaczonym jako (A) na powyższym rysunku. W trybie o podwójnej szybkości pierwszy niski poziom musi być opóźniony do punktu (B). Punkt (C) oznacza bit stopu o pełnej długości. Wcześniejsze wykrycie bitu startu wpływa na zakres działania odbiornika.


Asynchroniczny zakres roboczy

Zakres roboczy odbiornika zależy od niezgodności pomiędzy szybkością bitów odbieranych a wewnętrznie generowaną szybkością transmisji. Jeśli nadajnik wysyła ramki ze zbyt dużą lub zbyt małą szybkością transmisji, albo wewnętrznie generowana szybkość transmisji nie ma podobnej częstotliwości bazowej, to odbiornik nie będzie w stanie zsynchronizować ramek do bitu startowego. Poniższe równania można używać do obliczenia współczynnika szybkości transmisji danych nadchodzących w stosunku do wewnętrznej szybkości transmisji odbiornika.

D   Suma liczby bitów i bitu parzystości w odbieranym ciągu bitów danych (D = 5 ... 10).
S Liczba próbek na bit. S = 16 w trybie normalnym i S = 8 w trybie o podwójnej szybkości.
SF Numer pierwszej próbki dla głosowania większościowego. SF = 8 w trybie normalnym i SF = 4 w trybie o podwójnej szybkości.
SM Numer środkowej próbki używanej w głosowaniu większościowym. SM = 9 w trybie normalnym i SM = 5 w trybie o podwójnej szybkości.
Rslow Współczynnik najniższej szybkości transmisji danych nadchodzących, które zostaną przyjęte, w zależności od szybkości transmisji ustawionej w odbiorniku.
Rfast Współczynnik najwyższej szybkości transmisji danych nadchodzących, które zostaną przyjęte, w zależności od prędkości transmisji ustawionej w odbiorniku.

Poniższe dwie tabele zawierają listę maksymalnych współczynników odchyłek szybkości transmisji, które mogą być tolerowane. Zauważ, iż tryb o normalnej szybkości transmisji ma wyższą tolerancję odchyłek szybkości transmisji.

Zalecany maksymalny błąd szybkości transmisji odbiornika w trybie normalnym (U2X = 0)

D
(dane + bit parzystości)
Rslow
(%)
Rfast
(%)
Całkowity
błąd maksymalny (%)
Zalecany błąd
maksymalny (%)
5 93,20 106,67 +6,67/-6,8 ± 3,0
6 94,12 105,79 +5,79/-5,88 ± 2,5
7 94,81 105,11 +5,11/-5,19 ± 2,0
8 95,36 104,58 +4,58/-4,54 ± 2,0
9 95,81 104,14 +4,14/-4,19 ± 1,5
10 96,17 103,78 +3,78/-3,83 ± 1,5


Zalecany maksymalny błąd szybkości transmisji odbiornika w trybie podwójnej szybkości (U2X = 1)

D
(dane + bit parzystości)
Rslow
(%)
Rfast
(%)
Całkowity
błąd maksymalny (%)
Zalecany błąd
maksymalny (%)
5 94,12 105,66 +5,66/-5,88 ± 2,5
6 94,92 104,92 +4,92/-5,08 ± 2,0
7 95,52 104,35 +4,35/-4,48 ± 1,5
8 96,00 103,90 +3,90/-4,00 ± 1,5
9 96,39 103,53 +3,53/-3,61 ± 1,5
10 96,70 103,23 +3,23/-3,30 ± 1,0

Zalecenia maksymalnego błędu szybkości transmisji odbiornika zostały wyznaczone przy założeniu, że odbiornik i nadajnik równo dzielą się całkowitym błędem maksymalnym.

Istnieją dwa możliwe źródła błędu szybkości transmisji odbiornika. Zegar systemowy odbiornika (XTAL) zawsze będzie posiadał małą niestabilność w zakresie napięć zasilających i w zakresie temperatur roboczych. Jeśli do generacji zegara systemowego używany jest kryształ kwarcu, to rzadko wystąpi ten problem, lecz przy rezonatorze zegar systemowy może mieć odchyłkę ponad 2% w zależności od jego tolerancji. Drugie źródło błędów można łatwiej kontrolować. Generator szybkości transmisji nie zawsze jest w stanie wykonać dokładnego dzielenia częstotliwości systemowej, aby otrzymać pożądaną szybkość transmisji. W tym przypadku, jeśli jest to możliwe, można użyć wartości UBRR, która da możliwy do przyjęcia dolny błąd.

Na początek:  podrozdziału   strony 

Tryb komunikacji wieloprocesorowej

Ustawienie bitu trybu komunikacji wieloprocesorowej MPCM w rejestrze UCSRA włącza funkcję filtrowania nadchodzących ramek odbieranych przez odbiornik USART. Ramki bez informacji o adresie będą ignorowane i nie zostaną wstawione do bufora odbiorczego. W systemie z wieloma mikrokontrolerami komunikującymi się poprzez tę samą magistralę szeregową zmniejsza to znacznie liczbę nadchodzących ramek, które muszą być obsłużone przez mikroprocesor. Ustawienie bitu MPCM nie wpływa na nadajnik, lecz musi on być używany inaczej, jeśli jest częścią systemu wykorzystującego tryb komunikacji wieloprocesorowej.

Jeśli odbiornik został ustawiony na odbiór ramek zawierających od 5 do 8 bitów danych, to pierwszy bit stopu wskazuje, czy dana ramka zawiera dane lub informację o adresie. Jeśli odbiornik został skonfigurowany na ramki z dziewięcioma bitami danych, to ten dziewiąty bit (RXB8) jest wykorzystywany do identyfikowania ramek adresowych i ramek danych. Gdy bit typu ramki (pierwszy bit stopu lub dziewiąty bit) ma wartość jeden, to ramka zawiera adres. Gdy bit typu ramki ma stan zero, to ramka jest ramką danych.

Tryb komunikacji wieloprocesorowej umożliwia kilku mikrokontrolerom Slave odbiór danych z mikrokontrolera Master. Odbywa się to przez zdekodowanie najpierw ramki adresowej, aby określić adresowany mikrokontroler. Jeśli został zaadresowany określony mikrokontroler, to odbierze on kolejne ramki danych jak zwykle, natomiast pozostałe mikrokontrolery Slave będą ignorować odebrane ramki aż do odebrania następnej ramki adresowej.

Używanie bitu MPCM

Aby mikrokontroler pełnił funkcję mikrokontrolera Master, może on używać formatu ramki z 9-bitowymi ciągami danych (UCSZ = 7). Dziewiąty bit (TXB8) musi być ustawiony (TXB8 = 1) przy wysyłaniu ramki adresowej i wyzerowany (TXB = 0) przy wysyłaniu ramki danych. W tym przypadku mikrokontroler Slave musi być ustawiony na format ramek z danymi 9-bitowymi.

Należy stosować poniższą procedurę przy wymianie danych w trybie komunikacji wieloprocesorowej:

  1. Wszystkie mikrokontrolery Slave są w trybie komunikacji wieloprocesorowej (ustawiony bit MPCM w UCSRA).
  2. Mikrokontroler Master wysyła ramkę adresową, a wszystkie układy Slave odbierają i odczytują tę ramkę. W mikrokontrolerze Slave znacznik RXC w UCSRA będzie ustawiany jak zwykle.
  3. Każdy mikrokontroler Slave odczytuje swój rejestr UDR i określa, czy został wybrany. Jeśli tak, to zeruje on bit MPCM w UCSRA, w przeciwnym razie czeka na następną ramkę adresową i utrzymuje bit MPCM w stanie wysokim.
  4. Zaadresowany mikrokontroler będzie otrzymywał wszystkie ramki danych, aż do odebrania nowej ramki adresowej. Pozostałe mikrokontrolery Slave, które wciąż mają ustawiony bit MPCM, zignorują te ramki danych.
  5. Po odebraniu ostatniej ramki danych przez zaadresowany mikroprocesor, ustawia on bit MPCM i czeka na nową ramkę adresową z układu Master. Proces powtarza się wtedy od punktu 2.

Używanie każdego z formatów ramek ze ciągami danych 5...8 bitowymi jest możliwe, lecz niepraktyczne, ponieważ odbiornik musi wymieniać używanie formatu ramek z ciągami danych n-bitowymi z (n + 1)-bitowymi. Utrudnia to komunikację obustronną, ponieważ nadajnik i odbiornik używają jednocześnie tych samych ustawień liczby bitów w ciągu danych ramki. Jeśli używane są ramki z ciągami 5...8-bitowymi, nadajnik musi być ustawiony do używania dwóch bitów stopu (USBS = 1), ponieważ pierwszy bit stopu jest używany do oznaczania typu ramki (adres/dane).

Nie używaj instrukcji SBI i CBI do ustawiania lub zerowania bitu MPCM. Bit MPCM jest w tej samej komórce we/wy co znacznik TXC, a ten mógłby przypadkiem zostać wyzerowany przez instrukcje SBI lub CBI.

Na początek:  podrozdziału   strony 

Dostęp do rejestrów UBRRH/UCSRC

Rejestr UBRRH dzieli ten sam adres we/wy z rejestrem UCSRC. Dlatego należy podjąć pewne specjalne środki ostrożności przy dostępie do tej komórki we/wy.

Zapis

Gdy ta komórka we/wy jest zapisywana, to najstarszy bit zapisywanej wartości, bit wyboru rejestru USART (ang. USART Register Select, URSEL), kontroluje, który z tych dwóch rejestrów zostanie zapisany. Jeśli URSEL ma stan zero podczas zapisu, to zostanie uaktualniona wartość UBRRH. Jeśli URSEL ma stan jeden, to zostanie uaktualnione ustawienie UCSRC.

Poniższe przykładowe kody pokazują sposób dostępu do tych dwóch rejestrów.

Przykład w kodzie maszynowym
    ...
    ; Ustaw UBRRH na 2
    ldi r16,0x02
    out UBRRH,r16
    ...
    ; Ustaw bity USBS i UCSZ1 na jeden,
    ; a pozostałe bity na zero.
    ldi r16,(1<<URSEL)|(1<<USBS)|(1<<UCSZ1)
    out UCSRC,r16
    ...
Przykład w języku C
    ...
    /* Ustaw UBRRH na 2 */
    UBRRH = 0x02;
    ...
    /* Ustaw bity USBS i UCSZ1 na jeden, */
    /* a pozostałe bity na zero. */
    UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1);
    ...

Odczyt

Odczytywanie rejestru UBRRH lub UCSRC jest operacją bardziej złożoną. Jednakże w większości aplikacji nie występuje potrzeba odczytu tych rejestrów. Odczyt jest kontrolowany przez sekwencję czasową. Jednokrotny odczyt tej komórki we/wy zwraca zawartość rejestru UBRRH. Jeśli ta komórka została odczytana w poprzednim takcie zegara systemowego, to odczyt w bieżącym takcie zwróci zawartość rejestru UCSRC. Zauważ, iż czasowa sekwencja odczytu UCSRC jest operacją atomową. Należy zatem zablokować globalnie przerwania podczas jej wykonywania.

Poniższy przykład kodu pokazuje jak odczytać zawartość rejestru UCSRC.

Przykład w kodzie maszynowym
    USART_ReadUCSRC:
    ; Odczyt UCSRC
    in r16,UBRRH
    in r16,UCSRC
    ret
Przykład w języku C
unsigned char USART_ReadUCSRC( void )
{
    unsigned char ucsrc;
    /* Odczyt UCSRC */
    ucsrc = UBRRH;
    ucsrc = UCSRC;
    return ucsrc;
}

Przykład kodu w asemblerze zwraca wartość UCSRC w rejestrze r16.

Odczytywanie zawartości rejestru UBRRH nie jest operacją atomową i dlatego można go odczytywać jak zwykły rejestr pod warunkiem, że poprzednia instrukcja nie wykonywała dostępu do tego rejestru.

Na początek:  podrozdziału   strony 

Opis rejestrów USART

UDR – USART I/O Data Register – Rejestr danych we/wy USART

Bit 7 6 5 4 3 2 1 0  
0x0C (0x2C) RXB[7:0] UDR (Odczyt)
TXB[7:0] UDR (Zapis)
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  

Rejestry bufora nadawczego i bufora odbiorczego danych USART używają wspólnie tej samej komórki we/wy, którą nazywamy rejestrem danych USART (ang. USART Data Register, UDR). Rejestr bufora nadawczego (TXB) stanie się miejscem docelowym danych zapisanych po adresem rejestru UDR. Odczyt adresu UDR zwróci zawartość rejestru bufora odbiorczego (RXB).

Dla ciągów danych 5...7 bitowych górne, nieużywane bity będą ignorowane przez nadajnik i ustawione na 0 przez odbiornik.

Wpis do bufora nadawczego można wykonać tylko przy ustawionym znaczniku UDRE w rejestrze UCSRA. Dane zapisane do UDR, gdy znacznik UDRE nie jest ustawiony, zostaną zignorowane przez nadajnik USART. Gdy dane zostaną wpisane do bufora nadawczego, a nadajnik jest włączony, rozpocznie on ładowanie tych danych do nadawczego rejestru przesuwającego, gdy ten stanie się pusty. Następnie dane zostaną wysłane szeregowo na końcówce TxD.

Bufor odbiorczy składa się z dwupoziomowej kolejki FIFO (ang. First-In, First-Out – co weszło najpierw, wychodzi najpierw). Kolejka FIFO zmienia swój stan za każdym razem przy dostępie do bufora odbiorczego. Z powodu tego zachowania się bufora odbiorczego, nie używaj na nim instrukcji modyfikujących zawartość (SBI i CBI). Ostrożnie używaj instrukcji testujących bity (SBIC i SBIS), ponieważ one również zmienią stan kolejki  FIFO.


UCSRA – USART Control and Status Register A – Rejestr A sterowania i stanu USART

Bit 7 6 5 4 3 2 1 0  
0x0B (0x2B) RXC TXC UDRE FE DOR UPE U2X MPCM UCSRA
Zapis/Odczyt O Z/O O O O O Z/O Z/O  
Wartość początkowa 0 0 1 0 0 0 0 0  

Bit 7 – RXC: USART Receive Complete – Znacznik zakończenia odbioru USART

Ten znacznik jest ustawiany, gdy w buforze odbiorczym znajdują się nieodczytane dane, a zerowany, gdy bufor odbiorczy jest pusty (tzn. nie zawiera żadnych nieodczytanych jeszcze danych). Jeśli odbiornik zostanie wyłączony, to bufor odbiorczy jest opróżniany i w rezultacie znacznik RXC będzie ustawiony na zero. Znacznik RXC może być wykorzystany do generacji przerwania przy zakończeniu odbioru (ang. Receive Complete interrupt) (zobacz na opis bitu RXCIE w rejestrze UCSRB).

Bit 6 – TXC: USART Transmit Complete – Znacznik zakończenia nadawania USART

Ten znacznik jest ustawiany, gdy cała ramka w nadawczym rejestrze przesuwającym (ang. Transmit Shift Register) została wysłana bit po bicie i nie ma nowych danych bieżąco oczekujących w buforze nadawczym(UDR). Bit znacznika TXC jest automatycznie zerowany, gdy zostanie wykonane przerwanie od zakończenia nadawania. Alternatywnie znacznik TXC można wyzerować wpisując bit o stanie 1 na jego pozycję w rejestrze. Znacznik TXC może generować przerwanie przy zakończeniu nadawania (ang. Transmit Complete interrupt) (zobacz na opis bitu TXCIE w rejestrze UCSRB).

Bit 5 – UDRE: USART Data Register Empty – Znacznik pustego rejestru danych USART

Znacznik UDRE wskazuje, czy bufor nadawczy (UDR) jest gotowy na przyjęcie nowych danych. Jeśli bit UDRE ma stan jeden, to bufor ten jest pusty, a zatem gotowy do zapisu. Znacznik UDRE może generować przerwanie przy pustym rejestrze danych (ang. Data Register Empty interrupt) (zobacz na opis bitu UDRIE w rejestrze UCSRB). Po resecie znacznik UDRE jest ustawiany na 1, aby wskazać, iż nadajnik jest gotowy.

Bit 4 – FE: Frame Error – Znacznik błędu ramki

Ten bit jest ustawiany, jeśli następny ciąg bitów w buforze odbiorczym miał błąd ramki przy odbiorze. Tj. gdy pierwszy bit stopu tego ciągu w buforze odbiorczym miał stan zero. Wartość tego bitu pozostaje ważna aż do odczytu bufora odbiorczego (UDR). Bit FE ma stan zero, gdy bit stopu odebranych danych jest równy 1. Zawsze ustawiaj ten bit na zero przy zapisie do rejestru UCSRA.

Bit 3 – DOR: Data OverRun – Znacznik przekroczenia ilości danych

Ten bit zostaje ustawiony po wykryciu przekroczenia ilości danych. Zdarzenie to występuje, gdy bufor odbiorczy jest pełny (zawiera dwa ciągi danych), w rejestrze przesuwającym oczekuje nowy ciąg danych, a zostanie wykryty nowy bit startu. Wartość tego bitu pozostaje ważna aż do odczytu bufora odbiorczego (UDR). Zawsze ustawiaj ten bit na zero przy zapisie do rejestru UCSRA.

Bit 2 – UPE: USART Parity Error – Znacznik błędu parzystości USART

Ten bit jest ustawiany, jeśli następny ciąg bitów danych w buforze odbiorczym miał przy odbiorze błąd parzystości, a sprawdzanie parzystości w tym punkcie zostało włączone (UPM1 = 1). Wartość tego bitu pozostaje ważna aż do odczytu bufora odbiorczego (UDR). Zawsze ustawiaj ten bit na zero przy zapisie do rejestru UCSRA.

Bit 1 – U2X: Double the USART Transmission Speed – Podwojenie szybkości transmisji USART

Ten bit ma znaczenie tylko przy pracy asynchronicznej. Zapisz ten bit stanem zero, jeśli używasz pracy synchronicznej.

Zapisanie bitu U2X stanem jeden zmniejszy podzielnik szybkości transmisji z 16 na 8, co da w rezultacie podwojenie szybkości przesyłania w komunikacji asynchronicznej.

Bit 0 – MPCM: Multi-processor Communication Mode – Tryb komunikacji wieloprocesorowej

Ten bit włącza tryb komunikacji wieloprocesorowej (ang. Multi-processor Communication mode). GDy do bitu MPCM zostanie wpisany stan jeden, to wszystkie nadchodzące ramki odczytywane przez odbiornik USART będą ignorowane, jeśli nie będą zawierały informacji o adresie. Bit MPCM nie wpływa na pracę nadajnika. Więcej na ten temat znajdziesz w podrozdziale "Tryb komunikacji wieloprocesorowej".


UCSRB – USART Control and Status Register B – Rejestr B sterowania i stanu USART

Bit 7 6 5 4 3 2 1 0  
0x0A (0x2A) RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 UCSRB
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – RXCIE: RX Complete Interrupt Enable – Włączenie przerwań przy zakończeniu odbioru

Zapis tego bitu stanem jeden uaktywnia przerwanie przy ustawieniu znacznik RXC. Przerwanie przy zakończeniu odczytu USART (ang. USART Receive Complete interrupt) zostanie wygenerowane tylko wtedy, gdy ustawione na jeden są bity:  RXCIE, I w rejestrze stanu SREG (globalne uaktywnienie przerwań) oraz RXC w rejestrze UCSRA.

Bit 6 – TXCIE: TX Complete Interrupt Enable – Włączenie przerwań przy zakończeniu nadawania

Ustawienie tego bitu na jeden włącza przerwania przy ustawieniu znacznika TXC. Przerwanie przy zakończeniu nadawania USART (ang. USART Transmit Complete interrupt) zostanie wygenerowane tylko wtedy, gdy ustawione na jeden są bity:  TXCIE, I w rejestrze stanu SREG (globalne uaktywnienie przerwań) oraz TXC w rejestrze UCSRA.

Bit 5 – UDRIE: USART Data Register Empty Interrupt Enable – Włączenie przerwań przy pustym rejestrze danych USART

Ustawienie tego bitu na jeden włącza przerwania przy ustawieniu znacznika UDRE. Przerwanie przy pustym rejestrze danych USART (ang. USART Data Register Empty interrupt) zostanie wygenerowane tylko wtedy, gdy ustawione na jeden są bity:  UDRIE, I w rejestrze stanu SREG (globalne uaktywnienie przerwań) oraz UDRE w rejestrze UCSRA.

Bit 4 – RXEN: Receiver Enable – Włączenie odbiornika

Zapis tego bitu stanem jeden włącza odbiornik USART. Gdy odbiornik jest włączony, przechwytuje normalną funkcję portu końcówki RxD. Wyłączenie odbiornika powoduje opróżnienie bufora odbiorczego i unieważnienie znaczników FR, DOR i UPE.

Bit 3 – TXEN: Transmitter Enable – Włączenie nadajnika

Zapis tego bitu stanem jeden włącza nadajnik USART. Nadajnik po włączeniu przejmuje normalne działanie końcówki portu TxD. Wyłączenie nadajnika (zapis bitu TXEN stanem zero) nie będzie wykonane, aż zostaną zakończone przesłania bieżące i oczekujące, tj. gdy nadawczy rejestr przesuwający (ang. Transmit Shift Register) i rejestr bufora nadawczego (ang. Transmit Buffer Register) nie będą przechowywały danych do przesłania. Po wyłączeniu nadajnik nie przechwytuje już działania końcówki portu TxD.

Bit 2 – UCSZ2: Character Size – Długość ciągu bitów danych

Bit UCSZ2 w połączeniu z bitami UCSZ1:0 w rejestrze UCSRC ustawia liczbę bitów danych w ramce używanej przez odbiornik i nadajnik.

Bit 1 – RXB8: Receive Data Bit 8 – Odbiorczy bit danych nr 8

RXB8 jest dziewiątym bitem danych odebranego ciągu bitów, gdy odbiornik został ustawiony do pracy z ramkami szeregowymi zawierającymi dziewięć bitów danych. Należy go odczytać przed odczytem młodszych bitów z rejestru UDR.

Bit 0 – TXB8: Transmit Data Bit 8 – Nadawczy bit danych nr 8

TXB8 jest dziewiątym bitem w ciągu bitów transmitowanych w ramce szeregowej z dziewięcioma bitami danych. Musi być zapisany przed zapisem młodszych bitów do rejestru UDR.


UCSRC – USART Control and Status Register C – Rejestr C sterowania i stanu USART

Bit 7 6 5 4 3 2 1 0  
0x20 (0x40) URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL UCSRC
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 1 0 0 0 0 0 0 0  

Rejestr UCSRC dzieli adres we/wy z rejestrem UBRRH. Zobacz do podrozdziału "Dostęp do rejestrów UBRRH/UCSRC”.

Bit 7 – URSEL: Register Select – Wybór rejestru

Ten bit wybiera przy zapisie dostęp do rejestru UCSRC lub UBRRH. Przy odczycie bit ten daje stan jeden. Bit URSEL musi mieć wartość jeden przy zapisie do UCSRC.

Bit 6 – UMSEL: USART Mode Select – Wybór trybu USART

Ten bit dokonuje wyboru pomiędzy asynchronicznym lub synchronicznym trybem pracy.

UMSEL Tryb
0 Praca asynchroniczna
1 Praca synchroniczna

Bity 5:4 – UPM1:0: Parity Mode – Tryb parzystości

Te bity włączają oraz określają rodzaj generacji i sprawdzania parzystości. Jeśli parzystość zostanie włączona, to nadajnik automatycznie będzie generował i wysyłał bit parzystości wraz z bitami danych w każdej ramce. Odbiornik będzie generował wartość parzystości z nadchodzących danych i porównywał ją z ustawieniem UPM0. Jeśli zostanie wykryta niezgodność, to będzie ustawiony znacznik UPE w rejestrze UCSRA.

UPM1 UPM0 Tryb parzystości
0 0 Wyłączone
0 1 Zarezerwowane
1 0 Włączone, parzystość
1 1 Włączone, nieparzystość

Bit 3 – USBS: Stop Bit Select – Wybór bitów stopu

Ten bit wybiera liczbę bitów stopu, która mają być wstawiane przez nadajnik. Odbiornik ignoruje to ustawienie.

USBS Bity stopu
0 1 bit
1 2 bity

Bit 2:1 – UCSZ1:0: Character Size – Liczba bitów danych w ramce

Bity UCSZ1:0 w połączeniu z bitem UCSZ2 w rejestrze UCSRB ustawiają liczbę bitów danych w ramkach używanych przez nadajnik i odbiornik.

UCSZ2 UCSZ1 UCSZ0 Liczba bitów danych w ramce
0 0 0 5 bitów
0 0 1 6 bitów
0 1 0 7 bitów
0 1 1 8 bitów
1 0 0 Zarezerwowane
1 0 1 Zarezerwowane
1 1 0 Zarezerwowane
1 1 1 9 bitów

Bit 0 – UCPOL: Clock Polarity – Polaryzacja zegara

Ten bit używany jest tylko w trybie synchronicznym. Jeśli USART pracuje w trybie asynchronicznym, to zapisz ten bit stanem zero. Bit UCPOL ustawia zależność pomiędzy zmianą danych wyjściowych i próbkowaniem danych wejściowych a zegarem synchronicznym (XCK).

UCPOL Zmiana danych wysyłanych
(Wyjście na końcówce TxD)
Próbkowanie danych odbieranych
(Wejście na końcówce RxD)
0 Narastające zbocze XCK Opadające zbocze XCK
1 Opadające zbocze XCK Narastające zbocze XCK

UBRRL i UBRRH – USART Baud Rate Registers – Rejestry szybkości transmisji USART

Bit 15 14 13 12 11 10 9 8  
0x20 (0x40) URSEL UBRR[11:8] UBRRH
0x09 (0x29) UBRR[7:0] UBRRL
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O O O O Z/O Z/O Z/O Z/O  
  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  
  0 0 0 0 0 0 0 0  

Rejestr UBRRH dzieli ten sam adres we/wy co rejestr UCSRC. Zobacz do podrozdziału "Dostęp do rejestrów UBRRH/UCSRC”.

Bit 15 – URSEL: Register Select – Wybór rejestru

Ten bit wybiera pomiędzy dostępem do rejestru UBRRH lub do UCSRC. Przy odczycie rejestru UBRRH bit ten ma wartość zero. Bit URSEL musi być wyzerowany podczas zapisu do UBRRH.

Bity 14:12 – Zarezerwowane

Te bity są zarezerwowane do przyszłego użytku. Dla kompatybilności z przyszłymi mikrokontrolerami należy je zawsze zapisywać stanem zero, gdy następuje wpis do rejestru UBRRH.

Bit 11:0 – UBRR11:0: USART Baud Rate Register – Rejestr szybkości transmisji USART

Jest to 12 bitowy rejestr, który zawiera wartość szybkości transmisji USART. Rejestr UBRRH przechowuje cztery najbardziej znaczące bity, a UBRRL przechowuje osiem najmniej znaczących bitów wartości szybkości transmisji USART. Jeśli wartość ta zostanie zmieniona w trakcie nadawania lub odbierania danych, to zakłóci to pracę nadajnika i odbiornika. Zapis do UBRRL wyzwoli natychmiastowe uaktualnienie preskalera szybkości transmisji.

Na początek:  podrozdziału   strony 

Przykłady ustawień szybkości transmisji

Dla standardowych częstotliwości kwarców i rezonatorów najpowszechniejsze szybkości transmisji w pracy asynchronicznej można otrzymać poprzez użycie ustawień UBRR zebranych w tabeli poniżej. Wartości UBRR dające w wyniku szybkość transmisji różniącą się mniej niż 0,5% od docelowej szybkości transmisji są w tabeli zapisane grubą czcionką. Wyższe wartości błędu są do przyjęcia, lecz odbiornik będzie przy nich mniej odporny na zakłócenia, szczególnie przy długich ramkach szeregowych (zobacz do podrozdziału "Asynchroniczny zakres działania"). Wartości błędu są wyliczane przy użyciu następującego wzoru:

E[%] błąd procentowy szybkości transmisji
BRCM najlepsze przybliżenie szybkości transmisji
BR pożądana szybkość transmisji
Szybkość
transmisji
(bps)
fosc = 1,0000 MHz fosc = 1,8432 MHz fosc = 2,0000 MHz
UX2 = 0 UX2 = 1 UX2 = 0 UX2 = 1 UX2 = 0 UX2 = 1
UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd
2400
4800
9600
14,4k
19,2k
28,8k
38,4k
57,6k
76,8k
115,2k
230,4k
250k
25
 12
6
3
2
1
1
0



0,2%
0,2%
-7,0%
8,5%
8,5%
8,5%
-18,6%
8,5%



51
25
12
8
6
3
2
1
1
0

0,2%
0,2%
0,2%
-3,5%
-7,0%
8,5%
8,5%
8,5%
-18,6%
8,5%

47
23
11
7
5
3
2
1
1
0

0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
-25,0%
0,0%

95
47
23
15
11
7
5
3
2
1
0
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
51
25
12
8
6
3
2
1
1
0

0,2%
0,2%
0,2%
-3,5%
-7,0%
8,5%
8,5%
8,5%
-18,6%
8,5%

103
51
25
16
12
8
6
3
2
1

0
0,2%
0,2%
0,2%
2,1%
0,2%
-3,5%
-7,0%
8,5%
8,5%
8.5%

0,0%
Max.(1) 62,5 kbps 125 kbps 115,2 kbps 230,4 kbps 125 kbps 250 kbps
1. UBRR = 0, Błąd = 0,0%
Szybkość
transmisji
(bps)
fosc = 3,6864 MHz fosc = 4,0000 MHz fosc = 7,3728 MHz
UX2 = 0 UX2 = 1 UX2 = 0 UX2 = 1 UX2 = 0 UX2 = 1
UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd
2400
4800
9600
14,4k
19,2k
28,8k
38,4k
57,6k
76,8k
115,2k
230,4k
250k
0,5M
1M
95
47
23
15
11
7
5
3
2
1
0
0

0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
-7,8%

191
95
47
31
23
15
11
7
5
3
1
1
0
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
-7,8%
-7,8%
103
51
25
16
12
8
6
3
2
1
0
0

0,2%
0,2%
0,2%
2,1%
0,2%
-3,5%
-7,0%
8,5%
8,5%
8,5%
8,5%
0,0%

207
103
51
34
25
16
12
8
6
3
1
1
0
0,2%
0,2%
0,2%
-0,8%
0,2%
2,1%
0,2%
-3,5%
-7,0%
8,5%
8,5%
0,0%
0,0%
191
95
47
31
23
15
11
7
5
3
1
1
0
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
-7,8%
-7,8%
383
191
95
63
47
31
23
15
11
7
3
3
1
0
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
-7,8%
-7,8%
-7,8%
Max.(1) 230,4 kbps 460,8 kbps 250 kbps 0,5 Mbps 460,8 kbps 921,6 kbps
1. UBRR = 0, Błąd = 0,0%
Szybkość
transmisji
(bps)
fosc = 8,0000 MHz fosc = 11,0592 MHz fosc = 14,7456 MHz
UX2 = 0 UX2 = 1 UX2 = 0 UX2 = 1 UX2 = 0 UX2 = 1
UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd
2400
4800
9600
14,4k
19,2k
28,8k
38,4k
57,6k
76,8k
115,2k
230,4k
250k
0,5M
1M
207
103
51
34
25
16
12
8
6
3
1
1
0
0,2%
0,2%
0,2%
-0,8%
0,2%
2,1%
0,2%
-3,5%
-7,0%
8,5%
8,5%
0,0%
0,0%
416
207
103
68
51
34
25
16
12
8
3
3
1
0
-0,1%
0,2%
0,2%
0,6%
0,2%
-0,8%
0,2%
2,1%
0,2%
-3,5%
8,5%
0,0%
0,0%
0,0%
287
143
71
47
35
23
17
11
8
5
2
2

0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
-7,8%

575
287
143
95
71
47
35
23
17
11
5
5
2
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
-7,8%
-7,8%
383
191
95
63
47
31
23
15
11
7
3
3
1
0
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
-7,8%
-7,8%
-7,8%
767
383
191
127
95
63
47
31
23
15
7
6
3
1
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
5,3%
-7,8%
-7,8%
Max.(1) 0,5 Mbps 1 Mbps 691,2 kbps 1,3824 Mbps 921,6 kbps 1,8432 Mbps
1. UBRR = 0, Błąd = 0,0%
Szybkość
transmisji
(bps)
fosc = 16,0000 MHz fosc = 18,4320 MHz fosc = 20.0000 MHz
UX2 = 0 UX2 = 1 UX2 = 0 UX2 = 1 UX2 = 0 UX2 = 1
UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd UBRR Błąd
2400
4800
9600
14,4k
19,2k
28,8k
38,4k
57,6k
76,8k
115,2k
230,4k
250k
0,5M
1M
416
207
103
68
 51
 34
25
 16
12
8
3
3
1
0
-0,1%
0,2%
0,2%
0,6%
0,2%
-0,8%
 0,2%
2,1%
0,2%
-3,5%
8,5%
0,0%
0,0%
0,0%
832
416
207
138
103
68
51
34
25
16
8
7
3
1
0,0%
-0,1%
0,2%
-0,1%
0,2%
0,6%
0,2%
-0,8%
0,2%
2,1%
-3,5%
0,0%
0,0%
0,0%
479
239
119
79
59
39
29
19
14
9
4
4
 –
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
-7,8%

959
479
239
159
119
79
59
39
29
19
 9
8
4
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
0,0%
2,4%
-7,8%
520
259
129
86
64
42
32
21
15
10
4
4

 –
0,0%
0,2%
0,2%
-0,2%
0,2%
0,9%
-1,4%
-1,4%
1,7%
-1,4%
8,5%
0,0%

1041
520
259
173
129
86
64
42
32
21
10
9
4
0,0%
0,0%
0,2%
-0,2%
0,2%
-0,2%
0,2%
0,9%
-1,4%
-1,4%
-1,4%
0,0%
0,0%
Max.(1) 1 Mbps 2 Mbps 1,152 Mbps 12,304 Mbps 1,25 Mbps 2,5 Mbps
1. UBRR = 0, Błąd = 0,0%
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.