КОМП’ЮТЕРНЕМОДЕЛЮВАННЯ РОБОТИ
ПОСЛІДОВНОГО ПОРТА
(дипломнаробота)
2007
АНОТАЦІЯ
Пояснююча запискаскладається з основних розділів, які пов’язані з аналізом й обґрунтуванням темикурсової роботи, призначенням і областю застосування, описом функціональнихможливостей програми, вибором технічних і програмних засобів, організаціївхідних та вихідних результатів, розглядом очікуваних техніко – економічнихпоказників та списком використаних джерел літератури при розробці програмногопродукту. Пояснювальна записка містить відомості про способи обміну данимичерез послідовні порти, протоколи передачі даних, характеристики каналівзв’язку.
ЗМІСТ
ВСТУП
1. Призначення та область застосування
2. Технічні характеристики
2.1Постановказадачі на розробку програми
2.1.1 Протоколи послідовної передачі
2.1.2 Будова іпринцип роботи послідовного порта
2.1.3 Способи керування портами у WINDOWS95 та WINDOWS XP
2.2Описалгоритму і функціонування програми
2.3 Опис організації вхідних та вихідних даних
2.4 Опис організації вибору технічних і програмних засобів
3. Очікувані техніко – економічніпоказники
Список використаних джерел
Вступ
Взаємодіякомп’ютера з зовнішніми пристроями досить часто відбувається через послідовний(СОМ) порт (Serial Interface RS-232C). Послідовна передача даних дозволяєзначно спростити канал зв’язку між пристроями, але одночасно приводить доускладнення формату передачі даних. Тому для ефективного використанняпослідовних портів потрібно чітко розуміти принципи та формати послідовноїпередачі даних.
Метоюпояснювальної записки є ознайомлення з принципами і форматами прийому тапередачі даних через послідовний порт. Оскільки аналізувати стан бітів данихпри реальній передачі через послідовний порт є досить складною задачею, тому доцільновикористати програмне моделювання обміну даними.
/>1. Призначення та область застосування
Розробленапрограма призначена для вивчення принципів передачі інформації черезпослідовний порт. Програма може використовуватися при вивченні матеріалів здисципліни „Пристрої зв’язку з об’єктом”.
/>2. Технічні характеристики 2.1 Постановка задачі на розробкупрограми
При вивченніобміну даними через послідовний порт велика увага приділяється формату даних,але безпосередньо розглядати формат даних досить складно. Тому створенапрограма повинна забезпечувати зручне представлення даних при їх записі ізчитуванні. Враховуючи вищенаведені обставини, можна підвищити ефективністьвиконання лабораторної роботи з дисципліни „Пристрої зв’язку з об’єктом”, а цимсамими покращити навчальний процес на кафедрі КСМ Чернівецького національногоуніверситету імені Ю. Федьковича.
Розглянемо роботупослідовного порта більш детально.
2.1.1 Протоколи послідовної передачі
Послідовний інтерфейс використовується длязв'язку двох пристроїв між собою. Дані в одну сторону передаються по одномупроводу за допомогою послідовності бітів. Природно, при підключенні декількохпристроїв до комп'ютера обмін виробляється тільки з одним з цих пристроїв. Дляз’єднання з боку комп’ютера використовується інтерфейс, названий СОМ-порт (COMmunication port, комунікаційнийпорт).
Цей порт забезпечує асинхронний обмін і реалізуєтьсяна мікросхемах універсальних асинхронних прийомопередатчиків (UATR, Universal Asynch-ronous Receiver Transmitter), сумісних зсімейством і8250. Хоча стандарт RS-232C передбачає й асинхронний, і синхронний режими обміну. СОМ-порт комп’ютера підтримує тільки асинхронний режим. Для реалізації синхрон-ногообміну застосовуються спеціальні адаптери, наприклад, SDLC чи V.35.
Слово «протокол» вносить деякуплутанину. З одного боку, RS-232 і RS-485 називають протоколами, а з іншого, MODBUS, ZModem і CAN — такожпротоколи. Який же з них справжній? Справа в тім, що послідовний зв'язокскладається з двох складових — апаратної і програмної. Стандарти RS-232, RS-485 і іншіописують апаратну частину: роз’єми, призначення сигналів, рівні напруг і т.п.Друга складова — програмна реалізація протоколів, домовленість про правилапередачі. І ще одне зауваження. Усі стандарти мають подвійні, а то і потрійніназви. Подвійність назв зв'язана з тим, що Міжнародний союз електрозв'язку ITU-T використовуєаналогічні стандарти з назвами V.xx. І, взагалі говорячи, дві назви це ще не межа.Так, стандарту RS-232 відповідає ISO 2110, Міністерство оборони США випустилопрактично ідентичний стандарт Mil-Std-188C. а в нашій країні подібнийстандарт уведений ДСТ 18145-81.
DTE (Data Terminal Equipment) — кінцевеустаткування, що приймає чи передає дані. У якості DTE може виступати комп’ютер, принтер, плоттер чиінше периферійне устаткування.
DCE (Data Communications Equipment) — апаратураканалу даних. Функція DCE полягає в забезпеченні можливості передачіінформації між двома чи більшим числом DTE. Для цього DCE повиннозабезпечити з'єднання з DTE, з одного боку, і з каналом передачі — з іншого.Роль DCE найчастіше виконує модем, наприклад, як показано на рис. 1.1.
Рис. 1.1. Повна схема з’єднання по RS-232
/>
Рис. 1.2. З’єднання по RS-232 нуль-модемнимкабелем
/> а) б)
Рис. 1.3. Нуль-модемний кабель:
а − мінімальний; б − повний
Протокол RS-232
Через простоту і низькі апаратні вимоги (у порівнянні, наприклад,з паралельним інтерфейсом), послідовні інтерфейси активно використовуються в електроннійпромисловості. В даний час найбільш розповсюдженим є стандарт, розроблений асоціацієюпромислових засобів зв'язку (ТІA, Telecommunication Industry Association, www.tiaonline.org) і асоціацієюелектронної промисловості (EIA Electronic Industries Alliance, 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 ще живий і активнозастосовується.
Відповіднодо стандарту RS-232, сигнал (послідовності бітів) передається напругою. Передавачі приймач є несиметричними: сигнал перелається щодо загального проводу (навідміну від симетричної передачі протоколу RS-485 чи RS-422). У табл.1.1 приведені границі напруг для сигналів приймача і передавача. Логічному нулюна вході приймача відповідає діапазон +3...+12В, а логічній одиниці — діапазон-12...-3 В. Діапазон -3...+3 В — зона нечутливості, що забезпечує гістерезисприймача (передавача). Рівні сигналу па виходах повинні бути в діапазоні-12...-5 В для представлення логічної одиниці і +5...+ 12 В для представленнялогічного нуля. Взагалі говорячи, стандарт RS-232 складається зтрьох частин. Перша частина, стандарт RS-232C, була прийнята1969 року і містить опис електричних ланцюгів і сигналів несиметричногопослідовного зв'язку. Друга частина, стандарт RS-232D, прийнята в 1987 році івизначає додаткові лінії тестування, а також формально описує роз’єм DB-25. Третя частина, RS-232E, прийнята в 1991 році.
Таблиця1.1. Межі напруг СОМ-порта (стандарт RS-232) Діапазон нап-руг входу приймача Діапазон нап-руг виходу пере-давача Стан керую-чого сигналу Стан лінії даних
Логічний 0
Логічна 1
від –12 до -3 В
від +3 до +12 В
від –12 до -5 В
від +5 до +12 В
ON
OFF
MARK
SPACE
Інтерфейс не забезпечує гальванічної розв'язкипристроїв. Підключення і відключення інтерфейсних кабелів пристроїв знезалежним живленням повинно здійснюватись при відключеному живленні. Один ізсамих неприємних недоліків стандарту 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-435. Прийом і передача йдуть по двох окремих парахпроводів, причому на кожній парі може бути тільки по одному передавачу.
Протокол RS-423A
Стандарт RS-423A (інша назва V.6) визначає електричніхарактеристики несиметричного цифрового інтерфейсу. «Несиметричність»означає, що даний стандарт, подібно RS-232, для кожної лінії інтерфейсу використовує тількиодин провід. Прн цьому для всіх ліній використовується єдиний загальний провід.Як і RS-422A, цей стандарт не визначає сигнали, конфігурацію виводів читипи роз’ємів. Він містить тільки опис електричних характеристик інтерфейсу.Стандарт RS-423A передбачає максимальну швидкість передачі 100 Кбіт/с.
2.1.2 Будова і принцип роботи послідовного порта
Послідовна передача даних
Послідовний потік даних складається з бітівсинхронізації і власне бітів даних. Формат послідовних даних містить чотиричастини: стартовий біт, біти даних (5-8 біт), перевірочний і стоповий біти; усяця конструкція іноді називається символом. На рис. 2.1 зображенийтиповий формат послідовних даних. Коли дані не передаються, на лініївстановлюється рівень логічної одиниці. Це називається режимом очікування.Початок режиму передачі даних характеризується передачею рівня логічного нулятривалістю в одну елементарну посилку. Такий біт називається стартовим. Бітиданих посилаються послідовно, причому молодший біт — першим; усього їх можебути від п'яти до восьми.
За бітами даних випливає перевірочний біт,призначений для виявлення помилок, що виникають під час обміну даними.Останньою передається стопова посилка, що інформує про закінчення символу.Стоповий біт передається рівнем логічної одиниці. Тривалість стопової посилки — 1, 1.5 чи 2 біти. Спеціально розроблений електронний пристрій, що генерує іприймає послідовні дані, називається універсальним асинхронним прийомо-передавачем(Universal Asynchronous Receiver Transmitter, UART).
/>
Рис. 2.1. Форматпослідовних даних, які формує UART
Обмін інформацією за допомогою мікросхем UART відбувається втакий спосіб. Приймач виявляє перший фронт стартового біта і вичікує один чипівтора тактових інтервали, оскільки зчитування повинне початися точно всередині першої посилки. Через один тактовий інтервал зчитується другий бітданих, причому це відбувається точно в середині другої посилки. Післязакінчення інформаційного обміну приймач зчитує перевірочний біт для виявленняпомилок і стоповий біт, а потім переходить у режим чекання наступної порціїданих.
Швидкість передачі інформації в послідовномуінтерфейсі вимірюється в бодах (бод — кількість переданих бітів за 1 с).Стандартні швидкості рівні 110, 150, 300, 600, 1200, 2400, 4800, 9600 і 19200бод. Знаючи швидкість у бодах, можна обчислити число переданих символів засекунду. Наприклад, якщо мається вісім біт даних без перевірки на парність йодин стоповий біт, то загальна довжина послідовності, включаючи стартовий біт,дорівнює 10. Швидкість передачі символів відповідає швидкості в бодах, діленоїна 10. Таким чином, при швидкості 9600 бод (див. рис. 1.6) буде передаватися960 символів у секунду.
Перевірочний біт призначений для виявленняпомилок у переданих бітах даних. Коли він присутній, здійснюється перевірка напарність чи непарність. Якщо інтерфейс націлений на перевірку за парністю,такий біт буде виставлятися в одиницю при непарній кількості одиниць у бітахданих, і навпаки. Це найпростіший спосіб перевірки на наявність однократнихпомилок у переданому блоці даних. Однак, якщо під час передачі було спотворенодекілька бітів, подібна помилка не виявиться. Перевірочний біт генеруєтьсяпередаючим UART таким чином, щоб загальна кількість одиниць була непарним чипарним числом в залежності від настройки інтерфейсу; приймаючий пристрій повиненмати таку ж настройку. Прийомний UART рахує кількість одиниць у прийнятих даних. Якщодані не проходять перевірку, генерується сигнал помилки.
Більшість комп'ютерів, сумісних з IBM PC, використовує UART 16450, з IBM PC XT — UART 8250. В UART застосовуютьсярівні напруги ТТЛ. Для передачі даних по каналу зв'язку напруга за допомогоюспеціалізованих перетворювачів конвертується з інверсією: логічному нулювідповідає діапазон напруг від +3 до + 12 В, логічній одиниці — від -3 до -12В.
/>
а)
/>б)
Рис. 2.2. Функції контактів роз’ємів RS232 накомп’ютері: а) — блочна частина 9-контактного штирьового роз’єму, вигляд зісторони задньої стінки комп’ютера; б) — блочна частина 25-контактного штирьовогороз’єму, вигляд зі сторони задньої стінки комп’ютера;
Таблиця 2.1. Призначення контактів роз’ємівпослідовного порту25 контактів
9
контактів Найменування
Напрям
відносно ПК Опис 1 PROT Захисне заземлення 2 3 TD вихід Дані, що передаються 3 2 RD вхід Дані, що приймаються 4 7 RTS вихід Запит на передачу 5 8 CTS вхід Очищений для передачі 6 6 DSR вхід Готовність зовнішнього пристрою 7 5 GND Сигнальне заземлення 8 1 DCD вхід Виявлення інформаційного сигналу 20 4 DTR вихід Комп’ютер до обміну даними готовий 22 9 RI вхід Індикатор дзвоника 23 DSRD вхід/вихід Детектор швидкості передачі даних
Роз’єм та кабель порту RS232
Стандартний послідовний порт має 25- чи9-контактний роз’єм. На рис. 2.1.2. приведені призначення контактів цих роз’ємів.
У табл. 1.2. вказано призначення сигналівпослідовного інтерфейсу.
На рис. 2.2 представлені два типи з'єднань міжкомп'ютером і зовнішнім пристроєм по протоколу RS232. Стрілки показуютьнапрямок потоків даних. На рис. 2.2 а представлене так зване нуль-модемнез'єднання. На рис. 2.2 б зображене з'єднання, що використовує тільки трилінії: перша — для передачі даних, друга — для прийому, третя — загальна.З'єднання організоване таким чином, що передані дані від першого пристроюнадходять на прийомну лінію другого.
/>а) б)
Рис. 2.3. З’єднання комп’ютера та зовнішнього пристрою попротоколу RS232: а) – з використанням нуль-модемного кабеля; б) за допомогоютрьох ліній
Таблиця 2.2 Призначення сигналів послідовногоінтерфейсуPRO Захисне заземлення. З'єднується з металевим екраном кабелю і корпусом устаткування. GND Лінія заземлення. Загальний провід для всіх сигналів. TD Передані дані. Послідовні дані передаються комп'ютером по цій лінії. RD Прийняті дані. Послідовні дані приймаються комп'ютером по цій лінії. RTS
Запит на передачу. Лінія взаємодії, яка показує, що
комп'ютер готовий до прийому даних. Лінія керується з боку комп'ютера. Якщо взаємодії не потрібно, вона може
використовуватися як двійковий вихід. CTS Готовність до передачі. Лінія взаємодії, за допомогою якої зовнішній пристрій повідомляє комп'ютеру, що воно готове до передачі даних. Якщо взаємодії не потрібно, вона може використовуватися як двійковий вхід. DTR Комп'ютер готовий. Лінія взаємодії показує, що комп'ютер ввімкнений та готовий до зв'язку. Лінія керується з боку комп'ютера. Якщо взаємодії не потрібно, во-на може використовуватися як двійковий вихід. DSR Готовність зовнішнього пристрою. Лінія взаємодії, за допомогою якої зовнішній пристрій повідомляє комп’ютеру, що воно ввімкнене і готове до зв'язку. Якщо взаємодії не потрібно, вона може використовуватися як двійковий вхід.
Внутрішній апаратний пристрій
Комп'ютер, сумісний з IBM PC, може мати до чотирьохпослідовних портів. Вони маркуються як COМ1 — COM4. Кожен СОМ-портформується окремим UART 16450, встановленим усередині комп'ютера.
UART 8250/16450
На рис. 2.4 показана внутрішня структура UART. У ньому маються вісімвосьмибітових регістрів. Адреси введення/виведення цих регістрів обчислюютьсядодаванням зсуву регістра до базової адреси СОМ-порту.
Зсуви і функції регістрів UART такі:
00h — буферний регістр передавача/буферний регістрприймача:
використовується для обміну даними;
01h — регістр дозволу переривань: установлює режимзапиту переривань;
02h — регістр ідентифікації переривань: перевіряєрежим запиту перери
вань;
03h — регістр формату даних: встановлює форматпослідовних даних;
04h — регістр керування модемом: установлюєкерування модемом (RTS,
DTR і т.д.);
05h — регістр стану прийомопередавача: міститьінформацію про стан
приймача і передавача;
06h — регістр стану модему: містить поточний станліній DCD, RI, DSR і
CTS;
07h — регістр надоперативної пам'яті: працює як байтпам'яті.
/>Рис. 2.4.Внутрішня блок-схема UART 8250/16450
Зсув 00h вказує на буферний регістр читанняприймача і регістр запису передавача, що доступний, коли біт DLAB у регістріформату даних (зсув 03h) дорівнює нулю. Якщо по цій адресі записанийбайт, то він передається в регістр зміщення передавача і послідовно надходитьна вихід. Під час прийому відбувається зворотна операція: після того як даніуспішно прийняті і за допомогою регістра зміщення перетворені в рівнобіжнийформат, вони передаються в буферний регістр приймача. Коли інформація з цьогорегістра зчитана, він очищається і готовий до прийому наступного блоку даних.
По зсуву 01h від базового знаходитьсярегістр дозволу переривань, за допомогою якого можна конфігурувати переривання,що генеруються UART. Призначення бітів цього регістра приведені нижче:
0 0 0 0 SINP ERBK TBE RxRD
біти з 7 по 4 завжди нулі
SINP 1 = переривання по зміністану ліній CTS, DSR, DCD і RI
0 = немає переривання
ERBK 1 = переривання припомилці прийому даних
0 = немає переривання
ТВЕ 1 = переривання, коли регістр передавачапорожній
0 = немає переривання
RxRD 1 = переривання приодержанні цаннх
0 = немає переривання
По зсуву 02h знаходиться регістрідентифікації переривань. При виникненні переривання нульовий біт цьогорегістра встановлюється в 0. Біти 1 і 2 указують причину переривання. Біти з 7по 3 не використовуються і завжди дорівнюють нулю. Призначення бітів регістранаступне:
0 0 0 0 0 ID1 ID0 PND
PND 1 = немає переривання
0 = переривання
ID1, ID0 00 = зміна вхідногосигналу RS232 (пріоритет 3)
01 = регістр передавача порожній (пріоритет 2)
10 = у буферному регістрі приймача дані готові(пріоритет 1)
11 = помилка передачі даних чи зупинка (пріоритет0, вищий ступінь)
Якщо процес обміну даними організований поперериваннях, то стале переривання повинно бути скинуте; у протилежному випадкукоректність обміну даними порушиться. Дії, необхідні для очищення переривання,такі:
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. Призначення бітів регістра наступні:
0 0 0 LOOP ОUT2 ОUT1 RTS DTR
біти 7-5 завжди нулі
LOOP 1 = зворотний зв'язокдоступний
0 = зворотний зв'язок недоступний
ОUT2 1 = включено
0 = виключено, для внутрішнього використання
OUT1 1 = включено
0 = виключено, для внутрішнього використання
RTS 1 = включено
0 = виключено, є присутнім на роз’ємі RS232
DTR 1 = включено
0 = виключено, є присутнім на роз’ємі RS232
По зсуву 05h знаходиться регістр стану прийомопередавача, щомістить інформацію про стан приймача і передавача UART. При використанні разом зрегістром ідентифікації переривань (02h) можна установити джерело переривань. Призначення бітів регістраприведені нижче:
0 ТХЕ ТВЕ BREK FRME PARE OVFE RxRD
ТХЕ (передавач порожній) 1 = немає байту врегістрі передавача і регіcтрі зміщення
0 = у регістрі передавача та регістрі зміщення одинбайт
ТВЕ (буфер передавача порожній) 1 = немає байту врегістрі передавача 0 = у регістрі передавача один байт
BREK (зупинка) 1 = виявленазупинка
0 = немає зупинки
FRME (помилка блоку) 1 =виявлена помилка
0 = немає помилки
PARE (помилка перевірки напарність) 1 = виявлена помилка
0 = немає помилки
OVFE (помилка переповнення) 1= виявлена помилка
0 = немає помилки
RxRD (прийняті дані готові) 1 = прийняті данізнаходяться в регістрі приймача
0 = немає прийнятих даних
По зсуву 06h знаходиться регістрстану модему, що може використовуватися для визначення стану вхідних сигналів,зокрема DCD, DSR, CTS, RI, а також для зчитування чотирьох цифрових вхідних ліній.Призначення бітів регістру наступні:
DCD RI DSR CTS DDCD DRI DDSR DCST
DCD (виявлена несуча передачіданих) 1 = DCD активна
0 = DCD неактивна
RI (індикатор дзвоника) 1 = RI активна
0 = RI неактивна
DSR (набір даних готовий) 1 = DSR активна
0 = DSR неактивна
CTS (скидання для передачі) 1= CTS активна
0 = CTS неактивна
DDCD (дельта DCD) 1 = DCD змінена з моментуостаннього зчитування
0 = DCD без змін
DRI (дельта RI) 1 = RI змінена з моментуостаннього зчитування
0 = RI без змін
DDSR (дельта DSR) 1 = DSR змінена змоменту останнього зчитування
0 = DSR без змін
DCTS (дельта CTS) 1 = CTS змінена змоменту останнього зчитування
0 = CTS без змін
Регістр зі зсувом 07h — це байт пам'яті. Записданих у регістр не впливає на операції UART.
Перетворювачі напруг
Вихідні сигнали керування (RTS та DTR) і вхідні сигналистану (CTS, DSR, DCD) послідовного порту інвертовані. Послідовні сигнали даних SIN і SOUT не інвертовані. UART працює тільки зрівнем напруг ТТЛ/КМОП. Перетворювачі напруг розташовані між UART і роз’ємом RS232.Перетворювачі передавачів конвертують рівень напруги ТТЛ у рівень RS232, а перетворювачіприймачів — навпаки.
При включенні чи перезавантаженні комп'ютера BIOS перевіряє адресивсіх установлених послідовних портів. Якщо вона знаходить такий порт, тозаносить базову адресу (двобайтове слово) у певну комірку пам'яті. Для СОМ1 цекомірки 0000:0400h і 0000:0401h. Базову адресу можна одержати, злічивши їхній вміст. Коміркипам'яті, у яких міститься інформація про базові адреси встановлених послідовнихпортів, приведені нижче:
СОМ1: 0000:0400h — 0000:0401h
COM2: 0000:0402h — 0000:0403h
COM3: 0000:0404h — 0000:0405h
COM4: 0000:0408h — 0000:0407h
Однобайтова комірка пам'яті 0000:0411h у першому,другому і третьому бітах містить загальну кількість установлених СОМ-портів:
біт 3 = 0, біт 2 = 0, біт 1 = 0 СОМ-порти невстановлені
біт 3 = 0, біт 2 = 0, біт 1 = 1 встановлено одинСОМ-порт
біт 3 = 0, біт 2 = 1, біт 1 = 0 встановлено дваСОМ-порти
біт 3 = 0, біт 2 = 1, біт 1 = 1 встановлено триСОМ-порти
біт 3 = 1, біт 2 = 0, біт 1 = 0 встановленочотири СОМ-порти
2.1.3 Способи керування портами у WINDOWS95 та WINDOWS XP
Програмне керування
У розділі приведені основні варіантипрограмування послідовного порту.
Одержання базової адреси послідовного порту
Представлена програма, написана мовою QBASIC, виводитьзагальну кількість СОМ-портів, вбудованих у ПК, і їхні базові адреси. Рядок 20зчитує байт з комірки пам'яті 0000:0411 h, використовуючи командуРЕЕК(). Біти 0,1 і 2 містять інформацію про кількість встановлених СОМ-портів.На ці три біти накладається маска за допомогою оператора AND (1+2+4) длявизначення кількості портів. Рядок 30 зчитує два байти з комірок пам'яті, щомістять базову адресу СОМ1. Рядки 40, 50 і 60 роблять те ж саме для іншихпортів.
10 DEF SEG=0
20 PRINT «Number of RS232ports:», (PEEK(&H411) AND (1+2+4))
30 PRINT «Address of COM1:»,PEEK(&H400)+256*РЕЕК(&H401)
40 PRINT «Address of CОM2:»,PEEK(&H402)+256*PEEK(&H403)
50 PRINT «Address of COM3:»,PEEK(&H404)+256*PEEK(&H405)
60 PRINT «Address of COM4:»,PEEK(&H406)+256*PEEK(&H407)
70 INPUT X
Наступна функція, написана мовою TP6, зчитуєінформацію про кількість встановлених портів і привласнює отримане значеннязмінній Number_of_ COM. Потім вона зчитує базові адреси з комірок пам'яті, де вонизберігаються, і привласнює адресу обраного порту змінній RS232_address.
(*-Бібліотека ресурсів № А6 (визначення базовихадрес СОМ-портів).-*)
Procedure COM_address;
(* $0000:$0400 містить базову адресу порту СОМ1,
$0000:$0402 містить базову адресу порту COM2,
$0000:$0404 містить базову адресу порту COM3,
$0000:$0406 містить базову адресу порту COM4,
$0000:$0411 містить кількість СОМ-портів в двійковому форматі.*)
var
СOM: аггау[1..4] of integer;
COM_number.number_of_COM,code:integer;
Kbchar;char;
begin
clrscr;
COM_number:=1; (*Установка порту зазамовчуванням.*)
Number_of_COM:=mem($0000:$0411); (*3читуваннякількості СОМ-портів.*)
Number_of_COM:=(Number_of_COM and (8+4+2)) shr 1;
COM[1]:=memw($0000:$0400); (*Процедуразчитувань з пам'яті.*)
СОМ[2]:=memw($0000:$0402);
СОМ[3]:=memw($0000:$0404);
СОМ[4]:=memw($0000:$0406);
Textbackground(blue); clrscr;
Textcolor(yellow); Textbackground(red);window(10,22,70,24); clrscr;
Writeln('Number of COM installed:', Number_of_COM:2);
writeln('Addresses for COM1 to COM4: ', COM[1];3',COM[2]:3', COM[3]:3', COM[4]:3);
write('Select COM to be used (1,2.3,4):');
delay(1000);
if number_of_COM>1 then
begin (*Вибір конкретного порту, якщовстановлено кілька портів.*)
repeat
kbchar:=readkey; (*3читування значення з клавіші, щовводиться.*)
val(kbchar,COM_number,code); (*Перетворення символу в число.*)
until (COM_number>=1) and (COM_number0);
end; clrscr;
RS232_address:=COM[COM_number];
writeln('Your selected RS232 interface:COM', COM_number:1);
write('RS232 address:', RS232_address:4);
delay(1000);
textbackground(black);
window(1,1,80,25); clrscr;
end;
В наступному прикладі показана функція RS232(X), написана мовою Turbo Pascal для Windows. RS232(0) повертаєкількість установлених СОМ-портів, RS232(1) — базову адресу СОМ1, RS232(2) — базовуадресу COM2 і т.д.
(*-Бібліотека ресурсів № A6 (визначення базових адресСОМ-портів).-*)
(Universal auto detection of COM baseaddress)
Function RS232(X:integer):integer; export;
(* $0000:$0400 містить базову адресупорту COM1,
$0000:$0402 містить базову адресупорту COM2,
$0000:$0404 містить базову адресу порту COM3,
$0000:$0406 містить базову адресупорту COM4,
$0000:$0411 містить кількість СОМ-портів в двійковому форматі.*)
var
number_of_COM, СОМ1, COM2, COM3, COM4: integer;
begin
number_of_COM:=mem($40:$11); (*3читуєкількість СОМ-портів *)
number_of_COM:=(number_of_COM and (8+4+2)) shr 1;
COM1:=0; COM2:=0; COM3: =0; COM4:=0;
COM1:=memw($40:$00); (*Процедуразчитування з пам'яті.*)
COM2.=memw($40:$02);
COM3:=memw($40:$04);
COM4:=memw($40:$06);
Case X of
0: RS232:=number of COM;
1: RS232:=COM1;
2: RS232:=COM2;
3: RS232:=COM3;
4: RS232:=COM4;
end;
end.
Ініціалізація С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
if divisor>255 then beginbyte1:=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
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 (запис даних вбуферний регістр передавача).*)
Procedurewrite_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 (читання даних з буферногорегістра прийма-ча). *)
Functionread_reseive_buffer(RS232_address,output_byte:integer):integer; export;
begin
read_reseive_buffer:=port(RS232_address);
end;
Передача даних по лініях взаємодії
Для виводу даних через лінії RTS і DTR у регістркерування модемом (зміщення 04h) необхідно записувати біти 1 і 0, що відповідають сигналам RTS і DTR. Лінії керуютьсяпроцедурами на мовах TP6 і Turbo Pascal для Windows, що вимагають базовуадресу обраного СОМ-порту і стан цих ліній — або 0, або 1. Причому RTE і DTR інвертуютьсяперед подачею в порт з метою компенсації інверсії перетворювачами TTЛ/RS232, що такожвикористовуються для трансформації рівня напруги.
(*-Бібліотека ресурсів № А11 (запис даних урегістр стану модему).-*)
procedure write_modem_status(RS232_address, RTS, DTR:integer);
(*RTS і DTR інвертуються за допомогою МАХ238 наекспериментальній платі *)
(*RTS=біт 1, DTR=біт 0 регістру керування модемом, зміщення 04h.*)
begin
RTS.=1-RTS,
DTR:=1-DTR;
port(RS232_address+4):=RTS*2+DTR; (*3апис у регістр04h*)
end;
(*-Бібліотека ресурсів № A11 (запис даних у регістрстану модему).-*)
Function wrile_modem_stalus(RS232_address,RTS, DTR:integer):integer; export;
(*RTS і DTR інвертуються за допомогою MAX238 на експериментальнійплаті.*)
(*RTS=біт 1, DTR=біт 0 регістра керування модемом, зміщення 04h.*)
begin
RTS:=1-RTS;
DTR:=1-DTR;
port(RS232_address+4):=RTS*2+DTR; (*Запис в регістр04h.*)
end.
Щоб зчитати дані з ліній DSR, CTS і DCD, необхіднозчитати регістр стану модему. Для цього служать нижчеподані процедури на мовах TP6 і TPW, що вимагають базовуадресу обраного СОМ-порту. Лінії DSR, CTS і DCD інвертуються для компенсації інверсіїперетворювачами TTJI/RS232.
(*-Бібліотека ресурсів № A13 (читання даних зрегістра стану модема).-*)
Function read_modem_status(RS232_address, x:integer):integer;
(*х=1 — вибір біта DCD, х=2 — вибір біта DSR, х=З — вибірбіта CTS.*) (*DCD=біт 7, DSR=біт 5, CTS=біт 4 регістру стану модема, зміщення 06h.*) (*Всі бітиінвертуються за допомогою МАХ238 на експериментальній пла-ті.*)
var
input_byte:byte;
begin
input_byte:=port(RS232_address+6),
case x of
1: Read_modem_status = 1-round((input_byte and 128)/128);
2: Read_modem_status = 1-round((input_byte and 32)/32);
3: Read_modem_status = 1-round((input_byte and 16)/16);
end;
end;
(*-Бібліотека ресурсів № A13 (читання даних зрегістра стану модему).-*)
Function read_modem_status(RS232_address, x:integer):integer;export;
(*x=l — вибір біта DCD, x=2 — вибір біта DSR, x=3 — вибір біта CTS.*)
(*DCD=біт 7, DSR=біт 5, CTS= біт 4 регістри станумодему, зміщення 06h.*)
(*Усі біти інвертуються за допомогою МАХ238 наекспериментальній пла-ті.*)
var
input byte:byte;
begin
input_byte:=port|RSZ32_addres+GJ;
case x of
1: Read_modem_status:=1-round((input_byteand 128)/128);
2: Read_modem_status:=1-round((input_byteand 32)/32);
3: Read_modem_status:=1-round((input_byteand 16)/16);
end;
end;
2.2 Опис алгоритму і функціонування програми
Алгоритм програмиполягає в записі даних у файл, а також зчитуванні даних з файлу, при моделюванніобміну даними через послідовний порт.
2.3 Опис організації вхідних та вихідних даних
В якості вхідних даних використано текстовеповідомлення, в якості вихідних даних – файл зі значеннями напруг, які описуютьпередане повідомлення у порт.
2.4 Опис організації вибору технічних і програмнихзасобів
Розробленийпрограмний продукт орієнтований на роботу в ОС Windows 95/98/NT/XP, тому длякоректної роботи програми необхідне стабільне функціонування ОС. Під часвиконання, програма не звертається до інших програмних продуктів, таких якMicrosoft Office та ін., але звертається до реєстру ОС.
Для усуненнявиявлених помилок та створення завантажувального файлу необхідний встановленийпакет інструментальних засобів Borland Delphi 6.0.
До технічних засобіввідносимо ПК, які знаходяться у лабораторії №57, де проходять лабораторнізаняття з курсу „Архітектура комп’ютерів”. Мінімальними вимогами, за якихпрограма працюватиме та буде видавати достовірні результати, до апаратноїчастини ПК, можна вважати:
/>• процесор 6-го покоління IntelCeleron 533 МГц;
• об’ємоперативної пам’яті 64 Мб.;
• графічнийадаптер S3 Savage 4 Мб.;
• жорсткий дискємністю 10 Гб.;
• привід гнучкихдисків (дисковод).
3. ОЧІКУВАНІ ТЕХНІКО – ЕКОНОМІЧНІ ПОКАЗНИКИ
Використовуючирозроблений програмний продукт, студент має можливість візуально вивчати форматпередачі даних через послідовний порт
Організаціявиконання лабораторної роботи, використовуючи розроблений програмний продукт,економить викладачу час на пояснення теоретичного матеріалу для виконаннялабораторної роботи, що надає можливість використати його в інших цілях(наприклад, уточнення деяких питань по лабораторній роботі).
Допереваг такої програми можна віднести її вузьку спеціалізацію з наявнимпрограмним кодом, на відміну від її можливих аналогів. Використовуючипрограмний код, можна розширювати функціональні можливості програми, взалежності від потреб. Таким чином, можна покращити його техніко – економічніпоказники та ефективність використання в навчальному процесі.
Список використаних джерел
1. АгуровП.В. Последовательные интерфейсы ПК. Практика программирования. –СПб.: БХВ-Петербург, 2004.– 496 с.
2. Ан П.Сопряжение ПК с внешними устройствами: Пер. с англ.– М.:ДМК Пресс, 2001.–320 с.