Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Тема 5 Управление вводом – выводом



Изучение организации и принципов работы клавиатуры и закрепление практических навыков управления ею, создание собственных программ обработки прерываний.

Цель работы: Изучение организации и принципов работы клавиатуры и закрепление практических навыков управления ею, а также практических навыков создания собственных программ обработки прерываний.

Постановка задачи

Разработать программу обработки прерывания от клавиатуры, которая должна:

- распознавать нажатие «горячей» комбинации клавиш и реагировать на него звуковым сигналом;

- при первом нажатии «горячей» комбинации переходить в режим блокировки ввода заданной клавиши, при втором - отменять этот режим;

- системная обработка всех других клавиш нарушаться не должна.

Индивидуальные задания

1. комбинация клавиш LeftCtrI+RightSblft+F1; блокирование ввода клавиши 1.

2. комбинация клавиш RightCtrI+LeftSblft+F2; блокирование ввода клавиши 2.

3. комбинация клавиш RightCtrI+LeftSblft +F4; блокирование ввода клавиши 4.

4. комбинация клавиш LeftCtrI+RightSblft+F5; блокирование ввода клавиши 5.

5. комбинация клавиш LeftAlt+RightSblft+F6; блокирование ввода клавиши 6.

6. комбинация клавиш LeftCtrI+RightAlt+F7; блокирование ввода клавиши 7.

7. комбинация клавиш LeftCtrI+RightSblft+F8; блокирование ввода клавиши 9.

8. комбинация клавиш LeftCtrI+LeftSblft+F9; блокирование ввода клавиши 8.

9. комбинация клавиш RightCtrI+RightSblft+F3; блокирование ввода клавиши 4.

10. комбинация клавиш LeftCtrI+RightSblft+F9; блокирование ввода клавиши 1.

11. комбинация клавиш RightCtrI+LeftSblft+F8; блокирование ввода клавиши 2.

12. комбинация клавиш RightCtrI+LeftSblft +F7; блокирование ввода клавиши 4.

13. комбинация клавиш LeftCtrI+RightSblft+F6; блокирование ввода клавиши 5.

14. комбинация клавиш LeftAlt+RightSblft+F5; блокирование ввода клавиши 6.

15. комбинация клавиш LeftCtrI+RightAlt+F4; блокирование ввода клавиши 7.

16. комбинация клавиш LeftCtrI+RightSblft+F3; блокирование ввода клавиши 9.

17. комбинация клавиш LeftCtrI+LeftSblft+F2; блокирование ввода клавиши 8.

18. комбинация клавиш RightCtrI+RightSblft+F1; блокирование ввода клавиши 4.

19. комбинация клавиш LeftCtrI+RightAlt+F5; блокирование ввода клавиши 7.

20. комбинация клавиш LeftAlt+RightAlt+F3; блокирование ввода клавиши 3.

Пример решения задачи

Индивидуальное задание: комбинация клавиш LeftCtrI+RightSblft+F3; блокирование ввода клавиши 3.

Разработка алгоритма

Структура программы

Программа состоит из основной программы и трех функций.

- void *readvect(int in) - функция читает вектор прерывания с номером in и возвращает его значение.

- void writevect (int in, void * h ) - функция устанавливает новый вектор прерывания in на новый обработчик этого прерывания по адресу h.

- void i n tе rr uрt new9() - процедура нового обработчика прерывания 9h.

Описание переменных

Глобальные переменные программы: old9 - адрес старого обработчика прерывания 9h; FЗ_соdе - скан-код клавиши «F3», которая входит в комбинацию «горячих» клавиш; kеу3_соdе - скан-код клавиши«3», которая будет блокироваться/разблокироваться при каждом нажатии «горячей» комбинации клавиш; f - флаг, который при каждом нажатии «горячей» комбинации клавиш переключается из состояния 0 в 1 или из 1 в 0 (состояние 1 означает, что клавиша «3» заблокирована); rr и sr - переменные, которые используются для задания значений регистров общего назначения и сегментных регистров соответственно при вызове прерывания.

В главной программе использует символьный массив string для проверки работы программы.

Переменные процедуры обработки прерывания 9h:

- с - переменная, которая используется для подтверждения приема из клавиатуры, в случае, если была нажата клавиша «3», а флаг f показывал, что эта клавиша заблокирована;

- х, у - переменные, которые используются для сохранения координат курсора на экране в момент вызова процедуры обработки прерывания;

- byte17 - байт флага состояния клавиатуры в области данных BIOS по адресу 0040:0017;

- byte18 - байт флага состояния клавиатуры в области данных BIOS по адресу 0040:0018;

- mask - маска, которая используется для определения нажатия клавиши левый Shift (в этом случае бит 1 в byte17 установлен в 1);

- mask17 - маска, которая используется для определения нажатия клавиши Ctrl (в этом случае бит 2 в byte17 установлен в 1);

- mask18 - маска, которая используется для определения нажатия клавиши левый Ctrl (в этом случае бит 0 в byte18 установлен в 1);

 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 316; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.019 с.)
Главная | Случайная страница | Обратная связь