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

Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH potx

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 (255.08 KB, 20 trang )

Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
Các tín hiệu trong môi trường tự nhiên phần lớn là các tín hiệu tương tự. Nghĩa
là các tham số cơ bản của nó là các hàm liên tục của thời gian. Mặt khác vấn đề trao
đổi thông tin với bên ngoài lại là nhiêm vụ trọng yếu của hệ vi xử lý. Nên để có thể
giao tiếp được với môi trường bên ngoài hệ phải được trang bị khả năng biến đổi tín
hiệu từ tương tự số sang số khi nhận vào và từ tín hiệu số sang tương tự khi xuất thông
tin ra. Các bộ biến đổi đó được gọi là bộ biến đổi số - tương tự DAC (Digital To
Analog Converter) và bộ biến đổi tương tự - số ADC (Analog To Digital Converter)
Chương này sẽ nghiên cứu nguyên tắc làm việc và phương pháp ghép nối chúng với
hệ vi xử lý.
4.1. ADC (Analog to Digital Converter)
4.1.1. NGUYÊN TẮC HOẠT ĐỘNG CỦA BỘ BIẾN ĐỔI TƯƠNG TỰ- SỐ
Bộ biến đổi tương tự số DAC đóng vai trò quan trọng trong xử lý thông tin khi
mà các luồng tín hiệu đưa vào hệ vi xử lí là tín hiệu dạng tương tự.
Các bộ chuyển đổi ADC thực hiện 2 chức năng cơ bản là lượng tử hoá và mã
hoá. Lượng tử hoá là gán các giá trị của 1 tín hiệu tương tự vào vùng các giá trị rời rạc
có thể xảy trong quá trình lượng tử hoá. Mã hoá là gán giá trị nhị phân cho từng giá trị
rời rạc sinh ra trong quá
trình lượng tử hoá. Đối
với DAC ta cũng dùng
các loại mã số như nhị
phân, BCD bù 2, bù 1 .
Hình 4-1 cho biết đặc tính
của ADC 3bit làm việc
với mã nhị phân tự nhiên
một ADC n bit có 2
n
tổ
hợp mã ra khác nhau,
chúng được biếu diễn trên
trục tung của đồ thị thời


gian.
Trên trục hoành
biểu diễn giá trị của điện
áp vào tương tự. Độ lớn của mỗi đơn vị lấy mẫu do phép lượng tử hoá quy định là :
Q=FS/2
n
. Điểm giữ mỗi "mẫu" là giá trị điện áp tương tự được biểu diễn bằng 1 mã
NV&GD Trang 4 - 1 Bộ môn KTMT
111
110
101
100
011
010
001
0 1/8 2/8 3/8 4 5 6 7 8

Hình 4-1: Đồ thị biến đổi của ADC 3 bit (FS-Full Scale)
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
nhị phân ra tương ứng với mẫu đó. Thí dụ giữa
16
1
FS và
16
3
FS là điểm
8
1
FS. giá trị
điện áp vào tương tự trong khoảng từ

16
1
FS đến
16
3
FS được chuyển sang mã số là 001
ưng với giá trị điện áp vào là
8
1
FS. Như vậy phép lượng tử hoá tự nó đã bao hàm sai
số là
+
2
Q
ở trường hợp lí tưởng, giá trị M ở lối ra cho biết một gía trị là M
+
2
Q
ở lối
vào (M
+
1
2
+n
FS
). Như vậy chỉ có thể giảm sai số này bằng cách tăng số bit cho ADC.
Trong thực tiễn vì có những sai số như sai số độ lệch.sai số phi tuyên nên việc
xác định nhưng điểm giá trị của điện áp vào không chính xác. Đồng thời do sai số
toàn bộ của một ADC bao gồm cả sai số lượng tử hoá nên không thể tăng số bit nên
quá nhiều, tới mức sai số lượng tử hoá có thể so sánh được với sai số kể trên.

Một ADC n bit được xây dựng theo 1 trong 2 phương pháp là phương pháp trực
tiếp và phương pháp gian tiếp. Trong pháp trực tiếp, điện áp tương tự cần chuyển đổi
được so sánh liên tục với điện áp ra của một DAC khi mã nhị phân ở lối vào của nó
liên tục thay đổi, khi có sự cân bằng giữ hai điện áp này, mã nhị phân ở lối vào của
DAC bây giờ chính là kết quả. Trong phương pháp chuyển đổi gián tiếp, điện áp cần
chuyển đổi trước hết được chuyển đổi sang một đại lượng trung gian, sau đó đại lượng
này mới được chuyển đổi sang mã số. Phương pháp này nói chung có tốc đọ chuyển đổi
chậm hơn nhiều so với phương pháp trực tiếp. Vì vậy phương pháp chuyển đổi trực tiếp
được sử dụng phổ biến. Có hai phương pháp chuyển đổi trực tiếp là phương pháp ADC
có đếm (counting ADC) và phương pháp ADC xấp xỉ liên tiếp.
Trong thực tế thường sử dụng loại ADC xấp xỉ liên tiếp. Trong phương pháp này
có một ưu điểm lớn là thời gian chuyển đổi chỉ tỉ lệ thuận với số lượng bit của mã số
và thời gian của thanh ghi xấp xỉ liên tiếp chứ không phụ thuộc vào độ lớn của điện áp
cần chuyển đổi. Để thực hiện quá trình chuyển đổi, người ta cần đặt lần lượt mỗi bit
của mã số lên một, bắt đầu từ bit cao nhất (MSB). Sơ đồ mô tả ADC kiểu này được
mô tả ở hình 4-2. Thanh ghi SAR (xấp xỉ liên tiếp) điều khiển nối vào của DAC theo
thụât toán sau:
1. Đặt bit cao nhất (MSB) bằng 1.
2. Nếu nối ra của mạch so sánh là 1 thì bit này bị xoá về 0, nếu không phải thì
giá trị đó được giữ nguyên.
NV&GD Trang 4 - 2 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
3. Bit cao nhất tiếp theo được đạt nên 1rồi lặp lại bước 2, nếu tất cả các bit đã
được xét thì quá trình chuyển đổi dược thực hiện xong.
Thuật toán này trước hết cần kiểm tra xem điện áp vần chuyển đổi lớn hay nhỏ
hơn FS/2, nếu là lớn hơn, khi MSB bằng 1 ta có điện áp là logic 0,ta giữ nguyên
MSB=1 và xét tiếpbit cao
nhất tiếp theo xem điện áp
vào lớn hơn hay nhỏ hơn 3/4
FS cứ như vậy ta xét đến

bit cuối cùng (LSB), lúc đó
nội dung của thanh ghi SAR
là mã số kết quả. Đồng thời
tại thời điểm này một đàu ra
của SAR đưa ra một tín hiệu
EOC (End Of Converter)
báo đã chuyển đổi xong.
Thanh ghi xấp xỉ liên
tiếp được tổ chức dưới dạng
vi mạchvới tất cả những
phần tử điều khiển cần thiết
đẻ có thể xây dựng những DAC với tốc độ cao.Trong thực tiễn có những thanh ghi
xấp xỉ liên tiếp với cấu theo nhưng mã số sử dụng khác nhau.
4.1.2. BỘ BIẾN ĐỔI ADC 8 BIT 0809
Bộ biến đổi ADC 8 bit 0809 là ADC thông dụng được xử dụng rất rộng rãi có 8
đầu vào tương tự và đầu ra 8 bit số, chuyển đổi theo phương pháp xấp xỉ liên tiếp. các
đặc trưng cơ bản của ADC 0809 là:
• Đầu ra có bộ đệm 3 trạng thái để ghép trực tiếp vào kênh giữ liệu của hệ Vi xử lí
• Giải tín hiệu nối vào tương tự 5v khi nguồn nuôi là +5v, có thể mở rộng thanh
đo bằng các giải pháp kĩ thuật cho từng mạch cụ thể.
• Không đòi hỏi điều chỉnh"0"
• Thời gian biến đổi 100µs
• Sai số tổng cộng ±1/2LSB
• Sử dụng nguồn nuôi đơn +5v, hiệu suất cao
• đảm bảo sai số tuyến tính trong dải nhiệt độ từ -40 đến +85
0
c
NV&GD Trang 4 - 3 Bộ môn KTMT
Successive
Appoximation

Register (SAR)
DAC
CLK
Tín hiệu
vào
tương tự
Mạch
so sánh
Tín hiệu
số đầu
ra
EOC
Hình 4-2: Sơ đồ một ADC theo phương pháp xấp xỉ
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
1. Sơ đồ chức năng của ADC 0809 (hình 4-3)
2. Ghép tín hiệu vào ADC 0809
Trong chu trình chuyển
đổi dòng đầu vào tín hiệu
giữ nhịp 500KHZ dùng cho
bộ ADC 0809 được tạo ra từ
bên ngoài và đưu đến chân
clock (bộ chuyển đổi
ADC0809 sử dụng tần số
Clock có thể trong giải
200KHz÷1MHz).
• Ghép tín hiệu đơn cực
đến đầu vào của ADC
0809
Khi tín hiệu đầu vào bộ
chuyển đổi ADC là đơn cực

NV&GD Trang 4 - 4 Bộ môn KTMT
8 chanel
MUX
analog
switches
Address
Latched
coder
SAR
Switch tree
Switch tree
Tri-State
Output
latch
bufer
Control and
Timing
8

S
i
g
n
a
l

A
n
a
l

o
g
8

b
i
t

D
i
g
i
t
a
l

o
u
t
p
u
t
Ref(+) Ref(-) Vcc GND
Start Clock
EOC
Hình 4-3: Sơ đồ khối bộ chuyển đổi ADC
Tạo xung nhịp
+5V
Vref(+)
CLK

Vc
c
EOC
Start
ALE
A,B,C
OE
0-5v
Analog
Input
Range
DB0-DB7
GND
Vref(-)
Hình 4-4: Hoạt động của ADC 0809 khi đầu vào là đơn cực
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
(một cực tính),sơ đồ nguyên lí lúc đó được lắp như hình 4-4. Trong trường hợp này
thanh đo tương ứng 5v
cho các đầu vào(tức là
các đại lượng cần đo
qua các bộ cảm biến
phải đưa về giải từ 0v
đén 5v, tương ứng với
mức0v ở đầu vào là tổ
hợp nhị phân0000 0000
ở đầu ra.)
• Ghép tín hiệu
lưỡng cực đến
đầu vào của
ADC0809

Trong thực tế khảo
xát các đại lượng cần
miến đổi thường là các
tín hiệu xoay chiều(tín
hiệu vào có hai cực tính) với trường hợp này cần mở rộng thanh đo thích hợp với tín
hiệu. Sơ đồ nguyên lí của mạch thể hiện dạng này như hình 4-5.
Để mở rộng thang đo, điện áp so sánh được đưa qua tầng lặp lại để dưa đến chân
12 (chân Ref(+)) của ADC0809.Các kênh nối vào tương tự được dẫn đến các chân V
in0
đến V
in7
Nếu chọn Vref(+)=+2.5v thì từ đầu ra của các bộ cảm biến phải đưu về giải 0 đến
2.5v (cho phép đo trong giải ±2.5v). Khi đó cận trên của thang đo (+2.49V) tương ứng
với tổ hợp mã nhị phân ở đầu ra là 1111 1111. Cận dưới thang đo (-2.49V) ứng với tổ
hợp mã nhị phân ở đầu ra là 0000 0000. còn mức "0"của thang đo ứng với tổ hợp:
0111 1111.
• Đồ thị thời gian của ADC 0809
Các bit địa chỉ ở lối vàoA.B.C từ bộ giải mã địa chỉ sẽ chốt và xác định kênh đầu vào
nào được lựa chọn.Tương ứng với kênh đầu vào xác định ở trên khi có một xung
dương đặt vào chân số 6 (start) với độ rộng tối thiểu ( T
WS
=200ns) sau thời gian T
OEC
(Tính từ sườn trước của xung Sart) Bộ chuyển đổi bắt đầu thực hiện chuyển đổi và
NV&GD Trang 4 - 5 Bộ môn KTMT
Tạo xung nhịp
+Ec
Vref(+)
CLK Vcc
EOC

Start
ALE
A,B,C
OE
0-5v
Analog
Input
Range
DB0-DB7
GND
Vref(-)
Hình 4-5: Hoạt động của ADC 0809 khi đầu vào là lưỡng cực
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
trong suốt thời gian này chân tín hiêui ra EOC luôn ở mức thấp. Đồng thời đầu ra 3
trạng thái của ADC 0809 bị thả nổi (ở trạng thái trở kháng cao)
Sau thời gian
t
0
=100µs ADC0809 htực hiện chuyển đổi xong dữ liệu đầu vào được
đưa đến bộ đệm đầu raba trạng thái, đồng thới chân tín hiệu EOC chuyển nên mức cao
báo hiệu cho hệ VXL biết để đọc kết quả vào.
3. Ghép ADC 0809 với hệ Vi xử lí
Ghép ADC0809 với hệ vi xử lí được thể hiện trên hình 4-6, các kênh vào analag
được nối với các đầu
vào tương ứng của
ADC (có 8 kênh như
vậy). Mỗi kênh có địa
chỉ riêng do tổ hợp 3
bit địa chỉ ADC quy
định. Các dãy địa chỉ

này có thể xử dụng
trực tiếp các dãy địa
chỉ của kênh địa chỉ
hệ vi xử lí. Thường là
ABC của ADC 0809
được nối với A
0
A
1
A
2
của hệ VXL. Các dãy
địa chỉ cao của hệ
VXL để tạo tín hiệu
chọn chip CS cho ADC 0809.Tín hiệu CS được đưa tới đầu vào của mạch OR để khởi
động ADC (Start) khi có tín hiệu IOWR đồng thời chốt địa chỉ (ALE) của kênh hiện
hành có giá trị ba bit A,B,C. Tín hiệu CS cũng được đưa tới đầu vào của mạch OR thứ
2 để tạo tín hiệu OE cùng với IORD nhằm chốt dữ liệu đã biến đổi xong ở đầu ra.
Khi biến đổi xong, ADC 0809 dùng tín hiệu OEC để báo cho hệ VXL biết mã
nhị phân tương ứng với mức tín hiệu đầu vào đã đuwọc tạo ra. OEC thường được nối
với đầu vào ngắt của CPU hay của PIC8259A. Trong một số trường hợp, người ta
dùng trễ thời gian để khẳng định quá trình biến đổi đã hoàn tất thì không cần sử dụng
tín hiệu EOC.
Sau đây là chương trình minh hoạ cho sơ đồ ghép nối trong hình 4-6 sẽ sử dụng
phương pháp tạo trễ để khẳng định quá trình biến đổi ADC bằng thủ tục
NV&GD Trang 4 - 6 Bộ môn KTMT
Giải mã địa chỉ
EOC
OE
Start

ALE
A B C
CS
IORD
IORW
D0-D7
BUS hệ
thống
Báo cho hệ
VXL biết đã
biến đổi xong
Hình 4-6: Ghép ADC 0809 với hệ VXL
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
Delay_100_Microsec. Chương trình con Read_ADC khi được gọi sẽ điều khiển 8
kênh vào Analog theo phương pháp quét vòng và thực hiện lấy 256 mẫu cho mỗi
kênh. Dữ liệu này được lưu trữ trong vùng đệm BUF_ADC có dung lượng 8x256byte.
Địa chỉ cơ sở của kênh là 300h (ứng với kênh đầu tiên).
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG
ORG 100H ;Tạo file .COM
;Khai báo dữ liệu cho chương trình
chot EQU 300h ;cổng ra chốt kênh và cổng vào dữ liệu
size_of_buf EQU 256 ;kích thước bộ đệm cho mỗi kênh là 256 byte
buf_ADC DB 2048 DUP(?) ;dung lượng 8 bộ đệm kênh
;Chương trình chính
MAIN PROC
CALL read_ADC
;Các lệnh khác (nếu cần thiết)
MAIN ENDP
;Chương trình con read_ADC

read_ADC PROC
PUSH AX ;Đẩy các thành ghi AX,BX,CX,DX,DI vào ngăn xếp
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV DI,0 ;Khởi tạo vùng đệm
MOV BX,OFFSET buf_ADC ;Địa chỉ bộ đệm kênh
L1:
ADD BX,DI ;BX trỏ tới ngăn nhớ này
MOV DX,chot ;lấy địa chỉ chốt của kênh đầu tiên
MOV CX,08h ;lặp cho 8 kênh
L2:
OUT DX,AL ;khởi động kênh hiện hành
CALL delay_100_microsec;trễ 100 micro giây
IN AL,DX ;nội dung kênh hiện hành được đọc vào hệ
MOV [BX],AL ;chuyển vào bộ đệm tương ứng
NV&GD Trang 4 - 7 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
ADD BX,size_of_buf ;nhảy tới bộ đệm tiếp theo
INC DX ;tăng địa chỉ kênh 1 đơn vị
LOOP L2 ;lặp lại 8 kênh
INC DI ;trỏ tới byte tiếp theo
CMP DI,256 ;cho hết 256 byte
JNZ L1 ;và lặp lại quá trình
POP DI ;Lấy ra từ ngăn xếp
POP DX
POP CX
POP BX
POP AX

read_ADC ENDP
;Chương trình con tạo trễ 100 micro giây bằng việc thực hiện 100 lần lệnh NOP.
;Mỗi lệnh NOP (Không hành động) nhưng có một khoảng thời gian để thực hiện chúng
delay_100_microsecPROC
MOV CX,100
L3:
NOP
LOOP L3
delay_100_microsecPROC
END MAIN
4.2. DAC (Digital to Analog Converter)
NGUYÊN TẮC HOẠT ĐỘNG CỦA BỘ BIẾN ĐỔI SỐ- TƯƠNG TỰ
Trong kỹ thuật xử lí tín hiệu bằng kỹ thuật vi xử lý, có rất nhiều thiết bị ngoại vi
chỉ có thể làm việc với tín hiệu tương tự nên hệ buộc phải thực hiện phép biến đổi tín
hiệu cho phù hợp. Để thực hiện nhiệm vụ biến đổi tín hiệu từ dạng tín hiệu số sang
dạng tín hiệu tương tự cần sử dụng bộ biến đổi DAC. Nguyên tắc chung của bộ biến
đổi DAC có thể được xây dựng theo nhưng phương pháp khác nhau nhưng phương
pháp lấy tổng dòng trên các điện trở trọng số là phổ biến hơn cả. Với phương pháp
này, sự biến đổi của nó dựa trên một mạch khuyếch đại có điện trở phản hồi hoạt động
dưới dạng một mạch
cộng dòng như hình
dưới đã chỉ ra.
Bộ biến đổi
DAC có 3 thành phần
chủ yếu là nguồn điện
NV&GD Trang 4 - 8 Bộ môn KTMT
U
ch
R
1

2
R
4
R
8
R

D
3

D
2

D
1

D
0
R
N
Ur
a
Hình 4-7: Sơ đồ mạch DAC theo nguyên lý mạch cộng dòng
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
áp chuẩn Uch. đóng vai trò thước đo đơn vị biến đổi nên độ chính xác của nó có ảnh
hưởng lớn đến độ chính xác của cả mạch. Thành phần thứ 2 là các điện trở trọng số
để tạo dòng điện theo hệ nhị phân qua các khoá chuyển mạch điện tử. khi các khoá
điện tử trong sơ đồ trên là D0,D1,D2,D3 sẽ đóng mở tuỳ thuộc trạng thái của số đầu
vào thì ta sẽ có hệ thức:
I=

R
n
U
ch

. (
DDDD
0
3
1
2
2
1
3
222
−−−
+++
)
Như vậy dòng ra sẽ tương ứng với mã nhị phân dòng vào . Thành phần thứ 3 chính là
mạch khuếch đại thuật toán. bảo đảm hệ số khuếch đại lớn và tuyến tính.
Tuy nhiên
phương pháp biến đổi
trên có biên độ điện
áp lớn đặt vào mạch
khuếch đại thuật toán.
vi vậy ngươi ta
thường sử dụng
phương pháp dùng
khoá đổi chiều để khắc phục khó khăn trên. Sơ đồ thực hiện theo phương pháp này có
đạng như hình 4-8.

Với phương
pháp này, dòng
qua mỗi điện trở
là không đổi do
đó nguồn điện áp
chuẩn là cố định
Điện áp đầu ra
của bộ DAC
ladạng tín hiệucó
biên độ tỉ lệ với
bậc của mã số
nhị phân đầu vào.
Dòng DAC có
dạng nấc thang, mỗi nấc thang sẽ tương ứng vơi một số nhị phân 4 bit của nối vào(bộ
DAC 4 bit). khi đặt giá trị cực đại thì DAC sẽ trở về giá trị ban đầu và chu kì tiếp theo
sẽ lặp lại đúng 16 nấc như vậy. Mỗi nấc điện áp được gọi là 1 LSB vì sự thay đổi của
NV&GD Trang 4 - 9 Bộ môn KTMT
Uch
R 2R 4R 8R
D3 D2 D1 D0
R
N
Ura
Hình 4-8: Sơ đồ mạch DAC theo nguyên lý dùng khoá đổi chiều
P
o
r
t

A


c

a

8
2
5
5
A
D0-D7
DAC1408
+
GND
N
g
o

i

v
i
D0-D7
1.5V
Vcc(5V)
Out
1N914
Hình 4-9: Ghép nối bộ biến đổi DAC 1408 với hệ vi xử lý
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
chúng ưng với sự thay đổi trạng thái của bit thấp nhất. DAC1408 (tương đương 0808)

là bộ biến đổi số - tương tự 8 bit thông dụng mà nguyên lí làm việc của nó hoàn toàn
tương y như đã trình bày ở trên. Khi sử dụng DAC1408 với hệ vi xử lý chỉ cần ghép
theo sơ đồ hình 4-9 là có thể thực hiện được phép biến đổi từ các mã nhị phân bên
trong hệ thành các mức điện áp hay dòng điện tương ứng cho thiết bị ngoại vi.
Đoạn chương trình sau đây minh hoạ khả năng làm việc của DAC 1408 được
điều khiển từ phía hệ vi xử lý:
MOV DX,PORT_A_8255 ;Gán cho DX địa chỉ cổng portA của 8255
Chu_ky:
MOV AL,OFFH ;gán giá trị khởi đàu cho AL=max
LOOP_COUNT:
OUT DX,AL ; Đưa ra cho DAC 1408 dể thực hiện biến đổi
DEC AL ; giảm AL xuống 1 đơn vị
JNS LOOP_COUNT ;lặp lại cho đến khi AL=00h
JMP Chu_ky
Đồ thị thời gian của tín hiệu ra sẽ là chu kỳ dạng bậc thang 256 mức điện áp từ giá trị
cực đại tới giá trị cực tiểu rồi lặp lại.
4.3. Ứng dụng của ADC và DAC.
Trong các ngành kỹ thuật và thực tế sản xuất, ADC và DAC được sử dụng
tương đối rộng rãi. Đặc biệt là những nơi có áp dụng sản xuất bằng việc điều khiển
thông qua máy tính. Ví dụ: Để đo nhiệt độ và thay đổi nhiệt độ, điện áp, ánh
sáng Công nghiệp
4.4. Lập trình ghép nối trên WINDOWS
Trong các phần trước chúng ta sử dụng ngắt để lập trình cho các thiết bị ngoài
bằng môi trường Dos và viết chương trình là một việc khó khăn hơn. Hơn thế nữa các
chương trình viết ra rất khó đọc và khó sử dụng đối với người mới bắt đầu hoặc là
những người không hiểu sâu về phần cứng và hệ thống trong nó. Bây giờ chúng ta bắt
đầu tìm cách lập trình sử dụng ngay các hàm của Window có hỗ trợ để lập trình ghép
nối và điều khiển thiết bị ngoài,trong phần này chúng ta sử dụng ngôn ngữ Vb để lập
trình với các thiết bị như SoundCard,VGAcard,
4.4.1. Tệp *.DLL và cách tiếp cận.

1. Tệp DLL trong Windows:
NV&GD Trang 4 - 10 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
Tệp tin *.DLL (Dymantic Link librany) Thư viện liên kết động, đôi khi còn gọi là
các hàm thư viện của Windows (Window Function librany). Thay vì chúng ta phải
viết toàn bộ ứng dụng bằng tay thì bây giờ chúng ta chỉ việc gọi các chức năng đã có
sẵn trong tệp tin *.DLL. Đặc tính liên kết dộng hoàn toàn tương phản với với một khái
niệm khác đó là liên kết tĩnh cụ thể là việc đóng gói sử dụng các hình ảnh liên kết
tĩnh. Mặc dù hiện nay Unix cũng cung cấp các thư viện dùng chung (tương tự
*.DLL), nhiều nhà cung cấp Unix các liên kết tĩnh vì ứng dụng hoàn toàn tương tự các
thành phần cần thiết, việc cài đặt một thư viện hay ứng dụng mới không thể làm hỏng
các chương trình cài đặt trước đó. Các nhà cung cấp không cần phải lo nắng tới việc
khi cài đặt thì các phầm mềm khác có ảnh hơửng tới phần mềm của mình hay không.
Khi sử dụng các tệp *.DLL có những ưu điểm sau đây.
* Tệp *.EXE có kích thước giảm đi đáng kể do phần lớn các mã nằm trong DLL.
* Một thư viện DLL có thể sử dụng đồng thời cho nhiều ứng dụng khác nhau,
nhưng lại chỉ cần nạp một lần vào bộ nhớ trước khi chạy
* Các chương trình thể hiện tính Modul rõ hơn vì có sự thay đổi trong DLL thì
các chương trình gọi thương không bị thay đổi.
Ngoài ra còn có một số ưu điểm khác
Một là: Dung lượng ổ đĩa được tiết kiệm
Hai là: Tiêt kiệm bộ nhớ vì nó có thể dùng cho nhiều ứng dụng khác nhau tức
là nó áp dụng kĩ thuật chia sẻ. Windows cố gắng nạp DLL vào bộ nhớ Heap và khi
chương trình nào cần sử thì sẽ ánh xạ địa chỉ vị trí của nó sang cho chương trình cần
dùng. Phấn lớn các DLL có thể chia sẻ được nhưng có một số thì không thể chia sẻ mà
phải sử dụng riêng
Ba là: Việc sửa chữa lỗi xảy ra tỏ ra dễ dàng hơn vì phấn nào sảy ra lỗi thì phần đó
được sửa chữa. Các DLL có lỗi là duy nhất có thể sửa chữa nó mà kkhông cần phải
viết lại toàn bộ ứng dụng
Cách tiếp cận Với DLL của Windows

Cơ chế bảo vệ file của Windows
Khi tiếp cận với các thơ viện một vấn đề quan trọng cần phải biết đến là cơ
chế bảo vệ File Của window. Chức năng bảo vệ tập tin của window (WFP: Windows
File Protected) là bảo vệ các DLL hệ thống khỏi phải sửa chữa hay xóa bỏ các tác
nhân không được phép. Các ứng dụng không thể thay thế các DLL hệ thống, chỉ có
các Package nâng cấp hệ điều hành, chẳng hạn như là SERVICE PACK mới có thể
làm điều đó. Các DLL hệ thống chỉ được nâng cấp bỏi SERVICE PACK được gọi là
NV&GD Trang 4 - 11 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
DLL được bảo vệ (Protection DLL). Trong Window 2000 có khoảng 2.800 DLL được
bảo vệ. Nếu ta thử sao chép một DLL được bảo vệ trong thư mục hệ thống
(Win\System32 ) bằng một DLL cùng tên nhưng khác phiên bản thì mọi việc tưởng
diễn ra êm dẹp và lại không hề báo lỗi. Nhưng sau đó Window 2000 lại thay thế nó
bằng bản gốc ban đẩu.
Mỗi khi DLL được đặt vào trong thư mục hệ thống thì Window nhận được một
sự thay đổi thư mục thì nó lập tức kiểm tra xem có DLL được bảo vệ nào bị thay đổi
hay không. Nếu đúng có sự thay đổi thì nó kiểm tra xem có chữ kí số phù hợp lệ hay
không. Nếu không hợp lệ thì Window tự sao chép DLL gốc từ thư mục
Win\System32\dllCache vào thư mục Window\SYStem32. WFP bảo vệ các DLL hệ
thống khỏi sự thay đổi của các thành phần của phần mềm cài đặt. Ngay các sản phẩm
của MicroSoft Như Office và Visual Studio cũng không thể nâng cấp các DLL được
bảo vệ trong thư mục hệ thống.
Vấn đề xung đột DLL
Khi mới tiếp xúc với các DLL thì một trong số các khó khăn gặp phải là vấn đề
xung đột DLL:Sau khi cài đặt một phần mềm mới với một số thư viện liên kết động
DLL nào đó. Một hoặc vài ứng dụng có sẵn trên máy không làm việc được nữa.
Vấn đê xung đột DLL trên Windows9x gây nên bởi một số yếu điểm trong việc bảo
vệ DLL: một chương trình cài đặt nào đó không kiểm tra phiên bản trước khi sao chép
các DLL vào thư mục của hệ thống. Thí dụ nếu một chương trình cài đặt so sánh phiên
bản hiện thời của MFC42.DLL và không gây ra vấn đề gỉ. Tuy nihên một chương trình

cài đặt lại không làm thao tác này. Bản DLL cũ được sao chép đè nên bản DLL mới
hơn. Hậu quả là khi chương trình yêu cầu một đọan mã trong bản mới hơn, nó sẽ không
tìm được đoạn mã đó. Vấn đề này xảy ra rất phổ biến với những người sử dụng win9x,
đặc biệt là khi Download các phần mềm miễn phí hoặc là khi soa chép các chương trình
từ người quen. Các chương trình chuyên nghiệp ngày nay không gây nên vấn đề này
bời lẽ chúng luôn kiểm tra chước khi ghi đè nên DLL.
Các DLL mới luôn được coi là tương thích với phiên bản cũ, nhưng điều này
không phải bao giờ cũng đúng. Vấn đề xung đột DLL cũng có thể xảy ra khi một DLL
được cài đặt nhưng bản thân nó lại chứa một lỗi mới. Mặc dù đây là nguyên nhân rất ít
gặp nhưng đã có trường hợp xảy ra trong thực tế.
4.4.2. Cách tạo và sử dụng tệp *.DLL trong BASIC và DELPHI
1. Các DLL riêng
NV&GD Trang 4 - 12 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
Thường thì các chương trình trên Window 9x xho những ứng dụng cụ thể ta sẽ
càm thấy thiếu một số hàm nào đó. Khi đó cách giải quyết tốt nhất là viết ra hàm bằng
một ngôn ngữ khác, chẳng hạn như ngôn ngữ C. Sau đó thiết lập một hàm DLL. Đây
chính là DLL riêng (Private). Có thể định nghĩa: DLL riêng là các DLL được cài đặt
trong một ứng dụng xác định và chỉ có ứng dụng đó sử dụng. Chẳng hạn ta quan tâm
đến chương trình Maypp.exe. Ta đã kiểm tra Myapp.exe với Msvcrt.dll phiên bản 1.0
và với Mayapp.dll phiên bản 2.0. Ta muốn bảo rằng Mayapp.exe luôn được sử dụng
Msvcrt.dll phiên bản x.x và MA.dll phiên bản 2.0. Để làm được việc đó phần mềm cài
đặt của ta sao chép Mayapp.exe, Msvcrt.dll phiên bản 1.0 và Sa.dll phiên bản 2.0 vào
thư mục /Myapp. Sau đó ta lưu ý Window 98/2000 rằng Myapp.exe sẽ dùng các DLL
riêng đó. Khi Myapp chạy trên một hệ thống Windows 98/2000, nó tìm trong thư
mục /myapp các DLL riêng trước khi tìm trong cá thư nục và đường dẫn của hệ
thống. Các Service Pack tương lai nâng cáp Msvcrt.dll sẽ không thể làm hỏng Myapp
vì nó không sử dụng phiên bản chung của Msvcrt.dll. Các ứng dụng khác có cài đặt
các phiên bản khác của DLL không thể ảnh hưởng tới Myapp, bời lẽ Myapp có phiên
bản sử dụng riêng MA.dll.

Các DLL riêng còn được gọi là các DLL cạnh nhau (Side to side), bởi lẽ một
bản riêng của DLL được sử dụng trong ứng dụng ứng dụng khác. Nếu ta chạy WorđPa
và mypp đồng thời thì hai bản Msvcrt.dll được nạp vào vào bộ nhớ (do đó mà có thuật
ngữ "cạnh nhau"), ngay cả khi WordPad và Myapp cùng dùng chung phiên bản của
Msvcrt.dll.
Có hai cách tiếp cận để có được DLL riêng. Nếu ta đang viết một ứng dụng
mới hoặc một bộ phận mới, ta đặt cho mỗi phần một phiên bản duy nhất. Ứng dụng
của ta biết phải nạp bản riêng DLL dùng chung nhờ thông tin phiên bản của nó. Cách
tiép cận thứ hai là bảo vệ các ứng dụng có sẵn, Giả sử C:\Myapp\Myapp.exe là một
ứng dụng đã có mà ta muốn bảo vệ khỏi rủi ro trong những lần nâng cấp của các DLL
sau cũng như của Service Pack. Ta chỉ cần sao chép các DLL định biến thành các
DLL riêng của Myapp vào thư mục \Myapp và tạo ra một tệp rỗng trong thư mục đó
tên là "Myapp.exe local". bây giờ khi Myapp chạp và tìm File.local nó sẽ tìm kiếm
trong thư mục hiện thời các DLL và COM service trước khi tìm đến đường dẫn chuẩn.
Nếu ứng dụng của ta mà bị lỗi do Service Pack nâng cấp, ta tạo một chương trình cài
đặt với file.local và các DLL mà ta cần cung cấp chúng cho khách hàng.
Cả cách tiếp cận chỉ đình phiên bản (cho các ứng dụng đang viết ) và cho local
(các ứng dụng đã có ) đều có một số đặc tính như sau:
NV&GD Trang 4 - 13 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
* Các DLL trong thư mục ứng dụng đươc nạp thay vì các DLL hệ thống
* Ta không thể đổi hướng 20 DLL đươck liệt kê trong
HKEYLOCAL_MACHINE\SYSTEM\CurrentControlSet\ControlSession manager\
KnownDLLs. Phần lớn chúng không thể chạy cạnh nhau vì cần duy trì các trạng thái
không phụ thuộc vào tiến trình Vídụ: kernel32, user32 và ole32 không thê bị đổi
hướng bởi lẽ chúng có trạng thái (các đối tượng kernel, các handle cửa sổ ) cần duy
trì xuyên suốt các tiến trình. Trong hệ điều hành tương lai một số các DLL này sẽ
được sửa lại và chạy cạnh nhau, khi đó danh sách sẽ được rút bớt.
* Để giải quyết các xung đột trong các ứng dụng hiện có phải xác định xem: DLL
nào cần được bảo vệ.

Các tiếp cận chỉ định cần phải được thực hiện bởi chính tác giả của bộ phận
hay ứng dụng. Các nhà quản lí các chương trình cài đặt có thể tạo ra các file.local
rỗng để thực hiện cách tếp cận thứ hai. Các hệ điều hành hiện nay hầu hết có các cơ
chế bảo vệ.
2. Tệp Port.DLL
Điều đặc biệt khó khăn khi làm việc trong môi trường Windows là tiếp cận đến
giao diện của máy tính PC. Thực tế cho thấy có một biện pháp hiệu quả nhất là tạo ra
một tệp DLL có khả năng sử dụng trong nhiều ứng dụng. Một tệp khác được giới
thiệu trong phần sau có tên quy ước là 8255.DLL. Được viết bằng C
++
các tệp này
được viết trong một ngôn ngữ khác, tùy theo kinh nghiêm của người lập trình.
Tệp DLL được đề cập đến nhiều lần trong phàn này là đượ viết dưới dạng ngôn
ngữ Delphi có quy ước là Port.dll để chỉ ró đối tượng ứng dụng là các cổng. Tệp DLL
này được thực hiện chức năng mở rộng của ngôn ngữ để dùng cho các ngôn ngữ lập
trình khác nhau. Sau khi tạo ra (hoặc kiếm được) thì phải sao chép vào trong thư mục hệ
thống của Windows để các chương trình đều có thể sử dụng được. Tùy theo cách lựa
chọn, ta cũng có thể đặt tệp DLL này vào trong thư mục chương trình nào đó của
chương trình điều hành (EXE)
Những nhiệm vụ đặt ra khi viết tệp PORT.DLL là:
Mở giao diện
Truyền dữ liệu theo cách nối tiếp
Tiếp cận đến các đường dẫn ở giao diện
Nhập và xuất ra các cổng
phát khoảng thời gian để cho có thời lượng chính xác đến Mili giây
NV&GD Trang 4 - 14 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
phát khoảng thời gian để cho có thời quét chính xác đến Micro giây
Truy cập tới card âm thanh
Truy cập qua cổng trò chơi

Tệp DLL có thể được sử dụng trong các hệ thống có thể lập trình hoàn toàn khác
nhau. Ngoài ngôn ngữ được lập trình trong phần này, các hàm có thể được viết bằn ngôn
ngữ C. Vì vậy một chương trình được viết ra một lần có thể được chuyển giao dễ dàng
sang các hệ hthống lập trình khác. Ngoài ra, ta có thể trao đổi với thư viện DLL trong các
Macro của Word hoặc Exel. Việc viết ra một thư viện DLL chung để truy cập tới phàn
cứng đã được dự tính. Ở một mức độ nào đó có phần trái ngược với cách tư duy của nhà
thiết kế phần mềm khoi xây dựng Windows. Trong đó tất cả các thao tác truy cạp nên
phần cứng đều tiến hành thông qua các tệp đệm (Driver). Một tệp đệm luôn đi theo một
thiết bị hoàn toàn xác định. Đối với ứng dụng ghép nối máy tính không chuyên nghiệp thì
không thể hy vọng đến sự giúp đỡ của các tệp này. Lý do việc viết ra các tệp này thường
rất tốn kém và thường được viết ra bởi các hãng lớn.
Trong DOS, mỗi ngôn ngữ lập trình đều có các lệnh dùng cho cổng, mà thường
gọi tắt là lệnh cổng (GWBASIC là INP và OUT, còn trong TurboPascal là PORT
[ ], ).
Để trao đổi trực tiếp trên toàn bộ phần cứng của máy tính PC.Trong một số hệ điều
hành thì chúng ta thâm nhập phần cứng phải thông qua các hàm các thư viện các dịch
vụ của hệ điều hành và có sự bảo vệ của hệ thống nên việc truy cập trực tiếp vào phần
cứng càng trở nên khó khăn. Trong các hệ điều hành thiên hướng mạng thì vịêc truy
cập đó lại càng bị bó hẹp
3, Gọi tệp *.DLL trong VisualBasic
Việc sử dụng một tệp tin DLL có thể được chỉ ra ở đây thông qua một thí dụ đơn
giản mà không bổ sung thêm gì cho phần cứng. Loa của máy tính được điều khiển
thông qua các khối, các khối này có thể điều khiển qua cá lệnh cổng. Loa được điểu
khiển hoặc là bằng bộ định thời để xuất ra âm thanh có tần số nhất định hoặc ta có thể
điều khiển trực tiếp thông qua đường dẫn xuất ra vi
mạch ghép nối ngoại vi lập tình được PPI
(Programable Peripheral Interface) loại 8255
trong máy tính pc ta cũng có thể tạo ra các âm
thanh theo các cách thay đổi trạng thái logic một
đường dẫn bằng một chuỗi các tac dộng liên tục:

Bật và tắt. Các phương phápthử nghiệm dược nêu
NV&GD Trang 4 - 15 Bộ môn KTMT
Hình 4-10: Tạo một Module
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
ra ở đây một mặt đẻ làm quen với các khái niệm cơ bản về một tệp DLL, mặt khấc
đểkhảo sát tiến trình thời gian trong Windows.
Loa được điều khiển qua bít 1 của cổng B trên vi mạch 8255. Vi mạch này chiếm các
địa chỉ 60h (96 dec) trong vùng vào/ra của PC, cổng B nằm ở địa chỉ 97. Các nối ra cổng
luôn có độ rộng 8 bít, vì thế 8 đường dẫn có thể chuyển cùng một lúc. Nhưng chỉ có
đường dẫn bit 1 được phép thay đổi, bởi vì cổng B của mạch PPI, còn điều khiển nhiều
đường dẫn khác. Do đó trước hết, trạng thái của cổng chỉ được đọc để thay đổi chỉ một
bit. Nếu cảm thấy kho khăn trong việc tìm hiểu cách xử lí từng bit, ta nên chọn cách tiếp
cận với cách chương trình dùng làm thí dụ được giới thiệu trong các chương trình sau;
Ngoài ra việc truy nhập nên ccác giáo diện từ bên ngoài có phần đơn giản hơn.
Để tiếp cận với các địa chỉ cổng riêngbiệt trên máy tính PC tệp DLL giới thhiệu
hai hàm cụ thể.
Out Port ADR.DAT 'xuất dữ liẹu ra một địa chỉ ra tệp
Input port ADR 'đọc dữ liệu từ địa chỉ ADR
Trong Visual Basic outport có thể được kết nói như là Sub (procedure) ngược lại
inport phải là một hàm. Các phàn tử của tệp DLL đợc chỉ định bằng lệnh khai báo
(Declare) để việc chuyển giao dữ liệu giữa VIsualBasic và têp DLL, có thể vận hành
đúng thì tất cả các thông số giao ByVal cần được khai báo,nghĩa là như một tham trị-
ngược với vieecj chuyển giao một địa chỉ so sánh trong hệ diều hành Windows 95/95
32 bit phải dùng các chữ in khi khai báo trong thư viện DLL, Tất cả ccác hàm chỉ
được đặt tên bằng các chữ cái viết in và tên này phải được giữ nguyên trong chương
trình được gọi. những lời khai báo toàn cục phải được khai báo trong một Modul
riêng. Modul này được kết nối trong Project TON,
Declare sub OUTPORT Lib "PORT.DLL" (ByVal Adr as Integer, Byval dat as
Integer)
Declare Fuction OUTPOR Lib "PORT.DLL" (ByVal Adr as Integer, Byval as Integer)

as Integer
Declare Sub DELAY Lib "PORT.DLL" (ByVal thoigian As Integer)
Bây giờ Inport và Outport (Trong đoạn chương trình viết
bằng chữ In !) có thể được sử dụng trong một Project
chung. Ngoài ra thủ tục Delay cũng đã được khai báo và sẽ
được sử dụng trong phần dưới đây. Lần xuất âm tần đẩu tiên
cần phải được tạo ra trong vòng lặp nhanh với 100 xung
NV&GD Trang 4 - 16 Bộ môn KTMT
Hình 4-11: cửa sổ chương trình
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
vuông góc ở loa, và tàn số của âm thanh phải nằm trong vùng nghe được. Việc quản
lí từng bit khi xuất ra cổng bằng lệnh outport được tiến hành bằng cách sử dụng các
hàm logic ALD và OR để chỉ thay đổi một đường dẫn của cổng được đọc vào bằng
lệnh Inport. Các hàm này sẽ còn được giải thích chi tiết hơn trong các phần sau.
Chương trình nên sử dụng một khuôn mẫu đơn giản với một phím nhấn TON. Đường
dẫn loa dược tắt/bật 100 lần nhờ vậy ta có thể nghe chẳng hạn ở một máy tính tính PC
với xung Nhịp 200Mhz chỉ một loại âm thanh thì thời gian chờ bổ sung cần phải được
điền vào. Ở đây thời gian chở được tạo trong vòng lặp đếm với 10000 vòng lặp
Private Sub Command1_Clic()
Dim i, t As Integer
For i = 1 To 100
OUTPORT 97, (INTPORT(97) Or 2)
For t = 1 To 1000
Next t
OUTPORT 97, (INTPORT(97) And 2)
Next
For t = 1 To 1000
Next t
End Sub
Khi nhấn vào phín "TON" ta sẽ nghe thấy âm thanh phất ra ở loa. Độ cao của tần

số âm thanh phụ thuộc vào máy tính được sử dụng. Điểm đáng chú ý là; âm thanh
được tạo ra có chất lương không cao; đôi khi ta thấy nhiều tiếng ồn hoặc tiếng lạo xạo
nguyên nhân là tiến trình sử dụng thời gian (Time Characteristic) của Windows.
Thời gian chờ được tạo ra qua vòng lặp trễ thường không bao giờ có thể đông đều
bởi vì Windows còn phải hoàn thành nhiều nhiêm vụ chẳng hạn Windows còn phải
quan sát chuột hoặc các quá trình khác đang diễn ra đổng đồng thời cần được xử lí do
đó người ta thờng nói rằng Window không có khả năng thời gian thực, rằng không
thể điều khiển các quá trình diễn biến nhanh bằng Windows một cách tin cậy. Tất
nhiên là nhận xét này mang tính tương đối bởi vì nnhanh đến thế nào và tin cậy đến
mức nào còn là một ranh giới chưa rõ ràng. Có thể khẳng định rằng khôngthể tạo ra
một âm thanh trong chẻo bằng những chương trình đã dẫn ra làm thí dụ trên.
Đương nhiên là vòng lặp đếm không phải là giải pháp được lựa chon trước tiên khi ta
quan tâm đến thời giam trễ Window đẫ cung cấp một phương tiện tốt hơn đẻ nhận được
thời gian trễ đến tưng mili giây thông qua việc truy nhập tới hàm Delay của DLL viẹc sử
dụng hàm delay theo cách này cho phép cải thiện chất lượng âm thanh được xuất ra đấng
NV&GD Trang 4 - 17 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
tiếc là tần số ccaco nhất của âm thanh được xuất ra chỉ cỡ 500 Hz khi ta thay đổi trạng
cổng từng ms
Với đoạn chương trình này âm thanh được xuất ra nghe rõ ràng hơn tuy chất lượng
chư so sánh với âm thanh được tọa ra từ các vi mạch. Các kết quả nhận được từ DLL
Realime (true) còn được cải thiện nhiều hơn. Nhưng ở đây ta có một ấn tượng rõ ràng khả
năng thời giam thực của Window có thể đi xa hơn. Muốn khảo sát chi tiết hơn, ta cần
đến một giao động để có thể quan sát trọng thái đường dẫn, chẳng hạn ở giao diện cổng
COM của cổng nối tiếp
ví dụ
Private Sub Command1_Click()
For n = 1 To 100
OUTPORT 97, (INPORT(97) Or 2)
DELAY 1

OUTPORT 97, (INPORT(97) Or 253)
DELAY 1
Next n
End Sub
Bên cạnh hàm DELAY là dùng cho khoảng thời gian là mini giây, trong DLL còn
có hàm giây trễ với khoảng thời gian là micro giây.
Còn một vấn đề cần quan tâm đến là việc gọi hàm DLL. Tất cả các lời gọi DLL
cần được khai báo trong modul Basic bên ngaòi có tyê là PORT.PAS sau đó, thư viện
có htể nạp vào project mới, mà không đòi hói sự quan tâm nhiều hơn đến các khai
báo. Tròn tệp PORT.DLL phải được đặt trong thư mục Window hoặc phải đặt trong
thư mục có chứa chương trình exe cần chạy
Đoạn chương trình sau đây là PORT.BAS với tấ cả các khai báo dùng trong VB5
Declare Function OPENCOM Lib "Port" (ByVal a$) As Integer
Declare Sub CLOSECOM Lib "Port" ()
Declare Sub SENBYTE Lib "Port" (ByVal b$)
Declare Function READBYTE Lib "Port" () As Integer
Declare Sub DTR Lib "Port" (ByVal b$)
Declare Sub RTS Lib "Port" (ByVal b$)
Declare Sub TXD Lib "Port" (ByVal b$)
Declare Function CTS Lib "Port" () As Integer
Declare Function DSR Lib "Port" () As Integer
Declare Function RI Lib "Port" () As Integer
NV&GD Trang 4 - 18 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
Declare Function DCD Lib "Port" () As Integer
Declare Sub DELAY Lib "Port" (ByVal b$)
Declare Sub TIMEINIT Lib "Port" ()
Declare Sub TIMEINITUS Lib "Port" ()
Declare Function TIMEREAD Lib "Port" () As Long
Declare Function TIMEREADUS Lib "Port" () As Long

Declare Sub DELAYUS Lib "Port" (ByVal l As Long)
Declare Sub READTIME Lib "Port" (ByVal l As Boolean)
Declare Sub OUTPORT Lib "Port" (ByVal a%, ByVal b%)
Declare Function INPORT Lib "Port" (ByVal p%) As Integer
Declare Function JOYX Lib "Port" () As Long
Declare Function JOYY Lib "Port" () As Long
Declare Function JOYZ Lib "Port" () As Long
Declare Function JOYW Lib "Port" () As Long
Declare Function JOYBUTTOM Lib "Port" () As Long
Declare Function SOUNDSETRATE Lib "Port" (ByVal a$) As_ Integer
Declare Function SOUNDSETRATE Lib "Port" () As Integer
Declare Function SOUNDBUSY Lib "Port" () As Boolean
Declare Function SOUNDIS Lib "Port" () As Boolean
Declare Sub SOUNDIN Lib "Port" (ByVal buff$, ByVal size%)
Declare Sub SOUNDOUT Lib "Port" (ByVal buff$, ByVal size%)
Declare Function SOUNDBYTES Lib "Port" () As Integer
Declare Function SOUNDBYTES Lib "Port" (ByVal b%) As Integer
Declare Sub SOUNDCAPIN Lib "Port" ()
Declare Sub SOUNDCAPOUT Lib "Port" ()
Theo cách tương tự, Các hàm DLL có thể được khai báo trong VBA (VisualBasic
Application). Trên nguyên tắc ccó thể chạy thử tất cả các chương trình có thể chạ trên
Word Hoặc Excel, các chương trình có thể khởi độnng như là cá marco, các khai báo
có thể có trong VisualBasic. Thí du sau đây cho phép tạo ra âm thanh từ loa của PC.
Các thí dụ viết bằng VisualBasic được giới thiệu sau đây.
Trong Word 97 một User_Form có thể chứa các phần tử điều khiển riêng, cũng có
thể được sử dụng trong một Macro. Khi đó, trước từ "Declare" luôn là từ khóa
"Private". Theo cách này, tất cả các hàm và thủ tục được tạo liên kết với Private
NV&GD Trang 4 - 19 Bộ môn KTMT
Chương IV: BIẾN ĐỔI A/D VÀ LẬP TRÌNH GHÉP NỐI MÁY TÍNH
Hình 4-12: Một macro trong Word 97

NV&GD Trang 4 - 20 Bộ môn KTMT

×