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  
pdf 15 trang baolam 24680 Free
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:

  • pdfgiao_trinh_vi_xu_ly_chuong_5_giao_tiep_cong_song_song_pham_h.pdf