Пернетақтаны басқару

Автор работы: Пользователь скрыл имя, 20 Декабря 2011 в 14:11, курсовая работа

Описание

Жүйелік платада орналасқан А микросхемасының интерфейсына пернетақтаның әрбір пернесін басқанда скан-код шығарылады. Скан-код дегеніміз бір байтты сан, кіші 7 биті әрбір пернеге меншіктелген идентификациялық номер, АТ дан басқа барлық машиналарда үлкен биттің коды перненің басылғанын (бит=1,басу коды) немесе жіберілгенін көрсетеді (бит=0,жіерілді).

Содержание

Кіріспе...................................................................................
1 Негізгі бөлім..........................................................................
1.1 Пернетақтаны басқару...............................................................
1.2 Пернетақта буферін тазалау.........................................................
1.3 Буфердегі символдарды тексеру...................................................
1.4 Символ енгізілуін күту және оны экранға бейнелеу.................
1.5 Экранда перне басылуы мен жаңғырықты күту.........................
1.6 Символдарды күтусіз қабылдау....................................................
1.7 Символдар жолы ашу.................................................................
1.8 Пернетақтадан процедураның жазылуын енгізу.........................
1.9 Пернетақта үзілісін қайта бағдарламалау.................................
1.10 Скан-кодтың қосалқы кестесі...................................................
1.11 ASCII кодынын қосымша кестесі.............................................
Қорытынды ...........................................................................

Работа состоит из  1 файл

Жанерке.doc

— 529.50 Кб (Скачать документ)
  Кіріспе...................................................................................  
1 Негізгі бөлім..........................................................................  
1.1 Пернетақтаны  басқару...............................................................  
1.2 Пернетақта  буферін тазалау.........................................................  
1.3 Буфердегі символдарды  тексеру...................................................  
1.4 Символ енгізілуін күту және оны экранға бейнелеу.................  
1.5 Экранда перне  басылуы мен жаңғырықты күту.........................  
1.6 Символдарды күтусіз  қабылдау....................................................  
1.7 Символдар жолы ашу.................................................................  
1.8 Пернетақтадан процедураның жазылуын енгізу.........................  
1.9 Пернетақта  үзілісін қайта бағдарламалау.................................  
1.10 Скан-кодтың қосалқы  кестесі...................................................  
1.11 ASCII кодынын қосымша кестесі.............................................  
  Қорытынды ...........................................................................  
 

Жоспары 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

    1.1. Пернетақтаны басқару 

      Жүйелік платада орналасқан  А микросхемасының интерфейсына пернетақтаның әрбір пернесін басқанда скан-код шығарылады. Скан-код дегеніміз бір байтты сан, кіші 7 биті әрбір пернеге меншіктелген идентификациялық номер, АТ дан басқа барлық машиналарда үлкен биттің коды перненің басылғанын (бит=1,басу коды) немесе жіберілгенін көрсетеді (бит=0,жіерілді). Мысалы, 7 битті скан код пернелері В-48, немесе 110000 екілік жүйеде. Сол перне басылғанда, онда  А портына 10110000 коды жіберіледі, ал босатқанда -00110000 коды. Осылайша әрбір пернені басу 8255 микросхемасында 2 рет тіркеледі. Және әрбір жолы 8255 микросхемасы пернетақтаға растау әмірін жіберіп отырады. Ал АТ біраз басқаша жұмыс істейді, ол екі жағдайда да бірдей скан-код жіберіп, бірақ FOH кодымен пернелер босатылғанда алмастырып отырады.

      Скан-код  А портына берілген кезде пернетақтада үзіліс болады  (int 9). Процессор бірден өз жұмысын тоқтатады да, скан-кодты анализдайтын процедураны орындайды. Жылжу пернесі немесе қайта қосқыштан код келгенде статус өзгерісі жадыға жазылады. Басқа жағдайларда перне басылған кезде скан-код символ кодына трансформацияланады (әйтпесе скан-кодты шығарып тастайды).

       Әрине  енгізілген кодты дұрыс алу  үшін жылжу пернелері мен қайта  қосқыштардың нұсқамаларын анықтап  алады. Осыдан кейін өңдеуге  жіберілген код жады аумағы  болып табылатын пернетақта буферіне барып орналасады,бағдарлама басқа операцияларды орындап жатқан кезде пернетақта буфері 15 символға дейін жадыда сақтай алады.

        Кодты  символдың екі түрі болады, ASCII және «кеңейтілген». ASCII кодтары-  байтты сандар, олар IBM PC-ке негізделген ASCII кеңейтілген кодтар теріміне сәйкес келеді. IBM PC-та бұл теру- теру машинкасының қарапайым символдарын, сонымен қатар арнайы әріптер және псевдографика символдарын да қолданады. Сонымен қатар ASCII коды құрамында 32 басқару коды бар, экранға басқа символдар сияқты шықпай, олар приферинді құрылғыларға командаларды жіберу үшін қолданылады. Бірақ, олардың әрқайсында дисплей жадысының тікелей адресациясы арқылы экранға шығарылатын символдар меншіктелген.

        Кодты  символдардың екінші түрі «кеңейтілген». Олар белгілі бір пернелерге немесе клавиша комбинацияларына меншіктелген, мысалы:Alt пернесімен комбинацияланатын пернелер және функционалды пернелер. Кеңейтілген кодтар ұзындығы 2 байт, оның бірінші байты әрқашан ASCII 0 болады. Екінші байт-кеңейтілген код номері.

      Мысалы: 0:30 коды Alt+A-ға сәйкес келеді. Бастапқы ноль берілген кодының қай теруге жататынын анықтауға көмектеседі.

        Арнайы  командаларды орындап бірақ, скан-кодты  генерация жасамайтын да бірнеше  перне комбинациялары бар. Оларға Ctrl-Break,Ctrl-Alt-Del,Prtse, АТ үшін Ctrl-Alt-стрелка солға, стрелка оңға-Caps Lock,Ins жатады.Ал қалған пернелерді басқанда, егер олар бағдарламада арнайы қызмет атқарса интерпретация жасалуы керек. Мысалы: курсорды оңға жылжыту, онда бағдарламада осы эффектке жететіндей кодтар болу керек. 

    1. . Пернетақта буферін тазалау
 

        Кодты  еңгізуге сұрату жіберместен  бұрын, бағдарлама пернетақта  буферіндегі керексіз символдарды  өшіруі керек.Символдардың 1 байтты ASCII коды немесе 2 байтты «кеңейтілген код» екеніне қарамастан, буфер жадыда 15 символға дейін сақтай алады. Осылайша буфер перненің әрбір басылуына жадыдан 2 байт орын алып отырады.Бір байтты кодтар үшін бірінші байт ASCII коды, екіншісі перненің скан-коды, ал кеңейтілген кодтар үшін бірінші байт ASCII 0, ал екіншісі кеңейтілген код номері болады. Бұл код негізінде перне скан-кодымен сәйкес келіп отырады, бірақ ылғи емес, себебі кейбір пернелер басқа кодтардан айырмашылығы болу үшін жылжу пернелерімен комбинацияланады.

      Буфер циклдық тізбек түрінде құрылған, оны FIFO буфері деп те атайды. Барлық буферлер сияқты ол да жадының үзіліссіз аймағында орналастырылады. Бірақ «жолдың басы» сақталатын арнайы жады ұяшығы болмайды. Оның орнына ағымдағы уақытта буферде сақталған екі нұсқағыш символды жолдың басы және соңы деген позицияда болады. Пернені жаңадан басқанда, алдыңғы басылған перне кодының соңына жаңа код тіркеледі.

      Буфердің  бос аумағы толған соң , жаңа символдар  тізбектің басынан бастап қайта  тіркеледі. Сондықтан буфердегі  жолдың басында символдық адрестер соңына қарағанда көп болады. Буфер жадысы толған соң , жаңадан енгізілген символдар қабылданбайды,пернетақтада үзіліс болып, динамиктен дыбыс шығады.

      Алғашқы енгізілген символға басындағы нұсқағышты орналастырғанда, соңғы енгізілген символға соңғы нұсқағыш орнап, олар тепе-теңдіккүйде болады. Екі нұсқағыш тең болған кезде, буфер бос болады.

      15 символды  толық енгізу үшін 2 байтты 16-шы  позиция және <ENTER> пернесіне сәйкес скан-код 28 керек. Буфердің 32-ші байты 0040:001А және 0040:001С адрестерінде орналасқан. Әрбі нұсағшқа 2байт меншіктелгенімен, кіші байт қана қолданылады. BIOS мәліметтер облысында сәйкес нұсқағыштар мәндері 30-дан 60-қа дейін өзгереді. Буферді тазалау үшін 0040:001С ұяшығына 0040:001А ұяшығының мәндерін теңестіру керек. Егер бағдарламаны аяқтау алдында бұл командаларды дұрыс орындаса, MS DOS-та басқаруға оралғанда, символдар есептеліп, автоматты түрде басқа бағдарлама жүктелуі мүмкін. 

      ОРТАША  ДЕҢГЕЙ 

      ОС функциясы 21Н үзілісі пернеақтадан енгізілген 1,6,7,8 және А (осы бөлімде сипатталған) барлық функцияларды орындайды, алдымен пернетақта буферін тазалайды. Ол үшін енгізу функциясының номерін AL-ге (яғни 1-ге) орналастыру керек. 

      ; _ _ _ _  _ пернені басу алдындағы буферді тазалау 

MOV AH, OCH ;DOS OCH функциясын таңдаймыз
MOV AL,1 ; символды енгізу функциясын таңдаймыз
INT 21H ; буферді тазалап, енгізуді күту

      ТӨМЕНГІ ДЕҢГЕЙ 

      Жоғарғы деңгейдегі сияқты нұсқағыштардың басы мен соңын теңестіреміз. Пернетақта үзіліске ұшырамау үшін модификациялау кезінде нұсқағыштар үзілісін тоқтатып қоямыз. 

      ;_  _  _  _  _ нұсқағыштардың басы мен соңының мәндерін туралу 

CLI   ; үзілісті тоқтатамыз
SUB AX, AX ; регистрді нольге келтіреміз
MOV ES, AX ; қосушы сегмент  жады басынан бастап
MOV AL, ES:[41AH] ; буфер басына нұсқағыш аламыз
MOV ES:[41CH], AL ; буфер соңына жібереміз
STI   ; үзілісті аяқтаймыз
 
 
 

      1.3. Буфедегі символдарды тексеру 

      Пернетақта  буферінен сиволдарды өшірмей де, пернетақтадан енгізу болған/болмағанын тексеруге болады. Буфер ағымдағы уақытта жадыда орналасқан символдар  тізбегінің басы мен аяғын көрсететін 2 түрлі нұсқағыш пайдаланады. Олардың мәндері тең болғанда, буфер бос болады. Тек 0040:001А және 0040:001С ұяшықтарының мәнін салыстыру керек. 

      ОРТАША  ДЕҢГЕЙ 

      Пернетақта буфері бос болғанда OFFH мәндерін AL регистырына ОВН функциясы 21Н үзілісі қайтарады. 

      ; _  _  _  _  _буфердегі символдарды тексеру 

MOV AH, 1 ;функция номері
INT 16H ; 21Н үзілісін шақырамыз
CMP AL, OFFH ; OFFH-пен салыстырамыз
JZ GET_KEYSTROKE ; буфер бос болмаса ауысу
 

      ; _  _  _  _  _ буфердегі символдарды қайталап тексеру 

MOV AH,1 ;функция номері
INT 16H ; символды тексеру
JZ NO_CHARACTER ; ZF=1болса,ауысу
 

      ; _  _  _  _  _ енгізілген символды көру 

CMP AL, 0 ; бұл кеңейтілген код па?
JE EXTENDED_CODE ; егер иә, онда басқа бұрымға көшу
 

      ТӨМЕНГІ ДЕҢГЕЙ

Жоғарғы деңгейдегі сияқты нұсқағыштарды салыстырамыз 
 

      ; _  _  _  _  _ нұсқағыштардың басы мен соңын салыстыру 

MOV AX,0 ; қосымша сегментті орнатамыз
MOV ES, AX ; жадының басына
MOV AL, ES:[41AH] ; бір нұсқағыш аламыз
MOV AH,ES:[41CH] ; басқа нұсқағыш аламыз
CMP AH, AL ; салыстырамыз
JNE GET_KEYSTROKE ; егер тең  болмаса енгізу процедурасына  көшу

      1.4. Символ енгізілуін күту және оны экранға бейнелеу 

      Әдетте  енгізілген символдар экранға не басылғанын көру үшін бейнеленеді. Кейде  автоматты жаңғырық экранда қажет емес. Мысалы, мәзір пунктін пернені басу арқылы бейнелеуге болады. Кейде енгізілген символдарды экранға шықпастан бұрын қателікке тексеру керек.

      Кеңейтілген кодты өңдейтін әрбір бағдарлама автоматты жаңғырықты пайдалану  керек, себебі бұл кезде алғашқы байт (ASCIIO) коды символдар арасына бос орын (пробел) қалдырып экранға шығарады.

     ОРТАША  ДЕҢГЕЙ 

      Егер  буфер бос болса, 7 және 8 функцияларын 21Н үзілісі символ    енгізілуін күтеді. Бұл кезде 8 функциясы Ctrl+Break пернелер комбинациясын анықтайды, ал 7 функциясы оған әсер етпейді. Екі жағдайда да символ AL-ге қайтады. AL ASCLL кодын меншіктеген кезде кеңейтілген код болады. Үзілісті қайталағанда AL-да екінші кеңейтілген код шығады. 

      ; _  _  _  _  _ енгізілген символды  аламыз 

Информация о работе Пернетақтаны басқару