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:
|