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

Автор работы: Пользователь скрыл имя, 25 Февраля 2013 в 23:23, курсовая работа

Краткое описание

Випуск комп'ютерів IBM PC розпочався у 1981 році, і вони швидко завоювали величезну популярність у користувачів. IBM PC і сумісні з ними комп'ютери становлять тепер більшу частину парку професійних ПЕОМ у світі. У цей час програмне забезпечення, розроблене для IBM PC, охоплює практично всі сфери людської діяльності. Даний курсовий проект присвячений розробці програми-перемикача світлодіодів клавіатури.

Содержание

Вступ 5
1 Пристрій введення даних – клавіатура 6
1.1 Характеристика клавіатури 6
1.2 Типи клавіатур 7
2 Керування клавіатурою на рівні портів введення-виведення 10
3 Схема керування клавиатурою 13
4 Розробка програми-перемикача світлодіодів клавіатури 15
4.1 Опис програми 15
4.2 Інструкція коритсувачу 16
5 Тестування розробленої програми 17
Заключення 18
Література 19
Додаток А Текст програми 20
Графічна частина
Лист 1 (формат А2) Блок-схема алгоритму програми

Прикрепленные файлы: 1 файл

Клепаков КУРСОВОЙ !!!.doc

— 194.00 Кб (Скачать документ)

        jne         not_our_key         ; перейти до нашому

                                        ; оброблювачеві

        [...]                           ; наші дії тут

not_our_key:

        jmp        old_int09h           ; виклик старого оброблювача

Ми поки не можемо завершити  оброблювач просто командою IRET, тому що, по-перше, оброблювач апаратного переривання клавіатури повинен установити біт 7 порту 61h, а потім повернути його у вихідний стан, наприклад так:

        in         al,61h

        push       ax

        or         al,80h

        out        61h,al

        pop        ax

        out        61h,al

А по-друге, він повинен  повідомити контролеру переривань, що обробка апаратного переривання  закінчилася командами

        mov        al,20h

        out        20h,al

60h для запису — регістр керування клавіатурою. Байт, записаний у цей порт (якщо біт 1 у порту 64h дорівнює 0), інтерпретується як команда. Деякі команди складаються з більш ніж одного байта — тоді варто дочекатися обнуління цього біта ще раз перед тим, як посилати наступний байт.

 

 

Перелічимо найбільш стандартні команди.

Команда EDh 0?h — змінити стан світлодіодів клавіатури. Другий байт цієї команди визначає новий стан:

біт 0 — стан Scroll Lock (1 — включена, 0 — виключена)

біт 1 — стан Num Lock

біт 2 — стан Caps Lock

При цьому стан перемикачів, що зберігає BIOS у байтах стану клавіатури, не змінюється, і з першою нагодою оброблювач переривання клавіатури BIOS відновить стан світлодіодів.

Команда EEh — луна-запит. Клавіатура відповідає скан-кодом EEh.

Команда F3h ??h — Установити параметри режиму автоповтора:

біт 7 другого байта команди — 0

біти 6 – 5 встановлюють паузу перед початком автоповтора:

00 = 250ms, 01 = 500ms, 10 = 750ms, 11 = 1000ms

біти 4 – 0 встановлюють швидкість автоповтора (символів у секунду):

00000 = 30,0     01111 = 8,0

00010 = 24,0     10010 = 6,0

00100 = 20,0     10100 = 5,0

00111 = 16,0     10111 = 4,0

01000 = 15,0     11010 = 3,0

01010 = 12,0     11111 = 2,0

01100 = 10,0

Всі проміжні значення також  мають сенс і відповідають проміжним  швидкостям, наприклад 00001 = 26,7.

Команда F4h — ввімкнути клавіатуру.


Команда F5h — вимикнути клавіатуру.

Команда F6h — установити параметри за замовчуванням.

Команда FEh — послати останній скан-код ще раз.

Команда FFh — виконати самотестування.


Клавіатура відповідає на всі команди, крім EEh й FEh, скан-кодом FAh (підтвердження), що поглинається стандартним оброблювачем BIOS, так що, якщо ми не заміщаємо повністю стандартний оброблювач, про його обробку можна не турбуватися.

 


3 СХЕМА КЕРУВАННЯ КЛАВІАТУРОЮ

 

Схема обробки переривання  від клавіатури зображена на малюнку 3.1

При натисканні на клавішу виробляється електричний сигнал, що перетворює в так званий SCAN-код клавіші довжиною в 1 байт.

SCAN-код виробляється  при натисканні або при відпусканні  клавіші, причому код натискання  й код відпускання різні.

SCAN-код попадає в  контролер клавіатури. У ньому існує невеликий буфер, де накопичуються SCAN-коди до їхньої обробки.

Контролер клавіатури надсилає запит на переривання на контролер  переривань, контролер переривань на центральний процесор по лінії INTR. Якщо переривання дозволені, центральний процесор по лінії INTA видає сигнал контролеру клавіатури для того, щоб контролер клавіатури виставив SCAN-код клавіші в порт 60h. Далі центральний процесор виконує 9-і переривання, тобто викликає підпрограму обробки цього переривання. Підпрограма обробки (тобто 09h) забирає SCAN-код з порту 60h (читає), обробляє його, тобто ставить йому певний ASCII-код у буфер клавіатури.

 Сигнал переривань


 

Відповідь

SCAN- код                SCAN-код                                Сигнал переривань                                                   

ASCII-код               


 

                SCAN-код                                                          

                                                                                                       SCAN-код


 

 

Мал. 3.1 Схема обробки переривання  від клавіатури

 


Буфер клавіатури – це спеціальна область в оперативній пам'яті, куди заносяться SCAN й ASCII коди клавіш.

Програма INT 09h поряд з буфером  клавіатури використовує також спеціальні осередки, де зберігається слово стану клавіатури (мал. 3.2). Це слово містить біти, які характеризують натискання керуючих клавіш типу ALT, CTRL, SHIFT і т.д. Це слово стану клавіатури розташоване за адресою 0040h:0017h (осередок 417, сегмент 0, зсув 417).

 

7

6

5

4

3

2

1

0

INS

Caps Lock

Num Lock

Scroll Lock

ALT

CTRL

SHIFT

(лівий)

SHIFT

(правий)


Мал. 3.2 Схема молодшого байта  стану клавіатури

 

Якщо в біті 1, то відповідна клавіша натиснута.

 

 

 

 

 

 

 

 

 

 

 

 

 


4 РОЗРОБКА ПРОГРАМИ-ПЕРЕМИКАЧА 

СВІТЛОДІОДІВ  КЛАВІАТУРИ

4.1 Опис програми

 

Програма описана як com-програма (org 100h). Тіло програми складається  із трьох процедур, описаних з параметром  near.Тіло основної програми перебуває  в процедурі Start. Після неї описані  дві підпрограми - change_LEDs  й wait_KBin. Нижче представлений опис кожної з них.

В основній програмі за допомогою  функції 02h переривання int 1Ah визначається поточний час. Поточна секунда зберігається з регістра dh у регістр ch. Регістру сl привласнюється стан світлодіодів клавіатури, дорівнює 0100b. Далі треба виконати цикл, організований за допомогою мітки main_loop, у якому власне відбувається перемикання світлодіодів клавіатури відповідно до регістра сl. На початку циклу викликається процедура change_LEDs. Далі відбувається зрушення регістра cl на 1, тобто перехід до наступного світлодіоду. Якщо 1 виходить у біт 3 – відбувається повернення її в біт 0. Потім у циклі, організованому у вигляді мітки continue відбуваються наступні дії: за допомогою функції 1h переривання int 16h перевіряється, чи не натиснута клавіша;  якщо натиснуто -  перехід на мітку exit_loop - зчитування клавіші (функція 0h переривання int 16h) і вихід із програми (команда ret) ; якщо клавіша не була натиснута - у стеці зберігається регістр сх (команда push cх) , далі за допомогою функції 02h переривання int 1Ah визначається поточний час, відновлюється зі стека регістр сх (команда pop cx) і рівняється поточна секунда з регістра dh зі значенням у регістрі сh; після порівняння в кожному разі йде копіювання поточної секунди з dh в ch (mov ch,dh) і залежно від результату порівняння – якщо була та ж сама секунда, не перемикати світлодіоди (перехід на мітку continue), інакше – перемкнути світлодіоди (перехід на мітку main_loop).

Процедура change_LEDs встановлює стан світлодіодів клавіатури

 

 

відповідно  до числа в CL. На початку процедури йде виклик підпрограми


wait_KBin - очікування можливості  посилки команди. Далі через  регістр al у порт 60h посилається  команда клавіатури EDh (mov al,EDh й out 60h,al). Потім знову викликається підпрограми wait_KBin. Далі через регістр al у порт 60h пересилається значення регістра сl - новий стан світлодіодів (mov al,сl й out 60h,al). Команда ret - вихід з підпрограми.

Процедура wait_KBin очікує можливість введення команди  для клавіатури. На початку відбувається читання слова стану клавіатури - занесення байта в регістр al з порту 64h (mov al,64h). Далі відбувається порівняння - якщо біт 1 із цього байта не дорівнює 1, то очікувати (байт, записаний у порт 60h (якщо біт 1 у порту 64h дорівнює 0), інтерпретується як команда), якщо дорівнює 1 - вийти з підпрограми (команда ret).

Програма закінчується крапкою входу в програму, який має ім'я процедури, що містить  тіло основної програми - Start.

Блок-схема алгоритму  представлена Листі 1.

Текст програми представлений у Додатку А.

    1. Інструкція користувачеві

 

Дане програмне забезпечення не вимагає великого обсягу оперативної  пам'яті й працює практично на всіх без винятку IBM-сумісних персональних комп'ютерах. Програма працює в середовищі MS DOS або в режимі емуляції DOS (будь-який файловий менеджер під DOS). Власне сама програма – файл mig.com. Для роботи програми необхідно запустити вищезгаданий файл у зазначеному режимі.

 

 

 

 


5 ТЕСТУВАННЯ РОЗРОБЛЕНОЇ  ПРОГРАМИ

 

Програма курсового проекту  була розроблена для роботи в операційній системі MS DOS (режимі емуляції DOS).

У ході розробки й налагодження програми були повністю виконані вимоги, пред'явлені для курсового проектування, а саме перемикання світлодіодів клавіатури.

Тестування програми проводилося в режимі файлового менеджера під DOS - Volcov Commander. Тестування програми показало, що вона працює правильно й коректно, вихід із програми відбувається по натисканню клавіші на клавіатурі. Після закінчення програми методом перевірки було визначено, що відбувається перемикання світлодіодів на прямо протилежні значення.

При цьому стан перемикачів, що зберігає BIOS у байтах стану клавіатури, не змінюється, і з першою нагодою  оброблювач переривання клавіатури BIOS відновить стан світлодіодів. Що й відбувається після виходу з режиму Volcov Commander.

 

 

 

 

 

 

 

 

 

 


ВИСНОВОК

Під час курсового  проектування був вивчений пристрій даних - клавіатура. Для розробки програми керування діодів клавіатури докладно були розглянуті порти воду-виводу . Були вивчені схема обробки переривання від клавіатури й байт стану клавіатури.

У даному проекті  була розроблена блок-схема алгоритму  програми, і також описана власне програма-перемикач світлодіодів клавіатури з використанням мови низького рівня - асемблера. У пояснювальній записці  приводиться докладний опис роботи розробленої програми, а також інструкція користувачеві по роботі із програмою.

Тестування  програми показало, що вона є працездатною й могла б бути використана  в будь-якій сфері застосування й  використання програм мовою асемблера.  

 

 

 

 

 

 

 

 

 

 

 

 

 


ЛІТЕРАТУРА

 

  1. Абель П. Основи програмування/ Пер. с англ. Ю. В. Сальникова.- М.: Вищ. Шк. 1992р. - 447с.: іл.
  2. А. Жуків, А. Авдохін «Assembler».-Спб: БХВ - Петербург, 2002..
  3. Архітектура вводу-висновку персональних ЕОМ IBM PC Під pедагуванням Ю. С. Лукача (C) Инженеpно-технічне бюpо, 1990
  4. Асемблер для DOS, Windows й Unix Зубків В. А.- 2-і видання «Пітер», 402 с. 
  5. В. Юров «Assembler» Практикум.-Спб.:Пітер, 2001.
  6. В. Юров «Assembler» Підручник.-Спб.:Пітер, 2001.

Ірвін, Стосов. Мова Асемблера для процесорів Intel, 3-і видання: Пер. с англ. - М.: Видавничий будинок «Вільямс», 2002.-616с.: іл. - Парал. Тит. Англ.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Додаток А

Текст програми

mig.asm

; циклічно перемикає світлодіоди  клавіатури

; Компіляція:

; TASM:

; tasm /m mig.asm

; tlink /t /x mig.obj

.model tiny

.code

org 100h  ; COM-програма

start proc near

mov ah,2  ; функція 02 переривання 1Ah

int 1Ah  ; одержати поточний час

mov ch,dh  ; зберегти поточну секунду в CH

mov cl,0100b ; CL = стан світлодіодів клавіатури

main_loop:

call change_LEDs ; установити Світлодіоди відповідно до CL

shl cl,1  ; наступний світлодіод,

test cl,1000b ; якщо одиниця вийшла в біт 3,

jz continue

mov cl,0001b  ; повернути її в біт 0,

continue:

mov ah,1  ; перевірити,  чи не була натиснута клавіша,

int 16h

jnz exit_loop ; якщо так - вийти із програми

push cx

mov ah,2  ; функція 02 переривання 1Ah

int 1Ah  ; одержати поточний час

pop cx

cmp ch,dh  ; зрівняти поточну секунду в DH з CH

mov ch,dh  ; скопіювати її в кожному разі,

je continue ; якщо це була та ж сама секунда - не

; перемикати світлодіоди,

jmp short main_loop ; інакше - перемкнути світлодіоди

exit_loop:

mov ah,0  ; вихід із циклу - була натиснута клавіша

int 16h  ; уважати її

ret   ; і завершити програму

start endp

; процедура change_LEDs

; установлює стан світлодіодів  клавіатури відповідно до числа  в CL

change_LEDs proc near

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