3.2. Interfejs RS-232C

Spis treści


Wprowadzenie

Interfejs RS-232C jest jednym z interfejsów szeregowych. Występuje standardowo we wszystkich komputerach zgodnych z IBM PC i nowszych. W interfejs ten wyposażonych jest wiele urządzeń pomiarowych, w tym jednak przypadku nie zawsze interfejsy te są w pełni zgodne ze specyfikacją standardu (szczególnie jeśli chodzi o topografię połączeń).
Sygnały przekazywane łączem RS232C można podzielić na trzy grupy:
  • danych: RxD, TxD
  • sterujących urządzeniem zewnętrznym: RTS, DTR
  • kontrolne (odbierane z urządzenia): CTS, DSR, RI, DCD (lub RLSD).
Istnieją dwie podstawowe metody obsługi (dostępu) do portu szeregowego: pierwsza polega na bezpośrednim manipulowaniu rejestrami, druga opiera się na odwołaniu do funkcji BIOS'u (jest ona bezpieczniejsza, ale nakłada na użytkownika pewne ograniczenia).


Obsługa
przez
bezpośredni
dostęp do
rejestrów.

Każdemu łączu szeregowemu przyporządkowana jest grupa adresów odpowiadająca poszczególnym rejestrom (tabela 3) w jednym z czterech obszarów adresowych standardowo zarezerwownych dla tego typu urządzeń (tabela 2).
Przez odpowiednie ustawienie wartości w rejestrach sterowników łącza można prowadzić tylko nadawanie, tylko odbieranie, naprzemienne lub równoczesne nadawanie z odbieraniem. Wszystkie operacje nadawania-odbioru należy poprzedzić inicjalizacją rejestrów: aktywacji przerwań, sterowania transmisji, sterowania modemu, bajtów podzielnika. Warto zauważyć, że nie istnieje możliwość zablokowania transmisji szeregowej za pomocą poleceń wpisywanych do rejestrów sterowania, ale można to osiągną poprzez wstawienie wartości 0 do rejestru podzielnika. Wszystkie sygnały protokołu współpracy z modemem wymagają programowej obsługi - wprowadzenia właściwej wartości do rejestru sterowania modemu i odczytania odpowiedzi z rejestru stanu.

Program obsługi łącza powinien wykonać następujące kroki:

  • odczytać wartość rejestru identyfikacji przerwania, aby określić priorytet zgłoszonego przerwania
  • jeśli jest to priorytet najwyższy - odczytać zawartość rejestru stanu transmisji w celu określenia źródła błędu
  • jeśli jest to poziom najniższy - odczytać zawartośc rejestru stanu modemu w celu określenia linii z modemu, która zmieniała stan
Tabela 2. Przyporządkowanie łączom RS-232C
standardowych adresów i przerwań
Urządzenie logiczne
(DOS)
Obszar adresowy
(szesnastkowo)
Przerwanie
(IRQ)
COM1
03F8...03FF
4
COM2
02F8...02FF
3
COM3
03E8...03EF
4
COM4
02E8...02EF
3

 
Tabela 3. Zestaw rejestrów obsługujących łącza RS-232C 
(przesunięcie względem rejestru bazowego)
A2 A1 A0 Nazwa rejestru Uwagi
0
0
0
bufor nadajnika tylko zapis przy LCR7=0
0
0
0
bufor odbiornika tylko odczyt przy LCR7=0
0
0
0
mniej znaczący bajt podzielnika LCR7=1
0
0
1
rejestr aktywacji przerwań LCR7=0
0
0
1
bardziej znaczący bajt podzielnika LCR7=1
0
1
0
rejestr identyfikacji przerwań tylko do odczytu
0
1
1
rejestr parametrów transmisji LCR
1
0
0
rejestr sterowania modemu MCR
1
0
1
rejestr stanu transmisji LSR
1
1
0
rejestr stanu modemu  MSR
LCR7 oznacza bit numer 7 rejestru sterowania transmisji, który jest rozszerzeniem adresu A2, A1, A0.
Uwaga: w interfejsach wyposażonych w układ 16450 występuje dodatkowy rejestr przesunięty o 0x07.

 

Ustalenie prędkości transmisji polega na ustawieniu programowalnego dzielnika częstotliwości bazowej (115200 Hz), co daje możliwość uzyskania maksymalnie transmisji 115200 bodów (dla dzielnika 1). Rejestr podzielnika jest 16 bitowy i dostępny wówczas, gdy ustawiony jest bit  LCR7. Typowe prędkości transmisji to 1200 (dzielnik 96), 2400 (dzielnik 48), 4800 (dzielnik 24), 9600 (dzielnik 12), 19200 bodów (dzielnik 6).


 
 
Tabela 4. Rejestr parametrów transmisji (LCR)
Nr bitu
Funkcja
Wartość
Znaczenie
1, 0
Długość słowa
00
01
10
11
5 bitów/słowo
6 bitów/słowo
7 bitów/słowo
8 bitów/słowo
2
Bity stopu
0
1
1 bit stopu
1,5 bitu, gdy słowo 5 bitowe
2 bity w innym przypadku
4, 3
Parzystość
X0
01
11
bez parzystości
bit nieparzystości
bit parzystości
5
Odwrócenie parzystości
0
1
normalna parzystość
zanegowana parzystość
6
Sygnał przerwania transmisji (break)
0
1
normalna praca wyjścia szeregowego
wymuszenie stanu 0 na wyjściu szeregowym
7
Rozszerzenie adresu
zob. tabelę 3 - bit LCR7

 
Tabela 5. Rejestr stanu transmisji (LSR)
Nr bitu
Znaczenie dla "1"
0
skompletowana dana w buforze odbiornika
1
błąd nieodebrania danej (overrun)
2
błąd parzystości
3
błąd ramki (framing)
4
sygnał przerwania połączenia odebrany na wejściu szeregowym
5
bufor nadajnika pusty, zawartość przekazana do rejestru szeregującego
6
rejestr szeregujący opróżniony
7
zawsze wartość 0

 
Tabela 6. Rejestr sterowania modemu (MCR)
Nr bitu
Funkcja
0
poz. logicz. na wyjściu DTR (negacja)
1
poz. logicz. na wyjściu RTS (negacja)
2
wyjście OUT1 (negacja)
3
wyjście OUT2 (negacja)
4
0 - normalne działanie
1 - zamknięcie pętli wewnętrznego sprzężenia (samotestowanie)
5, 6, 7
ustawione na 0

 
Tabela 7. Rejestr stanu modemu (MSR)
Nr bitu
Znaczenie
0
1 - gdy linia CTS zmienia stan logiczny
1
1 - gdy linia DSR zmienia stan logiczny
2
1 - gdy stan linii RI zmienia się z 1 na 0
3
1 - gdy linia RLSD zmienia stan logiczny
4
stan linii CTS (negacja)
5
stan linii DSR (negacja)
6
stan linii RI (negacja)
7
stan linii RLSD (negacja)

 
Tabela 10. Topografia wyprowadzeń sygnałów dla łącza RS-232C
Wtyk
DB-25
Wtyk
DB-9
Nazwa sygnału
Kierunek
sygnału
1
-
Masa ochronna
-
2
3
Dane wysyłane (TxD)
wy
3
2
Dane otrzymywane (RxD)
we
4
7
Gotowość wysłania danych (RTS)
wy
5
8
Gotowość przyjęcia danych (CTS)
we
6
6
Gotowy zestaw danych (DSR)
we
7
5
Masa sygnałowa (SG)
-
8
1
Wybrany (RLSD)
we
20
4
Urządzenie gotowe (DTR)
wy
22
9
Sygnał dzwonienia (RI)
we


 

Przed przystąpieniem do pracy z portami w trybie bezpośrednim należy ustalić ile jest portów COM i pod jakimi portami się znajdują. Informacja o ilości dostępnych portów zawarta jest w komórce 0x00400011, zaś w celu znalezienia adresów należy się odwołać do obszaru BIOS-u o następujących adresach:

0x00400000 (0000:0400H) - COM1
0x00400002 (0002:0400H) - COM2
0x00400004 (0004:0400H) - COM3
0x00400006 (0006:0400H) - COM4
Limity czasowe dla poszczególnych portów zapisane są w sekundach w pojedynczych komórkach pamięci począwszy od adresu 0x0040007c dla portu COM1.

Powrót na początek


Funkcje BIOS'u
dające dostęp
do interfejsu
RS-232C


Wykorzystując przerwanie $14  mamy dostęp do 4 funkcji które pozwalają nam na ustawienie parametrów portu (inicjalizację), wysłanie znaku, odebranie znaku oraz sprawdzenie statusu interfejsu. Funkcje te opisane są one poniżej.

Funkcja 0 - inicjalizacja łącza
Parametry wywołania które muszą być ustawione w rejestrach procesora:
AH = 0x00
AL = parametry transmisji (patrz Tabela 11).
DX = numer portu (0 dla COM1, 1 dla COM2, 2 dla COM3 oraz 3 dla COM3)
Wartości zwracane:
AH = bajt statusu łącza (Tabela 12)
AL = bajt statusu linii modemu (Tabela 13)

Funkcja 1 - wysłanie jednego znaku
Parametry wywołania które muszą być ustawione w rejestrach procesora:
AH = 0x01
AL = kod znaku.
DX = numer portu
Wartości zwracane:
AH = bajt statusu łącza

Funkcja 2 - odebranie jednego znaku
Parametry wywołania które muszą być ustawione w rejestrach procesora:
AH = 0x02
DX = numer portu
Wartości zwracane:
AH = bajt statusu łącza
AL = kod odebranego znaku

Funkcja 3 - status łącza
Parametry wywołania które muszą być ustawione w rejestrach procesora:
AH = 0x03
DX = numer portu
Wartości zwracane:
AH = bajt statusu łącza (Tabela 12)
AL = bajt statusu linii modemu (Tabela 13)
 


 
 
Tabela 11. Ustawianie parametrów transmisji
Nr bitu
Funkcja
Wartość
Znaczenie
0 .. 1
Długość słowa
10
11
7 bitów/słowo
8 bitów/słowo
2
Bity stopu
0
1 bit 
2 bity
3 .. 4
Kontrola parzystości
00, 10
01
11
bez parzystości
bit parzystości
bit nieparzystości
5 .. 7
Prędkość transmisji
000
001
010
011
100
101
110
111
110 bodów
150 bodów
300 bodów
600 bodów
1200 bodów
2400 bodów
4800 bodów
9600 bodów

 
 
Tabela 12. Bajt statusu łącza 
Nr bitu
Znaczenie dla "1"
0
w buforze odbiornika jest nieodczytany znak 
1
błąd przepełnienia bufora odbiornika
2
błąd parzystości
3
błąd ramki (nieprawidłowy bit stopu)
4
wykrycie przerwania transmisji
5
bufor nadajnika pusty
6
pusty rejestr przesuwny
7
nastąpiło przekroczenie dopuszczalnego czasu oczekiwania

 
Tabela 13. Bajt statusu linii modemu 
Nr bitu
Znaczenie dla "1"
0
zmiana sygnału CTS
1
zmiana sygnału DSR
2
zmiana sygnału RI (koniec dzwonienia)
3
zmiana sygnału DCD
4
aktywny sygnał ghotowości do wysłania CTS
5
aktywny sygnał gotowych danych DSR
6
aktywny sygnał dzwonienia RI
7
aktywny sygnał nośnej DCD


Przykłady programowania

w języku C++

Wysyłanie wiadomości:
 
 int z,j;
 int base=0x2F8;
 char z1,tab[20] = "WIADOMOSC";
...
do
  {
   do
   {
     z=inportb (base+5);
   }while((z&32) == 0);

   outportb (base,tab[j]);
   j++;

  }while(tab[j] != 0);
...



 

Literatura

  1. J. L. Kulikowski, Komputery w badaniach doświadczalnych, PWN, Warszawa 1993.
  2. W. Mielczarek, Szeregowe interfejsy cyfrowe, Helion, Gliwice 1993
  3. J.W. Coffron, W.E. Long, Technika sprzęgania układów w systemach mikroprocesorowych, WNT, Warszawa 1988.
  4. A. Daniluk, RS 232 C. Praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera, Helion, Gliwice 2001.

 


Powrót do poprzedniej strony


odwiedzin od 30 czerwca 2000 r.
(c) T.W. Wojtatowicz  Ostatnia modyfikacja 1.12.1999 r.