Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Новая_Арх.комп.обезано(ПМ).doc
Скачиваний:
8
Добавлен:
17.09.2019
Размер:
707.58 Кб
Скачать

5 Лабораторная работа № 6 «Работа с портами

вводавывода информации»

Цель: изучение основ работы с портами ввода–вывода информации.

Содержание работы. Непосредственный обмен информацией с периферийными устройствами через порты ввода–вывода информации. Программирование генерации звука с помощью системного динамика. Есть три основных уровня обращения прикладных программ к периферийным устройствам:

1-й уровень используя вызовы функций операционной системы, в нашем случае MS-DOS;

2-й уровень используя прерывания BIOS, ответственного за работу данного устройства;

3-й уровень непосредственным обращением к портам вводавывода периферийного устройства.

Наиболее часто используется первый уровень, т.к. обычно операционная система предлагает широкий набор функций работы с устройствами, однако если вас не устраивает скорость обращения или нужной функции все же нет, то используются более глубокие уровни.

В рассматриваемом случае операционная система не обращается к системному динамику, и своего BIOS у него нет, поэтому будем использовать обращение к портам. Системный динамик – устройство очень простое, поэтому отдельного порта ему не полагается. Всего два младших бита порта 061h отвечают за его работу. Если они равны 11, то динамик включен, если 00, то выключен. Для генерации какой-либо частоты будем использовать еще и системный таймер, который может генерировать меандр с определенной частотой. Системный таймер – устройство более сложное и имеет несколько портов. Для нас интересны порты 043h – порт управления и 042h – порт, в который задается делитель частоты. На таймер подается опорный сигнал с частотой 1.19318 МГц. На выходе таймера можно получать произвольную частоту с помощью делителя частоты. Однако сам внутренний регистр имеет размер 16 бит, следовательно, максимальный делитель равен 216 = 65536 и минимальная частота  18.2 Гц. Этого вполне достаточно, чтобы перекрыть весь звуковой диапазон. Один небольшой нюанс все рассматриваемые порты байтовые, а регистр делителя 2-байтовый. Для того чтобы полностью его заполнить, применяется последовательное обращение к данному порту, т.е. сначала в порт посылается младший байт делителя, затем старший. В порт управления 043h необходимо послать число 10110110b. Два старших бита указывают режим работы таймера (10 – генерация звука); 5 и 4 биты устанавливают режим обращения (11 – сначала младший байт, затем старший); 3, 2 и 1 биты указывают на режим вывода (011 – генерация меандра); младший бит устанавливает системы обращения – двоичную или двоично-десятичную (0/1 – Bin/BCD).

Порядок выполнения работы: составить исходный текст программы на Ассемблере; создать исполняемый файл программы; защитить программу.

Задание. Написать программу, проигрывающую простую мелодию с помощью системного динамика.

Рекомендации. Задать режим работы и делитель для системного таймера, включить динамик, при этом нельзя затрагивать остальные биты порта 061h. Для этого используйте логические команды Ассемблера, которые позволяют обращаться к каждому биту. После некоторой задержки выключите динамик.