Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zvit_5 лаба.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
62.37 Кб
Скачать

Установка поточного комунікаційного порту

Є два способи, за допомогою яких програма може визначити, який з комунікаційних портів повинен використовуватися. Один з них – вказівка номера каналу в операторі програми. Другий спосіб – написання програми для обміну через порт СОМ1, але зміна комунікаційного адаптера, доступ до якого йде через СОМ 1.

Область даних BIOS містить місце для чотирьох двобайтовий змінних, в яких знаходяться базові адреси комунікаційних каналів (MS-DOS підтримує тільки перші два з них). Базова адреса порту - це молодша з групи адрес портів, через які можна отримати доступ до даного комунікаційного каналу. Базова адреса для СОМ1 зберігається в комірці 0040:0000, а для COM2 - в комірці 0040:0002. Для зміни комунікаційних портів треба просто поміняти ці два значення.

Середній рівень

Якщо програма звертається до комунікаційного порту через переривання 14Н BIOS, то СОМ-порт визначається в DX, що дорівнює 0 або 1 (для СОМ1 або COM2). Замість того щоб присвоювати DX безпосереднє значення, заповнюйте його зі змінної, якій може бути присвоєне значення 0 або 1. Программи, які використовують комунікаційні функції 3 і 4 переривання 21Н, завжди адресуються до СОМ1. У цьому випадку треба поміняти базові адреси:

; обмін базових адрес для СОМ1 і COM2

MOV AX, 40H ;ES вказує на область даних BIOS

MOV ES, AX

MOV DX, ES:[0] ;поміщуємо 1-у базову адресу в DX

MOV AX, ES:[2] ;поміщуємо 2-у базову адресу в AX

MOV ES: [0], АХ ;обмінюємо адреси

MOV ES:[2], DX

Визначення статусу комунікаційного порту

Регістр статусу лінії мікросхеми UART 8250 визначає протокол зв'язку. Цей регістр має адресу порту на 5 більшу, ніж базова адреса даного каналу. Звичайно він постійно переглядається в процесі комунікаційного обміну. При передачі даних регістр повідомляє, що попередній символ вже посланий, дозволяючи програмі записати новий символ. При прийомі даних регістр інформує програму про надходження наступного символа, з тим щоб програма могла прочитати його перед тим, як він буде знищений наступним прибулим. Значення бітів цього регістра наступні:

біт: 0 1 = байт даних отриманий

1 1 = отримані дані були перезаписані (попередній символ не був вчасно прочитаний)

2 1 = помилка парності (ймовірно, через шум в лінії)

3 1 = помилка оточення (передача не синхронізована)

4 1 = виявлена перерва (отриманий довгий рядок одиниць, який відображає, що інша станція запитує кінець передачі)

5 1 = регістр збереження передавача пустий (в цей регістр повинні вміщуватися дані, що передаються )

6 1 = регістр зсуву передавача пустий (цей регістр отримує дані з регістра зберігання і перетворює їх в послідовний вид)

7 1 = тайм-аут (пристрій не зв'язаний з машиною)

Середній рівень

Функція 3 переривання 14Н BIOS повертає в АН регістр статусу лінії (AL отримує регістр статусу модему [5]). При вході DX повинен містити номер комунікаційного порту, до якого здійснюється доступ, де СОМ1 = 0, а COM2 = 1. Перевіряється наявність перерви:

MOV AH, 3 ;номер функції

MOV DX, 1 ;вибираємо COM2

INT 14H ;отримуємо байт статусу

TEST AH, 10000В ;виявлена перерва?

JNZ BREAK_DETECT ;якщо так, то переходимо до процедури обробки

Низький рівень

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

MOV AX, 40H ;ES вказує на область даних BIOS

MOV ES, AX

MOV DX, ES:[2] ;отримуємо базову адресу COM2

ADD DX, 5 ;додаємо 5 для регістра статусу

IN AL, DX ;отримуємо байт статусу

TEST AL, 10000B ;біт 5 встановлений?

JNZ BREAK_DETECT ;якщо так, то переходимо до обробки перерви

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]