Budowa, zasada działania i programowanie klawiatury.doc

(1544 KB) Pobierz
CEL ĆWICZENIA

1. CEL ĆWICZENIA.

Celem ćwiczenia jest zapoznanie się z budową klawiatury, z jej zasadą działania  oraz programowaniem  za pomocą wybranych funkcji przerwania 16h  BIOS’u .

 

2. WSTĘP TEORETYCZNY .

Klawiatura, jest to podstawowe urządzenie służące do wprowadzania danych przez użytkownika komputera. W komputerach klasy PC klawiatura jest osobnym elementem systemu, zestawem ponad 100 (zależnie od typu) klawiszy. W 8-bitowych komputerach klawiatury były zintegrowane z obudową komputera. Istnieje wiele typów klawiatur, różniących się m.in. układem klawiszy czy zestawem klawiszy funkcyjnych.

    

2.1. KLAWIATURY   XT, AT, PS/2 .

 

         Klawiatura komputerowa, a zwłaszcza nowoczesne modele PS/2 (oznaczenie PS/2 odnosi się do modelu klawiatury 101- lub 102 – klawiszowej), stanowi układ dużo bardziej skomplikowany, niż mogłoby się to wydawać na pierwszy rzut oka.

         Wbrew powszechnie panującej opinii, model XT, będący pierwowzorem dla późniejszych udoskonaleń, również był wyposażony we własny kontroler klawiatury. Idea działania klawiatury typu XT przedstawiona jest na rysunku poniżej.



 

 

Mikrokontroler jednoukładowy 8048 nadzoruje siatką połączeń X i Y, w której węzłach umieszczone są poszczególne klawisze. Układ kontroluje odpowiednio często stan tej siatki, wysyłając impulsy kolejno wszystkimi liniami i badając czy nie pojawiły się one na którejś linii Y. W ten sposób określa się które z klawiszy zostały wciśnięte lub ewentualnie zwolnione. Informacja ta przekazywana jest w formie szeregowego strumienia danych   przewodem połączeniowym do komputera. Dane przesyłane są w sposób synchroniczny ,

za pomocą   ramki danych, która ma stałą budowę i zawiera jeden bit startu, osiem bitów danych, jeden bit kontroli parzystości i jeden bit stopu. Napływające z klawiatury dane opracowywane są w komputerze PC/XT przez układ 8255, a odebranie kompletnego znaku sygnalizowane jest przerwaniem na linii IRQ1. Znak stoi do dyspozycji w porcie B układu 8255 ( rejestr o adresie 60h ).

 



         Trochę inaczej przedstawia się sytuacja w przypadku klawiatur PC/AT i PS/2. Jak widać z poniższego rysunku, między klawiaturą a komputerem możliwa jest dwukierunkowa wymiana informacji (w synchronicznym trybie półdupleksowym ).

 

 

Za komunikację tą odpowiedzialny jest od strony komputera scalony kontroler 8741, 8742 lub 8042, a od strony klawiatury mikrokontroler 8049,posiadający odpowiednio rozbudowany w stosunku do swego poprzednika mikrokod. Modele AT i PS/2 wzbogacone są w dodatkowy rejestr sterujący o adresie 64h. Podstawowa funkcja portu 60h została zachowana ze względu na konieczność utrzymania zgodności sprzętowej. Jak wiadomo informacja może być przesyłana w dwóch kierunkach z klawiatury do systemu i odwrotnie. Wysyłając dane do komputera lub odbierając je klawiatura generuje na linii zegara impulsy które taktują przesyłanie kolejnych bitów. Komputer może    wstrzymać wysyłanie danych z klawiatury, wymuszając na linii zegara poziom niski ('0'); stan linii "danych" jest wtedy nieważny.

 

Przed wysłaniem danych klawiatura sprawdza stany linii sygnałowych:

 

¨      gdy linia "zegara" jest w stanie '0' to transmisja zostanie zablokowana i dana jest zapamiętywana w buforze

¨      gdy linia "zegara" jest w stanie '1' i linia "danych" w stanie '0' to dana trafia do bufora a klawiatura przechodzi w tryb odbioru informacji

¨      gdy linie "zegara" i "danych" są w stanie '1' to klawiatura może rozpocząć transmisję

¨      System PC AT może wysyłać różne polecenia zmieniające tryb pracy klawiatury:

¨      zerowanie (kod FFh) - klawiatura przesyła potwierdzenie ACK  - powtórz daną (kod FEh)

¨      nic nie rób (kody od FDh do F7h)

¨      ustaw wartości opóźnienia i częstość repetycji (kod F3h)

¨      wyślij echo (kod EEh)

¨      ustaw wskaźnik trybu (kod EDh) - które z diod LED mają być zapalone.

 

2.2. SCHEMAT  POKAZUJE PRZYKŁADOWY MODUŁ KLAWIATURY.

 



Centralnym elementem jest jednoukładowy procesor 8049 firma INTEL.

 

 

 

Jego zadaniem jest:

 

¨      wykonanie autotestu po włączeniu zasilania i na ewentualne żądanie systemu. Test sprawdza sumę kontrolna całej pamięci programu sterującego ROM, adresowanie i zwarcia między bitami pamięci RAM oraz wysterowuje diody sygnalizacyjne. Test trwa ok. 600 do 900 ms i kończy się wysłaniem do systemu kodu AAH, jako informacji o poprawnym działaniu klawiatury, lub kodu  FCH w wypadku stwierdzenia błędów.

¨      sterowanie transmisją szeregową między klawiaturą i systemem.

¨      sterowanie protokołem wzajemnego potwierdzenia danych przesyłanych łączem.

¨      przeglądanie klawiszy z wykorzystaniem układu 74LS138 i buforowanie co najmniej 15 kodów w wewnętrznej pamięci procesora.

¨      sterowanie diodami świecącymi wskazującymi stan klawiatury lub komputera.

 

 

 

2.3. MAPY KLAWIATUR .

 



Każdemu przyciskowi klawiatury przyporządkowana jest na stałe liczba zwana kodem klawisza ( ang. scan code ). Nie ma znaczenia jakim znakiem lub funkcją opisany jest klawisz, ważne jest jego położenie na klawiaturze. Różnych kodów może być maksymalnie 102, tak więc do ich opisania wystarczy jeden bajt. W przypadku klawiatury XT (rysunek obok) klawisze zostały po prostu kolejno ponumerowane.

 

 

 

 

 

 

 

Naciśnięcie dowolnego klawisza powoduje przesłanie do komputera tzw. kodu naciśnięcia (ang. make code ), który równy jest kodowi naciśniętego klawisza. Kod ten mieści się w całości w 11- bitowej ramce, za pomocą której transportowany jest do komputera. Nadejście dowolnego bajtu danych z klawiatury wyzwala przerwanie sprzętowe na linii IRQ1. Obsługująca to przerwanie procedura przejmuje odebrany znak. Dalszy sposób postępowania procedury INT 09h zależy od tego, czy naciśnięto klawisz funkcyjny (np. F2 ), specjalny (np. Alt, Shift ),czy klawisz ze zwykłym znakiem ( np. B ).

         Pojedynczy kod naciśnięcia nie określa w jednoznaczny sposób intencji użytkownika. Wiele klawiszy opisanych jest kilkoma symbolami, nawet zwykłe litery mogą występować w wersji dużej lub małej. Wybór znaczenia klawisza dokonywany jest za pomocą klawiszy specjalnych.

         Każda klawiatura posiada wbudowaną funkcji autorepetycji, czyli samoczynnego powtarzania wysyłania znaku odpowiadającego przetrzymywanemu dłużej klawiszowi, co zwalnia użytkownika z wielokrotnego naciskania tego samego klawisza. Modele AT i PS/2  pozwalają na regulację szybkości tego powtarzania oraz opóźnienia załączenia funkcji autorepetycji. Model XT ma stałą prędkość autorepetycji równą 10 znaków/s.

         Zwolnienie klawisza również prowadzi do wywołania przerwania IRQ 1, ale programowi obsługi klawiatury przekazywany jest tym razem tzw. kod zwolnienia (break code), który równy jest dla danego klawisza jego kodowi z ustawieniem 7. Można zapisać  zatem równanie : kod zwolnienia = kod wciśnięcia + 128. Analiza kodów wciśnięcia i zwolnienia pozwala na jednoznaczne określenie, które z klawiszy są w danym momencie wciśnięte.

       

 

 

 



 

Klawiatura AT  (rysunek obok) różni się od opisanego modelu XT jedynie przesunięciem bloku numerycznego i wprowadzeniem dodatkowego klawisza SYS REQ o kodzie naciśnięcia równym 84. Wyodrębniono w niej również elementy sygnalizacyjne w postaci diod świecących ( L1 – L3 ).określają one stan funkcji Num Lock, Scroll Lock i Caps Lock.

 

 

         Klawiatura PS/2 posiada nie tylko zmieniony układ znanych już klawiszy ( klawisze funkcyjne umieszczone są na górze, a nie z boku, zmieniono położenie klawiszy Alt, Ctrl, Caps Lock ), ale również została poszerzona o nowe ( np. oddzielny blok klawiszy sterowania kursorem ). Dodane zostały także dwa nowe klawisze funkcyjne F11 i F12, zdublowano klawisze Alt, Ctrl oraz wydzielono klawisze PrtScr i Pause. Niezależny blok sterowania kursorem likwiduje konieczność ciągłego przełączania trybu Num Lock przy pracy na bloku numerycznym. Część klawiatur została wyposażona w dodatkową czwartą diodę świecącą      ( L4 ), oznaczoną zwykle On Line i pełniąca rolę kontrolki zasilania.  



Klawiatura PS/2 symuluje ponadto zachowanie modeli AT. Oznacza to, że klawisze bloku sterowania kursorem, których odpowiedniki znajdują się również na bloku numerycznym, generują inne kody naciśnięcia i  zwolnienia, jeżeli aktywna jest funkcja Num lock. W klawiaturze typu AT przy wyłączonej funkcji Num Lock klawisze bloku numerycznego sterowały ruchem kursora.

 

 

 

 

 

2.4. OBSŁUGA KLAWIATURY PRZEZ BIOS .

 

         Każde naciśnięcie dowolnego klawisza wywołuje przerwanie sprzętowe na linii IRQ1. Do obsługi tego przerwania wywoływana jest procedura INT 09h, która w oparciu o swoje wewnętrzne tabele kodów przyporządkowuje odebranemu kodowi klawisza kod znaku ASCII. Obydwa kody odkładane są przez BIOS w specjalnym buforze. Każdy odebrany znak reprezentowany jest więc przez dwa bajty kod ASCII i kod klawisza.

         Położenie bufora klawiatury zdefiniowane jest w obszarze danych BIOS : słowo zapisane pod adresem 0040:0080h definiuje jego początek, a słowo zapisane pod adresem 0040:0082h jego koniec. Rozmiar bufora wynosi 32 bajty. Daje to miejsce na umieszczenie 16 znaków, ale ze względów organizacyjnych może się ich tam zmieścić tylko 15. Adres początkowy bufora wynosi zwykle 0040:001Eh, zaś adres pierwszego bajtu poza buforem wynosi - 0040h:003Eh.

         Bufor zorganizowany jest logicznie jako struktura pierścieniowa. Pomagają w tym dwa dodatkowe wskaźniki zlokalizowane pod adresami 0040:001Ch i 0040h:001Ah. Pierwszy z nich to wskaźnik zapisu (ang. keyboard buffer tail) i wskazuje zawsze na wolne miejsce, w którym może być umieszczony kolejny nadchodzący znak. Drugi jest wskaźnikiem odczytu (ang. keyboard buffer head) i wskazuje znak, który należy w pierwszej kolejności przekazać żądającemu go programowi.



 

 

 

 

 

Rysunek obok przedstawia stan wyjściowy, w którym w buforze klawiatury nie znajduje się żaden znak. Stan ten ma miejsce również w momencie pobrania wszystkich zalegających bufor znaków. Bufor jest pusty, jeżeli wskaźniki zapisu i odczytu mają jednakowe wartości, tj. wskazują tę samą (obojętnie którą) komórkę.

 

 

 

 

 

 

 

 

Kolejne nadchodzące znaki umieszczane są w buforze; za każdym razem wskaźnik zapisu przesuwa się (o słowo) w stronę wyższych adresów. Jednocześnie przebiega proces pobierania znaków z komórek, które pokazuje wskaźnik odczytu. Należy pamiętać, że umieszczenie znaków w buforze inicjowane jest sprzętowo, natomiast zadanie ich odbierania spoczywa w całości na wykonującym się programie aplikacyjnym (w szczególności może nim być system operacyjny). Jeżeli oba procesy (napływu i odbioru znaków) przebiegają z przybliżoną prędkością, stabilizuje się stan zbliżony do pokazanego na  poniższym rysunku (bufor częściowo zajęty).

 

 





 

Ponieważ bufor klawiatury jest strukturą pierścieniowa, możliwa jest również sytuacja przedstawiona na rysunku powyżej (bufor zawinięty).

 

Napływające znaki umieszczane są w buforze pod coraz to wyższymi adresami ale tylko do wartości 0040:003Ch. Następny znak może być zapisany wyłącznie na początku bufora, tj. pod adresem 0040:001Eh. Podczas gdy wskaźnik odczytu „oczyszcza” kolejne komórki posuwając się ku szczytowi rejestru, nowo napływające znaki umieszczane są w buforze począwszy od jego podstawy.



       

Duża prędkość napływu znaków lub nieodbieranie ich przez program powoduje przepełnienie bufora. Rozlega się wówczas krótki sygnał dźwiękowy (beep), za który odpowiedzialna jest obsługa przerwań 09h.

 

Bufor klawiatury, aczkolwiek posiadający pojemność 32 bajtów (16 zestawów kodów) pozwala na pomieszczenie maksymalnie 15 znaków. Rysunek obok pokazuje bufor w stanie przepełnienia. Przyjęcie w wolne miejsce kolejnej pary kodów doprowadziłoby do zrównania wskaźników zapisu i odczytu. Stan taki identyfikuje jednak przecież bufor pusty. Dla uniknięcia dwuznaczności należy wiec zadowolić się ograniczoną pojemnością bufora.

System rozpoznaje przepełnienie bufora, jeżeli wskaźnik zapisu odnosi się do znaku bezpośrednio poprzedzającego wskaźnik odczytu. 

 

 

Funkcja odczytania znaku z bufora pierścieniowego nie powoduje oczywiście niczego oprócz przekazania wywołującemu ją programowi pary kodów wskazywanej   przez wskaźnik odczytu i zwiększenia tego ostatniego o jedną pozycję (dwa bajty) Po tej operacji przekazana para kodów w dalszym ciągu istnieje w buforze, chociaż miejsce przez nią zajmowane uznane jest za wolne. Programy operujące bezpośrednio na zawartości bufora klawiatury mogą sobie pozwolić na wstawienie w miejsce poprzedzające wskaźnik odczytu dowolnej pary kodów ,co po przesunięciu wskaźnika o jeden wstecz spowoduje symulację naciśnięcia dowolnego klawisza.

Nie każdy naciśnięty klawisz da się zinterpretować jako znak i umieścić przyporządkowaną mu parę kodów w buforze klawiatury. Dla pełnej oceny sytuacji panującej na klawiaturze potrzeba jeszcze informacji o stanie klawiszy specjalnych. Dane te umieszcza BIOS w swoim obszarze danych w bajtach o adresach 0040:0017h i 0040:0018h.

 

2.5. WŁASNOŚCI MECHANICZNE I ELEKTRYCZNE KLAWIATUR .

                      Jednym z podstawowych rodzajów klawiatur są klawiatury z przyciskami elektromechanicznymi - po naciśnięciu klawisza zwierane są dwa sprężyste zestyki. W innych klawiaturach wykonywane są przyciski foliowe, metoda wykonywania takich przycisków jest bardzo oszczędna i szybka. Ich zaletą jest to, że powierzchnia robocza styków może być hermetycznie zamknięta. Elastyczna, przewodząca folia zawiera przy nacisku dwa leżące pod nią pola kontaktowe, wykonane na płytce drukowanej. Wadą takich klawiszy jest zbyt mały skok przy naciśnięciu. Klawiatury foliowe nie są przeznaczone do intensywnej pracy, takiej jak np. edycji tekstu.



       

 

 

 

 

 

 

Klawiatury mechaniczne charakteryzują się przeważnie tym, że ich styki mogą się utleniać w miarę upływu czasu, co prowadzi do słabego kontaktu lub nawet do całkowitej utraty własności przewodzącej. Ten problem rozwiązują    klawiatury pojemnościowe i halotronowe. W skład klawiatury pojemnościowej wchodzi obwód drukowany, pokryty cienką folią izolacyjną. Metalizowany na jednym końcu przycisk służy do tego, aby po wciśnięciu utworzyć wraz z przewodzącymi polami kontaktowymi pewien kondensator, stanowiący dla sygnałów o wielkiej częstotliwości znikomą rezystancję. Inną możliwością uniknięcia uszkodzeń styków daje zastosowanie hallotronów w każdym klawiszu. przycisk jest wyposażony w magnes stały, który przy każdym zbliżeniu do hallotronu wyprowadza ze stanu równowagi jego układ mostkowy. W układzie stosowane są wzmacniacze, aby doprowadzić wartość do normalnego poziomu logicznego.

 







BEZKONTAKTOWY PRZYCISK HALLOTRONOWY                PRZYCISK POJEMNOŚCIOWY

 

     BUDOWA KLAWIATURY FOLIOWEJ

 

2.6. PARAMETRY KLAWIATUR .

         Klawiatura jak każde urządzenie charakteryzuje się pewnymi parametrami. Na podstawie materiałów dostarczonych przez firmę OPTIMUS S.A można porównać pewne parametry klawiatury. Zaliczyć do nich można:

   - ilość naciśnięć

   - sprężystość

   - rezystancja kontaktu

   - czas odskoku klawisza

Przy różnych rodzajach klawiszy klawiatury posiadają różne cechy i mogą być stosowane do różnych komputerów.

 

 

 

2.7. ZASILANIE KLAWIATURY.



 

 

2.8. OPIS WYBRANYCH FUNKCJI PRZERWANIA 16H BIOS.

Funkcja 00h – odczytuje kolejny znak z bufora i aktualizuje wskaźnik odczytu.

        

         Parametry wejściowe: - AH = 00h

 

         Parametry wyjściowe: - AH = kod klawisza

- AL  = kod ASCII

 

Funkcja 01h – bada stan bufora klawiatury w celu stwierdzenia, czy jest tam znak do

                          odczytu. Wskaźnik odczytu nie jest przy tym aktualizowany. Obecność

                          znaku w buforze klawiatury sygnalizowana jest wyzerowaniem bitu ZF 

                          (Zero) rejestru stanu procesora.

 

         Parametry wejściowe: - AH = 01h

 

 

         Parametry wyjściowe: - AH = kod klawisza

...

Zgłoś jeśli naruszono regulamin