Tải bản đầy đủ (.doc) (63 trang)

LUẬN VĂN ĐIỆN TỬ THIẾT KẾ MẠCH QUANG BÁO SỬ DỤNG SLOT ISA

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (784.89 KB, 63 trang )

Trờng đại học hàng hải việt nam
Khoa điện - điện tử tàu biển
Bộ môn điện tử - viễn thông
o0o
Luận văn tốt nghiệp
Sinh viên : Trịnh Minh Hải
GV hớng dẫn : Hồ Nhật Tiến
Tháng 12 năm 2002
Trờng đại học hàng hải việt nam
Khoa điện - điện tử
Bộ môn điện tử - viễn thông
o0o
Luận văn tốt nghiệp
1
Đề tài :
Thiết kế mạch quang báo sử dụng Slot ISA.
Sinh viên : Trịnh Minh Hải
Lớp : ĐTV 39 ĐH
GV hớng dẫn :Hồ Nhật Tiến
Mục lục
Lời nói đầu
P hần 1 : Các lý thuyết cơ sở
Chơng I: Một số cổng vào ra của máy tính
I. Cổng nối tiếp
1. Giao diện cổng Com và cách thức truyền nhận
2. Phơng thức truyền nhận thông qua cổng nối tiếp
3. Giao diện cổng nối tiếp
II. Cổng song song
1. Phân tích chức năng của cổng song song
2. Các thanh ghi địa chỉ của cổng song song
III. Khe cắm mở rộng ISA


1. Giao diện Bus mở rộng
2. Khe cắm Bus 16 bit ISA
Chơng 2: Chức năng và hoạt động của Card vào ra đa năng
I.Vi mạch ghép nối 8255A
II. Mạch phối ghép vào/ra song song lập trình đợc 8255A
Chơng 3: Mục đích và hớng giải quyết của đề tài
I. Yêu cầu của đề tài
II. Hớng giải quyết
II. Hớng thiết kế
III. Phơng pháp thực hiện
Phần 2 : Thiết kế mạch quang báo sử dụng Card vào ra đa năng
Chơng 1: Nguyên lý hoạt động chung của mạch quang báo.
Chơng 2 : Các phần mềm hỗ trợ
I. Giới thiệu chơng trình vẽ mạch in OrCAD.
II. Giới thiệu ngôn ngữ lập trình Visual Basic.
Chơng 3: Thiết kế mạch quang báo sử dụng Card vào ra đa năng.
2
I. Thiết kế ma trận LED hiển thị.
II. Thiết kế mạch quét.
III. Thiết kế mạch chọn kênh.
IV. Thiết kế mạch đệm.
V. Lu đồ giải thuật và chơng trình điều khiển.
Kết luận
Phụ lục:
Tài liệu tham khảo
Lời nói đầu
Sự phát triển đi lên vợt bậc của ngành kỹ thuật máy tính và điện tử hiện nay đã đợc
minh chứng cụ thể qua cuộc sống hằng ngày của chúng ta trong tất cả các lĩnh
vực.Việc ứng dụng máy vi tính vào kỹ thuật đo lờng và điều khiển đã đem lại những
kết quả đầy tính u việt. Các thiết bị, hệ thống đo lờng và điều khiển ghép nối với máy

tính có độ chính xác cao, thời gian thu thập số liệu ngắn, nhng đáng quan tâm hơn là
mức độ tự động hoá trong việc thu nhận và xử lý dữ liệu.
Kỹ thuật số ra đời đã khắc phục đợc các khuyết điểm của kỹ thuật tơng tự, làm cho
các bộ phận máy móc trở nên đơn giản, gọn nhẹ, ít tốn kém năng lợng và xử lý thông
tin nhanh, chính xác hơn so với kỹ thuật tơng tự.
Tuy vậy, nếu sử dụng các bộ điều khiển dùng các IC số chúng vẫn còn mắc một số
khuyết điểm mà so với kỹ thuật vi xử lý nó vẫn tồn tại nh:
- Kích thớc lớn.
- Năng lợng tiêu thụ lớn.
- Tính mềm dẻo thấp, khó thay đổi.
- Khó sửa chữa, bảo trì.
Kỹ thuật vi xử lý ra đời với sự kết hợp giữa phần cứng và phần mềm đã làm cho
hoạt động của các mạch điện trở nên mềm dẻo hơn với những phần mềm rất linh hoạt
mà ta có thể sửa chữa, thay đổi hoặ4c bổ sung làm cho chơng trình điều khiển thêm
phong phú tùy theo nhu cầu của ngời sử dụng. Vi xử lý là một vi mạch điện tử có mật
độ tích hợp cao, trong đó gồm các mạch số có khả năng nhận, xử lý và xuất dữ liệu.
Đặc biệt là quá trình xử lý dữ liệu đợc điều khiển theo một chơng trình gồm tập hợp
các lệnh từ bên ngoài mà ngời sử dụng có thể thay đổi đợc một cách dễ dàng. Một vi
xử lý có thể thực hiện rất nhiều yêu cầu điều khiển khác nhau.
Kỹ thuật vi xử lý có tính phức tạp trong hoạt động, thiết kế nhng lại rất kinh tế vì
giá thành hạ và kích thớc chiếm chỗ không nhiều, có dung lợng cao. Ngoài ra kỹ thuật
vi xử lý cũng hơn kỹ thuật số về tính linh hoạt, tốc độ xử lý cao trong quá trình hoạt
động, đồng thời lại có thể mở rộng tính năng hoạt động sau này cho mạch điện. Đây là
u điểm rất thuận lợi mà kỹ thuật vi xử lý mang lại.
Nhận thấy đợc rõ tầm quan trọng và những u điểm của việc lập trình điều khiển
thiết bị, các thầy giáo trong khoa Điện Điện tử tàu biển, các thầy giáo trong Bộ môn
Điện Tử Viễn Thông đã giao cho em đề tài " Thiết kế mạch quang báo sử dụng Slot
ISA" cho luận văn tốt nghiệp của em .
Trong thời gian làm tốt nghiệp vừa qua, tuy em đã hết sức cố gắng tìm hiểu, học hỏi
về lĩnh vực mới này nhng do trình độ bản thân cũng nh thời gian làm tốt nghiệp còn

hạn chế nên chắc chắn sẽ còn nhiều sai sót, kính mong các thầy giáo đóng góp ý kiến
cho đề tài tốt nghiệp này của em .
3
Em xin chân thành cảm ơn Thầy giáo Hồ Nhật Tiến đã tận tình hớng dẫn để hoàn
thành báo cáo tốt nghiệp này. Em cũng xin chân thành cảm ơn các thầy giáo trong
khoa Điện Điện tử, các thầy giáo trong Bộ môn Điện Tử Viễn Thông, các bạn bè đồng
nghiệp đã đóng góp ý kiến và chỉ dẫn em trong quá trình nghiên cứu, thực hiện đề tài
này.
Phần I :
Các lý thuyết cơ sở
Ch ơng I
Một số cổng vào ra của máy tính
I. Cổng nối tiếp
1. Giao diện cổng COM và cách thức truyền nhận :
Thông thờng ở hầu hết ở các máy vi tính PC đều có hai cổng nối tiếp để giao tiếp
với thiết bị ngoại vi với tên gọi là COM1, COM2 tùy theo kiểu chân cắm của hai cổng
này là 9 chân hay 25 chân.
Sơ đồ chân của cổng giao tiếp nối tiếp trên máy tính PC
Chân
(loại 9 chân)
Chân
(loại 25 chân)
Chức năng (tên gọi) Lối vào - ra
1
2
3
4
5
6
7

8
9
8
3
2
20
7
6
4
5
22
DCD - Data Carrier Detect
RxD - Receive Data
TxD - Transmit Data
DTR - Data terminal Ready
GND - Ground (nối đất)
DSR - Data Set Ready
RTS - Request to Send
CTS - Clear to Send
RI - Ring Indicator
Lối vào
Lối vào
Lối ra
Lối ra
Chung
Lối ra
Lối ra
Lối vào
4
Cổng COM loại 25 chân

1
13
14
25
Cổng COM loại 9 chân
5
1
6
9
Việc truyền nhận dữ liệu thông qua hai chân :
TxD : Chân dùng để truyền dữ liệu
RxD: Chân dùng để nhận dữ liệu
Ngoài ra trên cổng nối tiếp còn có hai lối ra và bốn lối vào khác nữa đó là các chân
dùng để kiểm tra tín hiệu trên đờng truyền, đợc gọi là những đờng dẫn bắt tay, đóng
vai trò điều khiển dòng dữ liệu nối tiếp, các đờng dẫn này chỉ đợc sử dụng khi việc
truyền nhận thông tin có thông qua Modem.
2. Ph ơng thức truyền dữ liệu thông qua cổng nối tiếp:
a) Truyền thông tin nối tiếp :
Việc truyền thông tin giữa các bộ phận nằm gần nhau trong hệ thống vi xử lý có thể
thực hiện thông qua bus song song mở rộng hoặc qua các mạch phối ghép song song.
Trong đó các byte hoặc word đợc truyền từ bộ phận này sang bộ phận khác trên một
tập các đờng dây dẫn bằng mạch in hoặc dây cáp. Trong trờng hợp ta cần truyền thông
tin giữa các thiết bị ở xa nhau, ta không thể dùng cả tập đờng dây nh trên mà phải có
cách truyền khác để làm sao tiết kiệm đợc số đờng dây dẫn cần thiết cho việc truyền.
Từ yêu cầu trên ra đời phơng pháp truyền thông tin nối tiếp : ở đầu phát, dữ liệu ở
dạng song song đầu tiên đợc chuyển thành dữ liệu dạng nối tiếp, tín hiệu nối tiếp sau
đó đợc truyền đi liên tiếp từng bit trên một đờng dây. ở đầu thu, tín hiệu nối tiếp sẽ đ-
ợc biến đổi ngợc lại để tái tạo tín hiệu dạng song song thích hợp cho việc xử lý tiếp
theo.
Trong thực tế có 2 phơng pháp truyền thông tin kiểu nối tiếp: truyền đồng bộ và

truyền không đồng bộ (dị bộ).
b) Truyền đồng bộ :
Dữ liệu đợc truyền theo từng mảng (khối) với một tốc độ xác định. Mảng dữ liệu tr-
ớc khi đợc truyền đi sẽ đợc gắn thêm ở đầu mảng và ở cuối mảng các byte (hoặc một
nhóm bít) đánh dấu đặc biệt.
c) Truyền không đồng bộ:
Dữ liệu đợc truyền đi theo từng kí tự. Kí tự cần truyền đợc gắn thêm một bit dấu ở
đầu để báo bắt đầu kí tự (start) và một hoặc hai bit dấu ở cuối để báo kết thúc kí tự
(stop). ở phơng pháp này mỗi kí tự đợc nhận dạng riêng biệt nên nó có thể đợc truyền
đi vào bất cứ lúc nào, tức là giữa các kí tự truyền đi có thể có các khoảng cách về thời
gian.
Dạng thức của dữ liệu truyền đi theo phơng pháp truyền nối tiếp không đồng bộ có
dạng nh sau:
5
Luôn ở mức cao
Chiều của dòng dữ liệu
Luôn ở mức cao
Start D0 D1 D2 D3 D4 D5 D6 D7 Parity Stop Stop
Mã ASCII của kí tự cần truyền
Tùy theo loại mã (Baudot, ASCII,) đợc chọn trong quá trình truyền thì ta sẽ có độ
dài cho mã kí tự khác nhau có thể là 5, 6, 7, 8 bit (trong đồ án này mã của kí tự đợc
qui định là mã ASCII). Với từng hệ thống truyền tin khác nhau thì bên cạnh các bit mã
dữ liệu ta còn có thể tùy chọn có hoặc không có bit Parity để kiểm tra lỗi khi truyền
hoặc ta có thể tùy chọn 1 hoặc 2 bít Stop, nhng trong mọi trờng hợp thì bắt buộc phải
có 1 bit Start.
d) Tốc độ truyền trong việc truyền nối tiếp không đồng bộ :
Tốc độ truyền dữ liệu theo phơng pháp truyền nối tiếp đợc đo bit/s. Hay có thể dùng
đơn vị là Baud, đó là giá trị nghịch đảo của thời gian giữa các lần thay đổi mức tín
hiệu. Với mức dữ liệu chỉ có hai mức (0 và 1) và mỗi lần thay đổi mức tín hiệu chỉ mã
hóa một bit thì ta có 1Baud = 1 bit/s.

Trong khi truyền nối tiếp thì tốc độ truyền nhận thờng phải nhận một trong những
giá trị truyền tiêu chuẩn sau: 110 Baud, 130 Baud, 150 Baud, 300 Baud, 600 Baud,
1200 Baud, 2400 Baud, 4800 Baud, 9600 Baud, 19.200 Baud.
3. Giao diện cổng nối tiếp :
Có nhiều loại giao diện nối tiếp khi truyền nhận thông tin qua cổng COM, tuy nhiên
khi bộ vi xử lí đặt ngay gần máy tính ta có thể sử dụng cổng nối tiếp RS-232 để ghép
nối trực tiếp.
Giao diện nối tiếp RS-232 hoặc có thể gọi là V.24 mô tả giao diện điện áp thuần
túy. Các mức Logich High hoặc Low đều là một mức điện áp từ +3V đến +15V hoặc
-3V đến 15V so với đờng dẫn mass nối chung.
u điểm của giao diện RS-232 là việc xử lí rất đơn giản (tìm lỗi rất nhanh) nên đợc
sử dụng rất rộng rãi và phổ biến do đó khả năng giao tiếp rất lớn, hầu hết ở các máy
tính PC đều có cổng RS-232, vì vậy số thiết bị ngoại vi ghép nối với máy tính PC qua
giao diện RS-232 cũng nhiều. Về nhợc điểm của loại giao diện này phải kể đến
khoảng cách truyền rất bị hạn chế và tốc độ truyền cha cao. Tuy nhiên trong việc thiết
kế mạch ngoại vi cho đề tài này để đơn giản về thiết kế cũng nh nhằm đạt đợc yêu cầu
của đề tài, mạch giao tiếp qua cổng COM của đồ án sẽ sử dụng loại giao diện RS-
232. Khi cần mở rộng đề tài đòi hỏi khoảng cách truyền xa hơn, tốc độ truyền nhanh
hơn chẳng hạn chúng ta sẽ phải sử dụng loại giao diện tiên tiến khác nh RS-422,
RS-485.
Bảng thông số về tính năng kĩ thuật cuả giao diện RS-232 / V 24 :
Chức năng Liên kết điểm với điểm
Loại giao diện Giao diện điện áp không đối xứng
Khả năng chống nhiễu Nhỏ
6
Bộ đệm cực đại 1
Bộ nhận cực đại 1
Độ dài đờng truyền cực đại 15 mét
Tốc độ truyền cực đại 20 KBaud đến 100 Kbaud
Điện áp lối ra của bộ đệm:

- Không tải:
- Có tải :
-15V , +15V
-5V , +5V
Điện trở lối ra của bộ đệm
3 K đến 7 K
Điện trở lối vào của bộ nhận
3 K đến 7 K
Độ nhạy của bộ nhận -3V hoặc +3V
Sơ đồ khối biểu diễn việc truyền nhận thông tin bằng cách thức
nối tiếp (không có Modem )
Các tín hiệu nh : DTR, DSR, RTS, CTS để sử dụng khi truyền thông qua Modem,
khi truyền với những khoảng cách gần không sử dụng Modem thì các chân tín hiệu
không dùng đến, nên chúng ta phải nối chúng lại với nhau để đảm bảo việc truyền
nhận luôn đúng và để đảm bảo có sự đa lệnh DTR, RTS để đọc trạng thái DSR và đảm
bảo chân CTS xuống thấp (khi truyền / nhận) và trở về cao (khi kết thúc truyền nhận).
7
Vi xử
lý I
Vi xử
lý II
TxD

RxD

DTR
DSR
RTS
CTS


TxD
RxD
DTR
DSR
RTS
CTS
M C 1489MC 1488
C
P
U
TxD
RxD
USART
RxD
TxD
DTE
Đầu cáp RS-232C
Dây đất Cáp RS-232 Dây đất
Sơ đồ phối ghép USART qua đầu cáp chuẩn RS-232C :
Trong đó các thiết bị đợc định nghĩa nh sau:
CPU : Là bộ xử lí dữ liệu truyền nhận.
USART : Bộ thu phát nối tiếp.
TxD : Chân truyền của dữ liệu thu.
RxD : Chân truyền của dữ liệu phát.
DTE : Thiết bị đầu cuối có dữ liệu cần thu phát.
MC 1488 và MC1489 : Là những mạch chuyển đổi điện áp.
II. Cổng song song
1. Phân tích các chức năng của cổng song song :
Sự sắp xếp các chân ra ở cổng máy in với tất cả các đờng dẫn đợc mô tả dới hình
sau :

Chân Ký hiệu Vào/Ra Mô tả
1 STB Output Bit 0 của thanh ghi điều khiển
2 D0 Output Đờng dữ liệu D0
3 D1 Output Đờng dữ liệu D1
4 D2 Output Đờng dữ liệu D2
8
D7 D6D5D4D3D2D1D0
D0 (pin 2)


D1 (pin 3)


D2 (pin 4)


D3 (pin 5)


D4 (pin 6)


D5 (pin 7)


D6 (pin 8)


D7 (pin 9)
5 D3 Output Đờng dữ liệu D3

6 D4 Output Đờng dữ liệu D4
7 D5 Output Đờng dữ liệu D5
8 D6 Output Đờng dữ liệu D6
9 D7 Output Đờng dữ liệu D7
10 ACK Input Bit 6 của thanh ghi trạng thái
11 BUSY Input Bit 7 của thanh ghi trạng thái
12 PE Input Bit 5 của thanh ghi trạng thái
13 SLCT Input Bit 4 của thang ghi trạng thái
14 AF Output Bit 1 của thanh ghi điều khiển
15 ERROR Input Bit 3 của thanh ghi trạng thái
16 INIT Output Bit 2 của thanh ghi điều khiển
17 SLCTIN Output Bit 3 của thanh ghi điều khiển
18 GND
19 GND
20 GND
21 GND
22 GND
23 GND
24 GND
25 GND
Ta thấy bên cạnh 8 bit dữ liệu còn có những đờng dẫn tín hiệu khác, tổng cộng ngời
sử dụng có thể trao đổi một cách riêng biệt với 17 đờng dẫn, bao gồm 12 đờng dẫn ra
và 5 đờng dẫn vào. Bởi vì 8 đờng dẫn dữ liệu D0 - D7 không phải là đờng dẫn 2 chiều
trong tất cả các loại máy tính, nên ta sẽ sử dụng D0 - D7 nh là lối ra. Các lối ra khác
nữa là STB, AF, INIT và SLCTIN.
Các đờng dẫn lối vào là: ERROR, SLCT, PE, ACK, BUSY.
2. Các thanh ghi địa chỉ của cổng song song :
Tất cả các đờng dẫn tín hiệu vừa đợc giới thiệu cho phép trao đổi qua các địa chỉ bộ
nhớ của máy tính PC. 17 đờng dẫn của cổng máy in sắp xếp thành 3 thanh ghi: thanh
ghi data, thanh ghi trạng thái, thanh ghi điều khiển. Các hình dới đây chỉ ra sự sắp xếp

của các đờng dẫn tín hiệu tới các bit dữ liệu riêng biệt của thanh ghi.
Thanh ghi data (Địa chỉ cơ bản)

9
STB (pin 1)

AF (pin 14)

INIT (pin 16)


SLCTIN (pin 17)


IRQ-Enable
D7 D6D5D4D3D2D1D0
ERROR (pin 15)

SLCT (pin 13)
PE (pin
12)
ACK (pin 10)
BUSY (pin 11)

D7 D6D5D4D3D2D1D0
D0 (pin 2)


D1 (pin 3)



D2 (pin 4)


D3 (pin 5)


D4 (pin 6)


D5 (pin 7)


D6 (pin 8)


D7 (pin 9)
Thanh ghi trạng thái (Địa chỉ cơ bản + 1)

Thanh ghi điều khiển (Địa chỉ cơ bản + 2)

Địa chỉ đầu tiên đạt đến đợc của cổng máy in đợc xem nh là địa in cơ bản. ở các
máy tính PC địa chỉ cơ bản của cổng máy in đợc sắp xếp nh sau:
LPT1 (Cổng máy in thứ nhất) => Địa chỉ cơ bản = 378H
Hoặc là 3BCH ở máy Laptop
LPT2 (Cổng máy in thứ hai) => Địa chỉ cơ bản = 278H
Địa chỉ cơ bản đồng nhất với thanh ghi dữ liệu. Thanh ghi trạng thái có địa chỉ = địa
chỉ cơ bản + 1. Cần chú ý rằng mức logic của BUSY (chân 11) đợc sắp xếp ngợc với
bit D7 của thanh ghi trạng thái. Thanh ghi điều khiển với 4 đờng dẫn lối ra của nó có
địa chỉ = địa chỉ cơ bản + 2. ở đây lại cần chú ý tới sự đảo ngợc của các tín hiệu: STB,

AF, SLCTIN.
III. khe cắm mở rộng isa:
1. Giao diện BUS mở rộng :
Bus là những tổ hợp dây dẫn đợc dùng để truyền thông tin trong máy tính. Những
thông tin này bao gồm : địa chỉ, mã lệnh và tín hiệu điều khiển. Bộ vi xử lý có một hệ
10
/ IOCHCK
SD7
SD6
SD5
SD4
SD3
SD2
DS1
SD0
/ IOCHRDY
AEN
SA19
SA18
SA17
SA16
SA15
SA14
SA13
SA12
SA11
SA10
SA9
SA8
SA7

SA6
SA5
SA4
SA3
SA2
SA1
SA0
A31
A20
A1
0
A1
B31
B20
B10
B1
Ground
RESET DRV
+ 5V dc
IRQ 2
- 5V dc
DREQ 2
- 12V dc
OWS
+ 12V dc
Ground
-SVIEMW
-SVIEMR
-IOW
-IOR

-DACK3
DREQ3
DACK1
DREQ1
-REFRESH
CLK
IRQ7
IRQ6
IRQ5
IRQ4
IRQ3
DACK2
TC
BALE
+ 5V dc
OSC
Ground
thống bus bên ngoài để kết nối với bộ nhớ chính. Ta gọi là bus vi xử lý
(microprocessor bus ) hay bus cục bộ (local bus).
Hệ thống khác trong máy tính là bus vào/ra hay bus mở rộng đợc dùng để truyền dữ
liệu giữa bộ vi xử lý/ bộ nhớ chính và các thẻ cắm ngoại vi. Trong khi bus cục bộ ngày
càng nhanh thì tốc độ phát triển của bus mở rộng vẫn không tăng đáng kể.
BUS ISA ( Industry Standard Associaton) 16 bit đợc dành cho cấu trúc máy tính cá
nhân thế hệ 16 bit. Tốc độ truyền của bus ISA là 8 Mbyte/s.
2. Khe cắm bus 16 bit ISA :
Bus ISA (Industry Standard Association) là một cấu trúc bus thành công nhất, bus
xuất hiện từ thế hệ máy PC/AT của IBM nên còn đợc gọi là Bus AT (đúng ra ISA là
một chuẩn ra đời sau và dựa trên cơ sở của Bus AT). Bus ISA là một bus 16 bit làm
việc tại tần số 8 MHz. Nh vậy bus ISA có thể truyền thông tin giữa bộ vi xử lý và các
thiết bị ngoại vi với tốc độ 8 MB trong một giây. Trong thực tế thì tốc độ này nằm giữa

4 MB và 8MB trong một giây. Bus ISA thành công và nổi tiếng là do nhiều thiết bị
ngoại vi và ứng dụng đợc thiết kế và bán ra thị trờng đều dùng bản mạch cắm ISA.
ISA thích hợp với môi trờng DOS không nối mạng hoặc nối mạng với tốc độ truyền
vừa phải.
Rãnh cắm theo chuẩn ISA :
Thông thờng rãnh cắm có 62 đờng tín hiệu dùng cho mục đích thông tin với một
card cắm vào. Về cơ bản các đờng tín hiệu này đợc chia thành các đờng dẫn tín hiệu,
đờng địa chỉ và đờng dẫn điều khiển. Bởi vì ngay từ các máy PC/XT đã sẵn có các
rãnh cắm 62 chân này, trên đó có 8 đờng dẫn dữ liệu, nên đôi khi ngời ta cũng gọi luôn
rãnh cắm 62 chân này là rãnh cắm 8 bit. Chỉ có những card 8 bit mới đợc cắm rãnh
này. Sơ đồ dới đây chỉ ra sự sắp xếp chân ra của rãnh cắm mở rộng 8 bit.
11
C18
C10
D18
D10
-SBHE
LA23
LA22
LA21
LA20
LA19
LA18
LA17
MEMR
-MEMW
SD08
SD09
SD10
SD11

SD12
SD13
SD14
SD15
-MEMCS16
-I/O CS16
IRQ10
IRQ11
IRQ12
IRQ15
IRQ14
-DACK0
DRQ0
-DACK5
DRQ5
-DACK6
DRQ6
-DACK7
DRQ7
+5V dc
-MASTER
-Ground
D1 C1
Về sau máy tính PC/AT ra đời chúng có thêm một rãnh cắm thứ hai nằm thẳng hàng
với rãnh 8 bit kể trên và có 36 chân.
Trên rãnh này có chứa các tín hiệu 16 bit. Nên khi có thêm rãnh cắm này thì ngời
ta gọi chung cả hai rãnh cắm là rãnh cắm 16 bit. Các rãnh cắm từ 32 bit trở lên dùng
để ghép thêm vào những card có chất lợng rất cao.
Rãnh cắm 16 bit bao gồm rãnh cắm 8 bit và có thêm một rãnh cắm thứ hai:
Khe cắm ISA có 98 đầu nối

Kích thớc lớn nhất của các card ISA 8 bit là :
- Chiều cao 106,7mm (4,2 inch)
- Chiều dài 333,5 mm (13,13 inch)
- Chiều dày, kể cả linh kiện 12,7 mm (0,5 inch)
Kích thớc lớn nhất của card ISA 16 bit là :
- Chiều cao 121,92mm (4,8 inch)
- Chiều dài 333,5 mm (13,13 inhc)
- Chiều dày, kể cả linh kiện 12,7 mm (0,5 inch)
Sự khác nhau giữa hai kích thớc này chỉ ở chiều cao mà nguyên nhân là do vỏ máy
của máy tính AT đợc thiết kế cao hơn loại XT một chút.
Từ cách sắp xếp chân ra, rõ ràng là 62 đờng tín hiệu
nằm cả ở mặt hàn thiếc cũng nh mặt sắp đặt linh kiện. Do đó các bản mạch (card) cắm
thêm vào bao giờ cũng là những card in hai mặt. Bên cạnh 8 đờng dẫn dữ liệu trên
card còn có 20 đờng dẫn địa chỉ từ A0 đến A19.
12
Tín hiệu Hớng Mô tả
Reset Lối ra
Sau khi bật máy tính hoặc sau khi ngắt điện, đờng dẫn Reset
sẽ kích hoạt trong thời gian ngắn để đa card đã đợc cắm vào
đến một trạng thái ban đầu xác định.
/ IOW Lối ra
Input / Output / Write
Tín hiệu này sẽ kích hoạt khi truy nhập ghi lên một card mở
rộng. Mức thấp chỉ ra rằng các dữ liệu có gía trị đang chờ để
đa ra ở bus dữ liệu. Các dữ liệu đợc đón nhận bằng sờn trớc.
/ IOR Lối ra
Input / Output / Read
Mức thấp của đờng dẫn địa chỉ này báo hiệu sự truy nhập
đọc trên một card mở rộng. Trong thời gian này các dữ liệu
có giá trị cần phải sắp xếp để rồi sau đó đợc đón nhận bằng

sờn trớc.
AEN Lối ra
Address Enable.
Đờng dẫn điều khiển AEN dùng để phân biệt chu trình truy
nhập DMA và chu trình truy nhập bộ vi xử lý. ở mức cao
(High) DMA giám sát qua bus địa chỉ và bus dữ liệu; đờng
dẫn có hiệu lực ở mức thấp (Low). Đờng dẫn này cần phải đ-
ợc xử dụng cho qua trình giải mã địa chỉ bởi card mở rộng.
Phần mở rộng chứa các tín hiệu yêu cầu ngắt IRQ, tín hiệu yêu cầu truy nhập trực
tiếp bộ nhớ DRQ, các tín hiệu dữ liệu và tín hiệu bổ xung. ý nghĩa cụ thể từng tín hiệu
nh sau :
/OWS (B8) : tín hiệu từ thẻ ngoại vi, báo thẻ chạy đủ nhanh và không cần đến chu
kỳ đợi.
/DACKn (D8, D10, D12, D14) : Tín hiệu từ trên thẻ cắm yêu cầu đợc truy nhập
bộ nhớ trực tiếp. DACK 0 của PC /XT đợc thay thế bằng tín hiệu /REFR.
/DRQn (D9, D11, D13, D15) : Tín hiệu từ trên thẻ cắm yêu cầu đợc truy nhập bộ
nhớ trực tiếp. Những tín hiệu này đợc nối về DMAC.
/I/O CS16 (D2) : Tín hiệu một thiết bị ngoại vi báo về vi xử lý khi nó muốn dùng
một bus 16 bit để truy nhập một cổng cứng.
IRQn : Yêu cầu ngắt đến từ thiết bị ngoại vi, những tín hiệu này đợc nối về bộ
điểu khiển ngắt PIC.
A0 A19, LA20 LA23 : Chân nối với bus địa chỉ 24 bit.
D0 D7, SD08 SD15 : Chân nối với bus địa chỉ 16 bit.
/MASTER (17) : Tín hiệu này đợc phép trên một thiết bị ngoại vi trên thẻ cắm
dành quyền làm chủ bus. Thiết bị ngoại vi báo yêu cầu truy nhập bộ nhớ về DMAC,
DMAC treo vi xử lý ra khỏi bus. Sau đó DMAC báo chấp nhận quyền làm chủ bus của
thiết bị ngoại vi qua tín hiệu /DACK. Thiết bị ngoại vi sau đó sẽ báo vai trò chủ bus về
hệ thống bằng tín hiệu /MASTER.
/MEM CS16 (D1) : Tín hiệu thiết bị ngoại vi báo về xử lý khi nó muốn dùng bus
16 để truy nhập bộ nhớ.

/MEMR (C9) : Tín hiệu đọc bộ nhớ của vi xử lý hay DMA.
13
8255A
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34

33
32
31
30
29
28
27
26
25
24
23
22
21
PA4
PA5
PA6
PA7
/WR
Reset
D0
D1
D2
D3
D4
D5
D6
D7
+5V
PB7
PB6

PB5
PB4
PB3
PA3
PA2
PA1
PA0
/RD
/CS
GND
A1
A0
PC7
PC6
PC5
PC4
PC0
PC1
PC2
PC3
PB0
PB1
PB2
Sơ đồ bố trí chân của vi mạch ghép nối 8255A
/MEMW (C10) : Tín hiệu ghi bộ nhớ của vi xử lý hay DMA.
/REF (B19) : Tín hiệu báo bộ nhớ trên bản mạch chính đang đợc làm tơi. Dùng
tín hiệu này, thẻ cắm có thể làm tơi bộ nhớ của riêng nó đồng bộ với bộ nhớ hệ thống.
/SBHE (C ): Tín hiệu này ở trạng thái tích cực khi 8 bit cao của bus dữ liệu đợc
dùng đến.
/SMEMR (B12) : Tín hiệu này ở trạng thái tích cực khi vùng bộ nhớ giữa 0 và 1

Mbyte đợc đọc.
/SMEMW (B11) : Tơng tự nh /SMEMR khi bộ nhớ đợc ghi.
Ch ơng ii
Chức năng và hoạt động
của card vào ra đa năng
I. Vi mạch ghép nối 8255A
Khối ghép nối 8255 thờng đợc hay sử dụng trên tấm Card cắm thêm vào máy tính
PC trong việc thu nhập dữ liệu đo lờng để xuất và nhập dữ liệu số, trong việc điều
khiển quá trình biến đổi A/D. Vi mạch 40 chân này có cách bố trí nh hình vẽ ở dới
trong đó chứa 24 đờng dẫn lối vào/ ra đợc xếp thành ba cổng song song (cổng A, cổng
B, cổng C ).
14
Tính linh hoạt của vi mạch này thể hiện ở khả năng lập trình. Qua một thanh ghi
điều khiển, ngời sử dụng xác định loại hoạt động và cổng nào đợc sử dụng nh là lối
vào hoặc lối ra. Các chân ra D0-D7 tạo nên bus dữ liệu 2 hớng, rộng 8 bit. Tất cả các
dữ liệu khi truy nhập ghi hoặc là đọc đợc đờng dẫn qua các đờng dẫn này. Trạng thái
logic ghi/đọc đợc nhận biết qua các tín hiệu điều khiển /CS, /RD, /WR. Một cuộc trao
đổi thông tin với vi mạch 8255A sau đó có thể đợc tiến hành khi /CS=0. Khi /RD=0,
sau đó các tín hiệu của cổng đợc lựa chọn đợc dẫn đến bus dữ liệu và có thể đợc gọi
bởi các vi mạch khác. Khi /WR=0, thì mọi việc xảy ra ngợc lại. Các bit địa chỉ A0 và
A1 cùng với các tín hiệu ghi và đọc báo hiệu cho biết sẽ truy nhập lên cổng nào. Bảng
chân lý dới đây tóm tắt các kết luận vừa mới đợc trình bày ở trên.
A1 A0 /RD /WR /CS Chức năng
0 0 0 1 0
Cửa ( Port ) A Bus dữ liệu
0 1 0 1 0
Cửa ( Port ) B Bus dữ liệu
1 0 0 1 0
Cửa ( Port ) C Bus dữ liệu
0 0 1 0 0

Bus dữ liệu Cửa ( Port ) A
0 1 1 0 0
Bus dữ liệu Cửa ( Port ) B
1 0 1 0 0
Bus dữ liệu Cửa ( Port ) C
1 1 1 0 0 Sự ghi vào của từ điều khiển
X X X X 1 Đờng dẫn dữ liệu ở trạng thái điện trở cao (tristate)
X X 1 1 0 Đờng dẫn dữ liệu ở trạng thái điện trở cao (tristate)
Tử bảng này rõ ràng là thanh ghi điều khiển đặt dới địa chỉ bên trong A0 = 0, A1
=1. Trong một chu trình ghi lên thanh ghi điều khiển, ngời sử dụng khẳng định cổng
vào/ra cũng nh kiểu hoạt động trong một từ điều khiển. Một mức High ở đờng dẫn
Reset đặt trở lại thanh ghi điều khiển và định nghĩa toàn bộ 24 đờng dẫn nh là các lối
vào. Sự sắp xếp của từ điều khiển đợc mô tả trên trên hình ở dới.
Từ đây ta có thể thấy rõ ràng là 24 đờng dẫn của các cổng A, B và C đợc phân chia
thành 2 nhóm. Trong đó một nửa của cổng C ( PC4 . . . PC7 ) thuộc vào nhóm A, còn
15
Controlword ( Từ điều khiển )
D7D6D5D4D3D2D1D0
Nhóm BCổng C
1 = lối vào
0 = lối raCổng B
1 = lối vào
0 = lối ra Mode
1 = Mode 1
0 = Mode 0
Nhóm ACổng C
1 = lối vào
0 = lối raCổng A
1 = lối vào
0 = lối ra Mode

00 = Mode 0
01 = Mode 1
0X = mode 2
Mode - Flag
1= Active
Sự sắp xếp của từ điều khiển ở vi mạch 8255
nửa kia thuộc nhóm B. Tổng cộng, ngời sử dụng có ba kiểu hoạt động khác nhau. Kiểu
(mode) 0, kiểu 1 và kiểu 2. Dới đây sẽ chỉ có kiểu 0 đợc mô tả. Loại hoạt động này
giới thiệu một khả năng xuất và nhập dữ liệu theo cách đơn giản qua 3 cổng A, B và C.
Đối với loại hoạt động theo kiểu 0, từ điều khiển có thể tính theo cách sau:
Port A Port C
Bit 4 . . . 7
Port B Port C
Bit 0 . . . 3
Lối vào 16 8 2 1
Lối ra : 0 0 0 0
Từ điều khiển :
128
+ + + +
Ví dụ 1 : Kiểu 0, cổng A nh là lối vào, cổng B nh là lối ra, cổng C nh là
lối ra.
Từ điều khiển ( Controlword ) = 128 + 16 + 0 + 0 + 0 =144
Vídụ 2 : Kiểu 0, cổng A nh là lối ra, cổng C ( bit 4 . . . 7 ) nh là lối vào, cổng B
nh là lối vào và cổng C ( bit 0 . . . 3) nh là lối ra.
Từ điều khiển ( Controlword ) = 128 + 0 + 8 + 2 + 0 =138
16
Nhóm A
Cổng A
Nhóm A
Cổng C

( cao )
Nhóm B
Cổng C
( thấp )
Nhóm B
Cổng B
PA0-PA7
PC0-PC3
PC4-PC7
PB0-PB7
Điều
khiển
nhóm A
Điều
khiển
nhóm B
Đệm
BUS D
D0-D7
Reset
A1
A0
CS
WR
Lôgic
điều khiển
ghi/đọc
RD
II- Mạch phối ghép vào/ra song song lập trình đ ợc 8255A :
Mạch 8255A thờng đợc gọi là mạch phối ghép vào/ra lập trình đợc (programmable

peripheral interface, PPI). Do khả năng mềm dẻo trong các ứng dụng thực tế nó là
mạch phối ghép đợc dùng rất phổ biến cho các hệ vi xử lý 8-16 bit.
Sơ đồ khối mô tả chức năng bên trong của 8255A :
Các chân tín hiệu của 8255A có ý nghĩa rõ ràng. Chân Reset phải đợc nối với tín
hiệu Reset chung của toàn hệ thống (khi reset thì các cổng đợc định nghĩa là cổng vào
để không gây sự cố cho các mạch điều khiển). CS đợc nối với mạch tạo xung chọn
thiết bị để đặt mạch 8255A vào một địa chỉ cơ sở nào đó. Các tín hiệu địa chỉ A0, A1
sẽ chọn ra 4 thanh ghi bên trong 8255A : 1 thanh ghi để ghi từ điều khiển cho hoạt
động của 8255A (Viết tắt là CWR , control word register) và 3 thanh ghi khác ứng với
các cổng (port) là PA, PB, PC để ghi/đọc dữ liệu :
CS
A1 A0 Chọn ra
1 x x không chọn
0 0 0 PA
17
Cấu hình
1MA1MA0ACAMBBCB
Nhóm B
PC
L
(thấp )
1:1
0:0
PB :
1:1
0:0
Chọn chế độ :
0: Mode 0
1: Mode 1
Nhóm A

Chọn chế độ :
00 : Mode 0
01: Mode 1
1x: Mode 2
PA :
1:1
0:0
PC
H
(cao) :
1:1
0:0
0 0 1 PB
0 1 0 PC
0 1 1 CWR
Theo bảng trên ta nhận thấy địa chỉ cho PA cũng chính là địa chỉ cơ sở của 8255A
Có 2 loại từ điều khiển cho 8255A :
+ Từ điều khiển định nghĩa cấu hình cho các cổng PA, PB, PC.
+ Từ điều khiển lập/xóa từng bit ở đầu ra của PC.
* Từ điều khiển định nghĩa cấu hình
Dạng thức của từ điều khiển để định cấu hình đợc thể hiện dới hình sau:
* Từ điều khiển lập/xoá bit ra PCi
Dạng thức của từ điều khiển để lập/xoá PCi đợc thể hiện trên hình 5.36.
Lập/xoá
0 0 0 0
S/
R
Từ điều khiển để lập/ xoá PCi của 8255A.
Nh ta thấy ở trên, các chế độ (mode) làm việc của mạch cổng 8255A có thể đợc
định nghĩa bằng từ điều khiển CWR. Cụ thể 8255A có 4 chế độ làm việc:

+ Chế độ 0: "Vào/ra cơ sở" (còn gọi là "vào ra đơn giản"). Trong chế độ này mỗi
cổng PA, PB, PC
H
và PC
L
đều có thể đợc định nghĩa là các cổng vào hoặc ra.
18
Mã hoá PCi
000:PC
0

111:PC
7
1: lập PCi
0: xoá PCi
PA
0
- PA
7

INTEA
INTEB
PB
0
-PB
7

PC4,5
PC
7

PC
6
PC
3
OBFA
ACKA
INTRA
PC
1
PC
2
PC
0
OBFB
ACKB
INTRB
I/O
PA
0
- PA
7
INTEA
INTEB
PB
0
-PB
7
PC6,7
PC
4

PC
5
PC
3
INTRA
PC
2
PC
1
PC
0
INTRB
I/O
o
STBA
IBFA
o
IBFB
STBB
+ Chế độ 1: "Vào/ra có xung cho phép". Trong chế độ này mỗi cổng PA, PB có
thể đợc định nghĩa thành cổng vào hoặc cổng ra với các tín hiệu móc nối
(handshaking) do các bit tơng ứng của cổng PC trong cùng nhóm đảm nhiệm.
+ Chế độ 2: "Vào ra 2 chiều". Trong chế độ này chỉ riêng cổng PA có thể đợc
định nghĩa thành cổng vào/ra 2 chiều với các tín hiệu móc nối do các bit của cổng PC
đảm nhiệm. Cổng PB có thể làm việc trong chế độ 0 hoặc 1.
+ Lập/xoá các bit PCi: chế độ này có thể thấy rõ trên hình biểu diễn từ điều khiển
lập/xoá PC của 8255A.
Sau đây ta sẽ giới thiệu cụ thể các chế độ làm việc 0,1 và 2 của 8255A:
Chế độ 0: "Vào/ra cơ sở".
Trong chế độ này, bốn cổng PA, PB, PC

H
và PC
L
đều có thể đợc định nghĩa là cổng
vào hoặc cổng ra. Nh vậy, với tổ hợp tất cả các khả năng vào/ra cho 4 cổng đó ta có đ-
ợc 16 cấu hình khác nhau.
Chế độ 1: "Vào/ra có xung cho phép".
a) Vào b) Ra
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
OBF INTEA I/O I/O INTRA INTE
B
OBFB INTRB I/O I/O IBFA INTE INT
R
INTE
B
IBFB INTRB
c) Tín hiệu trạng thái ra d) Tín hiệu trạng thái vào
Mạch 8255A ở chế độ 1 và các tín hiệu trạng thái.

Để đơn giản ta coi PA và PB cùng đợc định nghĩa là cổng ra hoặc cổng vào.
Ra dữ liệu trong chế độ 1
ở đây PA và PB cùng đợc định nghĩa là cổng ra và có các tín hiệu móc nối tơng đ-
ơng nhau cho việc trao đổi dữ liệu. Ta chỉ cần giới thiệu ở đây các tín hiệu cho PA, các
tín hiệu cho PB cũng tơng tự :
19
Dữ liệu
từ
thiết bị ngoại vi
STBA
IBFA

IBFA
RD
+
OBFA
(Đệm ra của PA đầy). Tín hiệu báo cho thiết bị ngoại vi biết CPU đã ghi
dữ liệu vào cổng để chuẩn bị đa ra. Tín hiệu này thờng đợc nối với
STB
của thiết bị
nhận.
+
ACKA
(Trả lời đã nhận đợc dữ liệu). Đây là tín hiệu của thiết bị ngoại vi cho
biết là nó đã nhận đợc dữ liệu từ PA của 8255A.
+ INTRA (Yêu cầu ngắt từ PA). Đây là kết quả thu đợc từ quan hệ giữa các tín hiệu
khác của 8255A trong quá trình đối thoại với thiết bị ngoại vi, nó đợc dùng để phản
ảnh yêu cầu ngắt của PA tới CPU .
+ INTEA là tín hiệu của một mạch lật bên trong 8255A để cho phép/cấm yêu cầu
ngắt INTRA của PA. INTEA đợc lập/xoá thông qua bit PC
6
của PC.
Các tín hiệu đối thoại - trạng thái kể trên đều có thể lấy trực tiếp đợc từ các chân t-
ơng ứng của vi mạch hoặc đợc đọc vào CPU thông qua việc đọc cổng PC .
Biểu đồ thời gian các tín hiệu của 8255A của chế độ 1-ra.
ở đây PA và PB đợc định nghĩa là cổng vào và có các tín hiệu móc nối tơng đơng
nhau cho việc trao đổi dữ liệu. Ta chỉ cần giới thiệu ở đây các tín hiệu cho PA, các tín
hiệu cho PB cũng tơng tự.
+
STB
(Cho phép chốt dữ liệu): Khi dữ liệu đã sẵn sàng để đợc đọc vào bằng PA
thiết bị ngoại vi phải dùng

STB
để báo cho 8255A biết mà chốt dữ liệu.
+ IBF (Đệm vào dầy): Sau khi 8255A chốt đợc dữ liệu do thiết bị ngoại vi đa đến,
nó đa ra tín hiệu IBF để báo cho thiết bị ngoại vi biết là đã chốt xong.
+ INTRA (Yêu cầu ngắt từ cổng PA): Tín hiệu để báo cho CPU biết là đã có dữ liệu
sẵn để đọc từ PA. Đây là kết quả thu đợc từ quan hệ giữa các tín hiệu khác của 8255A
trong quá trình đối thoại với thiết bị ngoại vi .
+ INTEA là tín hiệu của mạch lật bên trong 8255A để cho phép/cấm yêu cầu ngắt
INTRA của PA.INTEA đợc lập/xoá thông qua bit PC4 của PC.
Một số trong các tín hiệu đối thoại trạng thái kể trên đều có thể lấy đợc trực tiếp từ
các chân tơng ứng của vi mạch hoặc có thể đợc đọc vào CPU thông qua việc đọc PC
Các tín hiệu đối thoại - trạng thái có thể đợc sử dụng làm tín hiệu móc nối cho các
kiểu vào/ra dữ liệu bằng cách ngắt CPU hay bằng cách thăm dò trạng thái sẵn sàng
của thiết bị ngoại vi.
20
Dữ liệu ra
ACK
INTR
OBF
WR
Biểu đồ thời gian các tín hiệu của 8255A ở chế độ 1 - vào.
Chế độ 2: "Bus 2 chiều"
Trong chế độ này chỉ riêng cổng PA đợc định nghĩa để làm việc nh một cổng 2
chiều có các tín hiệu móc nối do một số bit của PC đảm nhiệm, còn PC thì có thể làm
việc ở chế độ 1 hoặc 0 tuỳ theo các bit điều khiển trong CWR. Các chân tín hiệu còn
lại của PC có thể đợc định nghĩa để làm việc nh các chân vào hoặc ra, hoặc phục vụ
cho cổng PB.
21
RD
stba

IBFA
ACKA
INTRA
OBFA
data: IO8255
IO8255
WR
Bus D
a) PA: Chế độ 2 b) PA: chế độ 2
PB: Chế độ 0, vào PB: chế độ 1, ra
PC0 - PC2:I/O tuỳ theo từ điều khiển
Tín hiệu trạng thái.
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
OB
F
NTE1 IBFA INTE
2
INTRA
I/0 I/0 I/0
OBFA INTE1 IBFA STBA INTE2 INTE
B
IBFB INTRB

8255A ở chế độ "Bus hai chiều".
Một số tín hiệu móc nối đặc biệt cần giới thiệu của PA gồm:
+ INTRA : Yêu cầu ngắn cho dữ liệu theo hai chiều vào và ra.
+ INTE1 và INTE2 là 2 tín hiệu của 2 mạch lật bên trong 8255A để cho phép/cấm
yêu cầu ngắt của cổng PA. Các bit này đợc lập/xoá bởi các bit PC
6
và PC

4
của cổng
PC.
Biểu đồ thời gian của các tín hiệu móc nối của 8255A đợc biểu hiện trên hình sau:
22
Biểu đồ thời gian các tín hiệu của 8255A ở chế độ 2.
Một số trong các tín hiệu đối thoại - trạng thái kể trên đều có thể lấy đợc trực tiếp từ
các chân tơng ứng của vi mạch hoặc có thể đọc đợc vào CPU từ cổng PC và cho phép
điều khiển việc trao đổi dữ liệu bằng cách thăm dò các tín hiệu này.
Khi dùng 8255A trong chế độ bus 2 chiều để trao đổi dữ liệu theo cách thăm dò ta
phải kiểm tra xem bit
OBFA
có bằng 1 (đệm ra rỗng) hay không trớc khi dùng lệnh
OUT để đa dữ liệu ra cổng PA, hoặc kiểm tra xem bit IBFA có bằng 0 (đệm vào rỗng)
hay không trớc khi dùng lệnh IN để đọc dữ liệu vào từ cổng PA.
III - Lập trình với 8255a :
1. Th viện liên kết động DLL
Chúng ta có thể thấy rằng các hàm inportb và outportb trong Visual C++ là các hàm
không thực hiện đợc trong Visual Basic, nhng các hàm này lại có ý nghĩa quyết định
khi ta muốn viết các chơng trình thích ứng phần cứng của máy tính PC vì chúng có thể
cho phép ta có thể đọc và viết vào các cổng. Nh vậy nếu không có các lệnh INPUT và
OUPUT ta không thể đọc hoặc ghi vào phần cứng cần ghép nối của ta.
Để có thể vợt qua trở ngại này ta sử dụng các th viện DLL. Có thể thấy từ tên gọi,
các DLL cho phép Visual Basic liên kết (một bớc trớc khi tiến hành biên dịch) mã
(các th viện này ta lập bằng ngôn ngữ Visual C++) trong suốt thời gian chạy (nghĩa là
động). Visual C++ có cổng I/O (nhập vào và xuất ra) có các hàm đọc/ghi. Đồng thời
chơng trình dịch của Visual C++ cho phép ta tạo ra các th viện DLL (ngoài các tệp tin
chấp hành loại *.EXE ). Nh vậy ta sẽ:
1. Viết mã Visual C++ để dùng các mã này là các hàm đọc / ghi.
2. Biên dịch nó vào trong một tệp tin DLL (thay vì một tệp tin loại chấp hành

*.EXE ).
3. Gọi các hàm đó từ Visual Basic.
2. Viết một th viện DLL riêng :
Để viết các th viện DLL riêng thì trớc hết có hai tệp cần phải tạo ra, cụ thể là:
- Tệp DEF hay còn gọi là tệp định nghĩa ( defmition ).
- Tệp CPP ( Tệp nguồn C ++ ).
Cả hai tệp đều là các tệp văn bản với mã ASCII đơn giản. Ta có thể sử dụng bất kỳ
bộ soạn thảo nào (ví dụ soạn thảo bằng edit trên hệ điều hành DOS, hoặc bằng
Notepad trên Windows). Tệp ISADLL.DEF đợc viết nh sau :

LIBRARY ISA
DESCRIPTION DLL FOR ISA CARD
EXPORTS
OUTISA @1
23
INISA @2

Tên của th viện liên kết động DLL đợc viết cho trên dòng đầu tiên, cụ thể là
ISADLL, để chỉ rõ th viện này đợc dùng cho các ứng dụng ghép nối với vi mạch ISA.
Dòng thứ hai là một chú giải. Sau đó là tên của các hàm sẽ đợc định nghĩa trong
Visual C++. Các hàm này là : OUTISA và INISA. Nếu nh còn muốn thêm các hàm
khác thì số tiếp theo sẽ là
MyFunction @3 v.v
Tiếp theo tệp ISADLL đợc viết nh sau :

#include <stdio.h>
#include <conio.h>
#include "stdafx.h"
short _stdcall Outisa(int PortAddress, int PortData)
{

short Dummy;
// Need Dummy since _outp officially returns int
// short is a 16-bit integer in Win32 C++
// whereas int is 32-bit integer Win32 C++
// use (short) to force returning 16-bit integer back to Visual Basic
Dummy=(short)(_outp(PortAddress,PortData));
return(Dummy);
}; // End of OUTISA
short _stdcall Inisa(int PortAddress)
{
short PortData;
// short is a 16-bit integer in Win32 C++
// whereas int is 32-bit integer Win32 C++
// use (short) to force returning 16-bit integer back to Visual Basic
PortData=(short)(_inp(PortAddress));
return(PortData);
}; // End of INISA

Tệp ISADLL.cpp sẽ định nghĩa các hàm INISA và OUTISA. Nó sử dụng các hàm
_inp() và _out() trong Visual C++. Dấu gạch chân đơn trớc inp và outp là cần thiết, để
chỉ đến các hàm đợc định nghĩa trong các phiên bản cũ hơn của Visual C++.
Sau khi tạo xong hai tệp ISADLL.DEF và ISADLL.CPP, ta sử dụng ngôn ngữ
Visual C++ 6.0 để xây dựng tệp ISADLL.DLL. Sau đó ta copy tệp ISADLL.DLL này
vào th mục Windows.
3. Sử dụng DLL trong các ch ơng trình VISUAL BASIC :
Để sử dụng các hàm DLL đợc viết ra, hay còn gọi là DLL riêng (private), ta thêm
vào các dòng sau trong đoạn khai báo của chơng trình Visual Basic. Các dòng khai
24
báo phải đứng sau chỉ thị Option Explicit. Chú ý rằlà : đờng gạch chân trong Visual
Basic có nghĩa rằng chỉ thị đó có thể kéo dài nhiều dòng.


Public Declare Function Outisa Lib "c:\windows\ISADLL.DLL" _
(ByVal portaddress As Integer, ByVal portdata As Integer) As Integer
Public Declare Function Inisa Lib "c:\windows\ISADLL.DLL" _
(ByVal portaddress As Integer) As Integer

Để viết ra cổng ta sử dụng lệnh OUTISA :
Dummy = outisa(Cntrl, 128)
ở đây Dummy, Cntrl là các số nguyên. Số thập phân có giá trị 128 đợc viết ra cổng
có địa chỉ là Cntrl. Việc sử dụng kết hợp một biến số nguyên (ở đây ta gọi nó là biến
"Dummy" ) với hàm OUTISA là cần thiết. Nguyên nhân là DLL đợc xây dựng bằng
lệnh outp() của Visual C++, hàm này trả lại một số nguyên ( bằng 1 nếu nh câu lệnh
đúng và bằng 0 nếu nh câu lệnh sai).
Để đọc vào từ một cổng ta sử dụng INISA :
PortValue=insia(PortSelect)
ở đây PortValue và PortSelect là các số nguyên. Số 8 bit ở cổng PortSelect sẽ đợc
gán (dới dạng thập phân) cho biến PortValue.
Ch ơng Iii
Mục đích và hớng giải quyết của đề tài
I - Yêu cầu của đề tài :
Thiết kế, chế tạo thiết bị và viết chơng trình điều khiển mạch với các đặc điểm
chính sau:
25

×