p align="left">ID1 = 0, ID0 = 0 читання вмісту регістра стану модему (06h) ID1 = 0, ID0 = 1 запис у регістр передавача (00h) чи читання регістра ідентифікації переривань (02h) ID1 = 1, ID0 = 0 читання байта даних з буферного регістра приймача (00h) ID1 = 1, ID0 = 1 читання регістра стану прийомопередавача (05h) По зсуву 03h знаходиться регістр формату даних, що визначає такі параметри переданих даних, як швидкість, кількість бітів даних, кількість стопових бітів і настроювання перевірочного біту. Призначення бітів регістра приведене нижче: DLAB BRK PAR2 PAR1 PAR0 STOP DAB1 DAB0 DLAB 1 = доступ до установки швидкості 0 = доступ до регістра приймача/регістру передавача (00h) й до регістра дозволу переривань BRK 1 = зупинка включена 0 = зупинка виключена PAR2,1,0 000 = немає перевірки 001 = непарна 011 = парна 101 = завжди 1 111 = завжди STOP 1 = 2 стопових біти 0 = 1 стоповий біт DAB1,0 00 = 5 біт даних 01 = 6 біт даних 10 = 7 біт даних 11 = 8 біт даних Коли біт DLAB дорівнює 1, регістри прийомопередавача (00h) і дозволу переривань (01h) використовуються для завантаження дільника швидкості обміну. У перший записується молодший, у другий - старший байт дільника. Вони формують шістнадцятибітовий дільник, значення якого обчислюється за наступною формулою: Дільник = байтрегістр 00h + 256Чбайт регістр 01h У комп'ютері тактова частота, що подається в UART, складас 1,8432 Мгц. Усередині UART еталонна частота утвориться як тактова, ділена на 16, і дорівнює 115200 Гц. Співвідношення між значеннями дільника і швидкістю можна представити у виді формули: Для одержання швидкості 9600 бод необхідно, щоб дільник був рівний 12. Отже, у буферний регістр прийомопередавача (00h) повинно бути записане число 12, а в регістр дозволу переривань (01h) - нуль. Якщо в регістри дільника записана одиниця, то вийде найвища швидкість - 115200 бод. По зсуву 04h розташований регістр керування модемом. У загальному випадку він використовується для керування двома виходами інтерфейсу - RTS і DTR. Призначення бітів регістра наступні: По зсуву 05h знаходиться регістр стану прийомопередавача, що містить інформацію про стан приймача і передавача UART. При використанні разом з регістром ідентифікації переривань (02h) можна установити джерело переривань. Призначення бітів регістра приведені нижче: По зсуву 06h знаходиться регістр стану модему, що може використовуватися для визначення стану вхідних сигналів, зокрема DCD, DSR, CTS, RI, а також для зчитування чотирьох цифрових вхідних ліній. Призначення бітів регістру наступні: Регістр зі зсувом 07h - це байт пам'яті. Запис даних у регістр не впливає на операції UART. Отримання базової адреси послідовного порта (2 байти) При ввімкнення або перевантаженні комп'ютера перевіряє адреси всіх встановлених послідовних портів і записує їх адреси у визначені комірки пам'яті. СОМ1: 0000:0400h - 0000:0401h СОМ2: 0000:0402h - 0000:0403h СОМ3: 0000:0404h - 0000:0405h СОМ4: 0000:0406h - 0000:0407h Однобайтова комірка пам'яті 0000:0411h містить число СОМ портів, що записані в 0, 1 та 2 бітах: 000 - 0 port 001 - 1 port 010 - 2 port TP Procedure COM_Address; Var Num_COM:integer; COM1, COM2, COM3, COM4:integer; b1:byte; Begin Num_COM:=mem($0000: $0411); b1:=Num_COM; asm mov al,b1 and al,00000111b mov b1,al end; Num_COM:=b1; COM1:=memw($0000: $0400); COM2:=memw($0000: $0402); COM3:=memw($0000: $0404); COM4:=memw($0000: $0406); End; 4. Електричний інтерфейс RS-232C В даний час найбільш розповсю-дженим є стандарт, розроблений асоціацією промислових засобів зв'язку (ТІA, Telecommunication Industry Association, http://www.tiaonline.org) і асоціацією електронної промисловості (EIA Electronic Industries Alliance, http://www.eia.org) "EIA/TIA-232-E". Більш відомий за назвою "RS-232". Стандарт RS-232 (його офіційна назва "Interface Between Data Terminal Equipment and Data Circuit-Termination Equipment Employing Serial Binary Data Interchange") призначений для підключення апаратури, що передає чи приймає дані, до кінцевої апаратури каналів даних. Стандарт описує керуючі сигнали інтерфейсу, пересилання даних, електричний інтерфейс і типи роз'ємів. Інтерфейс RS-232 використовується й у багатьох пристроях звичайного персонального комп'ютера, починаючи з "миші" і модему до ключів апаратного захисту. І хоча уже всі комп'ютери мають інтерфейс USB, інтерфейс RS-232 ще живий і активно застосовується. DTE (Data Terminal Equipment) - кінцеве устаткування, що приймає чи передає дані. У якості DTE може виступати комп'ютер, принтер, плоттер чи інше периферійне устаткування. DCE (Data Communications Equipment) - апаратура каналу даних. Функція DCE полягає в забезпеченні можливості передачі інформації між двома чи більшим числом DTE. Для цього DCE повинно забезпечити з'єднання з DTE, з одного боку, і з каналом передачі - з іншого. Роль DCE найчастіше виконує модем. Рис. Повна схема з'єднання по RS-232 Рис. 6. З'єднання по RS-232 нуль-модемним кабелем Таблиця 3. Межі напруг СОМ-порта (стандарт RS-232) |
| Діапазон нап-руг входу приймача | Діапазон нап-руг виходу пере-давача | Стан керую-чого сигналу | Стан лінії даних | | Логічний 0 Логічна 1 | від -12 до -3 В від +3 до +12 В | від -12 до -5 В від +5 до +12 В | ON OFF | MARK SPACE | | |
Протокол RS-232 Відповідно до стандарту RS-232, сигнал (послідовності бітів) передається напругою. Передавач і приймач є несиметричними: сигнал перелається щодо загального проводу (на відміну від симетричної передачі протоколу RS-485 чи RS-422). У табл. 1.1 приведені границі напруг для сигналів приймача і передавача. Логічному нулю на вході приймача відповідає діапазон +3...+12В, а логічній одиниці - діапазон -12...-3 В. Діапазон -3...+3 В -. Перша частина, стандарт RS-232C, була прийнята 1969 року і містить опис електричних ланцюгів і сигналів несиметричного послідовного зв'язку. Друга частина, стандарт RS-232D, прийнята в 1987 році і визначає додаткові лінії тестування, а також формально описує роз'єм DB-2 Третя частина, RS-232E, прийнята в 1991 році. Інтерфейс не забезпечує гальванічної розв'язки пристроїв. Підключення і відключення інтерфейсних кабелів пристроїв з незалежним живленням повинно здійснюватись при відключеному живленні. Один із самих неприємних недоліків стандарту RS-232 - погана перєшкодозахищеність і, відповідно, короткі лінії передачі. Природно, були створені стандарти, що вирішують ці проблеми. Протокол RS-422A Стандарт RS-422A (інша назва ITU-T V.II) визначає електричні характерис-тики симетричного цифрового інтерфейсу. Він передбачає роботу на більш високих швидкостях (до 10 Мбіт/с) і більших відстанях (до 1000 м) в інтерфейсі DTE-DCE. Для його практичної реалізації, на відміну від RS-232, вимагаються два фізичних проводи на кожен сигнал. Реалізація симетричних ланцюгів забезпечує найкращі вихідні характеристики. Подібно V.28, даний стандарт є простим описом електричних характеристик інтерфейсу і не визначає параметри сигналів, типи роз'ємів і протоколи керування передачею даних. Для ліній інтерфейсів RS-422A та RS-423A можуть бути використані різні провідники (чи пари провідників) того самого кабелю. Стандарт RS-422A був розроблений разом з RS-423A і дозволяє розміщувати лінії цих інтерфейсів в одному кабелі. Він несумісний з RS-232, і взаємодія між RS-422A і RS-232 може бути забезпечена тільки за допомогою спеціального интерфейсного конвертера. Практично це повнодуплексний протокол RS-43 Прийом і передача йдуть по двох окремих парах проводів, причому на кожній парі може бути тільки по одному передавачу. Протокол RS-423A Стандарт RS-423A (інша назва V.6) визначає електричні характеристики несиметричного цифрового інтерфейсу. "Несиметричність" означає, що даний стандарт, подібно RS-232, для кожної лінії інтерфейсу використовує тільки один провід. Прн цьому для всіх ліній використовується єдиний загальний провід. Як і RS-422A, цей стандарт не визначає сигнали, конфігурацію виводів чи типи роз'ємів. Він містить тільки опис електричних характеристик інтерфейсу. Стандарт RS-423A передбачає максимальну швидкість передачі 100 Кбіт/с. RS-232C, RS-423A - асиметричні; RS-422A, RS-485 (магістральний) - симетричні Способи керування портами у WINDOWS95 та WINDOWS XP Ініціалізація СOM-порту Перед тим як використовувати СOM-порт, його необхідно настроїти на визначений формат передачі даних, тобто встановити швидкість, кількість бітів даних, кількість стопових бітів та біт перевірки. Існує три методи настроювання. Перший полягає у використанні команди MODE операційної системи MS DOS. Синтаксис команди можна представити так: MODE COMm: baud=b, parity=p, data=d, stop=s, retry=r або MODE COMm:b,p,d,s,r MODE COM1:96,n,8,1 конфігурує порт СОМ1 з наступними параметрами: швидкість 9600 бод, без перевірки на парність, 8 біт даних, 1 стоповий біт. Зазначена команда може бути включена у файл autoexec.bat. Недолік такого методу - неможливість змінювати формат передачі даних у користувацьких програмах. Другий метод використовує переривання BIOS INT 14h, що дозволяє виконувати конфігурування порту з програм користувача. Для цього необхідно в регістр АН завантажити 0, а в DX - число від 0 до 3, що вказує на відповідний порт (СОМ1 - COM4). У регістр AL завантажується байт ініціалізійних даних, значення бітів якого показані нижче: BD2 BD1 BDO PAR1 PAR0 STOP DA1 DA0 BD2 - BDO (швидкість) 111 = 9600 011 = 600 110 = 4800 010 = 300 101 = 2400 001 =150 100 = 1200 000=110 PAR1,0 (перевірка на парність) 00 чи 10 = немає перевірки 01 = непарна 11 = парна STOP (кількість стопових бітів) 0 = 1 1 = 2 DA1,0 (довжина блоку даних) 10 = 7 біт 11 = 8 біт Наступна програма на мові ТР6 робить те ж, що і команда DOS MODE СОМ1:96,n,8,1. Procedure initialize; {СОМ1: 9600, без перевірки на парність, 0 біт даних, 1 стоповий біт.} var register: registers; begin with register do begin ah:=0; {Завантаження номера функції переривання.} al:=128+64+32+0+0+0+2+1; {Завантаження ініціалізаційного коду 11100011B.} dx:=0; {Номер порту: DX=0:COM1, DX=1:COM2 і т.д.} intr($14,register); {Виклик переривання BIOS.} end; end; Обмеження описаного методу полягає в тому, що можна задати швидкість тільки 9600 бод. UART 16450 здатний працювати зі швидкістю 115200 бод, це досягається безпосереднім звертанням до регістра. Третій, найбільш гнучкий метод конфігурує порт за допомогою запису даних у регістр формату даних UART (зсув 03h). Наступна програма на ТР6 дозволяє налаштувати сам регістр, для цього потрібна базова адреса порту, що конфігурується, швидкість, режим перевірки, довжина блоку даних і кількість стопових бітів. Процедура переводить задану швидкість у шістнадцятибітовий дільник і завантажує його у відповідні регістри. (*-Бібліотека ресурсів № А9 (запис у регістр формату даних).-*) Procedure Write_data_format (RS232_address, Baud, Parity, Data_bit, Stop_bit:integer); var byte1,byte2,output_byte:byte; divisor:integer; begin divisor:=115200 div Baud; if divisor<=255 then begin byte1:=divisor; byte2:=0; end; if divisor>255 then begin byte1:=divisor mod 256; byte2:=divisor div 256; end; output_byte:=(data_bit-5)+4*(stop_bit-1)+8*(parity); port(RS232_address+3):=128: {Завантаження ініціалізаційних даних, перший біт регістра дорівнює 1.} port(RS232_address+0):=byte1; {Молодший байт дільника дорівнює 1.} port(RS232_address+1);=byte2; {Старший байт дільника дорівнює 0.} port(RS232_address+3):=output_byte; {Завантаження дільника й інших параметрів.} end; Наступна функція, написана мовою Turbo Pascal для Windows, виконує те ж саме: (*-Бібліотека ресурсів № A9 (запис у регістр формату даних).-*) Function Write_data_format(RS232_address, Baud, Parity, Databit, Stop_bit:integer):integer; export; Var byte1, byte2,output_byte:byte; divisor:integer; begin divisor:=115200 div Baud; if divisor<=255 then begin byte1:=divisor; byte2:=0; end; if divisor>255 then begin byte1:=divisor mod 256; byte2:=divisor div 256; end; output_byte:=(data_bit-5)+4*(stop_bit - 1)+8*(parity); port(RS232_address+3):=126; {Завантаження ініціалізаційних даних, перший біт регістра порівнює 1.} port(RS232_address+0):=byte1; {Молодший байт дільника дорівнює 1.} port(RS232_address+1):=byte2; {Старший байт дільника дорівнює 0.} port(RS232_address+3):=output_byte; {Завантаження дільника й інших параметрів.} end; Передача і прийом послідовних даних Існує кілька способів прийому і передачі даних через послідовний порт: за допомогою команд операційної системи, переривань BIOS чи безпосереднього доступу до порту. Останній спосіб найбільш зручний при проведенні операцій введення/виведення загального призначення. Розглянемо приклад для порту СОМ1. Щоб передати дані, можна записати їх безпосередньо в буферний регістр передавача 3F8h використовуючи наступний оператор мови QBASIC: OUT 3F8h,X де X - дані в десятковому форматі. Для одержання даних з порту СОМ1 зчитуються дані з буферного регістра приймача 3F8h. З цією метою використовується інший оператор мови QBASIC (Y - вхідні дані в десятково-му форматі): Y=INP(3F8h) Наступні дві процедури написані на мові ТР6 і виконують ті ж функції. (*Бібліотека ресурсів № А10 (запис даних в буферний регістр передавача).*) Procedure write_transmit_buffer(RS232_address,output_byte:integer); Begin port(RS232_address):=output_byte; end; (*Бібліотека ресурсів № A12 (зчитування даних з буферного регістра прий-мача).*) Function read_receive_buffer(RS 232_addгеss,output_byte: integer]: integer; begin read_receive_buffer:=port(RS232_address); end; Нижче показані дві функції, написані на Turbo Pascal для Windows. (*Бібліотека ресурсів № А10 (запис даних в буферний регістр передавача).*) Function write_transmit_butfer(RS232_address;output_byte:integer):integer; export; begin port(RS232_address):=output_byte; end; (*Бібліотека ресурсів № A11 (читання даних з буферного регістра прийма-ча). *) Function read_reseive_buffer(RS232_address,output_byte:integer):integer; export; begin read_reseive_buffer:=port(RS232_address); end;
Страницы: 1, 2
|