Tastaturschnittstelle
Obwohl die Tastaturen sich
äußerlich ziemlich ähneln, so gibt es doch gravierende Unterschiede.
Hauptsächlich unterscheidet man XT und AT Tastaturen. Diese kann man an dem
zusätzlichen Nummernblock der AT-Tastatur unterscheiden. Die weiterentwicklung
der AT ist die sog. MF-II Tastatur, bei dieser liegen die Funktionstasten nicht
neben sondern über den Buchstabentasten. Auch hat diese Tastatur drei LED´s, die
den Zustand der Feststelltaste u.a. anzeigen.
Aufbau und
Funktion:
Bei der Tastaturschnittstelle handelt es sich um eine
bidirektionale, serielle Verbindung, die durch einen Mikrocontroller in der
Tastatur gesteuert wird. Alle Tastaturen sind über 5-polige Rundkabel mit dem PC
verbunden. In diesem Kabel sind Versorgungs-, Daten- und Steuerleitungen
untergebracht. Die Datenübertragung wird hier im Unterschied z.B. zur RS 232
über Taktleitungen gesteuert.

Bild 1:
Keyboardstecker
Pinbelegung
|
Pin Nummer |
Beschreibung |
|
1 |
CLK |
|
2 |
Data |
|
3 |
Reset (meist nicht
belegt) |
|
4 |
GND |
|
5 |
+ 5
Volt |
Die Leitung +5Volt und GND sind notwendig, da die Tastatur,
wie bereits erwähnt, einen Mikrocontroller besitzt. Dieser überprüft periodisch
alle Zustand der Tasten. Wenn nun eine Taste betätigt wird, so erzeugt der µC
einen entsprechenden Code, auch Scancode geanannt. Dieser Code wird über die
Data Leitung an den Computer gesendet. Die einzelnen Bits werden mit einer
positiven Flanke an CLOCK übernommen. Doch AT und XT Tastaturen unterscheiden
sich nicht nur in ihrem äußeren, sondern auch bei der Datenübertragung. Das
Protokoll bei einer AT-Tastatur ist ähnlich dem einer RS 232 SChnittstelle. Hier
besteht ein Datenpacket aus 11 Bits. Zuerst wird ein Startbit gesendet,
anschließend 8 Datenbits, dann folgen ein Paritäts- und ein Stoppbit. Das
Paritätsbit ergänzt die Datenbits zur ungeraden Parität. Ein Startbit entspricht
immer einer logischen '1' und das Stoppbit einer '0'. Im nicht-aktiven Zustand
hat die Schnittstellenleitung high-Pegel. Ein selten genutztes Signal ist Reset.
Dieses war ursprünglich dazu gedacht, um den µC der Tastatur
zurückzustetzen.
Ausgewertet werden die empfangenen Daten im PC ebenfalls
von einem µC, der die ankommenden Scancodes in den ASCII-Code umwandelt. Im
Gegensatz dazu verwendet die XT Tastatur nur ein 9-bit Datenpaket. Hier werden
die Daten auch von einem µC erzeugt, jedoch erfolgt die Auswertung im PC durch
ein Schieberegister. Sobald hier 8 Bits empfangen wurden, wird ein Interrupt
ausgelöst, und der Scancode wird eingelesen. Diese Tastatur hat aber heute
weitgehend ausgedient. Normalerweise wird die Tastatur nur als Eingabegerät
genutzt, d.h. Daten zum PC. Der Controller in der Tastatur kann aber auch vom PC
aus angesprochen werden. In der folgenden Tabelle sind die möglichen Befehle
dargestellt:
|
Befehl |
Beschreibung |
|
EDh |
Ein- bzw. Ausschalten der LED´s einer MF-II
Tastatur |
|
EEh |
Rückgabe des Bytes EEh |
|
F0h |
Identifikation des aktuellen
Scancode-Satzes |
|
F2h |
Tastatur wird identifiziert |
|
F3h |
Einstellung für Wiederholung und Verzögerung der
Tastatur |
|
F4h |
Aktivierung der Tastatur |
|
F5h |
Deaktivierung der Tastatur |
|
F6h |
Aktivierung der Ttastatur und Einstellung der
Standartwerte |
|
FEh |
Nochmaliges Senden des letzten Zeichens an den
Tastaturcontroller |
|
FFh |
Tastatur-Reset |
Tabelle 1: Befehle zum Controller der Tastatur
Diese können direkt in das Ausgaberegister geschrieben
werden (bei mir Port 0x060). So kann man z.B. mit einer kleinen Spielerei die
LED´s an der Tastatur zum Blinken
bringen.
Programmbeispiel:
void
main()
{
for(i=0;i<30;i++)
{
outp(PORT,237); // Befehl
EDh
warte(10000); //wartet 10ms
outp(PORT,7); // schaltet alle 3 LED´s
an
warte(100000);
outp(PORT,237);
warte(10000);
outp(PORT,0); //
und wieder aus
warte(100000);
}
}
Zur Ansteuerung der LED´s
muß also zuerst der Befehl EDh gesendet werden, und danach noch ein Byte mit den
zu schaltenden LED´s.
Bit 0: Scroll Lock LED
Bit 1: Caps Lock
LED
Bit 2: Num Lock LED
Das Setzen eines Bits schaltet die LED
ein.
Mit dem Befehl EEh kann überprüft werden, ob eine funktionsfähige
Tastatur angeschlossen ist. Dazu wird von diesem Befehl ein Echo erzeugt, d.h.
ein Byte gleichen Wertes. Dieses kann dann dem Eingangsregister entnommen
werden. Mit F0h kann der Scancode eingestellt werden. Es kann zwischen 3 Code
umgeschaltet werden. Dazu wird nach dem Befehl der Gewünschte Code gesendet. Bei
einer gesendeten '0' wird der aktuelle Wert ins Eingangsregister geschrieben.
Der Standartscancode ist 2. Durch F2h kann die angeschlossenen Tastatur
ermittelt werden. Als Antwort auf diesen Befehl wird bei einer AT-Tastatur FAh
und bei einer XT die Bytes Fah, 41h und ABh ins Eingangsregister geschrieben.
Wird eine Taste dauerhaft betätigt, so werden nach einer kurzen Verzögerung
kontinuierlich Zeichen an den PC gesendet. Die zugehörige Verzögerungszeit ist
vom PC aus einstellbar. Dazu wird nach dem Befehl F3h ein Byte für die
gewünschte Zeitangabe übermittelt: (die Bits 5 und 6 enthalten die
Angabe)
00: 250 ms
01: 500 ms
10: 750 ms
11: 1000
ms
Durch die Bits 0 bis 4 wird die Wiederholungsgeschwindigkeit
festgelegt. Diese kann von 30 Zeichen/s beim Wert 00000b bis zu 2 Zeichen/s bei
11111b variiert werden. Diese Werte steigen jedoch nicht linear sondern
hyperbolisch an. Ist während der Übertragung ein Fehler aufgetreten, so kann die
Tastatur durch den Befehl FEh aufgefordert werden, das Byte noch einmal zu
senden. Die Tastatur kann durch einen Reset ( FFh ) in ihren Anfangszustand
gesetzt werden. Die Tastatur liefert als Antowrt den Wert FAh. Danach passiert
0.5s bis 1s gar nichts. Anschließend wird das Ergebnis in eine Funktionskotrolle
übergeben. Bei positivem ergebnis wird der Wert AAh übergeben, sonst FCh. Von
außen bemerkt man so einen Reset beim Hochfahren des PC´s: Der PC piepst und
alle 3 LED´s leuchten kurz auf.