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



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

MIKROPROCESORY architektura i programowanie

MIKROPROCESORY architektura i programowanie

TECHNIKA MIKROPROCESOROWA

Architektura mikrokontrolera MCS51

Architektura mikrokontrolera MCS51

Hardware mikrokontrolera X51

Technika mikroprocesorowa I Wykład 4

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe

Instytut Teleinformatyki

Start Bity Bit Stop 1 Bit Par Rys. 1

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

Zerowanie mikroprocesora

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

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

dokument DOK wersja 1.0

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

Instytut Teleinformatyki

Instytut Teleinformatyki

INTERFEJSY SYSTEMÓW ELEKTRONICZNYCH. Interfejsy klasy RS

Programowanie w językach asemblera i C

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

TECHNIKA MIKROPROCESOROWA

2. Architektura mikrokontrolerów PIC16F8x... 13

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

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

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

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

Organizacja typowego mikroprocesora

Instrukcja do oprogramowania ENAP DEC-1

Wstęp Architektura... 13

System interfejsu RS 232C opracowali P. Targowski i M. Rębarz

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

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

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

Techniki mikroprocesorowe i systemy wbudowane

Uniwersalny asynchroniczny. UART Universal Asynchronous Receier- Transmiter

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

Praktyka Techniki Mikroprocesorowej. Mikrokontroler ADuC834

Programowanie mikrokontrolerów. 8 listopada 2007

Pracownia elektryczno-elektroniczna klasa IV

architektura komputerów w 1 1

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

1. Poznanie właściwości i zasady działania rejestrów przesuwnych. 2. Poznanie właściwości i zasady działania liczników pierścieniowych.

interfejs szeregowy wyświetlaczy do systemów PLC

Opis procedur asemblera AVR

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

Informacje ogólne o układzie 8051.

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

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

Przemysłowe Sieci informatyczne

Mikroprocesor Operacje wejścia / wyjścia

SML3 październik

Struktura i działanie jednostki centralnej

Przerwania w architekturze mikrokontrolera X51

Programowanie mikrokontrolerów. 15 stycznia 2008

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

Wyjście do drukarki Centronix

Systemy wbudowane. Wprowadzenie. Wprowadzenie. Mikrokontroler 8051 Budowa

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

. Rodzaje transmisji sygnału i RS-232

Opis mikrokontrolera AT89C2051

MIKROKONTROLERY I MIKROPROCESORY

Mikrokontroler Intel dr inż. Wiesław Madej

Technika mikroprocesorowa I Wykład 2

Architektura komputerów

Interfejsy. w systemach pomiarowych. Ryszard J. Barczyński, 2016 Materiały dydaktyczne do użytku wewnętrznego

IIPW_SML3_680 (Z80) przewodnik do ćwiczeń laboratoryjnych

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

Wizualizacja stanu czujników robota mobilnego. Sprawozdanie z wykonania projektu.

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Układy czasowo-licznikowe w systemach mikroprocesorowych

TECHNIKA MIKROPROCESOROWA II

SYGNALIZATORY MIEJSCA ZWARCIA W SIECI KABLOWEJ SN Z SERII SMZ-4DM INSTRUKCJA OBSŁUGI PRZEZ PROTOKÓŁ MODBUS RTU

Kod produktu: MP01105T

Laboratorium Komputerowe Systemy Pomiarowe

Wstęp: Interfejs portu równoległego 6821 i portu szeregowego 6850 firmy Motorola

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1.

Kod produktu: MP01105

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

Komunikacja w mikrokontrolerach Laboratorium

LABORATORIUM PODSTAWY ELEKTRONIKI REJESTRY

Układy Cyfrowe projekt. Korekcja jasności obrazów w 24-bitowym formacie BMP z użyciem funkcji gamma. Opis głównych modułów sprzętowych

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

KERN EW-A01 Wersja /99

Opis czytnika TRD-FLAT CLASSIC ver Naścienny czytnik transponderów UNIQUE w płaskiej obudowie

Metody obsługi zdarzeń

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

STEROWNIK ŚWIATEŁ i SZLABANÓW SWS-4/485K/UK

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

Sygnały DRQ i DACK jednego kanału zostały użyte do połączenia kaskadowego obydwu sterowników.

Instrukcja do ćwiczenia : Matryca komutacyjna

Odbiór i dekodowanie znaków ASCII za pomocą makiety cyfrowej. Znaki wysyłane przez komputer za pośrednictwem łącza RS-232.

dwójkę liczącą Licznikiem Podział liczników:

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

Opis układów wykorzystanych w aplikacji

1 Moduł Neuronu Cyfrowego SM

Standard transmisji równoległej LPT Centronics

1 Moduł Modbus ASCII/RTU 3

Transkrypt:

Laboratorium Techniki Mikroprocesorowej Informatyka studia dzienne Ćwiczenie 2 Transmisja a szeregowa µc 8051(8052) - PC Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z budową i programowaniem implementacji interfejsu RS232 na przykładzie mikrokontrolera 8051 i komputera PC. W trakcie ćwiczenia należy napisać programy dla mikrokomputera jednoukładowego uc 8051 i komputera PC nawiązujące połączenie poprzez łącze szeregowe RS232C Program na µc 8051 powinien odebrać wysłany z PC znak, wyświetlić go na wyświetlaczu LCD i odesłać do komputera PC. Program na PC powinien odczytać znak z klawiatury, wysłać go poprzez RS232 do mikrokontrolera, odebrać odpowiedź i wyświetlić ją na ekranie. Wszelkie operacje na porcie szeregowym nie mogą korzystać z funkcji BIOSa i systemu operacyjnego. Wymagane wiadomości Budowa, sposób programowania mikrokomputerów rodziny MCS-51 (8052) ze szczególnym uwzględnieniem układu czasowo-licznikowego i portu szeregowego. Budowa i sposób programowania interfejsu RS232C w komputerach PC. Podstawy programowania w asemblerze 8086. Wykorzystywany sprzęt Komputer klasy PC do przygotowania tekstu źródłowego, kodu wynikowego oraz jako maszyna do zestawienia komunikacji szeregowej. Zestaw laboratoryjny 8052 z interfejsem RS232C, wyświetlaczem LCD i emulatorem EPROM Literatura 1. Rydzewski A.: Mikrokomputery jednoukładowe rodziny MCS-51,WNT, Warszawa 1997 2. Małysiak h.: Mikrokomputery jednoukładowe serii MCS48, MCS51, MCS96. 3. Mielczarek W.: Szeregowe interfejsy cyfrowe. Wyd. Helion 1993 4. Metzger P.: Anatomia PC, Wyd. Helion 1996

Przeprowadzenie ćwiczenia Podczas ćwiczenia należy napisać i uruchomić 2 programy. Pierwszy napisany dla mikrokontrolera 8052 realizujący następujące funkcje: odebranie znaku z portu szeregowego wyświetlenie znaku na wyświetlaczu LCD odesłanie znaku przez port szeregowy Drugi dla komputera PC realizujący następujące funkcje: Pobranie znaku z klawiatury Wysłanie znaku poprzez port szeregowy odebranie znaku z portu szeregowego wyświetlenie odebranego znaku na ekranie Dla 8051 1. ustalić tryb pracy portu szeregowego, oraz licznika, (8052 jest taktowany zegarem 11.059 MHz) 2. zainicjować wyświetlacz (przykładowy plik test.asm zawiera podstawowe procedury obsługi wyświetlacza LCD), 3. odebrać znak (ciąg znaków), 4. wyświetlić znak na wyświetlaczu, 5. odesłać znak Program powinien wykorzystywać przerwania pochodzące od portu szeregowego, akceptowalne jest również stosowanie poolingu. Dla PC 1. Ustalić parametry transmisji przez RS232: format ramki, prędkość. 2. Zainicjować z poziomu asemblera ( nie korzystając z BIOSa i DOSa) port COM2 3. Wykorzystując funkcje systemowe pobrać znak z klawiatury (np. 01H lub 08H przerwania 21H) 4. Nie korzystając z funkcji BIOSa wysłać znak przez port COM2 5. Odebrać znak z portu COM2 6. Wyświetlić odebrany znak na ekranie np. przy pomocy funkcji.02h przerwania 21H Do ćwiczenia wymagane jest sprawozdanie zawierające przyjęte załozenia i skomentowane kody źródłowe programów Programowanie µc 8052 Obsługa asemblera Aby zasemblować program należy wywołać program asm51.exe z nazwą pliku zawierającego kod programu. W wyniku działania programu powstają dwa pliki z rozszerzeniami.lst oraz.hex. Pierwszy z nich zawiera przetworzony listing programu. Drugi plik w przypadku bezbłędnej asemblacji zawiera kod wynikowy w formacie Intel HEX. Dokładniejsze informacje na temat programu asemblera mnożna znaleźć w pliku asm51.doc. Kod zapisany w formacie Intel HEX nie jest wersją ostateczną. Przed umieszczeniem kodu w pamięci mikrokomputera należy zamienić go na postać binarną za pomocą programu hex-bin.exe. Niestety, program hex-bin oczekuje podania nazwy pliku bez rozszerzenia i usiłuje wczytać plik z rozszerzeniem.obj, należy więc wcześniej skopiować plik z rozszerzeniem.hex do pliku z rozszerzeniem obj. Do kompilacji i konwersji formatu można wykorzystać skrypt go.bat którego argumentem jest nazwa programu bez żadnego rozszerzenia. 2

Programowanie EPROM Otrzymany plik binarny należy skierować do portu równoległego lptl, do którego podłączony jest emulator pamięci EPROM, za pomocą polecenia copy. Należy przy tym pamiętać o opcji /b, gdyż w innym wypadku MS-DOS potraktuje plik jako tekstowy i uszkodzi przesyłane dane. Transmisja jest sygnalizowana przez emulator EPROM poprzez zieloną diodę elektroluminescencyjną. Dioda gaśnie dopiero po zakończeniu transmisji. Podczas kopiowania obrazu pamięci wskazane jest utrzymanie sygnału RST mikrokontrolera w stanie wysokim (lewy niebieski przycisk pod wyświetlaczem). Ma to zapobiec wykonywaniu przez system niekompletnego programu. Programowanie PC Kod źródłowy na PC należy przygotować przy użyciu dowolnego edytora. Do uzyskania programu wykonywalnego korzystamy z programów tasm.exe i tlink.exe. Można wykorzystać gotowy skrypt asm.bat. 3

Interfejs szeregowy w µc 8051 Mikrokomputery 8051/52 mają port szeregowy, pozwalający na przesyłanie informacji szeregowej (8-bitowych słów danych) poprzez linie portu P3: RxD (P3.0 - wejście szeregowe) i TxD (P3.1 - wyjście szeregowe). Port może pracować w jednym z czterech trybów (Błąd! Nieznany argument przełącznika.). Zamiana postaci danych z równoległej na szeregową i odwrotnie oraz sterowanie wysyłaniem słowa odbywa się automatycznie. Dane odebrane przez port szeregowy są zapisywane do rejestru wejściowego transmisji szeregowej, dane wysyłane są pobierane z rejestru wyjściowego transmisji szeregowej. Oba te rejestry są umieszczone w przestrzeni adresowej wewnętrznej pamięci danych jako rejestr specjalny SBUF, pod tym samym adresem 99H. Zapisanie danych do SBUF powoduje wpisanie ich do rejestru wyjściowego, natomiast odczytanie z SBUF powoduje odczytanie zawartości rejestru wejściowego. Tryb SM0 SM1 Opis 0 0 0 Transmisja synchroniczna, znaki ośmiobitowe taktowane sygnałem zegarowym. 1 0 1 Transmisja asynchroniczna, znaki ośmiobitowe, szybkość określona programowo. 2 1 0 Transmisja asynchroniczna, znaku dziewięciobitowe, szybkość 1/32 lub 1/64 częstotliwości zegara. 3 1 1 Transmisja asynchroniczna, znaki dziewięciobitowe, szybkość określona programowo. Tabela Błąd! Nieznany argument przełącznika. Tryby pracy portu szeregowego w 8051. Do kontroli. pracy portu szeregowego służy słowo sterujące SCON znajdujące się pod adresem 98H. Słowo i znaczenie poszczególnych bitów przedstawiono w Błąd! Nieznany argument przełącznika. SM0 SM1 SM2 REN TB8 RB8 TI RI SCON Bit Znaczenie SM0 definiuje tryb (patrz Błąd! Nieznany argument przełącznika.) SM1 definiuje tryb (patrz Błąd! Nieznany argument przełącznika.) SM2 Bit sterujący umożliwiający tworzenie sieci zbudowanej z µc 8051 komunikujących się w trybie 2 i 3. Jeśli SM2=1 to jest maskowane odebranie znaku,którego D8=0 (znacznik RI nie jest ustawiany, dane nie są zapisywane do rejestru SBUF). Jeśli SM2=0 to wartość dziewiątego bitu nie jest istotna dla działania układów transmisji szeregowej. Przed wysłaniem wartość bitu może być ustalana programowo i wpisana do znacznika TB8, a po odebraniu znaku odczytana ze znacznika RB8. Dla trybu 0 bit powinien być wyzerowany. REN Gdy bit ustawiony możliwy jest odbiór danych. Zawartość bitu zmieniana programowo. TB8 Dziewiąty bit danych który ma zostać wysłany w trybach 2 i 3, jest zmieniany programowo. RB8 Dziewiąty bit przyjmowanego znaku (tryb 2 i 3). W trybie pierwszym bit przyjmuje wartość odebranego bitu stopu (gdy SM2=0). W trybie 0 nie jest wykorzystywany. Zerowanie bitu odbywa się programowo. RI Znacznik przerwania generowanego przez odbiornik. Znacznik jest ustawiany sprzętowo po odebraniu słowa. Zerowanie znacznika jest programowe. TI Znacznik przerwania generowanego przez nadajnik. Znacznik jest ustawiany po wysłaniu słowa. Zerowanie znacznika jest programowe. Tabela Błąd! Nieznany argument przełącznika. Słowo sterujące SCON Tryby pracy W trybie 0 port szeregowy pracuje jako nadajnik lub odbiornik 8-bitowych słów szeregowych (pierwszy bit najmniej znaczący). Słowa te są przesyłane po linii P3.0 (RxD) w obie strony, a odbierane lub nadawane przez zewnętrzny rejestr przesuwający, taktowany sygnałem zegarowym wysyłanym na linię P3.1 (TxD). Częstotliwość sygnału taktującego wynosi f XTAL /12. Wysłanie znaku jest inicjowane przez wykonanie dowolnego rozkazu, który wpisuje dane do rejestru SBUF. Zakończenie wysyłania znaku powoduje ustawienie znacznika TI w rejestrze SCON. Odebranie całego znaku powoduje ustawienie znacznika RI w rejestrze SCON. 4

Ustawienie znacznika TI lub RI jest sygnałem zgłoszenia przerwania z portu szeregowego. Przyjęcie tego przerwania (gdy nie jest ono zamaskowane) nie powoduje automatycznego wyzerowania znaczników, a zatem ich stan może być w programie obsługi odczytany w celu identyfikacji przyczyny przerwania. Znaczniki powinny zostać wyzerowane programowo. W trybach 1, 2 i 3 port szeregowy pełni funkcję niezależnego nadajnika (linia P3.1 - TxD) i odbiornika (linia P3.0 - RxD) asynchronicznej transmisji szeregowej. Tryby różnią się między sobą długością (liczbą bitów) przesyłanych słów oraz sposobem określenia szybkości transmisji. Znak składa się z bitu startu (zawsze 0), ośmiu bitów danych w trybie 1 albo dziewięciu w trybie 2 i 3 oraz bitu stopu (zawsze 1). Pierwszy bit danych jest bitem najmniej znaczącym. Słowo danych (D0...D7) do wysłania jest pobierane z rejestru wyjściowego SBUF. Odebrane słowo danych jest wpisywane do rejestru wejściowego SBUF. W trybach 2 i 3 bit D8 jest pobierany do wysłania z pozycji TB8, a ten odebrany jest wpisywany na pozycję RB8 w rejestrze SCON. Jeżeli w słowie SCON jest SM2 równe 0, to wartość bitu D8 nie jest istotna dla działania układów transmisji szeregowej. Przed wysłaniem znaku może być ona ustalona programowo i wpisana do znacznika TB8, a po odebraniu znaku odczytana ze znacznika RB8 i przeanalizowana programowo, zgodnie z dowolnie przyjętym protokołem transmisji, np. jako bit parzystości. Jeżeli w słowie SCON jest SM2 równe l, to w porcie szeregowym jest maskowane odebranie znaku, w którym D8 = 0. Mechanizm ten jest wykorzystany w protokole transmisji dla systemu wieloprocesorowego. Drugim elementem wpływającym na różnice między trybami 1, 2 i 3 jest źródło sygnału taktującego, określającego szybkość transmisji szeregowej. W trybie 2 układ transmisji szeregowej jest taktowany wewnętrznym sygnałem zegarowym o częstotliwości f XTAL /2, doprowadzonym bezpośrednio lub poprzez dzielnik częstotliwości przez 2 w zależności od zawartości znacznika SMOD, tzn. PCON.7. W trybach 1 i 3 sygnałem taktującym układ transmisji szeregowej jest sygnał przepełnienia licznika Tl z układu czasowo licznikowego. Jest on doprowadzony bezpośrednio lub poprzez dzielnik częstotliwości przez 2 zgodnie z zawartością znacznika SMOD. W mikrokomputerach 8052/32 do taktowania portu szeregowego może być wykorzystany sygnał przepełnienia licznika T2. Sygnał ten zostaje dołączony do nadajnika, po wpisaniu 1 na pozycję TCLK w słowie T'2CON, i do odbiornika, po wpisaniu 1 na pozycję RCLK w słowie T2CON. We wszystkich trzech trybach właściwy sygnał zegarowy, określający rytm pracy nadajnika (TXC) i odbiornika (RXC), powstaje po podzieleniu przez 16 częstotliwości odpowiedniego, opisanego wyżej, sygnału taktującego. Wysłanie znaku jest inicjowane programowo, przez wykonanie dowolnego rozkazu zapisującego dane do rejestru SBUF. Zakończenie wysyłania znaku powoduje ustawienie znacznika TI w rejestrze SCON. Znacznik TI nie jest kasowany sprzętowo przy kolejnym zapisie do rejestru SBUF. Powinien byc zerowany programowo. Odbieranie znaku jest inicjowane sprzętowo, po wykryciu zmiany 1 na 0 sygnału na linii P3.0 (RXD). Odbywa się to oczywiście tylko wtedy, kiedy jest ustawiony znacznik REN w rejestrze SCON (SCON.4 = 1). Stan linii jest próbkowany z częstotliwością sygnału taktującego odbiornik. Ponadto, jeśli w tej chwili są spełnione dwa następujące warunki: l. RI (SCON.0) = 0, 2. SM2 (SCON.5) = 0 lub SM2 (SCON.5) = 1 i odebrany bit D8 = 1, to następuje wpisanie odebranego znaku do rejestru wejściowego SBUF (bity od 0 do 7) i znacznika RB8 (bit 8) oraz ustawienie znacznika RI, które jest sygnałem dla procesora o gotowości do odczytania danych w SBUF. Jeżeli jeden z powyższych warunków nie jest spełniony, to odebrany znak jest ignorowany. Podobnie jak w trybie 0, ustawienie znacznika TI lub RI jest sygnałem zgłoszenia przerwania z portu szeregowego. 5

Szybkość transmisji W trybie 0 szybkość transmisji jest stała i wynosi zawsze f XTAL /12 natomiast w trybie 2 szybkość transmisji może być określona programowo, za pomocą bitu SMOD (PCON.7), i wynosi: f XTAL /64, gdy jest SMOD= 0, lub f XTAL /32, gdy jest SMOD = l. W trybach 1 i 3 szybkość transmisji może być ustalona programowo w bardzo szerokim zakresie. Jest ona bowiem określona przez częstotliwość sygnału przepełnienia licznika Tl - f OT1 (lub licznika T2 - f OT2, ale tylko w 8052/32) wykorzystanego do taktowania portu szeregowego. Jeżeli do taktowania portu szeregowego jest wykorzystany licznik T1, to szybkość transmisji jest równa: f OT1 /32 gdy SMOD = 0 f OT1 /16 gdy SMOD = 1 Częstotliwość sygnału przepełnienia licznika T1 -f OT1 --zależy od funkcji i trybu licznika (patrz punkt 2.6.1). Na przykład, jeżeli pracuje on w trybie 2 (8-bitowy licznik TL1 z automatycznym ładowaniem wartości początkowej z THl), to f OT1 = f T1 /(256-TH1) gdzie f T1 oznacza częstotliwość impulsów zliczanych przez licznik. Jeśli pracuje on jako czasomierz, to oczywiście f T1 = f XTAL /12. Przy pracy w takim trybie licznik nie wymaga żadnej ingerencji programowej, poza jednorazowym wpisaniem wartości początkowej do THl, ustawieniem trybu i uruchomieniem zliczania. W zestawiono wartości liczbowe, konieczne do uzyskania najczęściej używanych szybkości transmisji, a także inne, charakteryzujące wykorzystanie licznika T1. Tabela Błąd! Nieznany argument przełącznika. Szybkość transmisji przy wykorzystaniu do taktowania portu szeregowego licznika-czasomierza T1. Szybkość f XTAL SMOD T1 tansmisji (MHz) PCON.7 f T1 (khz) C/T Tryb Wartość poczatkowa 62500 12.0 1 1000 0 2 FF 122 12.0 0 1000 0 2 00 19200 11.059 1 921.6 0 2 FD 9600 11.059 0 921.6 0 2 FD 4800 11.059 0 921.6 0 2 FA 2400 11.059 0 921.6 0 2 F4 1200 11.059 0 921.6 0 2 E8 600 11.059 0 921.6 0 2 D0 110 6.0 0 500 0 2 72 110 12.0 0 120 (zewn.) 1 2 DE 110 12.0 0 1000 0 1 FEE3 Jeżeli f XTAL =12 MHz, to do uzyskania bardzo małych szybkości transmisji nie można wykorzystać licznika T1 pracującego jako czasomierz w trybie 2, bowiem częstotliwość f OT1 jest zbyt duża. W takim przypadku możliwe są trzy rozwiązania: - zmniejszenie f XTAL, - praca licznika w trybie 2 jako licznik impulsów zewnętrznych i dołączenie do wejścia T1 sygnału o odpowiedniej częstotliwości, - praca licznika w trybie 1 jako czasomierz, z programowym wpisywaniem wartości początkowej do całego licznika po każdym przepełnieniu. 6

Jeżeli do taktowania portu szeregowego jest wykorzystany licznik T2 (tylko w 8052/32), pracujący jako czasomierz to szybkość transmisji jest równa: f XTAL BD = 2* 16*( 65536 RDL) gdzie RLD oznacza wartość początkową, wpisaną do rejestru RLDH.RLDL. Przy f XTAL = 12 MHz jest możliwe uzyskanie szybkości transmisji w granicach od 5,72 do 375000 bodów. Układ czasowo-licznikowy Układ czasowo-licznikowy mikrokomputera 8051 zawiera dwa 16-bitowe liczniki T0 i T1. Mogą one zliczać impulsy zewnętrzne, doprowadzone do wejść, odpowiednio, T0 (P3.4) lub Tl (P3.5), spełniając w ten sposób funkcję licznika. Mogą też zliczać wewnętrzne impulsy zegarowe, w celu odmierzania opóźnień czy generowania przerwań zegarowych o zadanej częstotliwości. W tym przypadku spełniają funkcję czasomierza. Poza tym każdy z nich może pracować w jednym z czterech indywidualnie ustawionych trybów. Układ czasowo-licznikowy mikrokomputera 8052 zawiera dodatkowo trzeci - 16-bitowy licznik T2, który może pracować jako czasomierz, jako licznik impulsów zewnętrznych na wejściu T2 (P1.0) lub może być wykorzystany do określenia szybkości transmisji prowadzonej przez port szeregowy. Do programowego sterowania pracą liczników T0 i T1 służą dwa słowa sterujące: TMOD (SFR - adres 89H) i TCON (SFR - adres 88H, adresowany bitowo). Licznik T1 Licznik T0 GATE C/T M1 M0 GATE C/T M1 M0 TMOD Rys. Błąd! Nieznany argument przełącznika. Słowo sterujące TMOD Słowo TMOD (Błąd! Nieznany argument przełącznika.) służy do ustawiania trybu pracy i funkcji realizowanej przez licznik. Znaczenie bitów słowa jest następujące: M 1, M0 - ustawienie trybu pracy, przy czym: M 1 M0 = 00 - tryb 0, M 1 M0 = 01 - tryb 1, M 1 M0 = 10 - tryb 2, M 1 M0 = 11 - tryb 3; C/T - ustawienie realizowanej funkcji, przy czym C/T = 0 oznacza funkcję czasomierza, a C/T = 1 funkcję licznika impulsów zewnętrznych; GATE - uaktywnienie bramkowania zliczania zewnętrznym sygnałem z wejścia INTi (i = 0, 1). TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TCON Rys. Błąd! Nieznany argument przełącznika. Słowo sterujące TCON. W słowie TCON (Błąd! Nieznany argument przełącznika.) do kontroli i sterowania pracą liczników służą: TCON.7 (TFl) i TCON.5 (TF0) - znaczniki przepełnienia liczników, TCON.6 (TR1) i TCON.4 (TR0) - bity sterujące zliczaniem, tzn.tri = 0 (i = 0, 1) powoduje zatrzymanie licznika Ti, TRi = 1 (i = 0, 1) powoduje pracę licznika Ti. Pozostałe bity rejestru TCON związane są z pracą systemu przerwań. TCON.3 (IE1) - znacznik zgłoszenia przerwania na wejściu INT1 TCON.2 (IT1) - sterowanie sposobem zgłoszenia przerwania na wejściu INT1 TCON.1 (IE0) - znacznik zgłoszenia przerwania na wejściu INT0 TCON.2 (IT0) - sterowanie sposobem zgłoszenia przerwania na wejściu INT0 7

Jeżeli jest realizowana funkcja czasomierza (tzn. w słowie TMOD jest C/T równe 0), to zawartość licznika jest zwiększana o 1 w każdym cyklu maszynowym. Cykl jest wykonywany w ciągu 12 taktów zegara. Częstotliwość sygnału zegarowego taktującego licznik wynosi zatem f T = f XTAL /12 (f XTAL - częstotliwość rezonatora). Maksymalna częstotliwość zliczanych impulsów f CNTmax =f XTAL /24 Liczniki pracują tak samo, bez względu na realizowaną funkcję. Różne jest tylko źródło zliczanych impulsów. Uruchomienie licznika Ti (i = 0, 1) następuje po wpisaniu 1 do bitu TRi w słowie TCON. W tedy, jeśli w słowie TMOD jest GATE = 0, to do wejścia zegarowego licznika zostaje dołączone wejście Ti mikrokomputera (gdy C/`T = 1) lub wewnętrzny sygnał zegarowy (gdy C/T = 0). Uruchomiony licznik pracuje w sposób ciągły, zgodnie z ustawionym trybem. Zatrzymanie zliczania {czyli odłączenie źródła impulsów od wejścia zegarowego licznika) następuje wyłącznie w wyniku wyzerowania bitu TRi. Jeśli w słowie TMOD jest GATE równe 1, to zewnętrzne lub wewnętrzne impulsy zegarowe licznika są dodatkowo bramkowane zewnętrznym sygnałem z wejścia INTi. W tym przypadku, po programowym uruchomieniu licznika (wpisaniu jedynki do TRi), zliczanie może być sterowane zewnętrznie - licznik pracuje tylko wtedy, kiedy INTi = 0. Każdorazowo, na skutek przepełnienia licznika Ti (po zwiększeniu o 1 jego maksymalnej zawartości), jest wpisywana jedynka do znacznika TFi w słowie TCON. Jest to także sygnałem zgłoszenia przerwania wewnętrznego z licznika-czasomierza Ti. Na skutek przyjęcia przerwania (patrz punkt 2.8) znacznik TFi jest automatycznie zerowany. Jego stan może być też oczywiście testowany programowo, na przykład za pomocą rozkazu JBC. Szesnastobitowe liczniki układu czasowo-licznikowego są dostępne programowo jako rejestry specjalne: TH0 (SFR - adres 8Ch) - bardziej znaczący bajt licznika T0, TL0 (SFR - adres 8AH) - mniej znaczący bajt licznika T0, TH1 (SFR - adres 8DH) - bardziej znaczący bajt licznika T1, TL1 (SFR - adres 8BH) - mniej znaczący bajt licznika T1. Do działania na zawartościach liczników można więc używać dowolnych rozkazów z adresowaniem bezpośrednim, przy czym wykonanie jakiejkolwiek operacji na zawartości pracującego licznika nie ingeruje w proces liczenia. Należy jednak zwrócić uwagę, że przy odczytywaniu "w locie" obu bajtów licznika pracującego jako czasomierz, zawartość licznika jest zwiększana o 1 również między pobraniem pierwszego i drugiego bajtu. Są więc pobierane dwa bajty, ale przy różnej zawartości licznika. To z kolei doprowadza do błędu, kiedy między jednym a drugim odczytaniem zmieni się bardziej znaczący bajt licznika. Należy taką sytuację przewidzieć, pisząc odpowiedni program korekcji. Każdy z liczników może pracować w jednym z czterech trybów określonych przez stan bitów M0 i M1 w słowie TMOD i to niezależnie od realizowanej funkcji. Tryby 0, 1 i 2 są identyczne dla obu liczników. Tryb 3 jest różny. W trybie 0 licznik działa jako 13-bitowy, złożony z ośmiu bitów rejestru THi i bitów 3-7 (pięciu bardziej znaczących) rejestru TLi. Stan bitów 0-2 rejestru TLi nie jest określony i powinien być ignorowany. Po uruchomieniu licznika (ustawieniu TRi = 1) są zliczane impulsy (zgodnie z ustawioną funkcją), począwszy od zawartości początkowej licznika. Po osiągnięciu wartości maksymalnej (same jedynki) liczenie jest kontynuowane od zera. W trybie 0 układ jest przeważnie wykorzystywany jako czasomierz. Jego organizacja jest podobna do występującej w mikrokomputerze 8048, tzn. 8-bitowy licznik THi jest taktowany zegarem systemowym poprzez dzielnik częstotliwości przez 32 - TLi. Jeśli nie jest wymagana duża rozdzielczość pomiaru, to układ może być użyty do odmierzania opóźnień i generowania przerwań zegarowych. W trybie 1 struktura licznika-czasomierza jest taka sama, jak w trybie 0 z tym, że pracuje cały 16- bitowy licznik. W trybie I układ jest wykorzystywany zarówno jako czasomierz, jak i jako licznik impulsów zewnętrznych. Przy użyciu funkcji czasomierza do generowania przerwań zegarowych konieczne jest - po każdym przerwaniu - programowe ładowanie do licznika wartości początkowej, określającej częstotliwość przerwań. Ponieważ czas od chwili przepełnienia licznika (zgłoszenia 8

przerwania) do momentu jego przyjęcia jest różny (zależny od organizacji oprogramowania i często nieznany, zwykle kilka lub kilkanaście cykli maszynowych), a licznik pracuje cały czas, to załadowanie wartości początkowej do mniej znaczącego bajtu kasuje naliczoną wartość. To z kolei powoduje wystąpienie pewnego błędu w odmierzaniu okresu przerwań. Aby go uniknąć, przy wpisywaniu wartości początkowej mniej znaczącego bajtu -- o ile nie jest ona zerowa - należy uwzględnić (dodać) bieżącą zawartość licznika. W trybie 2 licznik Ti pracuje jako licznik 8-bitowy (TLi) z automatycznym wpisywaniem wartości początkowej zapisanej w THi. Przepisanie zawartości THi do TLi następuje w chwili przepełnienia licznika. Jednocześnie jest ustawiany znacznik TFi. Zawartość THi pozostaje bez zmiany. Wartość początkowa może być wpisywana do THi i zmieniana programowo. Licznik pracujący w trybie 2 może być użyty dowolnie, zależnie od potrzeb. Szczególnie wygodne jest wykorzystanie licznika do wytwarzania przerwań zegarowych o zadanym okresie, przy czym maksymalny okres przerwań w tym trybie wynosi 256 cykli maszynowych, czyli 256 µs przy zegarze 12 MHz. Tryb 3 jest różny dla liczników T0 i Tl. Licznik Tl w trybie 3 nie pracuje jest zatrzymany, tak jakby TRl było równe 0. Poszczególne bajty licznika T0, tzn. TH0 i TL0, działają w tym trybie jako dwa niezależne 8-bitowe liczniki. Bajt TL0 może być wykorzystany jako czasomierz lub jako licznik impulsów z wejścia T0. Jest wtedy sterowany za pomocą bitów sterujących licznika T0: C/T, GATE, TR0, INT0 i TF0 - podobnie jak licznik T0 w trybie 0 i l. Natomiast TH0 może pracować tylko jako czasomierz (zliczanie wewnętrznych impulsów zegarowych). Jest on przy tym sterowany (start, stop) za pomocą bitu TR1, ustawia znacznik przepełnienia TF1 - są tu więc używane bity sterujące licznika T1. Tryb 3 jest stosunkowo rzadko wykorzystywany. Jest on przewidziany dla mikrokomputera 8051 w zasadzie wyłącznie na wypadek, kiedy licznik T1 (pracujący np. w trybie 2) jest użyty do określenia szybkości transmisji portu szeregowego, a do innych celów są potrzebne dwa niezależne liczniki. Licznik T2 tylko (8032/32) Układ czasowo-licznikowy mikrokomputerów 8052/32 zawiera dodatkowy 16-bitowy licznik T2: TH2, (SFR - adres 0CDH) i TL2 (SFR - adres 0CCH). Licznik może pełnić funkcję czasomierza lub licznika impulsów zewnętrznych podanych na wejście T2 (P1.0). Zasada pracy licznika T2 jest w obu przypadkach podobna do zasady pracy liczników T0 i T1. Przy realizacji funkcji czasomierza licznik jest taktowany wewnętrznym sygnałem zegarowym o częstotliwości f XTAL /12. Jego zawartość jest zwiększana w każdym cyklu maszynowym. Przy realizacji funkcji licznika impulsów zewnętrznych zwiększenie zawartości licznika o 1 następuje po wykryciu opadającego zbocza sygnału na wejściu T2. Z licznikiem T2 jest związany 16-bitowy rejestr RLD: RLDH (SFR - adres OCBH) i RLDL (SFR - adres OCAH). Jest on, w zależności od trybu pracy licznika T2, rejestrem wartości początkowej dla licznika lub rejestrem zatrzaskowym, do którego jest wpisywana zawartość licznika. Do sterowania pracą licznika T2 służy słowo sterujące T2CON (SFR - adres 0CBH, adresowane bitowo), przedstawione na Błąd! Nieznany argument przełącznika.. TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2 9 T2CON Rys. Błąd! Nieznany argument przełącznika. Słowo sterujące T2CON Znaczenie bitów jest następujące: T2CON.0 (CP/RL2) - ustawienie trybu, przy czym: CP/RL2 = 0 - praca z automatycznym wpisywaniem wartości początkowej, CP/RL2 = 1 - praca z zatrzaskiwaniem zawartości licznika; T2CON.1 (C/T2) - ustawienie realizowanej funkcji, przy czym: C/T2 = 0 oznacza funkcję czasomierza, C/T2 = 1 - funkcję licznika impulsów zewnętrznych; T2CON.2 (TR2) - sterowanie zliczaniem, przy czym: TR2 = 1 oznacza zliczanie,

TR2 = 1 - jego zatrzymanie; T2CON.3 (EXEN2) - znacznik uaktywnienia wejścia T2EX; T2CON.4 (TCLK) - przypisanie T2 jako źródła impulsów zegarowych dla nadajnika (TCLK = 1) portu szeregowego; T2CON.5 (RCLK) - przypisanie T2 jako źródła impulsów zegarowych dla odbiornika (RCLK = 1) portu szeregowego ; T2CON.6 (EXF2) - znacznik opadającego zbocza impulsu na wejściu T2EX; aktywny, gdy EXEN2 = 1; zgłoszenie przerwania; T2CON.7 (TF2) - znacznik przepełnienia; zgłoszenie przerwania. Niezależnie od realizowanej funkcji, określonej przez C/T2, licznik T2 może być wykorzystywany jako licznik-czasomierz, gdy w słowie T2CON: TCLK = 0 i RCLK = 0, albo też jako generator impulsów zegarowych dla portu szeregowego gdy w słowie T2CON: TCLK = 1 lub RCLK = l. Przy CP/RL2 = 0 licznik T2 pracuje z automatycznym wpisywaniem wartości początkowej z rejestru RLD. Wpisanie wartości początkowej następuje na skutek pojawienia się sygnału przepełnienia licznika. Sygnał ten ustawia równocześnie znacznik przepełnienia TF2 (T2CON.7). Działanie licznika T2jest więc w tym przypadku podobne, jak liczników T0 i Tl w trybie 2. Ponadto, jeżeli w słowie T'2CON jest EXEN2 równe l, to załadowanie wartości początkowej do licznika następuje również na skutek opadającego zbocza sygnału dołączonego do wejścia T2EX (P1.1). To powoduje równocześnie ustawienie znacznika EXF2 (T2CON.6) i daje możliwość synchronizowania pracy licznika sygnałem zewnętrznym. Przy CP/RL2 = 1 licznik-czasomierz liczy zawsze mod 2 16, ustawiając przy przepełnieniu znacznik TF2. Działa zatem podobnie, jak liczniki T0 i Tl w trybie 1. Dodatkowo, jeśli w słowie T2CON jest EXEN2 równe 1, to opadające zbocze sygnału dołączonego do wejścia T2EX (P1.1) powoduje przepisanie zawartości licznika do rejestru RLD i ustawienie znacznika EXF2. Umożliwia to np. łatwy i dokładny pomiar okresu sygnału zewnętrznego. W obu trybach ustawienie znacznika TF2 lub EXF2 jest sygnałem zgłoszenia przerwania z licznika-czasomierza T2. Przyjęcie tego przerwania nie powoduje automatycznego wyzerowania znaczników. Ich stan może więc być odczytany w programie obsługi, w celu określenia przyczyny przerwania. Znaczniki powinny zostać wyzerowane programowo. Jeżeli w słowie T2CON: TCLK = 1 lub RCLK = l, to licznik T2 pracuje jako generator sygnału taktującego port szeregowy, pracujący w trybie 1 lub 3. Licznik działa jako licznik-czasomierz z automatycznym wpisywaniem wartości początkowej z rejestru RLD, zliczający impulsy zewnętrzne podane na wejście T2 (P1.0) lub wewnętrzny sygnał zegarowy o częstotliwości f XTAL /2. Sygnał przepełnienia nie ustawia teraz znacznika TF2. Po podzieleniu częstotliwości tego sygnału przez 16 określa on szybkość transmisji nadajnika (gdy TCLK = 1) i odbiornika (gdy RCLK = 1) w porcie szeregowym. Jeżeli w tym trybie v słowie T2CON jest EXEN2 równe 1, to opadające zbocze sygnału dołączonego do wejścia T2EX (P1.1) powoduje tylko ustawienie znacznika EXF2 i zgłoszenie przerwania. Wejście T2EX może więc być użyte jako dodatkowe wejście przerywające. System przerwań System przerwań mikrokomputerów 8051/52 może przyjmować zgłoszenia następujących przerwań: zewnętrznych, tzn.: - z wejścia INT0 (IE0 - TCON.1) - z wejścia INT1 (IE1 - TCON.3) z układu czasowo-licznikowego: - przepełnienie licznika T0 (TF0 - TCON.5) - przepełnienie licznika Tl (TF1 - TCON.7) - tylko w 8052/32 - przepełnienie licznika T2 (TF2 -T2CON.7) lub opadające zbocze impulsu na wejściu T2EX (EXF2 - T2CON.6) z portu szeregowego: - koniec nadawania znaku (TI - SCON.1) lub koniec odbierania znaku (RI - SCON.0). 10

Z każdą przyczyną przerwania jest związany wyżej wymieniony znacznik. Wpisanie jedynki do odpowiedniego znacznika jest zgłoszeniem przerwania. Wyzerowanie znacznika powoduje skasowanie zgłoszenia. Odbywa się to automatycznie - odpowiednio przy wystąpieniu przyczyny przerwania i przy jego przyjęciu (jedynie znaczniki TI, RI oraz TF2 i EXF2 nie są zerowane automatycznie). Wszystkie wymienione znaczniki mogą być też ustawiane i zerowane programowo. Skutek jest taki sam, tzn. zgłoszenie lub skasowanie zgłoszenia przerwania. System przerwań może być włączany i wyłączany oraz każde zgłoszenie przerwania może być indywidualnie zamaskowane przez ustawienie odpowiedniego bitu w słowie sterującym IE (SFR - adres 0ABH, adresowany bitowo), pokazanym na Błąd! Nieznany argument przełącznika.a. Wyzerowanie bitu w IE oznacza zablokowanie, wpisanie jedynki - odblokowanie odpowiadającego temu bitowi zgłoszenia przerwania. Po zainicjowaniu mikrokomputera (RESET) słowo sterujące IE jest wyzerowane, tzn. system przerwań jest wyłączony, a wszystkie przerwania zamaskowane. a) EA - ET2 ES ET1 EX1 ET0 EX0 IE b) - - PT2 PS PT1 PX1 PT0 PX0 IP Rys. Błąd! Nieznany argument przełącznika. Sterowanie systemem przerwań. Tabela Błąd! Nieznany argument przełącznika. Bity sterujące systemem przerwań. IE IP Przerwanie Priorytet IE.0 - EX0 IP.0 - PX0 zewnętrzne INT0 najwyższy IE.1 - ET0 IP.1 - PT0 od licznika / czasomierza T0 IE.2 - EX1 IP.2 - PX1 zewnętrzne INT1 IE.3 - ET1 IP.3 - PT1 od licznika / czasomierza T1 IE.4 - ES IP.4 - PS od portu szeregowego IE.5 - ET2 IP.5 - PT2 od licznika / czasomierza T1 najniższy IE.6 IP.6 IE.7 - EA IP.7 system przerwań Każde z przerwań, przez ustawienie lub wyzerowanie właściwego bitu w słowie sterującym IP (SFR -adres 0B8H), może być programowo umieszczone na wyższym (po ustawieniu bitu) lub niższym (po wyzerowaniu bitu) poziomie priorytetu. Format słowa IP pokazano na Błąd! Nieznany argument przełącznika.b, a przyporządkowanie bitów przyczynom przerwań - Błąd! Nieznany argument przełącznika.. W razie jednoczesnego zgłoszenia dwóch przerwań, jako pierwsze będzie przyjęte przerwanie z wyższego poziomu priorytetu. Natomiast, przy jednoczesnym zgłoszeniu kilku przerwań umieszczonych na tym samym poziomie, o kolejności przyjęcia zadecyduje sztywno ustalony priorytet zgłoszeń, przedstawiony w Błąd! Nieznany argument przełącznika.. Ponadto, umieszczenie przerwań na danym poziomie priorytetu decyduje o możliwości przerywania programów obsługi innych przerwań. W czasie wykonywania programu obsługi przerwania z niższego poziomu priorytetu będzie przyjęte zgłoszenie przerwania z wyższego poziomu (oczywiście jeżeli nie jest zablokowane), a nie będzie przyjęte zgłoszenie przerwania z niższego poziomu. W czasie wykonywania programu obsługi przerwania z wyższego poziomu priorytetu nie będzie przyjęte żadne zgłoszenie przerwania. Program obsługi przerwania z wyższego poziomu jest nieprzerywalny. Jeżeli w słowie IE jest EA równe 1 (włączony system przerwań), to w każdym cyklu maszynowego są przeglądane znaczniki zgłoszenia nie zamaskowanych przerwań. Wykrycie zgłoszenia (ustawienia któregoś ze znaczników) spowoduje, że jeśli nie jest spełniony żaden z wymienionych niżej warunków: - wykonywany w danej chwili cykl maszynowy nie jest ostatnim w cyklu rozkazowym; przerwanie zostaje przyjęte po zakończeniu wykonywania bieżącego rozkazu; - w danej chwili jest wykonywany rozkaz RETI lub rozkaz działający na zawartości słów sterujących IE albo IP; przerwanie zostaje przyjęte dopiero po zakończeniu wykonywania następnego rozkazu (jeżeli nie jest to RETI lub rozkaz działający na IP albo IE); 11

- w danej chwili jest wykonywany program obsługi przerwania z poziomu priorytetu wyższego lub równego temu, na którym jest umieszczone zgłoszone przerwanie; zostaje ono przyjęte dopiero po zakończeniu programu obsługi (wykonaniu rozkazu RETI). to w następnym cyklu maszynowym rozpocznie się wykonywanie cyklu przyjęcia przerwania o najwyższym priorytecie ze zgłoszonych. Podczas cyklu przyjęcia przerwania są wykonywane następujące operacje: - ustawienie wewnętrznego przerzutnika poziomu przerwania (są dwa takie przerzutniki odpowiadające wyższemu i niższemu poziomowi priorytetu, ich stan jest sprawdzany jako trzeci wymieniony wyżej warunek), - wyzerowanie znacznika zgłoszenia przyjętego przerwania (nie są zerowane znaczniki TI, RI oraz TF2 i EXF2), - zapisanie na stosie zawartości licznika rozkazów PC (nie jest zapisywana zawartość słowa stanu PSW), - wpisanie do licznika rozkazów adresu początku programu obsługi przerwania: 0003H - dla przerwania zewnętrznego INT0, 000BH - dla przerwania z licznika-czasomierza T0, 0013H - dla przerwania zewnętrznego INT1, 00IBH - dla przerwania z licznika-czasomierza T1, 0023H - dla przerwania z portu szeregowego, 002BH - dla przerwania z licznika-czasomierza T2. Program obsługi przerwania musi być zakończony rozkazem powrotu z przerwania - RETI. Do chwili wykonania tego rozkazu nie zostaje przyjęte zgłoszenie żadnego przerwania z poziomu równego lub niższego niż poziom obsługiwanego przerwania. Wykonanie rozkazu RETI powoduje wyzerowanie przerzutnika poziomu, ustawionego przy przyjęciu przerwania, oraz zdjęcie ze stosu adresu powrotu (dwa bajty) i wpisanie go do licznika rozkazów. 12

Interfejs szeregowy w komputerach PC Mikrokomputery klasy IBM PC AT wyposażone są w sterownik interfejsu RS-232C przeznaczony do asynchronicznej transmisji znakowej. Sterownik ten występuje w postaci oddzielnego modułu dołączanego do płyty głównej przez złącze magistrali wejścia-wyjścia, jakkolwiek w niektórych płytach jest on wbudowany na stałe. Bez względu na fizyczna postać sterownika, od strony programowej widziany jest on zawsze tak samo. Standardowo moduł interfejsu RS-232C komputerów klasy IBM PC zawiera dwa programowane łącza szeregowe typu DTE przeznaczone do pracy asynchronicznej. Występują w nich wszystkie najważniejsze sygnały interfejsu, a więc dane nadawane TxD, odbierane RxD, sygnały sterowania modemem RTS i DTR oraz sygnały kontrolne, odbierane z modemu CTS, DSR, DCD i RI. Łącza te dostępne są poprzez porty o nazwach COMI i COM2. Przygotowanie łącza szeregowego do pracy wymaga kilku ważnych ustaleń. Przede wszystkim trzeba określić parametry transmisji (szybkość, długość znaku, rodzaj kontroli parzystości itp.), zapewnić właściwy poziom sygnałów sterowania modemem, ustalić sposób komunikacji ze sterownikiem przy odbiorze i nadawaniu znaków (czy przez przerwania, czy przez testowanie znaczników). Podczas nadawania i odbierania znaków trzeba wprowadzać je odpowiednio do bufora nadajnika i odczytywać z bufora odbiornika, sprawdzać, czy nie wystąpiły błędy, a ponadto nadzorować stan sygnałów kontrolnych odbieranych z modemu. Widać, że współpraca procesora ze sterownikiem interfejsu szeregowego nie jest. prosta i musi odbywać się za pośrednictwem nie jednego a kilku rejestrów. I tak jest w istocie każdemu łączu szeregowemu przypisanych jest 8 adresów w przestrzeni we-wy tworzących port. W komputerze IBM PC zarezerwowano cztery porty (COM 1, COM2, COM3 i COM4) dla łącz szeregowych oraz dwie linie przerwań IRQ3, lrq4. Przyporządkowanie adresów we-wy wymienionym portom oraz linii przerwań przedstawiono w Błąd! Nieznany argument przełącznika.. Tabela Błąd! Nieznany argument przełącznika. Obszary adresowe portów sterownika interfejsu szeregowego. Nazwa portu Obszar adresowy Przyporządkowana linia przerwania COM1 03F8h do 03FFh IRQ4 COM2 02F8h do 02FFh IRQ3 COM3 03E8h do 03Efh - COM4 02E8h do 02EFh - Nadawanie znaków odbywa się za pośrednictwem dwóch rejestrów: bufora nadajnika (TBR) oraz rejestru przesuwającego (TSR). Do bufora nadajnika zapisywany jest (przez procesor) znak przeznaczony do wysłania. Następnie, po uzupełnieniu znaku o bity sterujące, cała jednostka informacyjna wprowadzana jest do rejestru przesuwającego nadajnika, który posiada wejście równoległe i wyjście szeregowe. Kolejne bity jednostki informacyjnej wyprowadzane są z rejestru przesuwającego zgodnie z taktem nadawania TxC i poprzez nadajnik linii pojawiają się na wyjściu TxD. Bity o wartości logicznej 1 reprezentowane są na zacisku TxD złącza interfejsu napięciem ujemnym -U, a bity o wartości 0, napięciem +U. Nadajniki linii zasilane są napięciem -12 V, +12 V, co sprawia, że napięcia -U, +U wynoszą odpowiednio około -10 V, + IOV. W odbiorze znaków również pośredniczą dwa rejestry. Pojawiająca się na zacisku RxD jednostka informacyjna wprowadzana jest (poprzez odbiornik linii) na wejście rejestru szeregowo-równoległego. Po skompletowaniu całej jednostki, jej część informacyjna przekazana zostaje do bufora odbiornika (RBR), skąd następuje odczyt znaku przez procesor. Odbiorowi znaku towarzyszy kontrola formatu jednostki informacyjnej oraz błędów transmisji. Informacje o zajętości bufora nadajnika, obecności danej w buforze odbiornika oraz o błędach transmisji dostępne są w rejestrze stanu transmisji (LSR). W sterowniku interfejsu szeregowego komputera IBM PC występuje dziesięć ośmiobitowych rejestrów, przy czym w niektórych rejestrach nie wszystkie bity są wykorzystane. 13

Adresowanie rejestrów Każdemu rejestrowi sterownika interfejsu szeregowego przypisany jest adres w obszarze adresów zarezerwowanych dla danego portu. Pierwszy adres w tym obszarze (adres bazowy) stanowi odniesienie dla adresów rejestrów portu. W przypadku portu COMI adres bazowy wynosi 03F8, portu COM2 02F8, portu COM3 03E8 i portu COM4 02E8. Wygodnie jest podawać adres rejestru sterownika w postaci: adres bazowy + przesunięcie względem adresu bazowego W (...) przedstawiono zestaw rejestrów sterownika interfejsu szeregowego z podaniem przesunięcia adresu rejestru względem adresu bazowego. Do określenia przesunięcia adresu służą tylko trzy linie adresowe (A2,Al,A0), co pozwala zaadresować jedynie osiem różnych rejestrów. Jednak w sterowniku interfejsu szeregowego jest więcej rejestrów. Konieczne było więc wprowadzenie dodatkowego bitu adresowego, którego rolę pełni siódmy bit w rejestrze parametrów transmisji (oznaczenie LCR7). Takie samo przesunięcie (000) względem adresu bazowego posiadają: bufor nadajnika, bufor odbiornika oraz mniej znaczący bajt dzielnika. Bufory nadajnika i odbiornika odróżnia rodzaj wykonywanych operacji: do bufora nadajnika można tylko zapisywać, a z bufora odbiornika tylko odczytywać. Można więc dla obu tych rejestrów przypisać takie samo rozszerzenie adresu LCR7=0. Aby odróżnić mniej znaczący bajt dzielnika, rejestr przeznaczony również tylko do zapisu, od bufora nadajnika, konieczne jest wcześniejsze ustawienie LCR7=l. Podobnie, w przypadku rejestru aktywacji przerwań i rejestru bardziej znaczącego bajtu dzielnika, których przesunięcie adresu wynosi 001, ostatecznego wyboru rejestru dokonuje się za pośrednictwem bitu LCR7. Tabela Błąd! Nieznany argument przełącznika. Adresacja rejestrów interfejsu szeregowego. Przesunięcie względem adresu bazowego Rozszerzenie Nazwa rejestru A2 A1 A0 adresu 0 0 0 0 Bufor nadajnika - tylko do zapisu (TB) 0 0 0 0 Bufor odbiornika - tylko do odczytu (RB) 0 0 0 1 Mniej znaczący bajt dzielnika 0 0 1 0 Rejestr aktywacji przerwań (IER) 0 0 1 1 Bardziej znaczący bajt dzielnika 0 1 0 - Rejestr identyfikacji przerwań (IDR) 0 1 1 - Rejestr parametrów transmisji (LCR) 1 0 0 - Rejestr sterowania modemem (MCR) 1 0 1 - Rejestr stanu transmisji (LSR) 1 1 0 - Rejestr stanu modemu (MSR) Przeznaczenie rejestrów Bufor nadajnika (TBR) jest rejestrem pośredniczącym w nadawaniu znaku. Przeznaczony do wysłania znak należy zapisać do TBR, po uprzednim sprawdzeniu, czy jest on wolny. O zajętości bufora nadajnika informuje bit 5 w rejestrze LSR (znacznik zajętości bufora). Każdy zapis do TBR powoduje ustawienie bitu LSR5 na zero, co oznacza zajętość bufora. Ustawienie znacznika zajętości bufora nadajnika na 1 odbywa się automatycznie, po przepisaniu znaku z TBR do rejestru przesuwającego nadajnika. LSR5=1 informuje, że bufor jest gotowy do przyjęcia następnego znaku. Bufor odbiornika (RBR) jest rejestrem pośredniczącym w odbiorze znaku. Po skompletowaniu znaku w rejestrze przesuwającym odbiornika, zostaje on przepisany do bufora odbiornika, co sygnalizowane jest ustawieniem bitu 0 w rejestrze LSR na 1. Odczyt bufora RBR powoduje skasowanie bitu LSR0. Jeżeli odczyt bufora odbiornika nie nastąpi przed odebraniem kolejnego znaku, występuje "błąd nie odebrania znaku" (OE - Overrun Error), który oznacza utratę znaku poprzedniego, spowodowaną zapisaniem do bufora odbiornika następnego odebranego znaku. 14

Rejestr parametrów transmisji (LCR) określa format jednostki informacyjnej, tzn. długość pola danych, ilość bitów stopu oraz, czy występuje bit kontrolny i jaki jest jego rodzaj (bit parzystości lub nieparzystości). Ponadto jeden z bitów pozwala na przerwanie nadawania i wymuszenie stanu 0 na wyjściu TxD (jest to tak nazywany sygnał BREAK). Bit siódmy (LCR7), jak już powiedziano, stanowi rozszerzenie adresu. Bit Funkcja Wartość i znaczenie 1-0 Długość pola danych 00-5 bitów 01-6 bitów 10-7 bitów 11-8 bitów 2 Liczba bitów stopu 0-1 bit stopu 1-2 bity stopu 4-3 Czy występuje kontrola parzystości rodzaj kontroli 5 Wymuszenie stanu bitu kontrolnego na 0 lub 1 w zależności od rodzaju kontroli x0 - brak bitu kontrolnego 01 - bit kontroli nieparzystości (odd parity) 11 - bit kontroli parzystości (even parity) 0 - bit kontrolny określany zgodnie z zasadą parzystości lub nieparzystości, zależnie od stanu bitów LCR(4) i LCR(3) 1 - jeżeli LCR(4)=0 i LCR(3)=1, to stan bitu kontrolnego wynosi zawsze 1. Jeżeli LCR(4)=1 i LCR(3)=1, to stan bitu kontrolnego wynosi zawsze 0 6 Przerwanie transmisji (sygnał BREAK) 0 - normalna transmisja 1 - wymuszenie stanu 0 na wyjściu TxD 7 Rozszerzenie adresu wykorzystanie bitu wg Błąd! Nieznany argument przełącznika. Rejestr stanu transmisji (LSR) informuje, czy zajęty jest bufor danych oraz rejestr przesuwający nadajnika, czy w buforze odbiornika znajduje się gotowy do odczytania znak, jakie wystąpiły błędy związane z odbiorem znaku oraz, że na wejściu szeregowym został wykryty sygnał BRĘAK. Odczyt rejestru LSR kasuje bity określające rodzaj błędu oraz bit sygnalizujący wykrycie sygnału BREAK. Bit Funkcja Wartość i znaczenie 0 Informacja o skompletowaniu odbieranego znaku 1 - znak w buforze odbiornika gotowy do odczytu 1 Sygnalizacja błędu OE 1 - nie odczytanie odebranego znaku przed skompletowaniem znaku następnego 2 Sygnalizacja błędu PE 1 - błąd parzystości (nieparzystości) 3 Sygnalizacja błędu FE 1 - ilość bitów w ramce niezgodna z ustalonym formatem 4 Sygnalizacja wystąpienia sygnału BREAK 1 - odebranie sygnału BREAK na wejściu RxD 5 Informacja o zajętości bufora nadajnika 1 - bufor nadajnika gotowy do przyjęcia następnego znaku 6 Sygnalizacja wysłania znaku 1 - opróżniony rejestr przesuwający nadajnika, cała jednostka informacyjna wysłana 7 Bit niewykorzystywany Wartość bitu stale równa 0 15

Rejestr sterowania modemu (MCR) pozwala ustalić poziomy sygnałów DTR i RTS, jak również wprowadzić sygnał przerwania INTRPT na linię IRQ3 lub IRQ4. Jeden z bitów rejestru przewidziano do zamknięcia pętli sprzężenia zwrotnego, co umożliwia samo testowanie sterownika interfejsu szeregowego Stan aktywny na linii DTR lub RTS (wysoki poziom napięcia) wymuszany jest poprzez zapis 1 na bit odpowiadający danemu sygnałowi. Nadawanie i odbiór nie są sprzętowo uzależnione od stanu sygnałów DTR i RTS, co oznacza, że można nadawać i odbierać znaki przy nieaktywnym stanie tych sygnałów. Przy współpracy z modemem, lub innym urządzeniem symulującym modem, należy oczywiście sterować liniami DTR i RTS zgodnie z protokołem komunikacji z modemem. Bit Funkcja Wartość i znaczenie 0 Ustawienie poziomu sygnału na wyjściu DTR 0 - wyjście nieaktywne (-U) 1 - wyjście aktywne (+U) 1 Ustawienie poziomu sygnału na wyjściu RTS 0 - wyjście nieaktywne (-U) 1 - wyjście aktywne (+U) 2 Bit niewykorzystywany 3 Odblokowanie przerwania od portu 1 - przerwania odblokowane 4 Testowanie sterownika 1 - tryb samotestowania 0 - normalna praca 7-5 Bity niewykorzystywane Rejestr stanu modemu (MSR) informuje o stanie sygnałów kontrolnych odbieranych z modemu (DSR, CTS, DCD, RI) oraz o zmianach tych sygnałów. Stan aktywny sygnałów DSR, CTS, RI oraz DCD (wysoki poziom napięcia w linii transmisyjnej) reprezentowany jest jedynką logiczną na odpowiadających im bitach. Odczyt rejestru MSR kasuje znaczniki informujące o wystąpieniu zmiany sygnałów. Bit Funkcja Wartość i znaczenie 0 Zmiana stanu linii CTS 1 - na linii nastąpiła zmiana sygnału 1 Zmiana stanu linii DSR 1 - na linii nastąpiła zmiana sygnału 2 Zmiana stanu linii RI 1 - na linii nastąpiła zmiana sygnału 3 Zmiana stanu linii DCD 1 - na linii nastąpiła zmiana sygnału 4 Stan linii CTS 1 - napięcie U+ na linii 5 Stan linii DSR 1 - napięcie U+ na linii 6 Stan linii RI 1 - napięcie U+ na linii 7 Stan linii DCD 1 - napięcie U+ na linii Rejestr aktywacji przerwań (IER) służy do maskowania przerwań występujących w sterowniku interfejsu szeregowego. Są cztery źródła przerwania: przerwanie po skompletowaniu znaku w buforze odbiornika, opróżnienie bufora nadajnika, 7błędy związane z odbiorem znaku (błąd parzystości PE, formatu ramki FE, błąd nie odczytania znaku przed zakończeniem odbioru następnego znaku OE, przerwanie transmisji sygnałem BREAK), zmiana sygnału kontrolnego (DSR, CTS, DCD lub RI), odbieranego z modemu. Bit Funkcja Wartość i znaczenie 0 maskowanie przerwania odbiornika 1- odblokowanie przerwania po skompletowaniu znaku 1 maskowanie przerwania nadajnika 1 - odblokowanie przerwania po opróżnieniu bufora nadajnika 2 maskowanie przerwania detektora błędów 1 - odblokowanie przerwania wystawianego po wykryciu jednego z błędów (OE, PE, FE, BREAK) 3 maskowanie przerwania od zmiany sygnałów kontrolnych odbieranych z modemu 7-4 Bity niewykorzystane 1 - odblokowanie przerwania wystawianego po wystąpieniu zmiany stanu na jednej z linii DSR, CTS, RI, DCD 16

Rejestr identyfikacji przerwań (IDR) umożliwia stwierdzenie, czy istnieje aktywne przerwanie oraz rozpoznanie jego przyczyny. Znacznikiem przerwania jest bit IDR0, którego stan informuje o istnieniu aktywnego przerwania. Odczytanie rejestru IDR powoduje ustawienie znacznika przerwania na 1, co oznacza brak aktywnego przerwania. Bit Funkcja Wartość i znaczenie 0 Sygnalizacja wystąpienia przerwania 0 - istnieje aktywne przerwanie oczekujące na obsługę 1 - brak przerwania 2-1 Określenie przyczyny przerwania 00 - przerwanie od zmiany stanu któregoś z sygnałów kontrolnych odbieranych z modemu (najniższy priorytet) 01 - przerwanie po opróżnieniu bufora nadajnika 10 - przerwanie po skompletowaniu znaku w buforze odbiornika 11 - przerwanie po wykryciu błędów (najwyższy priorytet) 7-3 Bity niewykorzystane Przygotowanie sterownika do pracy Przygotowanie sterownika do pracy polega na określeniu parametrów transmisji oraz sposobu współpracy sterownika z procesorem. Konieczna jest również inicjalizacja rejestru sterowania modemem. Format jednostki informacyjnej programuje się za pośrednictwem rejestru LCR. Szybkość transmisji fm obliczana jest ze wzoru: f clk f m = 16* N gdzie f clk = 1,8432 MHz stanowi częstotliwość zegara sterownika, a N dzielnik, którego wartość należy wprowadzić do rejestrów starszego i młodszego bajtu dzielnika. Podaną zależność można wykorzystać do wyznaczenia N dla ustalonej szybkości transmisji. W Błąd! Nieznany argument przełącznika. podano wartości dzielnika dla kilku typowych szybkości transmisji. Zapisanie 0 do rejestrów dzielnika N powoduje zablokowanie transmisji. Tabela Błąd! Nieznany argument przełącznika. Wartości dzielnika dla róznych szybkości transmisji.szybkość Dzielnik N transmisji dziesiętnie hexadecymalnie młodszy bajt starszy bajt 150 768 03h 00h 300 384 01h 80h 600 192 00h C0h 1200 96 00h 60h 2400 48 00h 30h 3600 32 00h 20h 4800 24 00h 18h 9600 12 00h 0Ch 19200 6 00h 06h 28800 4 00h 04h 57600 2 00h 02h 115200 1 00h 01h 17

Współpraca sterownika z procesorem może odbywać się przez przerwania lub na drodze programowej, poprzez testowanie znaczników LSR5 (przy nadawaniu) i LSR0 (przy odbiorze). Komunikacja przez przerwania wymaga inicjalizacji rejestrów IER oraz MCR. Należy pamiętać o konieczności ustawienia bitu MCR3, w celu uaktywnienia przerwań. Nadawanie może być realizowane z wykorzystaniem przerwania lub poprzez testowanie znacznika zajętości bufora nadajnika (bit LSR5). Jeżeli LSR5=1, to można wpisać kolejny znak do bufora nadajnika. Znak ten zostaje przepisany do rejestru przesuwającego nadajnika, co następuje jednak dopiero po opróżnieniu rejestru przesuwającego. O zakończeniu nadawania znaku informuje bit 6 rejestru LSR. LSR6=1 oznacza, że rejestr przesuwający zakończył nadawanie poprzedniego znaku i jest gotowy do przesłania kolejnego znaku. Taki sposób współpracy procesora ze sterownikiem interfejsu szeregowego wymaga ciągłej kontroli wspomnianych bitów rejestru stanu transmisji, mimo to jest powszechnie stosowany w przypadku nadawania niedługich ciągów znaków. Nadawanie z wykorzystaniem przerwania wymaga odblokowania przerwania od nadajnika poprzez ustawienie bitu 1 w rejestrze aktywacji przerwań na 1. Po zwolnieniu bufora nadajnika zostanie wygenerowane przerwanie, którego obsługa polega jedynie na wpisaniu do bufora nadajnika kolejnego znaku przeznaczonego do wysłania. Jeżeli w sterowniku zezwolono również na przerwania pochodzące z innych źródeł (na przykład z odbiornika, detektora błędów lub modemu), to przed obsługą przerwania należy określić jego przyczynę poprzez sprawdzenie stanu bitów 1 i 2 rejestru IDR. Odbiór znaków przez procesor można również przeprowadzić na zasadzie przerwania generowanego przez odbiornik lub poprzez testowanie znacznika LSR0, informującego o obecności znaku w buforze odbiornika. Testowanie znacznika nie jest dobrym wyborem. Dla uniknięcia błędu OE, konieczne jest badanie bitu LSR0 w odstępach nie dłuższych od czasu trwania jednostki informacyjnej. Z drugiej strony, znaki mogą pojawiać się rzadko lub wcale, co sprawia, że procesor będzie marnował czas w pętli oczekiwania na znak. Najlepsza jest więc współpraca układu odbiorczego z procesorem z wykorzystaniem przerwania. Wymaga ona odblokowania przerwania od odbiornika poprzez ustawienie bitu 0 w rejestrze IER na 1. Przerwanie generowane jest po skompletowaniu jednostki informacyjnej w rejestrze przesuwającym odbiornika i zapisaniu znaku obecnego na polu danych do rejestru buforowego odbiornika Odbiorowi jednostki informacyjnej towarzyszy sprawdzenie, czy jej format zgadza się z formatem ustalonym podczas inicjalizacji sterownika (FE - Framing Error) oraz, czy nie wystąpiła zmiana bitu kontrolnego (PE - Parity Error). Błędy odbioru mogą być również źródłem przerwania, którego odblokowanie wymaga ustawienia bitu IER2 na 1. 18