47453 (588484), страница 3

Файл №588484 47453 (Комп’ютерне моделювання роботи послідовного порта) 3 страница47453 (588484) страница 32016-07-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

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 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 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_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), написана мовою Turbo Pascal для 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 операційної системи MS DOS. Синтаксис команди можна представити так:

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

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

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

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

BD2 BD1 BDO PAR1 PAR0 STOP DA1 DA0

BD2 - BDO (швидкість) 111 = 9600

011 = 600

110 = 4800

010 = 300

101 = 2400

001 =150

100 = 1200

000=110

PAR1,0 (перевірка на парність) 00 чи 10 = немає перевірки

01 = непарна

11 = парна

STOP (кількість стопових бітів) 0 = 1

1 = 2

DA1,0 (довжина блоку даних) 10 = 7 біт

11 = 8 біт

Наступна програма на мові ТР6 робить те ж, що і команда DOS MODE СОМ1:96,n,8,1.

Procedure initialize;

{СОМ1: 9600, без перевірки на парність, 0 біт даних, 1 стоповий біт.}

var

register: registers;

begin

with register do

begin

ah:=0; {Завантаження номера функції переривання.}

al:=128+64+32+0+0+0+2+1; {Завантаження ініціалізаційного коду 11100011B.}

dx:=0; {Номер порту: DX=0:COM1, DX=1:COM2 і т.д.}

intr($14,register); {Виклик переривання BIOS.}

end;

end;

Обмеження описаного методу полягає в тому, що можна задати швидкість тільки 9600 бод. UART 16450 здатний працювати зі швидкістю 115200 бод, це досягається безпосереднім звертанням до регістра. Третій, найбільш гнучкий метод конфігурує порт за допомогою запису даних у регістр формату даних UART (зсув 03h). Наступна програма на ТР6 дозволяє налаштувати сам регістр, для цього потрібна базова адреса порту, що конфігурується, швидкість, режим перевірки, довжина блоку даних і кількість стопових бітів. Процедура переводить задану швидкість у шістнадцятибітовий дільник і завантажує його у відповідні регістри.

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

Procedure Write_data_format (RS232_address, Baud, Parity, Data_bit,

Stop_bit:integer);

var

byte1,byte2,output_byte:byte;

divisor:integer;

begin

divisor:=115200 div Baud;

if divisor<=255 then begin byte1:=divisor; byte2:=0; end;

if divisor>255 then begin byte1:=divisor mod 256; byte2:=divisor div 256;

end;

output_byte:=(data_bit-5)+4*(stop_bit-1)+8*(parity);

port(RS232_address+3):=128:

{Завантаження ініціалізаційних даних, перший біт регістра дорівнює 1.}

port(RS232_address+0):=byte1; {Молодший байт дільника дорівнює 1.}

port(RS232_address+1);=byte2; {Старший байт дільника дорівнює 0.}

port(RS232_address+3):=output_byte; {Завантаження дільника й інших параметрів.}

end;

Наступна функція, написана мовою Turbo Pascal для Windows, виконує те ж саме:

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

Function Write_data_format(RS232_address, Baud, Parity, Databit,

Stop_bit:integer):integer; export;

Var

byte1, byte2,output_byte:byte;

divisor:integer;

begin

divisor:=115200 div Baud;

if divisor<=255 then begin byte1:=divisor; byte2:=0; end;

if divisor>255 then

begin

byte1:=divisor mod 256;

byte2:=divisor div 256;

end;

output_byte:=(data_bit-5)+4*(stop_bit - 1)+8*(parity);

port(RS232_address+3):=126;

{Завантаження ініціалізаційних даних, перший біт регістра порівнює 1.}

port(RS232_address+0):=byte1; {Молодший байт дільника дорівнює 1.}

port(RS232_address+1):=byte2; {Старший байт дільника дорівнює 0.}

port(RS232_address+3):=output_byte; {Завантаження дільника й інших параметрів.}

end;

Передача і прийом послідовних даних

Існує кілька способів прийому і передачі даних через послідовний порт: за допомогою команд операційної системи, переривань BIOS чи безпосереднього доступу до порту. Останній спосіб найбільш зручний при проведенні операцій введення/виведення загального призначення. Розглянемо приклад для порту СОМ1. Щоб передати дані, можна записати їх безпосередньо в буферний регістр передавача 3F8h використовуючи наступний оператор мови QBASIC:

OUT 3F8h,X

де X - дані в десятковому форматі. Для одержання даних з порту СОМ1 зчитуються дані з буферного регістра приймача 3F8h. З цією метою використовується інший оператор мови QBASIC (Y - вхідні дані в десятково-му форматі):

Y=INP(3F8h)

Наступні дві процедури написані на мові ТР6 і виконують ті ж функції.

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

Procedure write_transmit_buffer(RS232_address,output_byte:integer);

Begin

port(RS232_address):=output_byte;

end;

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

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

begin

read_receive_buffer:=port(RS232_address);

end;

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

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

Function write_transmit_butfer(RS232_address;output_byte:integer):integer; export;

begin

port(RS232_address):=output_byte;

end;

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

Function read_reseive_buffer(RS232_address,output_byte:integer):integer; export;

begin

read_reseive_buffer:=port(RS232_address);

end;

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

Для виводу даних через лінії 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_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 с.

Характеристики

Тип файла
Документ
Размер
5,87 Mb
Учебное заведение
Неизвестно

Список файлов ВКР

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7021
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее