Bài Tập Lớn ĐKSX Tích Hợp Máy Tính
Chương 1 : Giới thiệu các phần tử sử dụng:
1.1) RS 232:
Cổng nối tiếp RS 232 là giao diện phổ biến rộng rãi nhất. Người dùng máy
tính PC còn gọi cổng này là COM 1, còn COM 2 để tự do cho các ứng dụng
khác. Việc truyền dữ liệu qua cổng RS 232 được tiến hành theo cách nối tiếp,
nghĩa là các bit dữ liệu được gửi đi nối tiếp nhau trên một đường dẫn. Ưu điểm
của cổng nối tiếp là có khả năng truyền được đi xa, ít bị gây nhiễu so với khi sử
dụng cổng song song, và tiết kiệm được dây dẫn.
Ở đây ta xét loại 9 chân, có hình dáng và chức năng như hình dưới.
1.2) MAX 232
Hầu như tất cả các thiết bị số như vi điều khiển đều sử dụng các mức logic
TTL hay CMOS, trong khi điện áp truyền thông RS 232 là -25V đến 25V. Vì
vậy, để kết nối một thiết bị với một kênh RS 232 ta phải thay đổi mức điện áp
của RS 232 trở lại mức từ 0 đến 5V hoặc ngược lại. Bộ chuyển đổi được sử
dụng rộng rãi là MAX-232 (và tương thích với bộ vi xử lý). IC này cũng có hai
Sinh Viên : Phạm Minh Đức 1
Lớp : ĐTĐ49-ĐH2
Bài Tập Lớn ĐKSX Tích Hợp Máy Tính
luồng nhận và hai luồng gửi trên cùng một thiết bị. IC MAX232 có chân 16 với
một điện thế cung cấp 5V. Pin 16 được sử dụng như điện áp đầu vào (FCC),
pin 15 như mặt đất. Pin 8 và 13 được sử dụng như là đầu vào (nhận) RS-232,
trong khi các chân 7 và 14 như đầu ra (gửi) RS232. Cấu hình các chân của IC
MAX232 được thể hiện trong hình:
Ghép nối giữa RS 232 và MAX 232:
Sinh Viên : Phạm Minh Đức 2
Lớp : ĐTĐ49-ĐH2
Bài Tập Lớn ĐKSX Tích Hợp Máy Tính
1.3) Họ VDK 8051
Ghép nối với MAX 232:
Sinh Viên : Phạm Minh Đức 3
Sinh Viên : Phạm Minh Đức 6
Lớp : ĐTĐ49-ĐH2
Bài Tập Lớn ĐKSX Tích Hợp Máy Tính
Chương 2 : Xây dựng modul ghép nối
2.1 Cấu hình phần cứng:
Dựa vào nguyên lý hoạt động các phần tử ta xây dựng được sơ đồ nguyên lý
như sau
Sinh Viên : Phạm Minh Đức 7
Lớp : ĐTĐ49-ĐH2
Bài Tập Lớn ĐKSX Tích Hợp Máy Tính
Sinh Viên : Phạm Minh Đức 8
Lớp : ĐTĐ49-ĐH2
Bài Tập Lớn ĐKSX Tích Hợp Máy
Tính
2.2) Giao diện với người sử dụng:
Code:
Dim hs As Single
Private Sub Kenh1_Click()
MSComm1.Output = Chr(30)
MSComm1.Output = Chr(0)
Timer1.Enabled = True
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False
Timer6.Enabled = False
End Sub
Private Sub Kenh2_Click()
MSComm1.Output = Chr(30)
MSComm1.Output = Chr(1)
Timer6.Enabled = False
End Sub
Private Sub Kenh5_Click()
MSComm1.Output = Chr(30)
MSComm1.Output = Chr(4)
Timer1.Enabled = False
Timer2.Enabled = False
Sinh Viên : Phạm Minh Đức
10
Lớp : ĐTĐ49-ĐH2
Bài Tập Lớn ĐKSX Tích Hợp Máy
Tính
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = True
Timer6.Enabled = False
End Sub
Private Sub Kenh6_Click()
MSComm1.Output = Chr(30)
MSComm1.Output = Chr(5)
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False
Timer6.Enabled = True
End Sub
Private Sub Thoat_Click()
e = MsgBox("Are you sure????", vbYesNo, "EXIT")
If e = vbYes Then End
Private Sub Option3_Click()
MSComm1.Output = Chr(20)
MSComm1.Output = Chr(160)
hs = 2 / 255
End Sub
Private Sub Option4_Click()
MSComm1.Output = Chr(20)
MSComm1.Output = Chr(3)
hs = 1 / 255
End Sub
Private Sub Option5_Click()
MSComm1.Output = Chr(20)
MSComm1.Output = Chr(4)
Sinh Viên : Phạm Minh Đức
12
Lớp : ĐTĐ49-ĐH2
Bài Tập Lớn ĐKSX Tích Hợp Máy
Tính
hs = 0,5 / 255
End Sub
Private Sub Option6_Click()
MSComm1.Output = Chr(20)
MSComm1.Output = Chr(5)
hs = 0,2 / 255
End Sub
Private Sub Timer1_Timer()
MSComm1.Output = Chr(10)
Text1.Text = MSComm1.Input * hs
End Sub
Private Sub Timer2_Timer()
org 30h
main:
mov scon,#01010000b
setb ea
setb es
mov tmod,#21h
mov th1,#-3
setb tr1
SJMP $
ngat:
jb ti,xoa
clr ri
mov a,sbuf
cjne a,#10,kt2
setb p1.3
lcall delay2us
clr p1.3
lap:
jb p1.4,sendpc
sjmp lap
sendpc:
Sinh Viên : Phạm Minh Đức
14
Lớp : ĐTĐ49-ĐH2
Bài Tập Lớn ĐKSX Tích Hợp Máy
Tính
setb p1.5
lcall delay2us
clr p1.5
mov sbuf,p0
15
Lớp : ĐTĐ49-ĐH2
Bài Tập Lớn ĐKSX Tích Hợp Máy
Tính
end
2.3) Giải thích chương trình:
Ta có 6 kênh, ta sử dụng 6 timer để đo tín hiệu 1 kênh liên tục.
Ta quy ước khi truyền tín hiệu là 10 xuống cổng COM, tức là khi VDK nhận
được giá trị là 10 thì nó sẽ phải gửi lên cổng COM 1 giá trị nào đó.
Khi tín hiệu truyền xuống VDK qua cổng COM là 20 có nghĩa là thông báo
chọn dải điện áp đo.
Khi tín hiệu truyền xuống VDK qua cổng COM là 30 có nghĩa là thông báo
chọn kênh đo.
Ta sử dụng 6 kênh từ 0-5.
Nguyên lý hoạt động:
Ở đây ta có 2 đầu đo, một là “đầu đo điện áp cao” (lớn hơn bằng 5V gồm
2 dải điện áp 0-10V; 0-5V) và “đầu đo điện áp thấp” (nhỏ hơn 5V gồm 4 dải
điện áp 0-2V; 0-1V; 0-0,5V ; 0-0,2V). Do vậy trong khi sử dụng, ta cần chú
ý xác định dải điện áp đo rồi sử dụng đầu đo cho phù hợp.
Đầu đo điện áp thấp ta sử dụng qua khuếch đại thuật toán để nâng điện áp
lên chuẩn 5V, phù hợp với ADC 0804. Còn đầu đo điện áp cao ta sử dụng
DAC khuếch đại lập trình được có đảo (Ứng với dải đo 0-10V thì ta gửi
xuống số 8 bit là 40, tương tự với 0-5V là 80 )
Bắt đầu chương trình, mặc định của hệ thống là ta sử dụng kênh 1 với dải
do là 0-10V. Muốn dùng dải đo nào ta click vào dải đo đó, hoặc nếu muốn
thay đổi kênh đo, ta chỉ việc bấm vào nút tương ứng. Khi ta ấn vào 1 kênh
thì timer tương ứng với kênh đó sẽ được kích hoạt (các timer khác dừng hoạt
động), lúc này timer sẽ gửi 1 tín hiệu là 10 xuống VDK qua cổng COM và
chờ nhận tín hiệu từ VDK gửi lên sau đó hiển thị giá trị điện áp đo được ra ô
text tương ứng (với kênh lựa chọn). Khi thay đổi dải đo, thì tại đây, VDK