Keyboard Controller

 

 

PDF Der AT89C51xx verfügt über ein Keyboardinterface für Matrixtastaturen. Zum Anschluss geeignet sind alle 8 x n Tastenfelder. Das Keyboardinterface enthält für die Portanschlüsse P1.0 ...P1.7 jeweils eigene Interrupteingänge, die sich alle den selben Interruptvektor (Einsprungadresse) teilen. Im Beispiel ist der Anschluss eines 4 x 4 –Tastenfeldes an Port 1 gezeigt.

Die Zeilenleitungen werden als Zeileninterrupts mit 0-Pegel Auslösung konfiguriert. Bei Tastendruck wird ein entsprechender Zeileninterrupt erkannt. In der Interruptservice-Routine (ISR) wird dann die entsprechende Zeile auf 0-Pegel gelegt. Die Abfrage der Spaltenleitungen auf 0-Pegel ergibt dann die betätigte Taste. Hilfreich ist es, wenn jede Taste einen Keycode zugeordnet bekommt.

Die Konfiguration der Tastaturinterrupts erfolgt über die drei Register KBLS, KBE und KBF. Die Einsprungadresse des Tastaturinterrupts ist 003Bh

7

6

5

4

3

2

1

0

KBLS    Keyboard Level Selector Register (9Ch)

KBLS7

KBLS6

KBLS5

KBLS4

KBLS3

KBLS2

KBLS1

KBLS0

 Resetwert: 0000 0000b

Keyboard Line Level Selection bit  (Auswahl des Auslösepegels für einen Tastatur-Zeileninterrupt)
1: H-Pegel Auslösung
0: L-Pegel Auslösung

 

7

6

5

4

3

2

1

0

KBE    Keyboard Input Enable Register (9Dh)

KBE7

KBE6

KBE5

KBE4

KBE3

KBE2

KBE1

KBE0

 Resetwert: 0000 0000b

Keyboard Line Enable bit  (Einzelfreigaben für Tastatur-Zeileninterrupt)
1: Zeilen-Interrupt freigeschaltet!
0: Normale Port-IO (Kein Interrupt!)

 

7

6

5

4

3

2

1

0

KBF Keyboard Flag Register (9Eh)

KBF7

KBF6

KBF5

KBF4

KBF3

KBF2

KBF1

KBF0

 Resetwert: 0000 0000b

Keyboard Line Flag  (Zeigt einen Tastatur-Zeileninterrupt an)
1: Wird bei Erkennung des programmierten Interruptpegels von der Hardware gesetzt. Ein Keyboard-Interrupt wird angefordert, wenn das zugehörige KBE-Bit in Register KBE gesetzt ist.
0: Der Zugriff auf KBF ist nur-lesend. Das Flag wird durch einen Lesezugriff jedoch automatisch zurückgesetzt..

 

Assembler Code-Beispiel:

 

 

 

 

    arrow6_L.gif   

2.03.2009