Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Отримання даних






Як тільки ініціалізувати комунікаційний порт [2] і встановлений зв'язок з віддаленою станцією [5] - комунікаційна програма готова приймати дані. Прийом даних ніколи повністю не відділений від їх передачі, оскільки програмі може стати потрібним послати сигнал XOFF (ASCII 19), щоб зупинити потік даних, якщо вони поступають дуже швидко і вона не встигає їх обробляти. Код XON (ASCII 17) повідомляє віддаленій станції, що можна продовжити передачу. Зазначимо, що PCjr не може приймати дані під час дискових операцій; щоб зняти це обмеження, треба застосовувати XON і XOFF.

У залежності від складності протоколу обміну дані, що приймаються можуть вимагати простої або складної обробки. Може бути отриманий будь-який код з набору керуючих кодів. Ті з них, які є обмежувачами даних, частіше виявляються при синхронному обміні. При виведенні отримуваних символів на екран враховуйте вплив символів переведення рядка (ASCII 10), оскільки деякі мови автоматично вставляють їх після кожного символа повернення каретки; в цьому випадку виключайте символи переведення рядка з даних, що приймаються, щоб уникнути пустих рядків при виведенні. На мал. 7.2 показана комунікаційна процедура, що включає також код передачі, який обговорюється в [6].

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

Функція 2 переривання 14Н BIOS чекає символ з послідовного порту, вміщує його в AL при отриманні і потім повертається в програму. При вході треба помістити номер порту (0-1) в DX. При поверненні АХ рівний нулю, якщо не було помилки. Якщо AH не рівний 0, то може бути повернений байт статусу, в якому мають значення тільки 5 біт. Це наступні біти:

біт 1 помилка переповнення (новий символ поступив раніше, ніж був видалений старий)

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

3 помилка оформлення (стартовий або стоп-біти невірні)

4 виявлена перерва (отриманий довгий рядок бітів 0)

5 помилка тайму-ауту (не отриманий сигнал DSR)

MS-DOS також надає комунікаційну функцію для прийому одного символа - функцію 3 переривання 21Н. Вона чекає символ з СОМ1 і вміщує його в AL. Зазначимо, що при цьому немає функції ініціалізації порту, яку треба робити за допомогою процедури BIOS або безпосередньо, як показано в [2]. По замовчуванні порт ініціалізується зі значеннями 2400 бод, немає контролю парності, один стоп-біт і 8 біт на символ. Ця функція не має ніяких переваг в порівнянні з функцією BIOS і не повертає інформації про статус.

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

При отриманні даних без використання комунікаційного переривання [8] програма повинна постійно перевіряти регістр статусу лінії, адресу порту якого на 5 більша базової адреси комунікаційного адаптера, що використовується. Біт 0 цього регістра буде рівний нулю, поки не буде отриманий символ в регістрі даних приймача. Коли біт 0 стає рівним 1, треба негайно зчитати його з регістра, з тим щоб на нього не наклався наступний символ, що приймається. Після того як символ прочитаний, біт 0 знову стає рівним 0 і залишається таким, поки не прибуде новий символ.

Хоч про це ще не згадувалося, але ви повинні знати, що комунікаційні процедури звичайно створюють циклічний буфер для збору поступаючих символів. Ви повинні також знати, що якщо поступаючі дані подавати на екран з швидкістю 1200 бод, то процедура зсуву екрана BIOS не буде устигати і станеться переповнення. Просте розв'язання цих проблем складається у використанні комунікаційного переривання.

У наступному прикладі частково повторюється вміст попереднього параграфа, що відноситься до передачі символів. Як і в тому випадку, код починається з нескінченного циклу. Об'єднайте ці дві процедури з процедурами ініціалізації з [2] і [5] для створення закінченої процедури введення/виведення через комунікаційний канал.

KETRY: MOV DX, BASADR; базова адреса

ADD DX, 5; вказуємо на регістр статусу лінії

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

TEST AL, 00011110В; перевіряємо на помилку

JNZ ERRROUT; якщо так, то на обробку помилки

TEST AL, 00000001B; перевіряємо, чи отримані дані

JNZ RECVE; на процедуру прийому даних

TEST AL, 00100000B; перевіряємо готовність до передачі

JZ KETRY; якщо немає, то на початок циклу

.

(тут розташована процедура передачі)

.

; отримуємо дані і виводимо їх на екран

RECVE: MOV DX, BASE_ADDRESS; базова адреса

IN AL, DX; читаємо отриманий символ

CMP AL, 19; перевірка на XOFF

JE XOFF_ROUTINE

; (іт.д.)

MOVDL, AL; готуємо символ для виведення на екран

MOV AH, 2; функція виведення

INT 21Н; виводимо його

JMP SHORT KETRY; повертаємося на початок циклу

2.9. Посилка/отримання даних за допомогою комунікаційного переривання

Ретельно продумана комунікаційна програма має занадто багато обов'язків, щоб присвятити себе цілком введенню/виведенню. Поступаючі дані повинні аналізуватися, дані, що передаються повинні збиратися, а великі блоки даних можуть записуватися на диск або прочитуватися з нього. Комунікаційне переривання дозволяє програмі не тратити на введення/виведення більше часу, ніж він того вимагає. Наприклад, після установки переривання управління передається процедурі передачі даних тільки в тому випадку, якщо регістр зберігання передавача пустий, і повертається програмі, як тільки посланий байт даних, дозволяючи їй продовжувати свою роботу доти, поки регістр зберігання передавача не буде знов готовий.

IBM PC відводить два апаратних переривання для комунікаційних каналів, номери 3 (СОМ1) і 4 (COM2). Зазначимо, що у PCjr вбудований модем має номер 3, а СОМ1 - номер 4. Мікросхема UART 8250 допускає 4 класи переривань для кожного каналу, використовуючи наступні двійкові кодові числа:

00 зміна в регістрі статусу модему

01 регістр зберігання передавача пустий

10 отримані дані

11 помилка прийому, або отримана умова перерви

Ці коди містяться в бітах 2-1 регістра ідентифікації переривання, адреса порту якого на 2 більша, ніж базова адреса комунікаційного адаптера, що використовується. Біт 0 цього регістра встановлюється при виникненні переривання, а інші біти не використовуються і завжди рівні 0.

Щоб вибрати одне або більше переривань, треба запрограмувати регістр дозволу переривання, адреса якого на 1 більша базової адреси. Значення його бітів можуть бути такими:

біт 0 1 = переривання при отриманні даних

1 1 = переривання, коли регістр зберігання передавача пустий

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

3 1= переривання при зміні регістра статусу модему

7-4 не використовуються, завжди 0

Коли одна з цих подій відбувається, ініціюється апаратне переривання, виникаюче в мікросхемі обробки переривань 8259 по каналу 3 для СОМ1 і по каналу 4 для COM2. Процедура обробки переривань передає управління тому коду, на який вказує відповідний вектор переривання. Оскільки це апаратне переривання, то воно може бути масковане. Пам'ятайте, що процедура обробки переривання повинна завершуватися стандартним кодом виходу з апаратного переривання MOV AL, 20H/OUT 20H, AL. На рис. 2 показане комунікаційне переривання.

Одночасно можливе будь-яке число типів переривання. Але якщо дозволений більш ніж один тип, процедура обробки переривання повинна сама визначати, який з типів переривання стався, перевіряючи регістр ідентифікації переривання. Одночасно можуть відбуватися більш ніж одне переривання, тому біт 0 регістра ідентифікації повідомляє про те, що поступило ще одне переривання. Коли два або більше перериваннь поступають в один і той же момент, то вони обробляються в порядку, вказаному в приведеній нижче таблиці. Додаткові переривання повинні бути оброблені до завершення процедури обробки переривання. Умови попередніх переривань " відміняються" за допомогою дій, що пропонуються в правому стовпці наступної таблиці:

 

Код Тип Дії для “сбросу”
  помилка або перерва читання регістру статусу лінії
  отримані дані читання регістру приймача даних
  передавач готовий виведення символа в регістр зберігання передавача
  зміна статусу модему читання регістра статусу модему

 

 


Рис. 2. Комунікаційне переривання

 

Приведемо загальну форму програми, що обробляє комунікаційні переривання:

 

; установка вектора комунікаційного перериванні

PUSH DS; зберігаємо DS

MOV DX, OFFSET IOIN; DS: DX вказують на процедуру

MOV AX, SEG IOIN

MOV DS, AX

MOV AL, 0BH; номер вектора для СОМ1

MOV AH, 25H; функція зміни вектора

INT 21H; міняємо вектор переривання

; ініціалізація регістра дозволу переривання (СОМ1)

MOV AX, 40H; DS вказує на дані BIOS

MOV DS, AX

MOV DX, DS: [0]; отримуємо базову адресу СОМ1

INC DX; вказуємо на регістр дозволи

MOV AL, 3; переривань і дозволяємо переривання

OUT DX, AL; прийому і передачі

POP DS; відновлюємо регістр

; процедура обробки переривання - спочатку визначаємо його тип

IOIN PROC FAR

NEXIN: MOV DX, BASADR; базова адреса

INC DX; вказуємо на регістр ідентифікації

INC DX; переривання

IN AL, DX; читаємо його значення

TEST AL, 10B; це переривання передавача?

JNZ TRANSMIT; якщо так, то на передачу

RECEIVE:; інакше - на прийом

JMP SHORT ANOT; перевіряємо, чи немає іншого переривання

TRANSMIT:; починаємо процедуру передачі символа

; перед виходом перевіряємо, чи немає іншого переривання

ANOT: MOV DX, BASADR; базова адреса

INC DX; вказуємо на регістр ідентифікації

INC DX; переривання

IN AL, DX; читаємо його значення

TEST AL, 1; перевіряємо біт 1

JNZ NEXT_INT; якщо він встановлений, то на початок

MOV AL, 20H; иначе, код завершення апаратного

OUT 20H, AL; перериванні

IRET

IO_INT ENDP

 

3. КОНТРОЛЬНІ ЗАПИТАННЯ

1. Вкажіть призначення та основнi функцiї зовнішніх інтерфейсів ПЕОМ.

2. Якi особливостi організації передачі даних через послідовний інтерфейс?

3. Які режими роботи адаптера послідовного інтерфейсу?

4. Вкажіть основні сигнали послідовного інтерфейсу.

5. В чому полягає обмін сигналами в режимі “рукопотискання”?

6. Вкажіть на особливості організації двонаправленого обміну даними.

7. Прокоментуйте команди фрагментів програми обміну.

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.