Работа с портами ввода/вывода
Рассмотрение основных шагов программирования микросхемы. Разработка программы с фиксированным заданием длительности и частоты звучания. Особенности реализации команд in и out. Характеристика основ использования регистров для управления динамиком.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 16.04.2015 |
Размер файла | 23,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Лабораторная работа № 1. Работа с портами ввода/вывода
Цель работы: изучение команд ввода/вывода IN и OUT в порты компьютера, режимов программирования таймера и динамика ПЭВМ.
Краткие сведения из теории
Портом ввода-вывода называется конкретное значение адреса в пределах адресного пространства ввода/вывода. Каждое устройство компьютера имеет в этом пространстве свой адрес. Физически порту ввода-вывода соответствует аппаратный регистр (отличный от регистра микропроцессора), доступ к которому осуществляется с помощью специальных команд ассемблера in и out.
Команды ввода/вывода в порт имеют следующий формат:
in аккумулятор,номер_порта - ввод в аккумулятор из порта
с номером номер_порта;
out порт, аккумулятор - вывод содержимого аккумулятора
в порт с номером номер_порта.
Например,
in al,60h ; ввести байт из порта 60h
Команды in и out работают с фиксированной номенклатурой объектов. В качестве источника информации или приемника применяются регистры-аккумуляторы ax, al. Выбор регистра определяется разрядностью порта. Номер порта может задаваться непосредственным операндом в командах in и out или значением в регистре dx. Последний способ позволяет динамически определить номер порта в программе.
Управление звуковыми сигналами компьютера осуществляется от программируемого таймера и динамика, структурная схема которых представлена на рис. 1.
Программирование микросхемы таймера 8253 / 8254
Каждый из трех каналов микросхемы таймера 8253 (8254 для АТ) состоит из трех регистров. Доступ к каждой группе из трех регистров осуществляется через один порт; номера портов от 40h до 42h соответствуют каналам 0 - 2. Порт связан с 8-битовым регистром ввода/вывода, который посылает и принимает данные для этого канала.
Когда канал запрограммирован, через этот порт посылается 2-байтовое значение, сначала младший байт. Это число передается в 16-битовый регистр задвижки (latch register), который хранит его и из которого копия помещается в 16-битовый регистр счетчика. В регистре счетчика число уменьшается на единицу каждый раз, когда импульс от системных часов пропускается через канал. Когда значение этого числа достигает нуля, канал выдает выходной сигнал и затем новая копия содержимого регистра задвижки передвигается в регистр счетчика, после чего процесс повторяется. Чем меньше число в регистре счетчика, тем быстрее ритм. Все три канала всегда активны: процессор не включает и не выключает их. Текущее значение любого из регистров счетчика может быть прочитано в любой момент времени, что не влияет на счет.
Каждый канал имеет две входные и одну выходную линии. Выходная линия выводит импульсы, возникающие в результате подсчета. Назначение этих сигналов варьируется в зависимости от типа IBM PC.
Канал 0 используется системными часами времени суток. Он устанавливается BIOS при старте таким образом, что выдает импульсы приблизительно 18,2 раза в секунду. 4-байтовый счетчик этих импульсов хранится в памяти по адресу 0040:006С (младший байт хранится первым). Каждый импульс инициирует прерывание таймера (вектор 8) и именно это прерывание увеличивает показание счетчика. Это аппаратное прерывание, поэтому оно обрабатывается всегда независимо от того, чем занят процессор, если только разрешены аппаратные прерывания. Выходная линия используется также для синхронизации некоторых дисковых операций, поэтому если вы изменили ее значение, то вам необходимо восстановить первоначальное значение перед обращением к диску.
Канал 1 управляет обновлением памяти на всех машинах, кроме PCjr, поэтому его лучше не трогать. Выходная линия этого канала связана с микросхемой прямого доступа к памяти и ее импульс заставляет микросхему DMA обновить всю память. На PCjr канал 1 служит для преобразования входных данных с клавиатуры из последовательной в параллельную форму. PCjr не использует микросхему прямого доступа к памяти. По этой причине, когда он вместо этого прогоняет данные через процессор, прерывание от таймера заблокировано. Канал 1 используется для подсчета заблокированных импульсов часов времени суток с тем, чтобы можно было обновить значение счетчика после завершения дисковых операций.
Канал 2 связан с динамиком компьютера и производит простые прямоугольные импульсы для генерации звука. Программисты имеют больше возможностей управлять вторым каналом, чем остальными. Простые звуки могут генерироваться одновременно с другими программными операциями, а более сложные звуковые эффекты могут быть достигнуты за счет использования процессора. Канал 2 может быть отсоединен от громкоговорителя и использован для синхронизации. Выходная линия канала 2 связана с динамиком компьютера. Однако динамик не будет генерировать звук до определенных установок микросхемы интерфейса с периферией 8255.
Две входные линии для каждого канала состоят из линии часов, передающей сигнал от микросхемы системных часов, и линии, называемой воротами (gate), которая включает и выключает сигнал от часов. Ворота всегда открыты для сигналов часов по каналам 0 и 1. Однако они могут быть закрыты для канала 2, что позволяет производить некоторые специальные манипуляции со звуком. Ворота закрываются установкой младшего бита порта с адресом 61h, который является регистром микросхемы 8255; сброс этого бита снова открывает ворота. Аналогично выходу канала 2, бит 1 порта 61h связан с динамиком и также может использоваться для генерации звука.
Микросхема таймера может применяться непосредственно для временных операций, но это редко бывает удобным. Ввод с часов производится 1,19318 млн. раз в секунду (даже на АТ, где системные часы идут быстрее, микросхема таймера получает сигнал с частотой 1,19 МГц). Поскольку максимальное число, которое может храниться в 16 битах, равно 65535 и поскольку это число делится на частоту импульсов от часов, равную 18,2, то максимально возможный интервал между импульсами равен приблизительно 1/12 с. Поэтому в большинстве временных операций используется счетчик времени суток BIOS. Для подсчета времени читается значение времени суток и сравнивается с некоторым значением (которое запоминалось ранее) для определения числа импульсов, прошедших с того момента. Счетчик времени суток может быть использован для операций в реальном времени.
Микросхема таймера 8253 предоставляет разработчикам оборудования 6 режимов работы для каждого канала. Программисты обычно ограничиваются третьим режимом как для канала 0 при синхронизации, так и для канала 2 при синхронизации или генерации звука. В этом режиме, как только регистр задвижки получает число, он немедленно загружает копию в регистр счетчика. Когда значение в счетчике достигает нуля, регистр задвижки мгновенно перезагружает счетчик и т. д. В течение первой половины отсчета выходная линия включена, а в течение второй - выключена. В результате получаются прямоугольные волны, которые одинаково пригодны как для генерации звука, так и для подсчета.
Способом загрузки чисел в канал управляет 8-битовый командный регистр. Адрес порта для этого регистра равен 43h. Командному регистру передается байт, который сообщает, какой канал программировать и в каком режиме. Должны быть переданы также один или оба байта регистра задвижки. Этот байт показывает также, будет ли число в двоичной или BCD (двоично- десятичной) форме. Значение битов этого регистра следующее:
бит 0 3-1 5-4 7-6 |
если 0, двоичные данные, иначе BCD номер режима 1 - 5 (000 - 101) тип операции: 00 = передать значение счетчика в задвижку 01 = читать/писать только старший байт 10 = читать/писать только младший байт 11 = читать/писать старший байт, потом младший номер программируемого канала, 0 - 2 (00 - 10) |
программирование звучание микросхема
Для программирования микросхемы 8253 следует выполнить три основных шага. После того, как третий шаг завершен, запрограммированный канал немедленно начинает функционировать по новой программе.
Послать в командный регистр (43h) байт, представляющий цепочку битов, которые выбирают канал, статус чтения/записи, режим операции и форму представления чисел.
Для канала 2 надо разрешить сигнал от часов, установив в 1 бит 0 порта с адресом 61h. Когда бит 1 этого регистра установлен в 1, канал 2 управляет динамиком.
Вычислить значение счетчика от 0 до 65535, поместить его в ax и послать сначала младший, а затем старший байт в регистр ввода/ вывода канала (40h - 42h).
Каналы микросхемы 8253 работают постоянно. По этой причине программы всегда должны восстанавливать начальные установки регистров 8253 перед завершением. В частности, если при завершении программы генерируется звук, то он будет продолжаться даже после того, как MS-DOS получит управление и загрузит другую программу.
Низкий уровень
В данном примере канал 0 программируется на другое значение, а не на установленное BIOS при старте. Причина изменения установки состоит в том, чтобы поменять интервал изменения счетчика времени суток на величину, большую, чем 18,2 раза в секунду. Частота обновления счетчика изменяется, например, на 1000 раз в секунду с целью проведения точных лабораторных измерений. Значение задвижки должно быть 1193 (1193180 тактов в секунду/1000). Перед дисковыми операциями оригинальное значение задвижки должно быть восстановлено, поскольку канал 0 используется для синхронизации дисковых операций. Максимально возможное значение - 65535 тактов часов между импульсами от канала - может быть достигнуто засылкой 0 в регистр задвижки (0 немедленно превращается в 65535 при уменьшении на единицу).
;---установка регистров ввода/вывода |
||
COM_REG EQU 43h |
;адрес командного регистра |
|
CHAN_2 EQU 42h |
;адрес канала 2 |
|
mov al,00110110b |
;установка битов для канала 2 |
|
out COMMAND_REG,al |
;засылка в командный регистр |
|
;---посылка счетчика в задвижку |
||
mov ax,1193 |
;счетчик для 100 импульсов/с |
|
out CHAN_2,al |
;посылка младшего байта |
|
mov al,ah |
;готовим для посылки старший байт |
|
out CHAN_2,al |
;посылка старшего байта |
Установка/чтение времени
При старте MS-DOS запрашивает у пользователя текущее время. Введенное значение помещается в 4 байта, содержащие счетчик времени суток (начиная с 0040:006С, младший байт хранится первым). Сначала оно преобразуется в форму, в которой подсчитывается время суток, т.е. время преобразуется в число восемнадцатых долей секунды, прошедших с полуночи. Это число постоянно обновляется 18,2 раза в секунду прерыванием таймера. Когда появляется очередной запрос на время, текущее значение счетчика времени суток преобразуется обратно в привычный формат часы-минуты-секунды. Если при старте не было введено значение, то счетчик устанавливается в ноль, как будто сейчас полночь. Компьютеры снабженные микросхемой календаря-часов, могут автоматически устанавливать счетчик времени суток.
Средний уровень
MS-DOS предоставляет прерывания для чтения и установки времени, производя необходимые преобразования между значением счетчика времени суток и часами-минутами-секундами. Время выдается с точностью до 1/100 секунды, но поскольку счетчик времени суток обновляется с частотой в пять раз меньшей, показания сотых секунд очень приближенные. Функция 2ch прерывания 21h выдает время, а функция 2dh устанавливает его. В обоих случаях ch содержит часы (от 0 до 23, где 0 соответствует полночи), cl - минуты (от 0 до 59), dh - секунды (от 0 до 59) и dl - сотые доли секунд (от 0 до 99).
Кроме того, при получении времени функцией 2ch al содержит номер дня недели (0 = воскресенье). Значение дня будет верным, только если была установлена дата. DOS вычисляет номер дня недели по дате. Отметим также, что при установке времени функцией 2dh al отмечает правильность введенного значения времени (0 = правильно, ff = неправильно).
;---установка времени |
||
mov ch,HOURS |
;вводим значение времени |
|
mov ch,MINUTES |
||
mov dh,SECONDS |
||
mov dl,HUNDREDTHS |
||
mov ah,2dh |
;номер функции установки времени |
|
int 21h |
;устанавливаем время |
|
cmp ah,0FFh |
;проверяем правильность значения |
|
je ERROR |
;переход на обработку ошибки |
|
;---получение времени |
||
mov ah,2ch |
;номер функции получения времени |
|
int 21h |
;получаем время |
|
mov DAY_OF_WEEK,ah |
;получаем день недели из ah |
Низкий уровень
Если вы изменили скорость импульсов канала 1 микросхемы 8253 для специальных приложений, то необходимо написать свою процедуру декодирования показаний счетчика времени суток. BIOS позволяет диапазон значений счетчика от 0 до 1,573 миллиона и это может быть изменено только путем изменения прерывания таймера. Поэтому часы, реально показывающие сотые доли секунды, не могут работать 24 часа без специально написанной программы. Отметим также, что байт 0040:0070 устанавливается в ноль при старте, а затем увеличивается на 1 (не больше) по ходу часов.
Задания для домашней подготовки
Назначение регистров для управления таймером.
2. Назначение регистров для управления динамиком.
3. Формат управляющего слова для таймера.
4. Режимы работы таймера.
5. Назначение портов клавиатуры.
6. Режимы опроса клавиатуры.
7. Способы кодирования клавиш.
Задания к лабораторной работе
Задание 1
Разработать программу с фиксированным заданием длительности и частоты звучания.
Задание 2
Разработать программу генерации звука с фиксированной длительностью звучания и частотой звука, вводимой с клавиатуры.
Задание 3
Разработать программу генерации звука с программируемой длительностью звучания и фиксированной частотой звука.
Задание 4
Разработать программу генерации звука с вводимыми с клавиатуры частотой и длительностью звучания.
Задание 5
Разработать программу формирования звуковых сигналов с дискретным заданием частоты звучания.
Задание 6
Разработать программу звуковых сигналов с дискретным заданием длительности звучания.
Задание 7
Разработать программу генерации звуковых сигналов с линейным нарастанием частоты звучания.
Задание 8
Разработать программу генерации звуковых сигналов с циклическим линейным нарастанием частоты звучания и прерыванием программы клавишей <Esc>.
Задание 9
Разработать программу генерации звуковых сигналов, в которой тон звучания определяется кодом нажатия клавиши клавиатуры.
Задание 10
Разработать программу генерации звуковых сигналов, в которой количество импульсов звука и их частота задается с клавиатуры.
Порядок выполнения работы
Составить программу, содержащую команды ввода/вывода для управления динамиком, в которой частота и длительность задается в программе.
Текст исходной программы формирования звуковых сигналов имеет следующий вид:
sound l1: l2: sound |
.286 .model .code proc push a; сохранение всех регистров микропроцессора в памяти mov mov mov mov mov div out mov out in mov or Out loop dec jnz mov out pop a mov int ;retf endp end |
small far di,1000; загрузка тона звучания в di bx,500;загрузка длительности звучания в bx al,0B6h; управляющее слова таймера в аккумулятор 43h,al; В порт управления таймера управляющего байта(код b6) dx,0014h ax,4F38h; младшее слово делителя частоты di ; макс звучание 42h,al; запись младшего байта периода в порт данных таймера al,ah 42h,al; запись старшего байта al,61h ah,al al,3; включить таймер путем установки битов 2^0 и 2^1 в 1 61h,al; включение звука cx,2801h l2 bx l1 al,ah 61h,al ah,4ch 21h |
Разработать программу ввода числовых значений параметров с клавиатуры компьютера. Подпрограмма ввода и преобразования символов, вводимых с клавиатуры, имеет следующий вид:
B20: |
asbin mov mov mov lea mov sub mov and mul add mov mul mov dec mov dec jnz ret asbin |
proc mult10,0001 z,0 сx,10 si,numfld-1 bl,reallen bh,bh al,[si+bx] ax,000fh mult10 z,ax ax,mult10 cx mult10,ax cx mult10,Ax bx B20 endp |
; значение выражения 10 в степени n при n=0 ; ячейка памяти для результата ; множитель на 10 ; адрес второй цифры числа ; длина числа (число цифр в числе) ; преобразование по схеме <<<AL>.10^n>+x>… ; вычисление значения 10^n |
Используя процедуры генерации звуковых сигналов sound и процедуру ввода символов с клавиатуры asbin, выполнить пункты задания 1-10.
Зафиксировать формирование звуковых сигналов согласно пунктов задания 1-10.
Результаты работы
1. Разработать программы управления таймером и динамиком согласно заданиям. Результаты работы предъявить преподавателю.
2. Отчет должен содержать: а. Сведения о командах ввода/вывода в порт, управлении таймером и динамиком. б. Задание к лабораторной работе. в. Текст исходных программ с комментариями и результаты программы по каждому пункту заданий 1-10. г. Информацию о состоянии соответствующих портов ввода/вывода компьютера и регистров управления таймером и динамиком.
Вопросы для самопроверки
1. Что называется портом ввода-вывода и адресным пространством ввода-вывода?
2. Назначение команд ассемблера in и out. Форматы команд.
3. Особенности реализации команд in и out. Примеры использования команд.
4. Охарактеризовать режимы работы таймера.
5. Что называется регистром для управления таймером?
6. Использование регистров для управления динамиком.
7. Какой формат управляющего слова для таймера?
8. Каким образом выполняется кодирование клавиш?
9. Охарактеризовать режимы опроса клавиатуры.
Литература
1. Юров В., Хорошенко С. Assembler: учебный курс. - СПб: Издательство «Питер», 1999. - 672 с.: ил.
3. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT. Пер. с англ. - М.: Финансы и статистика. 1992.- 544 с.: ил.
4. Скляров В.А.. Программное и лингвистическое обеспечение ПЭВМ: Системы общего назначения. Справ. пособие. - Минск: Выэйшая школа, 1992. - 461 с.
5. Абель П. Язык ассемблера для IBM PC и программирования. -М.: Высшая школа, 1992. - 447 с.
Размещено на Allbest.ru
...Подобные документы
Участие регистров ввода-вывода в работе периферийных устройств. Отражение состояния периферийных устройств в состоянии разрядов регистров состояния. Перечень имен и номеров регистров ввода-вывода, управления и состояния микроконтроллеров разных типов.
курсовая работа [171,2 K], добавлен 22.08.2010Методика разработки и листинг программы для управления динамиком системного блока, обеспечения установки частоты и длительности формируемых сигналов. Алгоритм и этапы работы проектируемого приложения, анализ полученных результатов. Пример его работы.
лабораторная работа [79,0 K], добавлен 17.12.2015Особенности применения светодиодной индикации в микроконтроллерных системах. Характеристика основных приемов программирования универсальных портов ввода-вывода микроконтроллеров AVR. Этапы проектирования елочной гирлянды с микроконтроллерным управлением.
лабораторная работа [291,7 K], добавлен 17.11.2012Основные сведения о языке программирования Pascal. Листинг программы с комментариями. Диагональ элементов вектора и матрицы. Использование команд ввода-вывода информации. Быстродействие выполнения программы при компиляции. Отражение процессов вычисления.
курсовая работа [1,9 M], добавлен 05.05.2009Анализ операторов ввода и вывода, а также характеристика форматов, используемых в этих операторах. Оформление законченной программы с применением этих операторов. Структура программы. Алфавит языка и типы данных. Ввод и вывод информации. Форматный вывод.
лабораторная работа [62,0 K], добавлен 15.07.2010Использование программой функции ввода-вывода данных для реализации дружественного интерфейса с пользователем. Функции консоли и особенности их применения для обеспечения аккуратного ввода информации и упорядоченного вывода. Обзор стандартных функций.
лабораторная работа [40,4 K], добавлен 06.07.2009Принципы сегментации памяти. Классификация регистров по назначению и способу использования. "Перевернутое" представление данных в центральном процессоре. Адресация ввода/вывода информации. Программное, внутреннее и аппаратное прерывание выполнения команд.
презентация [107,4 K], добавлен 27.08.2013Разработка программы вычисления выражения y = (x+10)5. Ход работы, структурная схема алгоритма. Окна основных обозревателей системы, текстовый редактор. Интерфейс модели ЭВМ, методы ввода и отладки программы, действия основных классов команд, адресация.
лабораторная работа [523,4 K], добавлен 28.12.2014Назначение, особенности, структура и функционирование различных моделей микроконтроллеров. Средства их отладки и программирования. Способы адресации и система команд. Набор периферийных устройств. Порты ввода/вывода. Модуль формирования ШИМ-сигналов.
курсовая работа [201,9 K], добавлен 25.12.2014Архитектура микроконтроллеров AVR и PIC. Описание и структура регистров из области ввода/вывода. Внутренняя и внешняя память SRAM микроконтроллеров AVR. Особенности аналого-цифрового преобразования. Переключение в режим параллельного программирования.
лекция [755,2 K], добавлен 28.05.2010Отличительные особенности микроконтроллеров AVR семейства Mega. Характеристики процессора, подсистемы ввода-вывода. Архитектура ядра и организация памяти. Регистры общего назначения. Алгоритмы моделирования команд. Реализация модели внешнего устройства.
курсовая работа [3,7 M], добавлен 24.06.2013Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.
курсовая работа [1,5 M], добавлен 08.02.2011Общая характеристика программной модели процессора Intel x86. Анализ особенностей регистров общего назначения. Назначение команд безусловной передачи управления, рассмотрение функций. Знакомство с проблемами программирования на языке Ассемблера.
курсовая работа [1,6 M], добавлен 04.02.2014Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.
курсовая работа [400,6 K], добавлен 10.11.2016Разработка структуры базы данных для хранения дипломных проектов в среде объектно-ориентированного программирования Python. Создание внешнего вида окон ввода-вывода информации, технологии переходов. Листинг программы с пояснениями; направления улучшения.
курсовая работа [3,1 M], добавлен 27.02.2015Строгая типизация и наличие средств структурного (процедурного) программирования императивного языка Pascal. Структура программы, выражения, строки. Правила и описание типов, процедур и функций, операторов ввода - вывода, модулей и подпрограмм.
курсовая работа [37,3 K], добавлен 28.06.2008Изучение основ программирования и создание полноценного приложения в среде программирования Delphi. Разработка эскизного и технического проектов программы. Внедрение выполнения программы. Разработка рабочего проекта, спецификация и текст программы.
курсовая работа [560,1 K], добавлен 18.07.2012Рассмотрение правил записи, способов ввода и вывода, использования функций обработки символьных данных в Pascal. Описание алгоритмизации и программирования файловых структур данных, проектирования структуры файла. Ознакомление с работой данных массива.
курсовая работа [336,2 K], добавлен 27.06.2015Использование пользовательских регистров. Регистры общего назначения. Элементарные и базовые типы данных. Язык микроопераций, ассемблер. Директивы резервирования памяти. Система команд, организация вычислений. Сложные структуры данных. Схемы ввода-вывода.
курс лекций [280,7 K], добавлен 02.12.2009Моделирование заданных команд, внутренних функциональных устройств и объектов ввода-вывода микроконтроллера. Разработка программа для демонстрации совместной работы микроконтроллера и моделируемого внешнего устройства. Компоненты архитектуры ATMega128.
курсовая работа [3,6 M], добавлен 12.06.2013