47737 (Низькорівневе програмування контроллера клавіатури), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Низькорівневе програмування контроллера клавіатури", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "47737"

Текст 2 страницы из документа "47737"

Контроллер клавіатури працює таким чином: при натисненні або відпуску будь-якої клавіші генерується байт (так званий скан-код), перші 7 бітів якого містять порядковий номер клавіші, а останній, сьомий біт, скинутий, якщо клавіша натискувала, і встановлений, якщо відпущена. Цей скан-код можна прочитати через порт 60h (насправді усередині контроллера клавіатури є якась черга скан-кодов, а порт 60h лише відображує верхній код, але про це можна і не знати). І ще. Як тільки клавіша натискується або відпускається, викликається 9-е переривання (IRQ 1).

Але не завжди натиснення або відпуск клавіші генерує один скан-код. Наприклад, натиснення клавіші Pause викликає генерацію відразу 5-и кодів. Натиснення білої стрілки вгору викликає скан-код 72, а чорної стрілки вгору - відразу 2 коди: 224 і 72. І для кожного з цих скан-кодов викликається 9-е переривання.

Таким чином, процедура обробки клавіатури BIOS, що "сидить" на 9-м перериванні, просто аналізує значення 60h-го порту і відповідним чином модифікує буфер введення. Всі процедури BIOS далі працюють не з поточному значенням порту, а з буфером введення, що дозволяє здійснювати введення з випередженням, тобто навіть тоді, коли система зайнята.

3.2 Програмні переривання і підпрограми обробки переривань

Операційна система MS-DOS надає програмістові, що працює на мові асемблера, великий набір підпрограм, що виконують різні корисні дії. Всі ці підпрограми оформлені як підпрограми обробки переривань, і для кожної підпрограми в керівництві по MS-DOS вказаний номер відповідного нею переривання. Розрізняють апаратні і програмні переривання. Програма обробки апаратного переривання викликається, якщо процесор отримує сигнал запиту переривання від одного з системних пристроїв. Ця підпрограма повинна містити, окрім власне команд, призначених для виконання деяких дій з обробки переривання, визначених програмістом, спеціальні команди, керівники контроллерами переривань. У зв'язку з цим, подпрограммы-обработчики апаратних переривань рідко безпосередньо використовуються програмістами. Підпрограма обробки програмного переривання викликається по команді INT n процесора (n - номер переривання в системній таблиці векторів переривань). Скорочено прийнято самі підпрограми обробки переривань називати "перериваннями", хоча це не правильно. У ПЕВМ IBM РС AT всі програмні переривання підрозділяються на переривання BIOS ( підсистеми управління вводом/выводом ), переривання ОС і переривання користувача. Підпрограми обробки переривань BIOS зазвичай знаходяться в ПЗП, вони поставляються розробниками апаратури для забезпечення єдиного інтерфейсу ОС з різними типами устаткування. Основу системи переривань ОС MS DOS складає переривання з номером 21h, зване перериванням MS DOS. Це переривання забезпечує API прикладних програм (Application Programm Interface - інтерфейс прикладних програм) в середі ОС MS DOS. Залежно від значення, що міститься при виклику переривання в регістрі AH, MS-DOS виконує при цьому один з декількох десятків підпрограм, які прийнято називати функціями DOS. Для кожного переривання і кожної функції DOS в керівництві описаний набір вхідних і вихідних параметрів, що передаються через регістри, а також перелік можливих помилок.

У даній роботі будуть описані переривання і функції DOS і BIOS, що відносяться до роботи з клавіатурою і екраном ПЕВМ IBM РС AT.



3.3 Програмування клавіатури

У клавіатурі IBM РС AT є мікропроцесор, який постійно сканує її в пошуку клавіш, що натискують. Процесор клавіатури пов'язаний з контроллером клавіатури. Від контроллера на клавіатуру поступають команди управління клавіатурою, а з клавіатури коди підтвердження і коди сканування .

За винятком клавіші "PAUSE" всі останні клавіші 101- клавішної клавіатури працюють на нажатие/отжатие .При натисненні генерується код натиснення, при утриманні клавіші він повторюється через певні інтервали часу, а при відпуску генерується код віджимання. Код натиснення і код віджимання разом називаються кодами сканування клавіатури (scan-коды). Код віджимання є двобайтовим: перший байт рівний F0h, а другий байт збігається з кодом натиснення.

Є три рівні програмування підсистеми клавіатури:

1) на фізичному рівні (програмування портів 60h і 64h контроллера клавіатури);

2) за допомогою BIOS ( INT 09h, INT 16h );

3) за допомогою переривання DOS ( INT 21h ).

Для виконання введення даних з клавіатури програмістові в більшості випадків досить використовувати описані нижче функції DOS. У складніших випадках використовується переривання BIOS INT 16h, що дає деякі додаткові можливості. Максимум можливостей програміст може отримати, перехоплюючи апаратне переривання від клавіатури 09h і працюючи безпосередньо з портами ввода/вывода.

3.3.1 Використання BIOS для роботи з клавіатурою

Переривання INT 09h є апаратним перериванням, яке викликається по лінії запиту переривання IRQ1 всякий раз коли заповнюється вихідний буфер контроллера клавіатури, тобто коли поступає байт від клавіатури. Обробник даного переривання прочитує scan-код з порту 60h, перетворить scan-код в код доступний BIOS або виконує спеціальну функцію (виклик деяких інших переривань, наприклад INT 05h після натиснення Prt Scr і ін.). Обробник переривання поміщає для більшості клавіш відповідний їм в BIOS двобайтовий код в спеціальну область пам'яті - буфер клавіатури (див. табл.2). Коди деяких клавіш обробник не поміщає в буфер, інформація про їх натиснення або віджимання записується в байти стану клавіатурРозгледимо докладніше спосіб формування двобайтового коду, INT, що поміщається, 09h в буфер клавіатури. Scan-код, що отримується обробником переривання з клавіатури, відповідає деякій клавіші або комбінації клавіш. BIOS використовує для кодування інформації стандарт кодування ASCII, вживаний для всіх пристроїв, що використовують посимвольний обмін. Таблиця 3 містить коди ASCII. Разом із звичайними символами, застосовуються символи, що управляють (наприклад, CR - повернення каретки, LF - перехід на наступний рядок і т. п.). Кожному ASCII-коду BIOS ставить у відповідність деякий scan-код, що приймається з клавіатури. Якщо натискує клавіша або комбінація клавіш, якою відповідає ASCII-код, обробник переривання INT 09h поміщає в буфер scan-код клавіші і відповідний ASCII-код. Проте, навіть для 83-клавішної клавіатури IBM РС XT, є значна кількість комбінацій клавіш (і відповідно scan-кодов), що не мають відповідних еквівалентів ASCII. До них відносяться клавіші управління курсором, функціональні клавіші і ін. Для подібних клавіш в буфер поміщається спеціальний байт розширеного коду, а другий байт дорівнює нулю. Таблиця 4 містить містить розширені коди деяких клавіш. Більшість нових клавіш і їх комбінацій для 101-клавішної клавіатури (F11,F12 і ін.) кодуються аналогічним чином: для них використовуються незадіяні раніше розширені коди. Проте, для лави клавіш ("сірі" клавіші управління курсором, Delete, End і ін.), продубльованих на 101-клавішній клавіатурі, і їх комбінацій з іншими клавішами, використовується розширений код їх "оригіналів", а другий байт для таких кодів рівний E0h.

При натисненні комбінації клавіш Ctrl-Break переривання INT 09h встановлює ознака запиту по Ctrl-Break (байт 471h) і викликає переривання BIOS INT 1Bh, яке зазвичай перехоплюється MS DOS. Це переривання устанавлиает прапор CTRL-C, після чого управління передається INT 23h, яке перевіряє цей прапор, і в разі його установки викликає дострокове припинення виконання програми. Деякі функції MS DOS перевіряють натиснення CTRL-C і викликають INT 23h. Таким чином, Ctrl-Break є прапором BIOS, а CTRL-C - прапором MS DOS. Ці прапори перевіряються при виконанні функцій 01h-0Ch переривання MS DOS. Функція 33h переривання MS DOS дозволяє розповсюдити контроль по Ctrl-Break на всі функції ввода/вывода.

Переривання BIOS INT 16h дозволяє працювати з клавіатурою на декілька вищому рівні, ніж INT 09h, і нижчому рівні, ніж функції MS DOS. Фактично всі описані нижче функції DOS використовують в своїй роботі переривання 16h, проте програміст може використовувати його і безпосередньо, якщо в цьому є необхідність.

Залежно від значення в регістрі AH переривання INT 16h може виконати одну з наступних функцій.

Функція 00h виконує читання символу з буфера клавіатури. Якщо буфер порожній, функція чекає натиснення клавіші. Якщо клавіша натискує, значення коду заноситься в регістр AX. Функція повертає в Аl ASCII-код, а в AH - scan-код якщо це можливо. Інакше в AH повертається розширений код, а AL дорівнює нулю. Функція не обробляє натиснення клавіш, код яких не поміщається в буфер перериванням INT 09h (Ctrl, Shift і тому подібне), а також додаткових клавіш 101-клавішної клавіатури.

Функція 01h перевіряє, чи є символи в буфері клавіатури. Якщо є, то прапор нуля скидається ( ZF=0 ), якщо немає

- прапор встановлюється ( ZF=1 ). За наявності символу його код заноситься в регістр AX, в тому ж вигляді, як для функції 00h, проте з буфера код не віддаляється. Таким чином, якщо після цього ще раз викликати ту ж функцію, то вона ще раз прочитає той же символ.

Функція 02h записує в регістр AL перший з чотирьох байтів стану клавіатури.

Функції 10h і 11h аналогічні функціям 00h і 01h, але дозволяють обробляти також і додаткові клавіші 101-клавішної клавіатури.

Функція 12h виконує дії, аналогічні 02h, але крім того поміщає в AH другий байт стану клавіатури (див. табл.1).

Функція 03h дозволяє встановити затримку і частоту повторення для клавіатури, а функція 05h - помістити двобайтовий код в буфер клавіатури.

3.3.2 Функції DOS для роботи з клавіатурою

Функція 01h ( тобто переривання 21h при значенні AH=01h ) виконує введення з клавіатури з очікуванням натиснення клавіші, якщо буфер клавіатури порожній. Код введеного символу поміщається в регістр AL. Введений символ відображується на екрані ( эхо-отображение).

Функція 01h перевіряє також, чи не натискував користувач в ході роботи програми комбінацію клавіш Ctrl/C ( або Ctrl/Break ). В цьому випадку управління передається на підпрограму обробки Ctrl/C, яка зазвичай припиняє виконання програми користувача.

Якщо на клавіатурі натискувала одна з клавіш, яким не відповідає ніякий код ASCII, то функція 01h повертає в регістрі AL значення 0. У цих випадках слід ще раз викликати ту ж функцію, тоді буде виданий розширений код даної клавіші або комбінації клавіш.

Функція 08h працює аналогічно 01h, за винятком того, що не виконується эхо-отображение введеного символу.

Функція 07h працює аналогічно 01h, за винятком того, що не виконується эхо-отображение і не перевіряється натиснення Ctrl/C.

Функція 06h може виконувати як введення з клавіатури, так і вивід на екран. Якщо у момент виклику регістр DL містить значення 0ffh, то дана функція виконує введення без очікування. Якщо буфер не порожній, то прапор нуля ZF скидається в 0, а код символу з буфера заноситься в AL. Якщо ж буфер порожній, то встановлюється ZF=1, при цьому значення в AL не грає ролі. Таким чином, ця функція не чекає, поки натискуватиме клавіша, а відразу видає якийсь результат. Функція 06h не виконує эхо-отображения і не перевіряє натиснення Ctrl/C.

Функція 0Вh не виконує введення символу, а тільки перевіряє, чи є символи в буфері. Якщо є, то встановлюється AL=0ffh, якщо немає, то AL=00h. Виконується також перевірка на Ctrl/C.

Функція 0Аh виконує введення рядка, що буферизує, з клавіатури. При цьому символи вводяться один за іншим, як при багатократному застосуванні функції 01h, до тих пір, поки не буде введений код 0dh ( код клавіші "Enter" ), що завершує рядок. В ході введення рядка користувач може редагувати рядок, і зокрема - використовувати "забій". При введенні виконується також перевірка на Ctrl/C.

При виклику функції 0Аh потрібний, щоб в регістрі DX містив зсув ( у сегменті даних ) області пам'яті ( буфера ), в яку система помістить введений рядок. У першому байті цього буфера має бути записана його довжина, тобто максимальне число символів ( включаючи 0dh ), яке можна записати в буфер. Ця довжина має бути принаймні на 2 менше, ніж число зарезервованих байт. Після закінчення введення рядка функція поміщає в другий байт буфера дійсне число введених символів ( не рахуючи 0dh ), а зачинаючи з третього байта буфера розміщуються введені символи. Останнім завжди буде код 0dh.

Функція 0Сh спочатку очищає буфер клавіатури ( тобто "забуває" попередні натиснення клавіш ), а потім виконує будь-яку з функцій 01h, 06h, 07h, 08h або 0Аh. Номер цієї функції задається в регістрі AL.

Розглянемо приклади роботи з клавіатурою. У головній програмі для "відкриття" клавіатури потрібно викликати OpenKeyboard з параметром, який говорить, чи потрібно блокувати обробник BIOS.

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