- •2.6 Лабораторная работа № 6
- •Общие положения
- •Программно управляемый ввод-вывод
- •Ввод-вывод по прерываниям
- •Порядок выполнения работы
- •Контрольные вопросы
- •Рекомендуемая литература
- •3 Интерфейс, состояния и режимы работы программной модели учебной эвм Состояния и режимы работы эвм
- •Интерфейс пользователя
- •Внешние устройства
- •Программная модель кэш-памяти
Порядок выполнения работы
1)Запустить программную модель учебной ЭВМ;
2)Подключить к ней определенные в задании внешние устройства. Варианты задания указаны в таблице 2.29.
Откройте меню Внешние устройства, далее выберите Менеджер ВУ. Появится окно «Подключаемые устройства», рисунок 2.35.
Окно разделено на две части: Устройства– в этой части представлены внешние устройства поддерживаемые в учебной модели ЭВМ;Подключенные устройства– в этой части, те внешние устройства, которые подключены вами. Чтобы подключить какое-либо устройство, в окнеУстройстванужно выбрать необходимое внешнее устройство и нажать кнопкуПодключить, при этом появится окно обозревателя внешнего устройства.
Рисунок 2.35 – Окно «Подключаемые устройства»
Окно разделено на две части: Устройства– в этой части представлены ВУ поддерживаемые в учебной модели ЭВМ;Подключенные устройства– в этой части, те устройства ВУ, которые подключены вами. Чтобы подключить какое-либо устройство, в окнеУстройстванужно выбрать необходимое ВУ.
Например, для решения задачи требуется контроллер клавиатуры, для этого следует выполнить следующие действия:
левой кнопкой мыши выбрать контроллер клавиатуры, рисунок 2.36;
далее, нажать кнопку Подключить.При этом, отобразится окно обозревателяКонтроллер клавиатуры и выбранное вами ВУ появится в правой части окна Подключенные устройства, рисунок 2.37.
Аналогично подключатся другие внешние устройства. Более подробно с описанием обозревателей ВУ можно ознакомиться в разделе 2.8. Подключенные ВУ, также отображаются в меню Внешние устройства, главного окна учебной ЭВМ.
Рисунок 2.36 – Выбор внешнего устройства
Рисунок 2.37 – Подключение контроллера клавиатуры
Чтобы отключить ВУ, необходимо выполнить обратные действия: мышью выбрать отключаемое ВУ и нажать кнопку Отключить, рисунок 2.38.
Рисунок 2.38 – Отключение внешнего устройства.
3)Составить и отладить программу, предусмотренную заданием, с использованием программного анализа флагов готовности ВУ.
Рассмотрим примеры программирования ВУ.
Контроллер клавиатуры. Контроллер клавиатуры представляет собой модель внешнего устройства, принимающего ASCII-коды (таблица 2.23) от клавиатуры ПЭВМ. Символы помещаются последовательно в буфер символов, размер которого установлен равным 50 символам, и отображаются в окне обозревателя. Пример программы посимвольного ввода приведен в таблице 2. 22.
Контроллер клавиатуры выполняет четыре команды при выводе соответствующих кодов по адресу 1, таблица 2.21 [2].
Таблица 2.21 – Коды команд контроллера клавиатуры
Десятичное число |
Команда |
101 |
Очистить буфер (эквивалентно кнопке Очистить буфер) |
102 |
Сбросить флаг Err в регистре SR |
103 |
Установить в «1» флаг S в регистре CR |
104 |
Сбросить в «0» флаг S в регистре CR |
Таблица 2.22 – Программа посимвольного ввода с клавиатуры
Адрес |
Мнемокод |
Примечания |
000 |
RD #10 |
Установить флаг Е в регистре CR |
001 |
OUT 1 |
Включить клавиатуру |
002 |
OUT 11 |
Включить дисплей |
003 |
RD #103 |
Передать в контроллер код команды |
004 |
OUT 1 |
Установить S в «1» (режим посимвольного ввода) |
005 |
M1: IN 2 |
Проверка нажатия – флага готовности Rdy |
006 |
JZ M1 |
Ожидание Rdy = 1 |
007 |
IN 0 |
Считывание введенного символа из буфера в аккумулятор |
008 |
OUT 10 |
Передача ASCII-кода (например) на символьный дисплей |
009 |
JMP M1 |
Возврат к ожиданию следующего нажатия |
Таблица 2.23 – Таблица кодов ASCII, фрагмент
Шаг 1.В качестве примера, введите текст программы, приведенной в таблице 2.22, в окно текст программы. При необходимости отладьте программу, рисунок 2.39.
Рисунок 2.39 – Текст программы
Шаг 2.Включите контроллер клавиатуры;
Шаг 3.Переведите модель учебной ЭВМ автоматический режим работы кнопкойПуск;
Шаг 4.Кнопкой мыши активируйте обозреватель контроллера клавиатуры, рисунок 2.40;
Рисунок 2.40 – Обозреватель контроллера клавиатуры
Шаг 5.Во время выполнения цикла программы, вводите символы с клавиатуры, рисунок 2.41.
Рисунок 2.41- Ввод символов с клавиатуры
Шаг 6.Чтобы удалить веденные символы, необходимо нажать кнопкуОчистить буфер, рисунок 2.42.
Рисунок 2. 42 –Очистка буфера клавиатуры
Шаг 7.Чтобы завершить ввод с клавиатуры, нажмите кнопку Завершить ввод, рисунок 2.43.
Рисунок 2.43 – Завершение ввода символов
Контроллер дисплея.Дисплей представляет собой модель внешнего устройства, реализующую функции символьного дисплея. Дисплей может отображать символы, задаваемые ASCII-кодами, поступающими на его регистр данных.
Доступ в видеопамять осуществляется через «окно интерфейса» необходимо сначала загрузить в регистр адреса AR номер ячейки видеопамяти, тогда обращение к регистру данных будет означать обращение (ввод или вывод) к ячейке видеопамяти с указанным адресом.
Контроллер дисплея выполняет две команды при выводе соответствующих кодов по адресу 1, таблица 2.24.
Таблица 2.24 – Коды команд контроллера дисплея
Десятичное число |
Команда |
101 |
Очистить дисплей (действие команды эквивалентно нажатию кнопки Очиститьв окнеДисплей), при этом очищается видеопамять (в каждую ячейку записывается код пробела — 032), устанавливается в 000 регистр адреса AR и сбрасываются флаги ошибки Err и автоинкремента А; |
102 |
Сбросить флаг ошибки Err в регистре SR. |
В таблице 2.25 представлен пример программы выводящей на дисплей (в начало экрана) слово «Май».
Таблица 2.25 – Текст программы, выводящей слово на дисплей
Адрес |
Мнемокод |
Примечания |
000 |
RD #11 |
Включить дисплей и установить |
001 |
OUT 11 |
флаг автоинкремента |
002 |
RD #0 |
Задать начальный адрес |
003 |
OUT 13 |
выводимого слова |
004 |
RD #204 |
Ввод кода буквы «М» |
005 |
OUT 10 |
вывод на дисплей |
006 |
RD #224 |
Ввод кода буквы «а» |
007 |
OUT 10 |
вывод на дисплей |
008 |
RD #233 |
Ввод кода буквы «й» |
009 |
OUT 10 |
вывод на дисплей |
010 |
HLT |
Стоп |
Следующая программа, выставляет на дисплей в начало каждой строки ее номер, таблица 2.26.
Таблица 2.26 – Текст программы, выводящей на дисплей номер строки
Адрес |
Мнемокод |
Примечания |
000 |
RD #10 |
Включить |
001 |
OUT 11 |
дисплей |
002 |
RD #0 |
Задать начальный |
003 |
WR R1 |
адрес вывода |
004 |
RD #49 |
Ввести код |
005 |
WR R2 |
цифры «1» |
006 |
RD #8 |
Ввести число |
007 |
WR R3 |
повторений цикла |
008 |
M1: RD R1 |
Считать текущий адрес |
009 |
OUT 13 |
и передать в регистр адреса дисплея |
010 |
ADD #16 |
Увеличить адрес на 16 – на начало следующей строки |
011 |
WR R1 |
Сохранить измененный адрес |
012 |
RD R2 |
Считать код цифры – номер строки |
013 |
OUT 10 |
Передать код цифры на дисплей |
014 |
RD @R2+ |
Увеличить содержимое R2 (код цифры) на единицу |
015 |
JRNZ R3, M1 |
Декремент R3 и переход на начало цикла, еслиR3 ≠ 0 |
016 |
HLT |
Стоп |
Шаг 1.В качестве примера, введите в окноТекст программы, программу представленную в таблице 2.25.
Шаг 2.Подключите контроллер дисплея через менеджер внешних устройств;
Шаг 3.Выполняйте программу в режимеШаг до командыRD#204, рисунок 2.44.
Рисунок 2.44 – Вывод первого символа на дисплей
Шаг 6.Когда указатель в окнеПрограммаперейдет к команде RD #224, на дисплей выведется символ «а», рисунок 2.45.
Шаг 7.Продолжите выполнять программу в шаговом режиме, до команды RD #223. На дисплее появится символ «а», рисунок 2.46.
Аналогично выводится на дисплей символ «й».
Рисунок 2.45 – Вывод символа «а» на дисплей
Рисунок 2.46 – Вывод символа «й» на дисплей
Блок таймеров.Блок таймеров включает три однотипных канала таймеров Т1(адрес 1), Т2(адрес 3), Т3 (адрес 5) со своими регистрами управления CT1R (адрес 2), CT2R (адрес 4), CT3R (адрес 6) и общий регистр состояний SR (адрес 0).
Сброс флагов переполнения таймеров в регистре SR осуществляется только программно по командам, представленным в таблице 2.27. Константы кодов этих команд должны выводится по адресу 0 блока таймеров (регистра SR).
Таблица 2.27 – Коды команд таймера
Десятичное число |
Команда |
101 |
Сбросить флаг переполнения Т1 |
102 |
Сбросить флаг переполнения Т2 |
103 |
Сбросить флаг переполнения Т3 |
В таблице 2.28 представлен пример программы, с помощью которой реализуется подача звукового сигнала каждые 10 сек.
Такт таймера может изменяться в зависимости от ЭВМ, на которой работает модель. Если считать, что длительность такта составляет 16 мс, то для отсчёта отрезка времени в 10 сек. потребуется 10000 / 16 = 625 тактов.
Таблица 2.28 – Текст программы использования тоногенератора
Адрес |
Мнемокод |
Примечания |
000 |
M0: RD #625 |
Загрузка константы, соответствующей задержке в 10 сек |
001 |
OUT 21 |
в регистр таймера Т1 |
002 |
RDI 1101 |
Запуск таймера с коэффициентом деления К=1 |
004 |
OUT 22 |
на вычитание, прерывание запрещено |
005 |
M1: IN 20 |
Анализ регистра состояния блока таймеров |
006 |
JZ M1 |
и возврат, если флаг переполнения не установлен |
007 |
RDI 1000 |
и останов |
009 |
OUT 22 |
таймера |
010 |
RD #101 |
Сброс |
011 |
OUT 20 |
флага переполнения FT1 |
012 |
RD #200 |
Задать частоту звучания 200 Гц |
013 |
OUT 30 |
в регистр частоты тоногенератора |
014 |
RD #300 |
Задать длительность звучания – 300 мс |
015 |
OUT 31 |
и включить звук |
016 |
JMP M0 |
Повторить бесконечный цикл |
Шаг 1.ПодключитеБлок таймеровиТоногенератор.
Шаг 2.Введите в окноТекст программы, пример программы, приведенную в таблице 2.28.
Шаг 3.Выполните программу в режимеШаг.
5)Сохранить программу в виде текстового файла;
6)Оформить текст программы в форме таблицы 2.28.
Таблица 2.29 – Варианты заданий
Вариант |
Задание |
Используемые ВУ |
Пояснения |
1 |
Ввод пятиразрядных чисел в ячейки ОЗУ |
Клавиатура |
Программа должна обеспечивать ввод последовательности ASCII-кодов десятичных цифр (не длиннее пяти) и размещение в ячейке ОЗУ. ASCII-коды не цифр игнорировать |
2 |
Программа ввода любых символов с клавиатуры с выводом на дисплей |
Клавиатура, дисплей, таймер |
Очистка буфера клавиатуры после ввода 50 символов |
3 |
Вывод на дисплей три любых символа, хранящихся в памяти, с задержкой |
Дисплей, таймер |
Первый символ выводится сразу при запуске программы, второй — через 15 с, третий — через 20 с. |
4 |
Вывод на дисплей одного из трех символов, в зависимости от нажатой клавиши |
Клавиатура, дисплей |
<1>— вывод на дисплей первого символа, <2> — второго, <3> — третьего, остальные символы — нет реакции. |
5 |
Выбирать из потока ASCII-кодов только цифры и выводить их на дисплей |
Клавиатура, дисплей, тоногенератор |
Вывод каждой цифры сопровождается коротким звуковым сигналом |
6 |
Программа ввода любых символов с клавиатуры с выводом на дисплей |
Клавиатура, дисплей, таймер |
Очистка буфера клавиатуры каждые 10 с |
7 |
Вывод на дисплей текста, хранящегося в памяти, с задержкой |
Дисплей, таймер |
После запуска программы, текст выводится через 15 с. |
Продолжение таблицы 2.29
6 |
Выводить на дисплей каждый введенный с клавиатуры символ. |
Клавиатура, дисплей, тоногенератор |
Вывод каждой цифры сопровождается звуковым сигналом |
7 |
Селективный ввод символов с клавиатуры |
Клавиатура, дисплей |
Все русские буквы, встречающиеся в строке ввода — в верхнюю часть экрана дисплея (строки 1—4), остальные символы не выводить. |
8 |
Вывод содержимого заданного участка памяти на дисплей. |
Дисплей. |
Остаток от деления на 256 трех младших разрядов ячейки памяти рассматривается как ASCII-код символа. Начальный адрес памяти, длина массива вывода и промежуток времени — параметры подпрограммы |
9 |
Программа ввода символов с клавиатуры с выводом на дисплей |
Клавиатура, дисплей |
Очистка буфера клавиатуры после ввода 35 символов |
10 |
Выводить на дисплей каждый введенный с клавиатуры символ, причем заглавную русскую букву выводить "в двух экземплярах" |
Клавиатура, дисплей, таймер |
Очистка буфера клавиатуры после ввода 48 символов, очистка экрана каждые 15 с |
11 |
Вывод на дисплей содержимого группы ячеек памяти в числовой форме (адрес и длина группы — параметры подпрограммы) |
Дисплей, таймер |
Содержимое ячейки распаковывается (с учетом знака), каждая цифра преобразуется в соответствующий ASCII-код и выдается на дисплей. При переходе к выводу содержимого очередной ячейки формируется задержка 10 с |
12 |
Определить промежуток времени между двумя последовательными нажатиями клавиш |
Клавиатура, таймер |
Результат выдается на OR. (Учитывая инерционность модели, нажатия не следует производить слишком быстро.) |
13 |
Селективный ввод символов с клавиатуры |
Клавиатура, дисплей |
Все цифры — в нижнюю часть экрана (строки 5—8), остальные символы не выводить. |
14 |
Программа ввода символов с клавиатуры с выводом на дисплей |
Клавиатура, дисплей |
Очистка буфера клавиатуры после ввода 35 символов |
Титульный лист;
Формулировка варианта задания:
Распределение памяти;
Программа, в форме таблицы 2.28;