Giáo trình Vi xử lý - Chương 5: Giao tiếp cống song song - Phạm Hùng Kim Khánh
Tài liệu Lập trình hệ thống
Chương 5
Chương 5
GIAO TIẾP CỐNG SONG SONG
1. Cấu trúc cổng song song
Cổng song song gồm có 4 đường điều khiển, 5 đường trạng thái và 8 đường dữ liệu
bao gồm 5 chế độ hoạt động:
- Chế độ tương thích (compatibility).
- Chế độ nibble.
- Chế độ byte.
- Chế độ EPP (Enhanced Parallel Port).
- Chế độ ECP (Extended Capabilities Port).
3 chế độ đầu tiên sử dụng port song song chuẩn (SPP – Standard Parallel Port) trong
khi đó chế độ 4, 5 cần thêm phần cứng để cho phép hoạt động ở tốc độ cao hơn. Sơ đồ chân
của máy in như sau:
Chân
Tín hiệu
STR (Out)
Mô tả
1
Mức tín hiệu thấp, truyền dữ liệu tới máy in
2
3
4
5
6
7
8
9
D0
D1
D2
D3
D4
D5
D6
D7
Bit dữ liệu 0
Bit dữ liệu 1
Bit dữ liệu 2
Bit dữ liệu 3
Bit dữ liệu 4
Bit dữ liệu 5
Bit dữ liệu 6
Bit dữ liệu 7
10
Mức thấp: máy in đã nhận 1 ký tự và có khả năng
nhận nữa
ACK (In)
11
BUSY (In)
Mức cao: ký tự đã được nhận; bộ đệm máy in đầy;
khởi động máy in; máy in ở trạng thái off-line.
12
13
14
PAPER EMPTY (In) Mức cao: hết giấy
SELECT (In)
Mức cao: máy in ở trạng thái online
Tự động xuống dòng; mức thấp: máy in xuống
dòng tự động
AUTOFEED (Out)
15
16
17
Mức thấp: hết giấy; máy in ở offline; lỗi máy in
ERROR (In)
INIT (Out)
Mức thấp: khởi động máy in
Mức thấp: chọn máy in
0V
SELECTIN (Out)
GROUND
18-25
Cổng song song có ba thanh ghi có thể truyền dữ liệu và điều khiển máy in. Địa chỉ
cơ sở của các thanh ghi cho tất cả cổng LPT (line printer) từ LPT1 đến LPT4 được lưu trữ
trong vùng dữ liệu của BIOS. Thanh ghi dữ liệu được định vị ở offset 00h, thanh ghi trang
Phạm Hùng Kim Khánh
Trang 116
Tài liệu Lập trình hệ thống
Chương 5
thái ở 01h, và thanh ghi điều khiển ở 02h. Thông thường, địa chỉ cơ sở của LPT1 là 378h,
LPT2 là 278h, do đó địa chỉ của thanh ghi trạng thái là 379h hoặc 279h và địa chỉ thanh ghi
điều khiển là 37Ah hoặc 27Ah. Tuy nhiên trong một số trường hợp, địa chỉ của cổng song
song có thể khác do quá trình khởi động của BIOS. BIOS sẽ lưu trữ các địa chỉ này như sau:
Địa chỉ
Chức năng
0000h:0408h Địa chỉ cơ sở của LPT1
0000h:040Ah Địa chỉ cơ sở của LPT2
0000h:040Ch Địa chỉ cơ sở của LPT3
Định dạng các thanh ghi như sau:
Thanh ghi dữ liệu (hai chiều):
7
6
5
4
3
2
1
0
Tín hiệu máy in D7 D6 D5 D4 D3 D2 D1 D0
Chân số
9
8
7
6
5
4
3
2
Thanh ghi trạng thái máy in (chỉ đọc):
7
6
5
4
3
2
1 0
x x
Tín hiệu máy in BUSY
PAPER EMPTY SELECT
ACK
10
ERROR IRQ
Số chân cắm
11
12 13
15
-
-
-
Thanh ghi điều khiển máy in:
7 6
5
4
3
2
1
0
DIR IRQ
Tín
máy in
hiệu x x
SELECTIN INIT AUTOFEED STROBE
17 16 14
Enable
Số chân cắm -
x: không sử dụng
IRQ Enable: yêu cầu ngắt cứng; 1 = cho phép; 0 = không cho phép
-
-
-
1
Chú ý rằng chân BUSY được nối với cổng đảo trước khi đưa vào thanh ghi trạng
thái, các bit SELECTIN , AUTOFEED và STROBE được đưa qua cổng đảo trước khi đưa
ra các chân của cổng máy in.
Thông thường tốc độ xử lý dữ liệu của các thiết bị ngoại vi như máy in chậm hơn PC
nhiều nên các đường ACK , BUSY và STR được sử dụng cho kỹ thuật bắt tay. Khởi đầu,
PC đặt dữ liệu lên bus sau đó kích hoạt đường STR xuống mức thấp để thông tin cho máy
in biết rằng dữ liệu đã ổn định trên bus. Khi máy in xử lý xong dữ liệu, nó sẽ trả lại tín hiệu
ACK xuống mức thấp để ghi nhận. PC đợi cho đến khi đường BUSY từ máy in xuống thấp
(máy in không bận) thì sẽ đưa tiếp dữ liệu lên bus.
Phạm Hùng Kim Khánh
Trang 117
Tài liệu Lập trình hệ thống
Chương 5
2. Giao tiếp với thiết bị ngoại vi
2.1. Giao tiếp với máy tính
Quá trình giao tiếp với cổng song song dùng 2 chế độ: chế độ chuẩn SPP và chế độ
mở rộng. Việc giao tiếp ở chế độ chuẩn mô tả như sau:
13
25
12
24
11
23
10
22
9
13
25
12
24
11
23
10
22
9
21
8
21
8
20
7
20
7
19
6
19
6
18
5
18
5
17
4
17
4
16
3
16
3
15
2
15
2
14
1
14
1
Hình 5.1 - Trao đổi dữ liệu qua cổng song song giữa 2 PC dùng chế độ chuẩn
Sơ đồ chân kết nối mô tả như sau:
PC1
PC2
Chức năng
Chân Chân
Chức năng
D0
2
15
ERROR
D1
D2
D3
3
4
5
13
12
10
SELECT
PAPER EMPTY
ACK
BUSY
D4
D4
BUSY
6
11
10
11
6
5
D3
ACK
PAPER EMPTY 12
4
3
2
D2
D1
D0
SELECT
13
15
ERROR
GND
25
25
GND
Ngoài ra, việc kết nối giữa 2 máy tính sử dụng cổng song song có thể dùng chế độ
mở rộng, chế độ này cho phép giao tiếp với tốc độ cao hơn.
Phạm Hùng Kim Khánh
Trang 118
Tài liệu Lập trình hệ thống
Chương 5
13
25
12
24
11
23
10
22
9
13
25
12
24
11
23
10
22
9
21
8
21
8
20
7
20
7
19
6
19
6
18
5
18
5
17
4
17
4
16
3
16
3
15
2
15
2
14
1
14
1
Hình 5.2 - Trao đổi dữ liệu qua cổng song song giữa 2 PC dùng chế độ mở rộng
Sơ đồ chân kết nối mô tả như sau:
PC1
PC2
Chức năng Chân Chân Chức năng
D0
D1
D2
D3
D4
D5
D6
D7
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
D0
D1
D2
D3
D4
D5
D6
D7
SELECT
13
17
SELECTIN
INIT
BUSY
11
10
17
16
1
16
1
ACK
STROBE
SELECT
13
11
10
SELECTIN
INIT
BUSY
ACK
STROBE
2.2. Giao tiếp thiết bị khác
Quá trình giao tiếp với các thiết bị ngoại vi có thể thực hiện thông qua chế độ chuẩn.
Để đọc dữ liệu, có thể dùng một IC ghép kênh 2Æ1 74LS257 và dùng 4 bit trạng thái của
cổng song song còn xuất dữ liệu thì sử dụng 8 đường dữ liệu D0 – D7.
Phạm Hùng Kim Khánh
Trang 119
Tài liệu Lập trình hệ thống
Chương 5
74LS06
9
8
STROBE
1
10K1
14
2
3
4
2
9
8
7
6
5
4
3
2
D0
D1
D2
D3
D4
D5
D6
D7
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
15
3
5
7
6
9
12
15
16
19
16
4
8
13
14
17
18
VCC
17
5
18
6
1
19
7
11
1
CLK
OE
20
8
21
9
74LS374
22
10
23
11
24
12
25
13
ACK
PAPER EMPTY
74LS257
SW0-7
10K
SELECT
74LS06
4
7
2
2
5
3
9
8
7
6
5
4
3
2
1Y
1A
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D0
5
4
2Y
3Y
4Y
2A
3A
4A
D1
D2
D3
D4
D5
D6
D7
9
11
14
6
7
8
13
14
17
18
BUSY
2
1
4
6
12
9
12
15
16
19
VCC
3
6
10
13
1B
2B
3B
4B
74LS06
3
1
AUTO FEED
SELECT IN
11
1
CLK
OE
1
15
A/B
G
74LS06
5
74LS374
Hình 5.3 – Mạch giao tiếp đơn giản thông qua cổng máy in
Giao diện:
Hình 5.4 – Giao diện của chưnơg trình giao tiếp với cổng máy in
Chương trình giao tiếp trên VB sử dụng thư viện liên kết động để trao đổi dữ liệu với
cổng máy in. Thư viện IO.DLL bao gồm các hàm sau:
- Hàm PortOut: xuất 1 byte ra cổng
Phạm Hùng Kim Khánh
Trang 120
Tài liệu Lập trình hệ thống
Chương 5
Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port
As Integer, ByVal Data As Byte)
Port: địa chỉ cổng, Data: dữ liệu xuất
- Hàm PortWordOut: xuất 1 word ra cổng
Private Declare Sub PortWordOut Lib "IO.DLL" (ByVal
Port As Integer, ByVal Data As Integer)
- Hàm PortDWordOut: xuất 1 double word ra cổng
Private Declare Sub PortDWordOut Lib "IO.DLL" (ByVal
Port As Integer, ByVal Data As Long)
- Hàm PortIn: nhập 1 byte từ cổng, trả về giá trị nhập
Private Declare Function PortIn Lib "IO.DLL" (ByVal
Port As Integer) As Byte
- Hàm PortWordIn: nhập 1 word từ cổng
Private Declare Function PortWordIn Lib "IO.DLL"
(ByVal Port As Integer) As Integer
- Hàm PortDWordIn: nhập 1 double word từ cổng
Private Declare Function PortDWordIn Lib "IO.DLL"
(ByVal Port As Integer) As Long
Chương trình nguồn:
VERSION 5.00
Begin VB.Form Form1
Caption
=
=
=
=
=
=
=
=
"Printer Interface Example"
ClientHeight
ClientLeft
ClientTop
ClientWidth
LinkTopic
ScaleHeight
ScaleWidth
4665
60
345
3585
"Form1"
4665
3585
StartUpPosition =
Begin VB.CommandButton cmdReceive
3
'Windows Default
Caption
Height
Left
=
=
=
=
=
=
"Receive"
495
1200
18
TabIndex
Top
3960
1095
Width
Phạm Hùng Kim Khánh
Trang 121
Tài liệu Lập trình hệ thống
Chương 5
End
Begin VB.CheckBox chkSW
Height
Index
Left
=
=
=
=
=
=
375
7
1800
17
TabIndex
Top
3480
1575
Width
End
Begin VB.CheckBox chkSW
Height
Index
Left
=
=
=
=
=
=
375
6
1800
16
TabIndex
Top
3000
1575
Width
End
Begin VB.CheckBox chkSW
Height
Index
Left
=
=
=
=
=
=
375
5
1800
15
TabIndex
Top
2520
1575
Width
End
Begin VB.CheckBox chkSW
Height
Index
Left
=
=
=
=
=
=
375
4
1800
14
TabIndex
Top
2040
1575
Width
End
Begin VB.CheckBox chkSW
Height
Index
Left
=
=
=
375
3
1800
Phạm Hùng Kim Khánh
Trang 122
Tài liệu Lập trình hệ thống
Chương 5
TabIndex
Top
=
=
=
13
1560
1575
Width
End
Begin VB.CheckBox chkSW
Height
Index
Left
=
=
=
=
=
=
375
2
1800
12
TabIndex
Top
1080
1575
Width
End
Begin VB.CheckBox chkSW
Height
Index
Left
=
=
=
=
=
=
375
1
1800
11
TabIndex
Top
600
1575
Width
End
Begin VB.CheckBox chkSW
Height
Index
Left
=
=
=
=
=
=
375
0
1800
10
TabIndex
Top
120
1575
Width
End
Begin VB.CommandButton cmdExit
Caption
Height
Left
=
=
=
=
=
=
"Exit"
495
2400
9
TabIndex
Top
3960
975
Width
End
Begin VB.CommandButton cmdSend
Phạm Hùng Kim Khánh
Trang 123
Tài liệu Lập trình hệ thống
Chương 5
Caption
Height
Left
=
=
=
=
=
=
"Send"
495
0
TabIndex
Top
8
3960
1095
Width
End
Begin VB.Label lblLED
BackStyle
Caption
Height
Index
=
=
=
=
=
=
=
=
0
'Transparent
"LED7"
375
7
Left
240
7
TabIndex
Top
3480
1095
Width
End
Begin VB.Label lblLED
BackStyle
Caption
Height
Index
=
=
=
=
=
=
=
=
0
'Transparent
"LED6"
375
6
Left
240
6
TabIndex
Top
3000
975
Width
End
Begin VB.Label lblLED
BackStyle
Caption
Height
Index
=
=
=
=
=
=
=
=
0
'Transparent
"LED5"
375
5
Left
240
5
TabIndex
Top
2520
975
Width
End
Phạm Hùng Kim Khánh
Trang 124
Tài liệu Lập trình hệ thống
Chương 5
Begin VB.Label lblLED
BackStyle
Caption
Height
Index
=
=
=
=
=
=
=
=
0
'Transparent
"LED4"
375
4
Left
240
4
TabIndex
Top
2040
975
Width
End
Begin VB.Label lblLED
BackStyle
Caption
Height
Index
=
=
=
=
=
=
=
=
0
'Transparent
"LED3"
375
3
Left
240
3
TabIndex
Top
1560
975
Width
End
Begin VB.Label lblLED
BackStyle
Caption
Height
Index
=
=
=
=
=
=
=
=
0
'Transparent
"LED2"
375
2
Left
240
2
TabIndex
Top
1080
975
Width
End
Begin VB.Label lblLED
BackStyle
Caption
Height
Index
=
=
=
=
=
=
0
'Transparent
"LED1"
375
1
Left
240
1
TabIndex
Phạm Hùng Kim Khánh
Trang 125
Tài liệu Lập trình hệ thống
Chương 5
Top
=
=
600
975
Width
End
Begin VB.Label lblLED
BackStyle
Caption
Height
Index
=
=
=
=
=
=
=
=
0
'Transparent
"LED0"
375
0
Left
240
0
TabIndex
Top
120
975
Width
End
Begin VB.Shape shpLED
BorderColor
FillColor
FillStyle
Height
Index
=
=
=
=
=
=
=
=
=
&H000000FF&
&H000000FF&
0
'Solid
375
7
Left
840
3
Shape
'Circle
Top
3480
375
Width
End
Begin VB.Shape shpLED
BorderColor
FillColor
FillStyle
Height
Index
=
=
=
=
=
=
=
=
=
&H000000FF&
&H000000FF&
0
'Solid
375
6
Left
840
3
Shape
'Circle
Top
3000
375
Width
End
Begin VB.Shape shpLED
BorderColor
=
&H000000FF&
Phạm Hùng Kim Khánh
Trang 126
Tài liệu Lập trình hệ thống
Chương 5
FillColor
FillStyle
Height
Index
=
=
=
=
=
=
=
=
&H000000FF&
0
'Solid
375
5
Left
840
3
Shape
'Circle
Top
2520
375
Width
End
Begin VB.Shape shpLED
BorderColor
FillColor
FillStyle
Height
Index
=
=
=
=
=
=
=
=
=
&H000000FF&
&H000000FF&
0
'Solid
375
4
Left
840
3
Shape
'Circle
Top
2040
375
Width
End
Begin VB.Shape shpLED
BorderColor
FillColor
FillStyle
Height
Index
=
=
=
=
=
=
=
=
=
&H000000FF&
&H000000FF&
0
'Solid
375
3
Left
840
3
Shape
'Circle
Top
1560
375
Width
End
Begin VB.Shape shpLED
BorderColor
FillColor
FillStyle
Height
=
=
=
=
=
&H000000FF&
&H000000FF&
0
'Solid
375
2
Index
Phạm Hùng Kim Khánh
Trang 127
Tài liệu Lập trình hệ thống
Chương 5
Left
Shape
Top
=
=
=
=
840
3
'Circle
1080
375
Width
End
Begin VB.Shape shpLED
BorderColor
FillColor
FillStyle
Height
Index
=
=
=
=
=
=
=
=
=
&H000000FF&
&H000000FF&
0
'Solid
375
1
Left
840
3
Shape
'Circle
Top
600
375
Width
End
Begin VB.Shape shpLED
BorderColor
FillColor
FillStyle
Height
Index
=
=
=
=
=
=
=
=
=
&H000000FF&
&H000000FF&
0
'Solid
375
0
Left
840
3
Shape
'Circle
Top
120
375
Width
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'IO.DLL
Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port
As Integer, ByVal Data As Byte)
Phạm Hùng Kim Khánh
Trang 128
Tài liệu Lập trình hệ thống
Chương 5
Private Declare Function PortIn Lib "IO.DLL" (ByVal
Port As Integer) As Byte
'Variable
Private BA_LPT As Integer
Private Sub cmdExit_Click()
End
End Sub
Private Sub cmdReceive_Click()
Dim n As Integer
Dim n1 As Integer
Dim i As Integer
PortOut BA_LPT + 2, &H8 'SELECTIN = 1
PortOut BA_LPT + 2, 0 'SELECTIN = 0
n1 = PortIn(BA_LPT + 1) 'Doc 4 bit thap
n1 = n1 / &H10
'Dich phai 4 bit
'AUTOFEED=1
PortOut BA_LPT + 2, 2
n = PortIn(BA_LPT + 1) 'Doc 4 bit cao
n = n And &HF0
n = n + n1
For i = 0 To 7
chkSW(i).Value = n Mod 2
If chkSW(i).Value = 0 Then
chkSW(i).Caption = "Switch " & Str(i) &
" off"
Else
chkSW(i).Caption = "Switch " & Str(i) &
" on"
End If
n = Fix(n / 2)
Next i
End Sub
Private Sub cmdSend_Click()
Dim t As Integer
Dim i As Integer
Phạm Hùng Kim Khánh
Trang 129
Tài liệu Lập trình hệ thống
Chương 5
Dim s As String
t = 0
For i = 0 To 7
t = t + (2 ^ i) * (1 - shpLED(i).FillStyle)
Next i
PortOut BA_LPT, t
PortOut BA_LPT, 1
PortOut BA_LPT, 0
End Sub
'STROBE = 1
'STROBE = 0
Private Sub Form_Load()
BA_LPT = &H378
PortOut BA_LPT + 2, 0
End Sub
Private Sub lblLED_Click(Index As Integer)
shpLED(Index).FillStyle
shpLED(Index).FillStyle
=
1
-
End Sub
Phạm Hùng Kim Khánh
Trang 130
Bạn đang xem tài liệu "Giáo trình Vi xử lý - Chương 5: Giao tiếp cống song song - Phạm Hùng Kim Khánh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- giao_trinh_vi_xu_ly_chuong_5_giao_tiep_cong_song_song_pham_h.pdf