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 - помістити двобайтовий код в буфер клавіатури.
... іщенні, так і на вулиці, на транспорті, тобто відкриваються практично необмежені можливості! Погодитеся, це вагомий аргумент на користь безпровідних систем відеоспостереження. Простота в настройці і експлуатації стала аргументом до використання безпровідного відеоспостереження в такій несподіваній якості як відеоняня. Завдяки ній ви завжди зможете дізнатися, що робить ваша дитина, чи не задумав ...
0 комментариев