CẤU TRÚC MÁY TÍNH Các thiết bị xuất nhập Bàn phím Màn hình Chuột Các giao tiếp ngoại vi Giao tiếp song song Giao tiếp nối tiếp... yêu cầu từ bàn phím, chip này gửi tín hiệu
Trang 1CẤU TRÚC MÁY TÍNH
Các thiết bị xuất nhập
Bàn phím
Màn hình
Chuột
Các giao tiếp ngoại vi
Giao tiếp song song
Giao tiếp nối tiếp
Trang 2BÀN PHÍM _ KEYBOARD
Các kiểu bàn phím: các máy tính IBM và tương thích sử dụng các kiểu bàn phím sau:
Bàn phím XT chuẩn
83 phím:
5 đầu nối DIN
truyền nối tiếp 1 chiều
không hỗ trợ từ host đến bàn phím
sử dụng scan code set 1
Bàn phím AT chuẩn 84-101 phím:
6 đầu nối DIN
truyền nối tiếp 2 chiều
sử dụng scan code set 2
Trang 3Các kiểu bàn phím
Bàn phím tăng cường 101 hoặc 102 phím
Bàn phím PS/2:
84-102 phím
6 đầu nối mini DIN
truyền nối tiếp 2 chiều
hỗ trợ sử dụng scan code set 3
có 17 lệnh host to keyboard
Trang 4Cấu trúc và giao tiếp bàn phím
switch, tạo ra một tiếp xúc điện khi ấn phím
Pure mechanical
Foam element
Rubber dome
Membrane
ngoại vi 8255A
là chip 8042, 8048, 8049, 8741,
8742, 6868, 6805.
yêu cầu từ bàn phím, chip này gửi tín hiệu ngắt IRQ1 và truyền
dữ liệu vào CPU
Trang 5Kết nối bàn phím
DIN 5 pin
1 Clock
2 Data
3 N/C
4 GND
5 +5V (VCC)
PS/2
1 Clock
2 GND
3 Data
4 N/C
5 +5V (VCC)
6 N/C
Trang 6Mã quét bàn phím (Scan code)
Khi nhấn 1 phím, bộ xử lý bàn phím gửi đến
PC mã quét (scan-code) của phím được nhấn
Khi phím được nhấn, mã này gọi là
make-code
Khi phím được nhả, mã này gọi là
break-code
Break-code gồm 2 byte: byte đầu là F0 (đối với bàn phím mở rộng), byte kế là mã make-code
Scan code có 3 tiêu chuẩn: set 1, set 2, set 3 Bàn phím hiện nay mặc nhiên sử dụng set 2
Ví dụ:
nhấn SHIFT: make-code = 12
Nhấn A: make-code = 1C
Nhả A: break-code = F0, 1C
Nhả SHIFT: break-code = F0, 12
Mã được truyền nối tiếp từng byte, với khung truyền 11bit
Trang 7Bảng scan-code
Scan code bàn phím loại 83 phím
Scan-code bàn phím loại 102 phím
Trang 8Giao tiếp bàn phím
Bàn phím PS2 giao tiếp bằng giao thức nối tiếp bất đồng bộ 2 chiều
Xung clock được phát bởi bàn phím, tần số khoảng 10-16.7kHz
Các trạng thái hoạt động:
Data=high, clock=high: trạng thái rảnh
Data=high, clock=low: trạng thái cấm giao tiếp
Data=low, clock=high: trạng thái máy chủ được yêu cầu truyền dữ liệu
Nếu máy chủ muốn truyền dữ liệu, nó phải cấm giao tiếp từ bàn phím bằng cách kéo clock xuống thấp, sau đó kéo Data xuống mức thấp và giải phóng cho clock
Data được truyền theo khung dữ liệu gồm 11-12bit như sau:
1 start bit = 0
8 data bit (LSB truyền trước)
1 parity bit
1 stop bit = 1
1 acknowledge bit (host only)
Trang 9Giao tiếp bàn phím (tt)
1 Truyền dữ liệu từ bàn phím về máy
chủ:
Các bước thực hiện:
Kiểm tra bus đang ở trạng thái rảnh
Clock ở mức cao ít nhất 50us trước khi bàn phím gửi data
Bàn phím gửi data từng khung dữ liệu
11bit
Dữ liệu được đọc tại cạnh xuống của clock
Máy chủ có thể cấm giao tiếp bằng cách kéo clock xuống thấp
Khi clock được giải phóng, bàn phím lại
truyền tiếp dữ liệu chưa hoàn chỉnh
Dữ liệu từ keyboard đến PC
Trang 102 Truyền dữ liệu từ máy chủ đến bàn phím:
Các bước thực hiện:
máy chủ cấm truyền từ bàn phím đến
bằng cách kéo clock xuống thấp
máy chủ kéo data xuống thấp và giải
phóng clock báo hiệu bàn phím phát xung clock bắt đầu truyền dữ liệu
Dữ liệu được đọc tại cạnh lên của clock
Sau khi bàn phím nhận stop bit nó sẽ
truyền tín hiệu ACK đến máy chủ kết thúc quá trình truyền dữ liệu
Dữ liệu từ PC đến keyboard
Trang 11Chức năng Typematic
Khi một phím được nhấn liên tục, nó trở thành typematic
Bàn phím gửi mã nhấn phím đến PC lặp đi lặp lại
Tốc độ typematic có thể điều chỉnh
bằng cách gửi lệnh đến bộ điều khiển bàn phím
Lệnh điều khiển bàn phím trong DOS
MODE CON: RATE=r DELAY=d
RATE: tốc độ typematic, r = ký tự trên giây (cps)
DELAY: khoảng thời gian trước khi
typematic xảy ra Số DELAY:
1 -> 0.25s
2 -> 0.50s
3 -> 0.75s
4 -> 1.00s
Ví dụ: lệnh sau được đặt trong
Trang 12Truy xuất bàn phím qua DOS
Có thể truy xuất bàn phím qua một số hàm của DOS với ngắt INT 21h: 01h, 06h, 07h, 08h, 0ah, 0bh, 3fh.
Chương trình ví dụ: đọc 80 ký tự vào buffer
char *ch_input(void)
{ char *buffer, *string;
union REGS inregs, outregs;
buffer = (char*) malloc(82);/* tạo buffer */
*buffer = 80; /* byte đầu chỉ số lượng ký tự */
Inregs.h.ah = 0x0ah;
inregs.x.dx = FP_OFF(buffer);
int86(0x21,&inregs,&outregs);
string = buffer+2;
return(string) }
Trang 13Lập trình bàn phím trực tiếp
qua Port
Các thanh ghi:
Port 60h: output buffer (R)
Port 60h: input buffer (W)
Port 64h: control register (W)
Port 64h: status register (R)
Status register:
Bit 7 (PARE): 1- last byte with parity error;
0- last byte without parity error
Bit 6 (TIM): 1-error; 0-no time-out error
Bit 5 (AUXP): 1-holds data for auxiliary
device
Bit 4 (KEYL): 1-keyboard free; 0-keyboard
locked
Bit 3 (C/D): 1-command byte written via
port 64h; 0-command byte written via port 60h
Bit 2 (SYSF): 1-self test successful; 0-power
on reset
Bit 1 (INPB): 1-CPU data in input
buffer;0-input buffer empty
Bit 0 (OUTB): 1-keyboard controller data in
output buffer; 0-output buffer empty
Trang 14Lập trình bàn phím trực tiếp qua Port (tt)
Control register (8 bit): gồm 17 lệnh theo bảng lệnh sau
Code Command
a7h
a8h
a9h
aah
abh
adh
aeh
c0h
c1h
c2h
d0h
d1h
d2h
d3h
d4h
e0h
disable auxiliary device enable auxiliary device check interface to auxiliary device self-test
check keyboard interface disable keyboard
enable keyboard read input port read out input port (low) read out input port (high) read output port
write output port write keyboard output buffer write output buffer of auxiliary device write auxiliary device
read test input port
Trang 15Lập trình bàn phím trực tiếp qua Port (tt)
Ví dụ: disable keyboard
start:
IN al, 64h ;read status byte
TEST al, 02h ;check whether input buffer is full
JNZ start ;some byte still in input buffer
OUT 64h, adh ;disable keyboard
Ví dụ: ghi byte 01h vào output port
OUT 64h, d1h ;pass code for the controller command
;write output port wait:
IN al, 64h ;read status register
TEST al, 02h ;check whether input buffer is full
JNZ wait ;input buffer full thus wait
OUT 60h,01h ;pass data byte 01h for the controller
;command
Trang 16Thiết kế giao tiếp bàn phím
L C D - H D 4 4 7 8 0
D B 0
D B 1
D B 2
D B 3
D B 4
D B 5
D B 6
E N
R S
R / W
V E E
D B 7
1 2 M H z
V C C
5 V
1 0 u F
3 0 p F
5 V
K e y b o a r d
6 4
2 1
3 5
3 0 p F
R 3
1 0 k
A T 8 9 C 5 1
9
1 8
1 9
2 9
3 0
3 1
1 2 3 4 5 6 7 8
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
1 3
1 1
1 2
1 0
1 4
3 6
3 5
3 4
3 9
3 8
3 7
1 7
1 6
1 5
3 3
3 2
R S T
X T A L 2
X T A L 1
P S E N
A L E / P R O G
E A / V P P
P 1 0
P 1 1
P 1 2
P 1 3
P 1 4
P 1 5
P 1 6
P 1 7
P 2 0 / A 8
P 2 1 / A 9
P 2 2 / A 1 0
P 2 3 / A 1 1
P 2 4 / A 1 2
P 2 5 / A 1 3
P 2 6 / A 1 4
P 2 7 / A 1 5
P 3 3
P 3 1 / T X D
P 3 2 / I N T O
P 3 0
P 3 4 / T O
P 0 3
P 0 4
P 0 5
P 0 0 / A D 0
P 0 1 / A D 1
P 0 2 / A D 2
P 3 7
P 3 6
P 3 5
P 0 6 / A D 6
P 0 7 / A D 7
5 V
1 N/C
2 Data
3 +5V (VCC)
4 GND
Thiết kế minh hoạ: giao tiếp bàn phím với AT89C51
• Chân Data nối P3.4
• Chân Clock nối P3.2
• Dữ liệu thu được từ bàn phím sẽ hiển thị trên LCD điều khiển ở P1
Trang 17Câu hỏi ôn tập
1. Nêu đặc điểm các thế hệ bàn phím
2. Trình bày giao thức truyền giữa bàn
phím và PC
3. Mã scan-code là gì? Nếu bấm phím sau
thì bàn phím sẽ truyền mã gì đến PC:
1 Nhấn và nhả Delete
2 Nhấn Ctrl + z, sau đó nhả phím
3 Nhấn và nhả phím ->
4. Có bao nhiêu lệnh hỗ trợ từ host đến
keyboard Kể tên
5. Trình bày hoạt động của chế độ typmatic
6. Hãy cài đặt để chế độ typematic có thời
gian trễ là 0.5s và tốc độ là 20 ký
tự/giây
7. Viết chương trình điều khiển keyboard
thực hiện selftest
8. Viết chương trình ghi giá trị 0fh ra
output port của keyboard
9. Viết chương trình ASM cho AT89C51 để
nhận mã scan-code từ bàn phím
10. Tìm hiểu các bộ mã scan-code của bàn
phím