Giáo trình Đo lường và điều khiển bằng máy tính

Mục tiêu:

- Hiểu cấu trấu giao tiếp máy tính với thiết bị ngoại vi.

- Hiểu giao tiếp qua khe ISA và PCI.

- Ý thức học tập, nghiên cứu cao

- Chính xác, cẩn thận, tỉ mỉ khi thiết kế mạch giao tiếp qua khe cắm.

1. Các khái niệm cơ bản và điều khiển bằng máy tính

Mục tiêu:

- Trình bày được cấu trúc giao tiếp máy tính với thiết bị ngoại vi.

1.1. Định nghĩa và phân loại giao tiếp

Giao tiếp là tiếp xúc giữa các cổng của máy tính với dây cáp của thiết bị

ngoài, qua đó chúng có thể nhận dạng và trao đổi dữ liệu với nhau.

Giao tiếp được phân loại như sau:

- Giao tiếp qua khe ISA

- Giao tiếp qua khe PCI

- Giao tiếp qua cổng song song

 Giao tiếp qua cổng SPP

 Giao tiếp qua cổng EPP

 Giao tiếp qua cổng ECP

- Giao tiếp qua cổng nối tiếp (COM)

1.2. Các hình thức điều khiển bằng máy tính

Có hai hình thức điều khiển chính bằng máy tính

- Điều khiển trực tiếp

Là các điều khiển trực tiếp từ máy tính qua các thiết bị ngoài bằng cách

kết nối trực tiếp các thiết bị này với may tính.

- Điều khiển gián tiếp

Là các điều khiển khi thiết bị ngoài và máy tính không kết nối trực tiếp

với nhau, các thiết bị ngoài này được điều khiển bởi máy tính thông qua các

phương tiện gián tiếp. Có nghĩa là các thiết bị ngoài và máy tính được kết nối

với nhau thông qua một hệ thống mạng như LAN hay Internet.

2. Giao tiếp qua khe ISA

Mục tiêu:

- Trình bày được giao tiếp qua khe ISA và PCI.

- Chính xác, cẩn thận, tỉ mỉ khi thiết kế mạch giao tiếp qua khe cắm.9

2.1. Sơ đồ chân rãnh cắm ISA

Rãnh cắm thông dụng nhất là rãnh cắm ISA (Industry Standard

Architecture) do IBM đưa ra năm 1980 do máy 8086 XT (Extender Techology),

sau đó là ISA 16 bit cho máy AT (Advanced Techology) và trở thành chuẩn AT

Bus. Hiện nay các mainboard P4 không còn rãnh cắm này tuy nhiên việc nghiên

cứu rãnh cắm ISA cẫn là cần thiết. Rãnh cắm ISA có màu đen trên mainboard

gồm 2 phần, phần đầu 62 chân, mỗi hàng có 31 chân dùng cho trao đổi dữ liệu 8

bit, phần thứ 2 36 chân, mỗi hàng 18 chân dùng hỗ trợ thêm khi cần dữ liệu 16

bit. Sơ đồ chân rãnh cắm được mô tả như hình bên dưới:

3. Giao tiếp qua khe PCI

3.1. Các đặc điểm của khe cắm PCI

Rãnh cắm PCI (Peripheral Component Interconnect) có màu trắng trên

mainboard cho phép giao tiếp ngoại vi 32 hay 64 bit vận tốc nhanh đến 132

Mbyte/s sp với rãnh cắm ISA 16 bit có bận tốc 0 ÷ 5 Mbyte/s.13

Nhờ vận tốc cao nên rãnh PCI thường dùng cho card mà hình, sau đó nó

được sử dụng để cho các card khác như card mạng, modem nội, âm thanh và

dần dần các mainboard đời mới không dành chỗ cho rãnh ISA nữa.

Các hãng như Advantech, Data Translation cũng đã sản xuất card giao

tiếp ngoại vi cho máy tính dùng rãnh PCI.

Rãnh PCI 64 bit có hai hàng tiếp điểm, mỗi bên 94 tiếp điểm phía A là

phía linh kiện còn phía B là phía hàn. Do tính chất phức tạp của tuyến và vận tốc

tín hiệu lớn nên việc tự ráp card giao tiếp PCI khó thực hiện mà phải dùng card

chính hãng.

Năm 1998 các hãng Compaq, Hewlett – Packerd, IBM phối hợp đưa ra

chuẩn PCI-X (PCI Express) có đặc tính tốt hơn.

Tuyến PCI 32 bit sử dụng chung 32 đường địa chỉ data ADO – 31, pha địa

chỉ so tín hiệu FRAME# điều khiển, sau đó là một hay nhiều pha dữ liệu. Tuyến

PCI 64 bit dùng 64 đường ADO – 63 cho địa chỉ và dữ liệu.

Có 2 loại tuyến PCI mức tín hiệu 5V và mức tín hiệu 3,3V

Giáo trình Đo lường và điều khiển bằng máy tính trang 1

Trang 1

Giáo trình Đo lường và điều khiển bằng máy tính trang 2

Trang 2

Giáo trình Đo lường và điều khiển bằng máy tính trang 3

Trang 3

Giáo trình Đo lường và điều khiển bằng máy tính trang 4

Trang 4

Giáo trình Đo lường và điều khiển bằng máy tính trang 5

Trang 5

Giáo trình Đo lường và điều khiển bằng máy tính trang 6

Trang 6

Giáo trình Đo lường và điều khiển bằng máy tính trang 7

Trang 7

Giáo trình Đo lường và điều khiển bằng máy tính trang 8

Trang 8

Giáo trình Đo lường và điều khiển bằng máy tính trang 9

Trang 9

Giáo trình Đo lường và điều khiển bằng máy tính trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 50 trang xuanhieu 9340
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Đo lường và điều khiển bằng máy tính", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Đo lường và điều khiển bằng máy tính

Giáo trình Đo lường và điều khiển bằng máy tính
 thấp lên cao hoặc từ cao xuống thấp, một tín hiệu 
phải vượt qua quãng quá độ trong một thời gian ngắn hợp lý. Điều này dẫn đến 
việc phải hạn chế về điện dung của các thiết bị tham gia và của cả đường truyền. 
Tốc độ truyền dẫn tối đa phụ thuộc vào chiều dài của dây dẫn. Đa số các hệ 
thống hiện nay chỉ hỗ trợ với tốc độ 19,2 kBd (chiều dài cho phép 30 – 50 m). 
1.3. Đặc tính chống nhiễu 
 Khả năng chống nhiễu của các cổng nối tiếp cao. 
 Cổng nối tiếp là một phần của PC ngay khi nó mới ra đời. Với mỗi cổng 
COM hoặc COMM trong PC là một cổng nối tiếp không đồng bộ được điều 
khiển bởi các UART. Mỗi cổng COM có thể có giao diện RS-232, RS-485 hoặc 
cổng có thể để dành cho một modem trong hoặc thiết bị khác. Mỗi PC có thể có 
các dạng khác nhau của các cổng nối tiếp như USB, Fire wire, và I2C nhưng 
chúng dùng các giao thức khác nhau và yêu cầu các thành phần khác nhau. 
2. Cấu trúc cổng COM 
Mục tiêu: 
 - Trình bày được về chuẩn giao tiếp cổng COM. 
2.1. Sơ đồ chân kiểu cổng DB-9 
 Chân D-9 Tên tín hiệu Chiều Ý nghĩa 
 CD, Carrier detect, phát Phát giác có tín hiệu trên 
 1 Nhập 
 giác sóng mang đường dây 
 2 RD, RXD, nhận dữ liệu Nhập Nhập dữ liệu nối tiếp 
 3 TD, TXD, truyền dữ liệu Xuất Xuất dữ liệu nối tiếp 
 4 DTR, Data terminal Ready Xuất DTE sẵn sàng kết nối 
 5 SG, Signal ground Mass 
 39 
 6 DSR, Data set ready Nhập Modem sẵn sàng kết nối 
 RTS, Request to send DTE sẵn sàng trao đổi 
 7 Xuất 
 dữ liệu 
 CTS, Clear to send Modem sẵn sàng trao đổi 
 8 Nhập 
 dữ liệu 
 RI, Ring Indicator Modem phát giác tín 
 9 Nhập 
 hiệu chuông 
2.2. Sơ đồ chân cổng kiểu DB-25 
Chân D-25 Tên tín hiệu Chiều Ý nghĩa 
 2 TD, TXD, truyền dữ liệu Xuất Xuất dữ liệu nối tiếp 
 3 RD, RXD, nhận dữ liệu Nhập Nhập dữ liệu nối tiếp 
 DTE sẵn sàng trao đổi 
 4 RTS, Request to send Xuất 
 dữ liệu 
 CTS, Clear to send Modem sẵn sàng trao đổi 
 5 Nhập 
 dữ liệu 
 6 DSR, Data set ready Nhập Modem sẵn sàng kết nối 
 7 SG, Signal ground Mass 
 CD, Carrier detect, phát Phát giác có tín hiệu trên 
 8 Nhập 
 giác sóng mang đường dây 
 20 DTR, Data terminal Ready Xuất DTE sẵn sàng kết nối 
 RI, Ring Indicator Modem phát giác tín 
 22 Nhập 
 hiệu chuông 
2.3. Sơ đồ kết nối cổng COM 
 Tín hiệu truyền nối tiếp dưới dạng các bit, số bit trong một giây được gọi 
là baud, vận tốc truyền thông dụng là 300, 600, 1200, 2400, 4800, 9600, 
19200 baud. Nếu dùng vận tốc 9600 baud và khung truyền 8, E, 2 (8 bit dữ 
liệu, 1 bit kiểm tra chẵn, 2 bit stop) thì truyền một byte chiếm 12 bit vậy một 
 40 
giây truyền được 800 byte, thời gian truyền 1 bit là ~ 0,1msec. Các modem đời 
mới có thể đạt tốc độ 56000 baud, tuy nhiên các vi mạch truyền nối tiếp có thể 
đạt tốc độ cao hơn đến 115200 baud (vi mạch 16550) 230400 baud (16C650) vì 
vậy các modem phải nén tín hiệu trước khi truyền trên đường. Kết nối giữa máy 
tính (DTE) và modem (DCE) thực hiện theo nguyên tắc các chân cùng tên nối 
với nhau. Còn khi kết nối DTE và DTE thường dùng sơ đồ sau: 
 Khi DTE cần truyền dữ liệu thì DTR tích cực đưa về DSR cho biết phía 
nhận sẵn sàng, đưa về CD cho biết đã nhận được sóng mang của modem ảo. Hai 
DTE có cùng khung truyền nên RTS và CTS nối với nhau. Đôi khi có thể bỏ 
đường nối DTR với DSR và CD. 
 Khi kết nối DTE với DCE, do vận tốc truyền khác nhau, cần điều khiển 
lưu lượng. Có hai cách là dùng phần cứng và phần mềm. Khi dùng phần cứng sử 
dụng hai dây RTS và CTS. Nếu DTE muốn truyền sẽ cho RTS tác động, nếu 
DCE chấp nhận sẽ gởi trở về CTS và máy tính sẽ gởi dữ liệu, nếu máy tính 
không nhận được CTS sẽ không gởi dữ liệu. Điều khiển lưu lượng bằng phần 
mềm dùng hai ký tự Xon và Xoff. Khi modem muốn máy tính ngừng truyền sẽ 
gởi đi ký tự Xoff (ASCII 19) còn khi modem rảnh nó sẽ gởi ký tự Xon (ASCII 
17). 
 Việc trao đổi dữ liệu của máy tính được thực hiện thông qua vi mạch 
UART (Universal Asynchronous Receiver Transmitter) còn với vi điều khiển 
hay PLC thì có các vi mạch chuyên dụng hoặc được tích hợp trong vi xử lý. Các 
máy tính đời mới dùng công nghệ ASIC sử dụng chip đa năng làm nhiều nhiệm 
vụ giao tiếp nối tiếp, song song, cổng trò chơi, điều khiển đĩa, tuy nhiên phần 
giao tiếp nối tiếp thiết kế tương hợp với các vi mạch UART rời. Các loại vi 
mạch UART thường gặp là 8250, 8250A, 16450, 16550, 16650, 16750,  6402. 
 Các cổng nối tiếp được đánh số COM 1, COM 2, COM 3, COM 4. Bảng 
sau cho địa chỉ gốc cổng COM và các thông tin khác. 
 41 
3. Mạch giao tiếp nối tiếp 
Mục tiêu: 
 - Thực hiện kết nối 2 máy tính qua cổng nối tiếp 
 - Chính xác, cẩn thận, tỉ mỉ khi thực hiện giao tiếp qua cổng nối tiếp. 
3.1. Mạch chuyển đổi RS-232 
 Vấn đề giao tiếp giữa PC và vi điều khiển rất quan trọng trong các ứng 
dụng điều khiển, đo lường... Ghép nối qua cổng nối tiếp RS232 là một trong 
những kỹ thuật được sử dụng rộng rãi để ghép nối các thiết bị ngoại vi với máy 
tính. Nó là một chuẩn giao tiếp nối tiếp dùng định dạng không đồng bộ, kết nối 
nhiều nhất là 2 thiết bị , chiều dài kết nối lớn nhất cho phép để đảm bảo dữ liệu 
là 12.5 đến 25.4m, tốc độ 20kbit/s đôi khi là tốc độ 115kbit/s với một số thiết bị 
đặc biệt. Ý nghĩa của chuẩn truyền thông nối tiếp nghĩa là trong một thời điểm 
chỉ có một bit được gửi đi dọc theo đường truyền. 
 Có hia phiên bản RS232 được lưu hành trong thời gian tương đối dài là 
RS232B và RS232C. Nhưng cho đến nay thì phiên bản RS232B cũ thì ít được 
dùng còn RS232C hiện vẫn được dùng và tồn tại thường được gọi là tên ngắn 
gọn là chuẩn RS232. 
 Các máy tính thường có 1 hoặc 2 cổng nối tiếp theo chuẩn RS232C được 
gọi là cổng Com. Chúng được dùng ghép nối cho chuột, modem, thiết bị đo 
lường...Trên main máy tính có loại 9 chân hoặc lại 25 chân tùy vào đời máy và 
main của máy tính. Việc thiết kế giao tiếp với cổng RS232 cũng tương đối dễ 
dàng, đặc biệt khi chọn chế độ hoạt động là không đồng bộ và tốc độ truyền dữ 
liệu thấp. 
 + Khả năng chống nhiễu của các cổng nối tiếp cao. 
 + Thiết bị ngoại vi có thể tháo lắp ngay cả khi máy tính đang được cấp 
điện. 
 + Các mạch điện đơn giản có thể nhận được điện áp nguồn nuôi qua công 
nối tiếp. 
 + Trong chuẩn RS232 có mức giới hạn trên và dưới (logic 0 và 1) là +-
12V. Hiện nay đang được cố định trở kháng tải trong phạm vi từ 3000 ôm - 
7000 ôm. 
 + Mức logic 1 có điện áp nằm trong khoảng -3V đến -12V, mức logic 0 từ 
+-3V đến 12V. 
 42 
 + Tốc độ truyền nhận dữ liệu cực đại là 100kbps ( ngày nay có thể lớn 
hơn). 
 + Các lối vào phải có điện dung nhỏ hơn 2500pF. 
 + Trở kháng tải phải lớn hơn 3000 ôm nhưng phải nhỏ hơn 7000 ôm. 
 + Độ dài của cáp nối giữa máy tính và thiết bị ngoại vi ghép nối qua cổng 
nối tiếp RS232 không vượt qua 15m nếu chúng ta không sử model. 
 + Các giá trị tốc độ truyền dữ liệu chuẩn : 
 50,75,110,750,300,600,1200,2400,4800,9600,19200,28800,38400....5660
0,115200 bps. 
  Cổng RS232 trên PC 
 Hầu hết các máy tính cá nhân hiện nay đều được trang bị ít nhất là 1 cổng 
Com hay cổng nối tiếp RS232. Số lượng cổng Com có thể lên tới 4 tùy từng loại 
main máy tính. Khi đó các cổng Com đó được đánh dấu là Com 1, Com 2, Com 
3...Trên đó có 2 loại đầu nối được sử dụng cho cổng nối tiếp RS232 loại 9 chân 
(DB9) hoặc 25 chân (DB25). Tuy hai loại đầu nối này có cùng song song nhưng 
hai loại đầu nối này được phân biệt bởi cổng đực (DB9) và cổng cái (DB25). 
 Ta xét sơ đồ chân cổng Com 9 chân: 
Trên là các kí hiệu chân và hình dạng của cổng DB9 
Chức năng của các chân như sau: 
 + chân 1 : Data Carrier Detect (DCD) : Phát tín hiệu mang dữ liệu. 
 + chân 2: Receive Data (RxD) : Nhận dữ liệu. 
 + chân 3 : Transmit Data (TxD) : Truyền dữ liệu. 
 + chân 4 : Data Termial Ready (DTR) : Đầu cuối dữ liệu sẵn sàng được 
kích hoạt bởi bộ phận khi muốn truyền dữ liệu. 
 + chân 5 : Singal Ground ( SG) : Mass của tín hiệu. 
 + chân 6 : Data Set Ready (DSR) : Dữ liệu sẵn sàng, được kích hoạt bởi 
bộ truyền khi nó sẵn sàng nhận dữ liệu. 
 + chân 7 : Request to Send : yêu cầu gửi, bộ truyền đặt đường này lên 
mức hoạt động khi sẵn sàng truyền dữ liệu. 
 + chân 8 : Clear To Send (CTS) : Xóa để gửi ,bô nhận đặt đường này lên 
mức kích hoạt động để thông báo cho bộ truyền là nó sẵn sàng nhận tín hiệu. 
 + chân 9 : Ring Indicate (RI) : Báo chuông cho biết là bộ nhận đang nhận 
tín hiệu rung chuông. 
 43 
 Còn DB28 bây giờ hầu hết các main mới ra đều không có cổng này nữa. 
Nên tôi không đề cập đến ở đây. 
  Mạch chuẩn giao RS232 dùng IC Max232 
 Max232 là IC chuyên dùng cho giao tiếp giữa RS232 và thiết bị ngoại vi. 
Max232 là IC của hãng Maxim. Đây là IC chay ổn định và được sử dụng phổ 
biến trong các mạch giao tiếp chuẩn RS232. Giá thành của Max232 phù hợp 
(12K hay 10K) và tích hợp trong đó hai kênh truyền cho chuẩn RS232. Dòng 
tín hiệu được thiết kế cho chuẩn RS232 . Mỗi đầu truyền ra và cổng nhận tín 
hiệu đều được bảo vệ chống lại sự phóng tĩnh điện ( hình như là 15KV). Ngoài 
ra Max232 còn được thiết kế với nguồn +5V cung cấp nguồn công suất nhỏ. 
 Mạch giao tiếp như sau : 
Đây là mạch giao tiếp 1 kênh dùng Max232. Còn giao tiếp 2 kênh thì tương tự. 
Mạch này được sử dụng khá nhiều trong chuẩn giao tiếp RS232. 
  Mạch chuẩn giao tiếp RS232 dùng DS275 
 Đây cũng là IC của hãng Maxim. DS275 được dùng trong các mạch giao 
tiếp của chuẩn RS232 nhưng do nó chỉ là bán song công và dùng trong các thiết 
kế công suất nhỏ. 
 44 
Mạch giao tiếp khá đơn giản. Do bán song công nên trong các ứng dụng ít được 
dùng. 
  Mạch chuẩn giao tiếp RS232 dùng transistor 
Mạch sử dụng 2 transistor để giao tiếp RS232. 
3.2. Lập trình điều khiển nối tiếp đơn giản 
/* Chương trình truyền nối tiếp dùng ngôn ngữ C 
 45 
/* Xuất kỳ tự nhận được ra màn hình và đọc ký tự từ bàn phím gởi nối tiếp */ 
#include 
#include 
#include 
#define PORT1 0x3F8 
/* COM 1 0x3F8 */ 
/* COM 2 0x2F8 */ 
/* COM 3 0x3E8 */ 
/* COM 4 0x2E8 */ 
void main (void) 
{ 
int C; 
int ch; 
outportb (PORT1 + 1, 0); /* Cấm ngắt Port 1 */ 
/* Đặt cấu hình PORT 1 */ 
outportb (PORT1 + 3, 0x80); /* SET DLAB ON */ 
outportb (PORT1 + 0, 0x03); /* Set Baud rate - Divisor Latch Low Byte */ 
/* Default 0x03 = 38,400 BPS */ 
/* 0x01 = 115,200 BPS */ 
/* 0x02 = 56,700 BPS */ 
/* 0x06 = 19,200 BPS */ 
/* 0x0C = 9,600 BPS */ 
/* 0x18 = 4,800 BPS */ 
/* 0x30 = 2,400 BPS */ 
outportb (PORT1 + 1 , 0x00); /* Set Baud rate - Divisor Latch Hight Byte */ 
outportb (PORT1 + 3 , 0x03); /* 8 Bits, No Parity, 1 Stop Bit */ 
outportb (PORT1 + 2 , 0xC7); /* FIFO Control Register */ 
outportb (PORT1 + 4 , 0x0B); /* Turn on DTR, RTS, and OUT2 */ 
printf (“\n. Press ESC to quit \n”); 
do { c = inportb (PORT1 + 5); /* Xem có nhận được ký tự không. */ 
if (c & 1) {ch = inportb (PORT1); 
printf (“%c” ch);} /* Xuất ký tự ra màn hình */ 
if (kbhit ()) {ch = getch (); /* Đọc phím bấm */ 
outportb (PORT1, ch);} /* Gởi ký tự */ 
} while (ch != 27); 
} 
/* Chương trình giao tiếp nối tiếp dùng ngắt*/ 
#include 
#include 
#include 
#define PORT1 0x2E8 
#define INTVECT 0x08 /* Com Port’s IRQ here */ 
 46 
int bufferin = 0; 
int bufferout = 0; 
char ch; 
char buffer [1025]; 
void interrupt (*oldport1isr) (); 
void interrupt PORT1INTO () /* Interrupt Service Routine (IRS) for PORT 1 */ 
{ 
int c; 
do {c = inportb (PORT1 + 5); 
if (c & 1) {buffer [bufferin] = inportb (PORT1); 
bufferin++; 
if (bufferin == 1024) bufferin = 0;} 
} while (c & 1); 
outportb (0x20, 0x20); 
} 
void main (void) 
{ 
int c; 
outportb (PORT1 + 1 , 0); 
oldport1isr = getvect (INTVECT); /* cất vectơ ngắt cũ */ 
setvect (INTVECT, PORT1INT); /* đặt vectơ ngắt mới */ 
/* COM 1 - 0x0C */ 
/* COM 2 - 0x0B */ 
/* COM 3 - 0x0C */ 
/* COM 4 - 0x0B */ 
outportb (PORT1 + 3 , 0x80); /* SET DLAB ON */ 
outportb (PORT1 + 0 , 0x03); /* Set Baud rate - Divisor Latch Low Byte */ 
/* Default 0x03 = 38,400 BPS */ 
/* 0x01 = 115,200 BPS */ 
/* 0x20 = 56,700 BPS */ 
/* 0x06 = 19,200 BPS */ 
/* 0x0C = 9,600 BPS */ 
/* 0x18 = 4,800 BPS */ 
/* 0x30 = 2,400 BPS */ 
outportb (PORT1 + 1, 0x00); /* Set Baud rate - Divisor Latch Hight Byte */ 
outportb (PORT1 + 3, 0x03); /* 8 Bits, No Parity, 1 Stop Bit */ 
outportb (PORT1 + 2, 0xC7); /* FIFO Control Register */ 
outportb (PORT1 + 4, 0x0B); /* Turn on DTR, RTS, and OUT2 */ 
outportb (0x21, (inportb (0x21) & 0xF7)); /* Set Programmable Interrupt 
Controller */ 
/* COM 1 (IRQ4) - 0xEF */ 
/* COM 2 (IRQ3) - 0xF7 */ 
/* COM 3 (IRQ4) - 0xEF */ 
 47 
/* COM 4 (IRQ3) - 0xF7 */ 
outportb (PORT1 + 1 , 0x01); /* Ngắt khi thu */ 
printf (“\n Press ESC to quit \n”); 
do { 
if (bufferin ! == bufferout) {ch = buffer [bufferout]; 
bufferout++; 
if (bufferout == 1024) bufferout = 0; 
printf (“%C”, ch);} 
if (kbhit ()) {c = getch (); 
outportb (PORT 1, c);} 
} while (c ! = 27); 
outportb (PORT 1 + 1 , 0); /* Turn off interrupts - Port 1 */ 
outportb (0x21, (inportb (0x21)  0x08)); /*MASK IRQ using PIC */ 
/* COM 1 (IRQ4) - 0x10 */ 
/* COM 2 (IRQ3) - 0x08 */ 
/* COM 3 (IRQ4) - 0x10 */ 
/* COM 4 (IRQ3) - 0x08 */ 
setvect (INTVECT, oldport 1 isr); /* hồi phục vectơ ngắt cũ */ 
} 
3.3. Giới thiệu mạch chuyển AD qua cổng nối tiếp 
 Chuyển đổi AD dùng cổng nối tiếp 9600, 8, E, 1 
 Chương trình sau viết bằng ngôn ngữ C minh họa hoạt động của mạch. 
 48 
/* Chương trình đổi AD nối tiếp */ 
#include 
#include 
#include 
#define PORT1 0x3F8 
#define INTVECT 0x0C 
int bufferin = 0; 
int bufferout = 0; 
unsigned char ch; 
char buffer [1025]; 
void interrupt (*oldport1isr) (); 
void interrupt PORT1INT /*IRS cho PORT1 */ 
{ 
int c; 
do {c = inportb(PORT1 +5); 
if (c & 1) {buffer[bufferin] = inportb(PORT1); 
bufferin++; 
if (bufferin == 1024) {bufferin = 0;}} 
} while (c & 1); 
outportb (0x10, 0x20); 
} 
void main (void) 
{ 
int c; 
outportb (PORT1 + 1, 0); /* Cấm ngắt port 1 */ 
oldport1isr = getvect (INTVECT); 
setvect (INTVECT, PORT1INT); 
/*PORT 1 - Đặt chế độ*/ 
outportb (PORT1 + 3, 0x80); /* SET DLAB ON */ 
outportb (PORT1 + 0, 0x0C); /* đặt Baud rate 9600 BPS */ 
outportb (PORT1 + 1, 0x00); 
outportb (PORT1 + 3, 0x03); /* 8 bits, No Parity, 1 Stop Bit */ 
outportb (PORT1 + 2, 0xC7); /*FIFO Control Register*/ 
outportb (PORT1 + 4, 0x0B); /*Cho DTR, RTS, và OUT2 ON*/ 
outportb (0x21, (inportb (0x21) & 0xEF); 
outportb (PORT1 + 1, 0x01); /* Interrupt khi nhận data */ 
printf (“\n\chương trình đổi ADC nối tiếp. Nhấn ESC để thoát \n”); 
do { 
if (bufferin ! == bufferout) {ch = buffer[bufferout]; 
bufferout++; 
if (bufferout == 1024) {bufferout = 0;} 
print(“%u\n”, ch); 
printf(“%f volts\n”, (float) ch/256*5);} 
 49 
if (kbhit () {c = getch(); 
outportb(PORT1, c);} 
} while (c != 27); 
outportb (PORT1 + 1, 0); 
outportb (0x21, (inportb (0x21)  0x20)); 
setvect (INTVECT, oldport1isr); 
} 
 50 
 TÀI LIỆU THAM KHẢO 
- TS Nguyễn Đức Thành. Đo lường và Điều khiển bằng máy tính. NXB: ĐH 
 HCM. Năm 2006 
- Ngô Diên Tập. Đo lường và Điều khiển bằng Máy tính. NXB : Khoa học và 
 Kỹ Thuật Hà Nội. 

File đính kèm:

  • pdfgiao_trinh_do_luong_va_dieu_khien_bang_may_tinh.pdf