22599

Контроль клавіатурного вводу

Лабораторная работа

Информатика, кибернетика и программирование

Скенкод це однобайтне число молодші 7 бітів якого представляють ідентифікаційний номер призначений кожній клавіші. На всіх машинах крім AT старший біт коду говорить про те чи була клавіша натиснута біт = 1 код натискання або відпущена біт = 0 код звільнення. Наприклад 7бітный скенкод клавіші В 48 або 110000 в двійковій системі.

Украинкский

2013-08-03

32 KB

1 чел.

ЛАБОРАТОРНА РОБОТА № 3

"Контроль клавіатурного вводу"

Клавіатура містить мікропроцесор, який сприймає кожне натискання на клавішу і видає скен-код в порт А мікросхеми інтерфейсу з периферією, розташованої на системній платі. Скен-код це однобайтне число, молодші 7 бітів якого представляють ідентифікаційний номер, призначений кожній клавіші. На всіх машинах, крім AT, старший біт коду говорить про те, чи була клавіша натиснута (біт = 1, код натискання) або відпущена (біт = 0, код звільнення). Наприклад, 7-бітный скен-код клавіші В - 48, або 110000 в двійковій системі. Коли ця клавіша натискається, то в порт А посилається код 10110000, а коли її відпустили - код 00110000. Таким чином, кожне натискання на клавішу двічі реєструється в мікросхемі 8255. І кожний раз мікросхема 8255 видає підтвердження мікропроцесору клавіатури. AT працює трохи інакше, посилаючи в обох випадках один і той же скен-код, але передуючи його кодом F0H, коли клавіша відпускається. Коли скен-код видається в порт А, то викликається переривання клавіатури (INT 9). Процесор вмить припиняє свою роботу і виконує процедуру, що аналізує скен-код. Коли поступає код від клавіші зсуву або перемикача, то зміна статусу записується в пам'ять. У всіх інших випадках скен-код трансформується в код символу, за умови, що він подається при натисканні клавіші (в іншому випадку, скен-код відкидається). Звичайно, процедура спочатку визначає установку клавіш зсуву і перемикачів, щоб правильно отримати код (що вводиться це "a" або "A"?). Після цього введений код вміщується в буфер клавіатури, який є областю пам'яті, здатною запам'ятати до 15 введених символів, поки програма дуже зайнята, щоб обробити їх. Є два типи кодів символів, коди ASCII і розширені коди. Коди ASCII - це байтні числа, які відповідають розширеному набору кодів ASCII для IBM PC, який наведений в [ ]. Для IBM PC цей набір включає звичайні символи друкарської машинки, а також ряд спеціальних букв і символів псевдографіки. ASCII коди включають також 32 управляючих кодів, які звичайно використовуються для передачі команд периферійним пристроям, а не виводяться як символи на екрані; однак кожний з них має відповідний символ, який може бути виведений на дисплей, з використанням прямої адресації дисплейної пам'яті. (Строго кажучи, тільки перші 128 символів є справжніми символами ASCII, оскільки ASCII - це абревіатура від "Американський стандартний код для обміну інформацією". Але програмісти звичайно кажуть про коди ASCII, щоб відрізнити їх від інших чисел. Наприклад, "ASCII 8" відноситься до клавіші "Backspace", в той час як "8" - це цифра, якою відповідає ASCII 56). Другий набір кодів, розширені коди - призначені клавішам або комбінаціям клавіш, які не мають представляючого їх символа ASCII, таким як функціональні клавіші або комбінації з клавішею Alt. Розширені коди мають довжину 2 байта, причому перший байт завжди ASCII 0. Другий байт - номер розширеного коду. Наприклад, код 0:30 представляє Alt-A. Початковий нуль дозволяє програмі перевірити, чи належить даний код набору ASCII або розширеному набору. Є декілька комбінацій клавіш, які виконують спеціальні функції і не генерують скен-коди.

Програма повинна очистити буфер клавіатури, перед тим, як видати запит на введення, виключаючи тим самим сторонні натиснення клавіш, які можуть до того часу нагромадитися в буфері. Буфер може нагромаджувати до 15 натискань на клавішу, незалежно від того, чи є вони однобайтними кодами ASCII або двобайтними розширеними кодами. Таким чином, буфер повинен відвести два байти пам'яті для кожного натискання на клавішу. Для однобайтних кодів перший байт містить код ASCII, а другий - скен-код клавіші. Для розширених кодів перший байт містить ASCII 0, а другий номер розширеного коду. Цей код звичайно співпадає зі скен-кодом клавіші, але не завжди, оскільки деякі клавіші можуть комбінуватися з клавішами зсуву для генерації різних кодів. Буфер влаштований як циклічна черга, яку називають також буфером FIFO (перший увійшов - перший пішов). Як і будь-який буфер, він займає неперервну область адрес пам'яті. Однак не має певного елемента пам'яті, який зберігає "початок рядка" в буфері. Замість цього два покажчики зберігають позиції голови і хвоста рядка символів, що знаходиться в буфері в поточний момент. Нові натискання клавіш запасаються в позиціях, наступних за хвостом (в більш старших адресах пам'яті) і відповідно оновлюється покажчик хвоста буфера. Після того, як витрачене весь буферний простір, нові символи продовжують вставлятися, починаючи з самого початку буферної області; тому можливі ситуації, коли голова рядка в буфері має більшу адресу, ніж хвіст. Після того як буфер заповнений, нові символи, що вводяться ігноруються, при цьому переривання клавіатури видає гудок через динамік. У той час, як покажчик на голову встановлений на перший введений символ, покажчик на хвіст встановлений на позицію за останнім введеним символом. Коли обидва покажчики рівні, то буфер порожній. Щоб дозволити ввод 15 символів, потрібна 16-я порожня позиція, 2 байти якої завжди містять код повернення каретки (ASCII 13) і скен-код клавіші , рівний 28. Ця пуста позиція безпосередньо передує голові рядка символів. 32 байта буфера починаються з адреси 0040:001E. Покажчики на голову і хвіст розташовані за адресами 0040:001A і 0040:001C, відповідно. Хоч під покажчики відведене 2 байти, використовується тільки молодший байт. Значення покажчиків міняються від 30 до 60, що відповідає позиціям в області даних BIOS. Для очищення буфера треба просто встановити значення комірки 0040:001A рівним значенню комірки 0040:001C. Зазначимо, що програма має можливість вставляти символи в буфер, завершуючи рядок символом повернення каретки і відповідно міняючи значення покажчиків. Якщо це проробити коректно, перед завершенням програми, то при поверненні управління в MS DOS ці символи будуть прочитані і може бути автоматично завантажена інша програма.

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

Написати програму, яка

1) читає і виводить на екран в 16-ковому, 10-ковому та символьному вигляді значення, записані в даний момент в буфері клавіатури,

2) визначає коди натиснутих клавіш або їх комбінацій.


 

А также другие работы, которые могут Вас заинтересовать

76867. Лимфатические сосуды легких и грудные узлы 180.75 KB
  Приносящие лимфатические сосуды возникают на уровне легочных сегментов переходят в долевые и воротные покидая легкие вместе с венами вливаются в следующие висцеральные лимфатические узлы грудной полости. Бронхопульмональные nodi lymphtici bronchopulmonles 425 внутриорганные узлы располагаются у сегментарных и долевых бронхов внеорганные узлы находятся в корне легкого у главного бронха. Трахеобронхиальные узлы nodi lymphtici trcheobronchiles: верхние 114 и нижние 330 лежат над и под бифуркацией трахеи.
76868. Лимфатические сосуды и узлы органов брюшной полости 186.2 KB
  Из капиллярных сплетений начинаются приносящие лимфатические сосуды которые направляются к краям органа и вливаются в органные лимфатические узлы. Из сплетений приносящие лимфатические сосуды направляются к воротам органов где вступают в органные лимфатические узлы. Из них выходят выносящие сосуды большая часть которых вливается в межорганные и региональные лимфатические узлы меньшая в кишечные поясничные лимфатические стволы грудной проток.
76869. Лимфатические сосуды и узлы таза 179.97 KB
  Приносящие сосуды возникающие из внутриорганных лимфатических сплетений направляются к не многочисленным висцеральным лимфатическим узлам: 1 околомочепузырным собирающим лимфу не только от мочевого пузыря но и от простаты мочеточников и начального отдела уретры; 2 околоматочным расположенным в параметрии между листками широкой маточной связки и собирающим лимфу от матки и маточных труб; 3 околовлагалищным лежащим на передней и задней стенках влагалища; в эти узлы лимфа вливается из шейки матки влагалища и его предверия; 4...
76870. Органы иммунной системы 181.19 KB
  Основой всех иммунных органов является лимфоидная ткань: узелковая и диффузная создающая морфофункциональный клеточный комплекс лимфоцитов плазмоцитов макрофагов и других иммунных клеток. В костном мозге из стволовых клеток путем многократных делений до 100 раз и дифференцировки по трем направлениям эритропоэз гранулопоэз тромбоцитопоэз образуются форменные элементы крови эритроциты агранулоциты лимфо и моноциты тромбоциты а также Влимфоциты. Они участвуют в гуморальном иммунитете и становятся предшественниками...
76871. Центральные органы иммунной системы 184.18 KB
  Общая масса костного мозга medull ossium составляет 253 кг 4547 от массы тела около половины приходится на красный мозг medull ossium rubr столько же на желтый – medull ossium flv. В красном костном мозге благодаря многократному делению – более 100 раз росту и усложнению структуры стволовые клетки превращаются в эритроциты лейкоциты лимфо и моноциты тромбоциты. Влимфоциты образующиеся в красном мозге участвуют в реакциях гуморального иммунитета вырабатывая антитела.
76872. Периферические иммунные органы 184.32 KB
  В белой пульпе вокруг ветвей и веточек селезеночной артерии располагаются лимфоидные узелки сформированные в периартериальные лимфоидные влагалища вокруг пульпарных ветвей эллипсоидные диски с осевым смещением вокруг центральных веточек и гильзы вокруг кисточковых артериол. В петлях сети находятся лимфоидные узелки и диффузная лимфоидная ткань. Корковое вещество лежит под капсулой и содержит лимфоидные узелки в 051 мм диаметром часть из них имеет центры размножения.
76873. Селезенка (lien, splen) и ее строение 182.4 KB
  Селезенка lien splen располагается глубоко в преджелудочной сумке верхнего этажа брюшной полости проецируется в левой подреберной области на уровне IXXI ребер. Селезенка лиен сплен имеет: массу в 20 40 лет у мужчин 192 г у женщин 153 г; длину в 1014 см ширину в 610 см толщину в 34 см; цвет темнокрасный; поверхности: диафрагмальную выпуклую; висцеральную плоскую или слегка вогнутую с лежащим посредине углублением воротами; края: верхний передний острый нижний задний – тупой; концы: задний закругленный ...
76874. Значение нервной системы 184.15 KB
  Условно нервная система подразделяется: на центральную часть в составе головного и спинного мозга; на периферическую часть в составе черепных 12 пар и спинномозговых 31 пара нервов и образующих их корешков; нервных узлов нервных сплетений отдельных ветвей и их нервных окончаний в органах и тканях. Внутри головного мозга нейроны формируют скопления в виде крупных и мелких ядер и сети ретикулярной формации. Нервные волокна мозга подразделяются на ассоциативные комиссуральные и проекционные все они образуют проводящие пути для...
76875. Понятие о нейроне 187.43 KB
  Отростки нейронов нервные волокна в периферической системе образуют корешки пучки нервы и нервные сплетения. Главной частью нервного волокна является осевой цилиндр представляющий короткий или длинный вырост цитоплазмы окруженный внутренней оболочкой неврилеммой. Мякотные или миелиновые волокна которые содержат в наружной шванновской оболочке миелин химическое вещество липоидного характера. Безмякотные безмиелиновые волокна не содержат миелина в наружной оболочке.