Комп’ютерне моделювання роботи послідовного порта

СОДЕРЖАНИЕ: Формати прийому та передачі даних через послідовний порт, його технічні характеристики, будова і принцип роботи. Характеристика протоколів послідовної передачі. Способи керування портами у WINDOWS95 та WINDOWS XP. Опис алгоритму і функціонування програми.

КОМП’ЮТЕРНЕ МОДЕЛЮВАННЯ РОБОТИ

ПОСЛІДОВНОГО ПОРТА

(дипломна робота)

2007


АНОТАЦІЯ

Пояснююча записка складається з основних розділів, які пов’язані з аналізом й обґрунтуванням теми курсової роботи, призначенням і областю застосування, описом функціональних можливостей програми, вибором технічних і програмних засобів, організації вхідних та вихідних результатів, розглядом очікуваних техніко – економічних показників та списком використаних джерел літератури при розробці програмного продукту. Пояснювальна записка містить відомості про способи обміну даними через послідовні порти, протоколи передачі даних, характеристики каналів зв’язку.


ЗМІСТ

ВСТУП

1. Призначення та область застосування

2. Технічні характеристики

2.1Постановка задачі на розробку програми

2.1.1 Протоколи послідовної передачі

2.1.2 Будова і принцип роботи послідовного порта

2.1.3 Способи керування портами у WINDOWS95 таWINDOWSXP

2.2Опис алгоритму і функціонування програми

2.3 Опис організації вхідних та вихідних даних

2.4 Опис організації вибору технічних і програмних засобів

3. Очікувані техніко – економічні показники

Список використаних джерел


Вступ

Взаємодія комп’ютера з зовнішніми пристроями досить часто відбувається через послідовний (СОМ) порт (Serial Interface RS-232C). Послідовна передача даних дозволяє значно спростити канал зв’язку між пристроями, але одночасно приводить до ускладнення формату передачі даних. Тому для ефективного використання послідовних портів потрібно чітко розуміти принципи та формати послідовної передачі даних.

Метою пояснювальної записки є ознайомлення з принципами і форматами прийому та передачі даних через послідовний порт. Оскільки аналізувати стан бітів даних при реальній передачі через послідовний порт є досить складною задачею, тому доцільно використати програмне моделювання обміну даними.


1. Призначення та область застосування

Розроблена програма призначена для вивчення принципів передачі інформації через послідовний порт. Програма може використовуватися при вивченні матеріалів з дисципліни „Пристрої зв’язку з об’єктом”.


2. Технічні характеристики

2.1 Постановка задачі на розробку програми

При вивченні обміну даними через послідовний порт велика увага приділяється формату даних, але безпосередньо розглядати формат даних досить складно. Тому створена програма повинна забезпечувати зручне представлення даних при їх записі і зчитуванні. Враховуючи вищенаведені обставини, можна підвищити ефективність виконання лабораторної роботи з дисципліни „Пристрої зв’язку з об’єктом”, а цим самими покращити навчальний процес на кафедрі КСМ Чернівецького національного університету імені Ю. Федьковича.

Розглянемо роботу послідовного порта більш детально.

2.1.1 Протоколи послідовної передачі

Послідовний інтерфейс використовується для звязку двох пристроїв між собою. Дані в одну сторону передаються по одному проводу за допомогою послідовності бітів. Природно, при підключенні декількох пристроїв до компютера обмін виробляється тільки з одним з цих пристроїв. Для з’єднання з боку комп’ютера використовується інтерфейс, названий СОМ-порт (COMmunicationport, комунікаційний порт).

Цей порт забезпечує асинхронний обмін і реалізується на мікросхемах універсальних асинхронних прийомопередатчиків (UATR, UniversalAsynch-ronousReceiverTransmitter), сумісних з сімейством і8250. Хоча стандарт RS-232C передбачаєй асинхронний, і синхронний режими обміну. СОМ-порт комп’ютера підтримує тільки асинхронний режим. Для реалізації синхрон-ного обміну застосовуються спеціальні адаптери, наприклад, SDLCчи V.35.

Слово протокол вносить деяку плутанину. З одного боку, RS-232 і RS-485 називають протоколами, а з іншого, MODBUS, ZModem і CAN - також протоколи. Який же з них справжній? Справа в тім, що послідовний звязок складається з двох складових - апаратної і програмної. Стандарти RS-232, RS-485 і інші описують апаратну частину: роз’єми, призначення сигналів, рівні напруг і т.п. Друга складова - програмна реалізація протоколів, домовленість про правила передачі. І ще одне зауваження. Усі стандарти мають подвійні, а то і потрійні назви. Подвійність назв звязана з тим, що Міжнародний союз електрозвязку ITU-T використовує аналогічні стандарти з назвами V.xx. І, взагалі говорячи, дві назви це ще не межа. Так, стандарту RS-232 відповідає ISO2110, Міністерство оборони США випустило практично ідентичний стандарт Mil-Std-188C. а в нашій країні подібний стандарт уведений ДСТ 18145-81.

DTE (DataTerminalEquipment) - кінцеве устаткування, що приймає чи передає дані. У якості 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, TelecommunicationIndustryAssociation, http://www.tiaonline.org) і асоціацією електронної промисловості (EIAElectronicIndustriesAlliance, http://www.eia.org) EIA/TIA-232-E. Більш відомий за назвою RS-232.

Стандарт RS-232 (його офіційна назва InterfaceBetweenDataTerminalEquipmentandDataCircuit-TerminationEquipmentEmployingSerialBinaryDataInterchange) призначений для підключення апаратури, що передає чи приймає дані, до кінцевої апаратури каналів даних. Стандарт описує керуючі сигнали інтерфейсу, пересилання даних, електричний інтерфейс і типи роз’ємів.

Інтерфейс 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-TV.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 біти. Спеціально розроблений електронний пристрій, що генерує і приймає послідовні дані, називається універсальним асинхронним прийомо-передавачем (UniversalAsynchronousReceiverTransmitter, UART).


Рис. 2.1. Формат послідовних даних, які формує UART

Обмін інформацією за допомогою мікросхем UARTвідбувається в такий спосіб. Приймач виявляє перший фронт стартового біта і вичікує один чи півтора тактових інтервали, оскільки зчитування повинне початися точно в середині першої посилки. Через один тактовий інтервал зчитується другий біт даних, причому це відбувається точно в середині другої посилки. Після закінчення інформаційного обміну приймач зчитує перевірочний біт для виявлення помилок і стоповий біт, а потім переходить у режим чекання наступної порції даних.

Швидкість передачі інформації в послідовному інтерфейсі вимірюється в бодах (бод - кількість переданих бітів за 1 с). Стандартні швидкості рівні 110, 150, 300, 600, 1200, 2400, 4800, 9600 і 19200 бод. Знаючи швидкість у бодах, можна обчислити число переданих символів за секунду. Наприклад, якщо мається вісім біт даних без перевірки на парність й один стоповий біт, то загальна довжина послідовності, включаючи стартовий біт, дорівнює 10. Швидкість передачі символів відповідає швидкості в бодах, діленої на 10. Таким чином, при швидкості 9600 бод (див. рис. 1.6) буде передаватися 960 символів у секунду.

Перевірочний біт призначений для виявлення помилок у переданих бітах даних. Коли він присутній, здійснюється перевірка на парність чи непарність. Якщо інтерфейс націлений на перевірку за парністю, такий біт буде виставлятися в одиницю при непарній кількості одиниць у бітах даних, і навпаки. Це найпростіший спосіб перевірки на наявність однократних помилок у переданому блоці даних. Однак, якщо під час передачі було спотворено декілька бітів, подібна помилка не виявиться. Перевірочний біт генерується передаючим UART таким чином, щоб загальна кількість одиниць була непарним чи парним числом в залежності від настройки інтерфейсу; приймаючий пристрій повинен мати таку ж настройку. Прийомний UART рахує кількість одиниць у прийнятих даних. Якщо дані не проходять перевірку, генерується сигнал помилки.

Більшість компютерів, сумісних з IBMPC, використовує UART 16450, з IBMPCXT - 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 Готовність зовнішнього пристрою. Лінія взаємодії, за допомогою якої зовнішнійпристрій повідомляє комп’ютеру, що воно ввімкнене і готове до звязку. Якщо взаємодії не потрібно, вона може використовуватися як двійковий вхід.

Внутрішній апаратний пристрій

Компютер, сумісний з IBMPC, може мати до чотирьох послідовних портів. Вони маркуються як COМ1 - COM4. Кожен СОМ-порт формується окремим UART16450, встановленим усередині компютера.

UART8250/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 SINPERBKTBERxRD

біти з 7 по 4 завжди нулі

SINP1 = переривання по зміні стану ліній CTS, DSR, DCD і RI

0 = немає переривання

ERBK1 = переривання при помилці прийому даних

0 = немає переривання

ТВЕ 1 = переривання, коли регістр передавача порожній

0 = немає переривання

RxRD1 = переривання при одержанні цаннх

0 = немає переривання

По зсуву 02h знаходиться регістр ідентифікації переривань. При виникненні переривання нульовий біт цього регістра встановлюється в 0. Біти 1 і 2 указують причину переривання. Біти з 7 по 3 не використовуються і завжди дорівнюють нулю. Призначення бітів регістра наступне:

0 0 0 0 0 ID1 ID0 PND

PND1 = немає переривання

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 знаходиться регістр формату даних, що визначає такі параметри переданих даних, як швидкість, кількість бітів даних, кількість стопових бітів і настроювання перевірочного біту. Призначення бітів регістра приведене нижче:

DLABBRKPAR2 PAR1 PAR0 STOPDAB1 DAB0

DLAB1 = доступ до установки швидкості 0 = доступ до регістра приймача/регістру передавача (00h) й до регістра дозволу переривань

BRK1 = зупинка включена

0 = зупинка виключена

PAR2,1,0 000 = немає перевірки

001 = непарна

011 = парна

101 = завжди 1

111 = завжди

STOP1 = 2 стопових біти

0 = 1 стоповий біт

DAB1,0 00 = 5 біт даних

01 = 6 біт даних

10 = 7 біт даних

11 = 8 біт даних

Коли біт DLAB дорівнює 1, регістри прийомопередавача (00h) і дозволу переривань (01h) використовуються для завантаження дільника швидкості обміну. У перший записується молодший, у другий - старший байт дільника. Вони формують шістнадцятибітовий дільник, значення якого обчислюється за наступною формулою:

Дільник = байтрегістр 00 h + 256байт регістр 01 h

У компютері тактова частота, що подається в UART, складас 1,8432 Мгц. Усередині UARTеталонна частота утвориться як тактова, ділена на 16, і дорівнює 115200 Гц. Співвідношення між значеннями дільника і швидкістю можна представити у виді формули:

Для одержання швидкості 9600 бод необхідно, щоб дільник був рівний 12. Отже, у буферний регістр прийомопередавача (00h) повинно бути записане число 12, а в регістр дозволу переривань (01h) - нуль. Якщо в регістри дільника записана одиниця, то вийде найвища швидкість - 115200 бод.

По зсуву 04h розташований регістр керування модемом. У загальному випадку він використовується для керування двома виходами інтерфейсу - RTSі DTR. Призначення бітів регістра наступні:

0 00 LOOPОUT2 ОUT1 RTSDTR

біти 7-5 завжди нулі

LOOP1 = зворотний звязок доступний

0= зворотний звязок недоступний

ОUT2 1 = включено

0 = виключено, для внутрішнього використання

OUT1 1 = включено

0 = виключено, для внутрішнього використання

RTS1 = включено

0= виключено, є присутнім на роз’ємі RS232

DTR1 = включено

0 = виключено, є присутнім на роз’ємі RS232

По зсуву 05hзнаходиться регістр стану прийомопередавача, що містить інформацію про стан приймача і передавача UART. При використанні разом з регістром ідентифікації переривань (02h) можна установити джерело переривань. Призначення бітів регістра приведені нижче:

0 ТХЕ ТВЕ BREKFRMEPAREOVFERxRD

ТХЕ (передавач порожній) 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, а також для зчитування чотирьох цифрових вхідних ліній. Призначення бітів регістру наступні:

DCDRIDSRCTSDDCDDRIDDSRDCST

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 таWINDOWSXP

Програмне керування

У розділі приведені основні варіанти програмування послідовного порту.

Одержання базової адреси послідовного порту

Представлена програма, написана мовою QBASIC, виводить загальну кількість СОМ-портів, вбудованих у ПК, і їхні базові адреси. Рядок 20 зчитує байт з комірки памяті 0000:0411 h, використовуючи команду РЕЕК(). Біти 0,1 і 2 містять інформацію про кількість встановлених СОМ-портів. На ці три біти накладається маска за допомогою оператора AND(1+2+4) для визначення кількості портів. Рядок 30 зчитує два байти з комірок памяті, що містять базову адресу СОМ1. Рядки 40, 50 і 60 роблять те ж саме для інших портів.

10 DEFSEG=0

20 PRINT Number of RS232 ports:, (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 INPUTX

Наступна функція, написана мовою TP6, зчитує інформацію про кількість встановлених портів і привласнює отримане значення змінній Number_of_ COM. Потім вона зчитує базові адреси з комірок памяті, де вони зберігаються, і привласнює адресу обраного порту змінній RS232_address.

(*-Бібліотека ресурсів № А6 (визначення базових адрес СОМ-портів).-*)

ProcedureCOM_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);

ifnumber_of_COM1 then

begin(*Вибір конкретного порту, якщо встановлено кілька портів.*)

repeat

kbchar:=readkey; (*3читування значення з клавіші, що вводиться.*)

val(kbchar,COM_number,code); (*Перетворення символу в число.*)

until (COM_number=1) and (COM_number=4) and (COM[COM_number]0);

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), написана мовою TurboPascal для Windows. RS232(0) повертає кількість установлених СОМ-портів, RS232(1) - базову адресу СОМ1, RS232(2) - базову адресу COM2 і т.д.

(*-Бібліотека ресурсів № A6(визначення базових адрес СОМ-портів).-*)

(Universal auto detection of COM base address)

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операційної системи MSDOS. Синтаксис команди можна представити так:

MODE COMm: baud=b, parity=p, data=d, stop=s, retry=r

або MODE COMm:b,p,d,s,r

MODECOM1:96,n,8,1 конфігурує порт СОМ1 з наступними параметрами: швидкість 9600 бод, без перевірки на парність, 8 біт даних, 1 стоповий біт. Зазначена команда може бути включена у файл autoexec.bat. Недолік такого методу - неможливість змінювати формат передачі даних у користувацьких програмах.

Другий метод використовує переривання BIOSINT 14h, що дозволяє виконувати конфігурування порту з програм користувача. Для цього необхідно в регістр АН завантажити 0, а в DX- число від 0 до 3, що вказує на відповідний порт (СОМ1 - COM4). У регістр AL завантажується байт ініціалізійних даних, значення бітів якого показані нижче:

BD2 BD1 BDO PAR1 PAR0STOP DA1DA0

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 робить те ж, що і команда DOSMODEСОМ1:96,n,8,1.

Procedureinitialize;

{СОМ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 divisor255 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;

Наступна функція, написана мовою TurboPascal для 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 divisor255 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:

OUT3F8h,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 (зчитування даних з буферного регістра прий-мача).*)

Functionread_receive_buffer(RS 232_addгеss,output_byte: integer]: integer;

begin

read_receive_buffer:=port(RS232_address);

end;

Нижче показані дві функції, написані на TurboPascal для Windows.

(*Бібліотека ресурсів № А10 (запис даних в буферний регістр передавача).*)

Functionwrite_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;


Передача даних по лініях взаємодії

Для виводу даних через лінії RTSі DTRу регістр керування модемом (зміщення 04h) необхідно записувати біти 1 і 0, що відповідають сигналам RTSі DTR. Лінії керуються процедурами на мовах TP6 і TurboPascalдля Windows, що вимагають базову адресу обраного СОМ-порту і стан цих ліній - або 0, або 1. Причому RTE і DTR інвертуються перед подачею в порт з метою компенсації інверсії перетворювачами TTЛ/RS232, що також використовуються для трансформації рівня напруги.

(*-Бібліотека ресурсів № А11 (запис даних у регістр стану модему).-*)

procedurewrite_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 (читання даних з регістра стану модема).-*)

Functionread_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_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;

2.2 Опис алгоритму і функціонування програми

Алгоритм програми полягає в записі даних у файл, а також зчитуванні даних з файлу, при моделюванні обміну даними через послідовний порт.

2.3 Опис організації вхідних та вихідних даних

В якості вхідних даних використано текстове повідомлення, в якості вихідних даних – файл зі значеннями напруг, які описують передане повідомлення у порт.

2.4 Опис організації вибору технічних і програмних засобів

Розроблений програмний продукт орієнтований на роботу в ОС Windows 95/98/NT/XP, тому для коректної роботи програми необхідне стабільне функціонування ОС. Під час виконання, програма не звертається до інших програмних продуктів, таких як Microsoft Office та ін., але звертається до реєстру ОС.

Для усунення виявлених помилок та створення завантажувального файлу необхідний встановлений пакет інструментальних засобів Borland Delphi 6.0.

До технічних засобів відносимо ПК, які знаходяться у лабораторії №57, де проходять лабораторні заняття з курсу „Архітектура комп’ютерів”. Мінімальними вимогами, за яких програма працюватиме та буде видавати достовірні результати, до апаратної частини ПК, можна вважати:

• процесор 6-го покоління Intel Celeron 533 МГц;

• об’єм оперативної пам’яті 64 Мб.;

• графічний адаптер S3 Savage 4 Мб.;

• жорсткий диск ємністю 10 Гб.;

• привід гнучких дисків (дисковод).


3. ОЧІКУВАНІ ТЕХНІКО – ЕКОНОМІЧНІ ПОКАЗНИКИ

Використовуючи розроблений програмний продукт, студент має можливість візуально вивчати формат передачі даних через послідовний порт

Організація виконання лабораторної роботи, використовуючи розроблений програмний продукт, економить викладачу час на пояснення теоретичного матеріалу для виконання лабораторної роботи, що надає можливість використати його в інших цілях (наприклад, уточнення деяких питань по лабораторній роботі).

До переваг такої програми можна віднести її вузьку спеціалізацію з наявним програмним кодом, на відміну від її можливих аналогів. Використовуючи програмний код, можна розширювати функціональні можливості програми, в залежності від потреб. Таким чином, можна покращити його техніко – економічні показники та ефективність використання в навчальному процесі.


Список використаних джерел

1. Агуров П.В. Последовательные интерфейсы ПК. Практика программирования. –СПб.: БХВ-Петербург, 2004.– 496с.

2. Ан П. Сопряжение ПК с внешними устройствами: Пер. с англ.– М.: ДМК Пресс, 2001.– 320 с.

Скачать архив с текстом документа