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

Đo dòng điện và vẽ đồ thị 89s52 +VB

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 (746.66 KB, 23 trang )

Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CƠ KHÍ
&
BÁO CÁO ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH
Đề tài: Thiết kế bộ dòng điện và vẽ đồ thị trên máy tính sử dụng
cổng nối tiếp

GIÁO VIÊN HƯỚNG DẪN :
DANH SÁCH THÀNH VIÊN:


LỚP :
1
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

LỜI NÓI ĐẦU
Trong các máy tính thế hệ hiện nay có một số thiết bị ngoài thông dụng như: Màn
hình, bàn phím, chuột, máy in…với các thiết bị ngoài đó máy tính đều có khối ghép nối tương
ứng và chúng được tích hợp luôn trên một bo mạch gọi là main board. Tuy nhiên máy tính
không chỉ dừng lại với thiết bị ngoại vi nói trên mà có những yêu cầu cao hơn, như kết nối với
các máy móc trong công nghiệp…và đã được các nhà sản xuất lưu tâm tới và họ để trống vô
số các con đường có thể ghép nối với bus của máy tính như: RS232, LPT, COM, USB, các
khe PCI …Đây chính là con đường ai muốn nghiên cứu mở rộng phạm vi kết nối của máy
tính kết hợp sử dụng với bộ vi điều khiển có thể lập trình được. Qua nội dung môn học được
nghe thầy giảng dậy và tìm hiểu tài liệu, và trong phạm vi đồ án nhỏ này chúng em thực hiện
việc kết nối với máy tính qua cổng COM với bo mach ngoài, cụ thể là bo mạch ngoài dùng vi
điều khiển để đo và điều khiển nhiệt độ và nhận nhiệt độ khống chế từ máy tính rồi hiển thị
kết quả đo được trên máy tính thông qua cổng COM.
Mục đích của đề tài hướng đến: tạo ra bước đầu cho sinh viên thử nghiệm ứng


dụng vi điều khiển để giao tiếp với máy tính.
Việc thực hiện xong đồ án môn học bằng các kiến thức đã học, một số sách
tham khảo và một số nguồn tài liệu khác nên không tránh khỏi những thiếu sót. Vì vậy nhóm
rất mong được sự góp ý của thầy cô và các bạn.
Chúng em xin trân thành cảm ơn!
2
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

MỤC LỤC

Lời giới thiệu…………………


PHẦN I:
Giới thiệu khái quát
PHẦN II:
Thi công Mạch
A.Thiết kế mạch ghép nối:
Sơ đồ nguyên lý của mạch thiết kế.
Nguyên lý hoạt động của mạch.
B. Thiết kế lập trình:
Lập trình cho vi điều khiển.
Hiển thị máy tính
PHẦN III:
Kết luận
3
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

PHẦN I: GIỚI THIỆU KHÁI QUÁT
I.Giới thiệu về đồ án “Thiết kế bộ dòng điện và vẽ đồ thị trên máy tính sử dụng cổng nối

tiếp”:
Đây là mô hình của ứng dụng xác định dòng điện của thiết bị tiêu thụ có thể được ứng dụng
trong các mô hình thí nghiệm trong các lĩnh vực có liên quan mà yêu cầu độ chính xác không
cao hoặc trong các thiết bị thí nghiệm cho trường học. Trong đồ án chúng em có sử dụng điện
trở công suất để xác định điện áp nhằm xác định dòng điện chạy qua. Sau đó dòng điện sẽ
được gửi lên hiển thị giá tri và vẽ đồ thị trên màn hình máy tính qua cổng nối tiếp sử dụng
phần mềm VB.

II.Ý tưởng và sơ đồ khối:
-Đo điện áp của trở công suất đưa vào ADC.
-Khối biến đổi A/D có nhiệm vụ số hoá tín hiệu ra của cảm biến nhiệt để đưa vào bộ
vi điều khiển.
-MAX232 để chuyển đổi mức logic từ TTL của vi điều khiển phù hợp với RS232 của
máy tính.
Sơ đồ khối của hệ thống được minh hoạ theo hình sau:
VĐK 89S52 Máy tính
Trở công suất
Sơ đồ khối
Dòng điện
ADC0804
MAX232
4
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

Visual basic nhận giá trị điện áp được biến đổi bởi ADC0804 được truyền tới từ 89s52 , rồi
xử lý tính, hiển thị và vẽ giá trị thu được trên màn hình máy tính.
Để tính dòng điện chúng em có sử dụng công thức :
U= IxR ; => I=U/R;
III.Phương hướng thực hiện và nguyên lý hoạt động:
Đầu tiên cho dòng điện chạy qua điện trở công suất, sau đó đo điện áp của trở công suất.

Đưa điện áp vào LM358. LM358 có trở nội rất lớn làm dòng đưa vào ADC0804 nhỏ mà vẫn
giữ nguyên điện áp cần đo. Điện áp(tín hiệu lien tục) đưa vào ADC0804 sẽ biến đổi thanh tín
hiệu số ở dạng nhị phân 8bit. VĐK sẽ đọc giá trị của ADC rồi gửi lên máy tính.

IV.Sơ đồ nguyên lý và nguyên tắc hoạt động của linh kiện:
1. Giới thiệu về 89S52::

1.Port 0 (P0.0 – P0.7)
Port 0 gồm 8 chân, ngoài chức năng xuất nhập, Port 0 còn là bus đa hợp dữ liệu và
địa chỉ (AD0-AD7), chức năng này sẽ được sử dụng khi AT89S52 giao tiếp với thiết bị ngoài
có kiến trúc Bus như địa vị các mạch nhớ, mạch PIO…
2. Port 1 (P1.0 – P1.7)
Đối với họ 8051, chức năng duy nhất của Port 1 là chức năng xuất nhập cũng như các
Port khác, Port 1 có thể xuất nhập theo bit và theo byte.
Riêng dòng 89Sxx, ba chân P1.5, P1.6, P1.7 được dùng để nạp ROM theo chuẩn ISP;
hai chân P1.0 và P1.1 được dùng cho bộ Timer 2.
3. Port 2
5
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

Port 2 ngoài chức năng là cổng vào/ra như port 0 và port 1 còn là byte cao của địa chỉ
khi sử dụng bộ nhớ ngoài.
4. Port 3
Mỗi chân trên Port 3 ngoài chức năng xuất nhập còn có một chức năng riêng cụ thể
như sau:
Bit Tên Chức năng
P3.0 RXD Dữ liệu nhận cho Port nối tiếp
P3.1 TXD Dữ liệu truyền cho Port nối tiếp
P3.2 INT0 Ngắt bên ngoài 0
P3.3 INT1 Ngắt bên ngoài 1

P3.4 T0 Ngõ vào của Timer/counter 0
P3.5 T1 Ngõ vào của Timer/counter 1
P3.6 /WR Xung ghi bộ nhớ dữ liệu ngoài
P3.7 /RD Xung đọc bộ nhớ dữ liệu ngoài
5. Chân /PSEN (program Store Enable )
/PSEN là chân điều khiển đọc chương trình ở bộ nhớ ngoài, nó được nối với chân /OE
để cho phép đọc các byte mã lệnh trên ROM ngoài.
/PSEN sẽ ở mức thấp trong thời gian đọc mã lệnh. Mã lệnh được đọc từ bộ nhớ ngoài
qua bus dữ liệu (port 0) thanh ghi lệnh để được giải mã.
Khi thực hiện chương trình trong ROM nội thì /PSEN ở mức cao.
6. Chân ALE (Address Latch Enable )
ALE là tín hiệu điều khiển chốt địa chỉ có tần số bằng 1/6 tần số dao động của vi điều
khiển. Tín hiệu ALE được dùng để cho phép vi mạch chốt bên ngoài như 74373, 74375 chốt
byte địa chỉ thấp ra khỏi bus đa hợp địa chỉ/dữ liệu ( Port 0 )
7. Chân /EA (External Access )
Tín hiệu /EA cho phép chọn bộ nhớ chương trình là bộ nhớ trong hay ngoài của vi
điều khiển. Nếu /EA ở mức cao (nối với Vcc), thì vi điều khiển thi hành chương trình trong
ROM nội. N ếu /EA ở mức thấp (nối GND) thì vi điều khiển thi hành chương trình từ bộ nhớ
ngoài.
8.RST (Reset)
Ngõ vào RST trên chân 9 là ngõ reset của chíp. Khi tín hiệu này được đưa lên mức cao
(trong ít nhất 2 chu kỳ máy), các thanh ghi trong bộ vi điều khiển được tải những giá trị thích
hợp để khởi động hệ thống.
9.XTAL1, XTAL2
AT89S52 có một bộ dao động trên chíp, nó thường được nối với bộ dao động thạch
anh có tần số lớn nhất là 33MHz, thông thường là 12MHz.
10. Vcc, GND
6
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28


AT89S52 dùng nguồn một chiều có dải điện áp từ 4V đ ến 5,5V được cấp qua chân 40
và 20
11.Chân 40 nối với nguồn nuôi 5V
12.Chân 20 nối Mass.
Về tổ chức bộ nhớ gồm có bộ nhớ chương trình và bộ nhớ dữ liệu. Ngoài ra các thanh
ghi chức năng và chế độ hoạt động được nói rõ trong các tài liệu về vi điều khiển 8051. Ở đây
chỉ nêu khái quát về hình dạng và sơ đồ chân của chíp AT89S52 dùng trong mạch điều khiển
nhiệt độ thôi.
2.Giới thiệu về mạch biến đổi ADC:
Mạch biến đổi A/D có nhiệm vụ biến đổi điện áp tương tự từ cảm biến nhiệt thành tín
hiệu số để gửi đến vi điều khiển. Để lựa chọn sử dụng các vi mạch A/D người ta thường căn
cứ vào 2 thông số chính là:
Độ phân giải hay số bit đầu ra, số bit đầu ra của ADC quyết định đến độ chính xác của
phép biến đổi, số bít càng lớn thì sai số lượng tử càng nhỏ
Tốc độ biến đổi được tính bằng số mẫu hoàn thành trong 1 giây (sample/s), nó tỷ lệ
nghịch với thời gian
Trong ứng dụng điều khiển nhiệt độ, nhiệt độ là 1 biến đổi chậm nên ta chọn vi mạch
A/D thông dụng trên thị trường là ADC0804. ADC0804 là bộ biến đổi A/D 8 bit đủ đáp ứng
được yêu cầu về độ chính xác đặt. ADC0804 có các dặc tính sau:
Đầu ra được đệm bằng các cổng 3 trạng thái nên có thể ghép trực tiếp vào bus dữ liệu
mà không cần mạch đệm dữ liệu ở bên ngoài;
Thời gian biến đổi cỡ 100µs/mẫu;
Không cần hiệu chỉnh điểm 0;
Khi điện áp nguồn nuôi là 5V thì tín hiệu đầu vào cực đại là 5V;
Tất cả các tín hiệu đều tương thích mức TLL;
Dòng tiêu thụ cỡ nhỏ, cỡ 1,9mA.Hình ảnh mô tả ADC0804:
7
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

3.Giới thiệu về Max232:

Bộ vi điều khiển AT89S52 có khả năng giao tiếp với thế giới bên ngoài thông qua cổng nối
tiếp. Vấn đề trở ngại duy nhất khi giao tiếp với máy tính là mức logic ở bộ vi điều khiển và ở cổng
COM của máy tính khác nhau, cụ thể như sau:
SO SÁNH ĐIỆN ÁP CỦA CÁC MỨC LOGIC GIỮA RS232 VÀ TTL
Đối tượng Mức logic Mức điện áp tương ứng
Cổng COM
(RS232)
1 -12V đến -3V
0 +3V đến +12V
Vi điều khiển
(Mức TTL)
1 +5V
0 0V
Khắc phục vấn đề này, người ta sử dụng vi mạch MAX232 để chuyển đổi mức điện áp giữa
hai chuẩn. Vi mạch này có chứa hai bộ chuyển đổi mức logic từ TTL sang RS232 và ngược lại.
Hình ảnh của vi mạch MAX232 như sau:
MAX232 được lắp với cổng COM của máy tính như sau:
8
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

Vi điều khiển AT89S52 được giao tiếp với máy tính thông qua MAX232 như hình vẽ:
4.Cổng Com:
RS232 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à
với 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à 50 – 100 feet ( 12.7
đến 25.4 m), tốc độ 20kBít/s đôi khi là tốc độ 115 k Bít/s với một số thiết bị đặc biệt.

Sơ đồ chân cổng Com :
9
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28


Tín hiệu truyền theo chuẩn RS-232 của EIA (Electronics Industry Associations).
Chuẩn RS-232 quy định mức logic 1 ứng với điện áp từ -3V đến -25V (mark), mức logic 0
ứng với điện áp từ 3V đến 25V (space) và có khả năng cung cấp dòng từ 10 mA đến 20 mA.
Ngoài ra, tất cả các ngõ ra đều có đặc tính chống chập mạch.
Các đặc tính kỹ thuật của chuẩn RS-232 như sau:
Các tốc độ truyền dữ liệu thông dụng trong cổng nối tiếp là: 1200 bps, 4800 bps, 9600 bps và
19200 bps
10
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

5. Điện trở công suất:
Điện trở công xuất : Là các điện trở có công xuất lớn hơn từ 1W, 2W, 5W, 10W.
Khi mắc điện trở vào một đoạn mạch, bản thân điện trở tiêu thụ một công xuất P tính được
theo công thức
P = U x I = I x I x R
Theo công thức trên ta thấy, công xuất tiêu thụ của điện trở phụ thuộc vào dòng điện đi qua
điện trở hoặc phụ thuộc vào điện áp trên hai đầu điện trở.
Công xuất tiêu thụ của điện trở là hoàn toàn tính được trước khi lắp điện trở vào mạch.
Nếu đem một điện trở có công xuất danh định nhỏ hơn công xuất nó sẽ tiêu thụ thì điện trở sẽ
bị cháy.
Nên khi mắc điện trở các pác chú ý đến công suất của điện trở.
Thông thường ta lắp điện trở vào mạch có công xuất danh định > = 2 lần công xuất mà nó sẽ
tiêu thụ.
6.Một số các thuộc tính của MScomm:
MSComm là một điều khiển ActiveX dùng trong truyền thông nối tiếp. Các tính chất của điều
khiển này được dùng để thiết lập giao tiếp với các thiết bị ngoại vi qua cổng RS232.
Điều khiển MSComm trong Visual Basic
Thiết lập tham số cho cổng:
+ CommPort: dạng object.CommPort = value. Value là chỉ số của cổng Com có giá trị từ 1 ‐
> 16 và mặc định có giá trị =1.

+ InBuferSize: thiết lập hoặc trả lại kích thước của bộ đệm nhận, tính = byte. Mặc định là
1024 byte. Khác với đặc tính InBufferCount là số byte đang chờ trong bộ đệm nhận.
+ InputLen : object.InputLen [ = value ] thiết lập hoặc trả lại số byte mỗi lần thuộc tính Input
đọc trong bộ đệm nhận. Mặc định giá trị Value=0 tức là thuộc tính Input sẽ đọc hết nội dung
của bộ đệm nhận khi thuộc tính này được gọi. Nếu số kí tự trong bộ đệm nhận không =
InputLen thì thuộc tính Input sẽ trả lại kí tự rỗng “”.
+ InputMode: object.InputMode [ = value ] .
Value = 0 hay = comInputModeText dữ liệu nhận được dạng văn bản kiểu kí tự theo chuẩn
ANSI. Dữ liệu nhận được sẽ là một sâu. Value=1 hay = comInputModeBinary dùng nhận mọi
kiểu dữ liệu như kí tự điều khiển nhúng, kí tự NULL, Giá trị nhận được từ Input sẽ là một
mảng kiểu Byte.
+ NullDiscard: object.NullDiscard [ = value ] tính chất này quyết định kí tự trống có được
truyền từ cổng đến bộ đệm nhận hay không. Nếu value= True kí tự này không được truyền.
value = false kí tự trống sẽ được truyền. Kí tự trống được định nghía theo chuẩn ASCII là kí
tự 0 – chr$(0).
+ OutBuferSize: giống như InBuferSize, mặc định là 512.
+ ParityReplace: thiết lập và trả lại kí tự thay thế kí tự không đúng trong lỗi giống nhau.
+ PortOpen: thiết lập và trả lại tính trạng của cổng(đóng hoặc mở).
object.PortOpen [ = value ]. value = true cổng mở. value =false cổng đóng và xóa toàn
bộ dữ liệu trong bộ đệm nhận và truyền.
+ RthresHold: object.Rthreshold [ = value ] value kiểu số nguyên. Thiết lập số kí tự nhận
được trước khi gây lên sự kiện comEvReceive. Mặc định = 0 tức là không có sự kiện
11
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

OnComm khi nhận được dữ liệu. Thiết lập = 1 tức là sự kiện OnComm xảy ra khi bất kì kí tự
nào được chuyển đến bộ đệm nhận.
+ Settings: object.Settings [ = value ] thiết lập hoặc trả lại các thông số tần số baud, bít dữ
liệu, bít chẵn lẻ, bít stop.
+ SThreshold: thiết lập và trả lại số kí tự nhỏ nhất được cho phép trong bộ đệm gửi để xảy ra

sự kiện OnComm = comEvSend . Theo mặc định giá trị này = 0 tức là khi truyền sẽ không
gây ra sự kiện OnComm. Nếu thiết lập thông số này =1 thì sự kiện OnComm xảy ra khi bộ
đệm truyền rỗng. Sự kiện OnComm = comEvSend chỉ xảy ra khi mà số kí tự trong bộ đệm
truyền nhỏ hơn hoặc = Sthreshold. Nếu số kí tự trong bộ đệm này luôn lớn hơn Sthreshold thì
sự kiện này không thể xảy ra.
Truyền nhận dữ liệu:
+ CommEvent: trả lại phần lớn sự kiện giao tiếp hoặc có lỗi.
+ InBufferCout: trả lại số kí tự đang có trong bộ đệm nhận Ta có thể xoá bộ đệm nhận bằng
cách đặt thuộc tính này =0 . Không nhầm với thuộc tính InBufferSize là tổng kích thước của
bộ đệm nhận.
+ Input: nhận và xoá dữ liệu trong bộ đệm nhận.
Nếu InputMode là comInputModeText thì giá trị trả về sẽ là một xâu tức có kiểu String , dữ
liệu dạng text trong một biến kiểu Variant. Nếu InputMode = comInputModeBinary thì thuộc
tính này sẽ trả lại dữ liệu dạng nhị phân dưới dạng một mảng kiểu byte trong một biến
Variant.
+ OutBufferCount: trả lại số kí tự trong bộ đệm truyền.
+ Output: ghi dữ liệu vào bộ đệm truyền. có thể truyền kiểu text hoặc kiểu nhị phân. Nếu
truyền bằng kiểu text thì cho một biến Variant = kiểu String, nếu truyền kiểu nhị phân thì cho
cho Output= variant = một mảng kiểu Byte.
Bắt tay( handshaking):
+ Break : thiết lập hoặc xoá tín hiệu. object.Break [ = value] value = true hoặc false. Khi set
value= true thì thông số Break này sẽ gửi một tín hiệu break. Tín hiệu break trì hoàn việc
truyền dữ liệu và đưa đường truyền vào trạng thái break tới khi mà value = false.
+ CDHolding: quết định xem sự truyền này đến đâu bằng cách truy vấn đường CD( Carrier
Detect). Carrier Detect là tín hiệu gửi từ modem tới máy tính kết nối với nó thống báo rằng nó
đang online. Nếu giá trị = true thì nó đường CD đang ở mức cao, nếu = false thì đường dây
này đang ở mức thấp. Tính chất này không có trong lúc thiết kế chỉ có trong khi chạy chương
trình.Carrier Detect được biết như là Receive Line Signal Detect (RLSD).
+ CTSHolding: quết định khi nào bạn gửi dữ liệu bằng cách truy vấn trạng thái đường Clear
To Send (CTS). Thông thường tín hiệu CTS được gửi từ modem tới máy tính kết nối với nó

để báo rằng đang quá trình truyền dữ liệu. Thuộc tính Readonly chỉ xuất hiện khi chạy
chương trình. Đường Clear To Send dùng trong RTS/CTS (Request To Send/Clear To Send)
bắt tay phần cứng. CTSHolding cho bạn một cách để tự tay dò đường Clear To Send nếu bạn
cần biết trạng thái của nó.
+ DSRHolding: biết trạng thái của đường Data Set Ready (DSR). Tín hiệu Data Set Ready
truyền từ modem tới máy tính nối với nó để thông báo rằng modem đã sẵn sàng hoạt động.
Tính chất này dùng khi viết Data Set Ready/Data Terminal Ready handshaking routine cho
máy Data Terminal Equipment (DTE)‐ máy trang bị đầu cuối dữ liệu.
+ DTREnable: tính chất này quyết định khi nào cho phép đường Data Terminal Ready
(DTR) trong truyền thông. Tín hiệu DTR gửi từ máy tính tới modem đẻ báo rằng máy tính sẵn
sàng là nơi nhận dữ liệu. Khi DTREnable = true thì đường Data Terminal Ready set lên cao
khi cổng mở, và thấp khi cổng đóng. Nếu DTREnable = false thì đường đó luôn mức thấp.
Trong phần lớn trường hợp set đường Data Terminal Ready thành thấp để hang up telephone.
+ InBufferCout: trả lại số kí tự đang có trong bộ đệm nhận Bạn có thể xoá bộ đệm nhận bằng
cách đặt thuộc tính này =0 . Không nhầm với thuộc tính InBufferSize là tổng kích thước của
bộ đệm nhận.
+ Input: nhận và xoá dữ liệu trong bộ đệm nhận.
12
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

Nếu InputMode là comInputModeText thì giá trị trả về sẽ là một xâu tức có kiểu String , dữ
liệu dạng text trong một biến kiểu Variant. Nếu InputMode = comInputModeBinary thì thuộc
tính này sẽ trả lại dữ liệu dạng nhị phân dưới dạng một mảng kiểu byte trong một biến
Variant.
+ OutBufferCount: trả lại số kí tự trong bộ đệm truyền.
+ Output: ghi dữ liệu vào bộ đệm truyền. có thể truyền kiểu text hoặc kiểu nhị phân. Nếu
truyền bằng kiểu text thì cho một biến Variant = kiểu String, nếu truyền kiểu nhị phân thì cho
cho Output= variant = một mảng kiểu Byte.
Bắt tay( handshaking):
+ Break : thiết lập hoặc xoá tín hiệu. object.Break [ = value] value = true hoặc false. Khi set

value= true thì thông số Break này sẽ gửi một tín hiệu break. Tín hiệu break trì hoàn việc
truyền dữ liệu và đưa đường truyền vào trạng thái break tới khi mà value = false.
+ CDHolding: quết định xem sự truyền này đến đâu bằng cách truy vấn đường CD( Carrier
Detect). Carrier Detect là tín hiệu gửi từ modem tới máy tính kết nối với nó thống báo rằng nó
đang online. Nếu giá trị = true thì nó đường CD đang ở mức cao, nếu = false thì đường dây
này đang ở mức thấp. Tính chất này không có trong lúc thiết kế chỉ có trong khi chạy chương
trình.Carrier Detect được biết như là Receive Line Signal Detect (RLSD).
+ CTSHolding: quết định khi nào bạn gửi dữ liệu bằng cách truy vấn trạng thái đường Clear
To Send (CTS). Thông thường tín hiệu CTS được gửi từ modem tới máy tính kết nối với nó
để báo rằng đang quá trình truyền dữ liệu. Thuộc tính Readonly chỉ xuất hiện khi chạy
chương trình. Đường Clear To Send dùng trong RTS/CTS (Request To Send/Clear To Send)
bắt tay phần cứng. CTSHolding cho bạn một cách để tự tay dò đường Clear To Send nếu bạn
cần biết trạng thái của nó.
+ DSRHolding: biết trạng thái của đường Data Set Ready (DSR). Tín hiệu Data Set Ready
truyền từ modem tới máy tính nối với nó để thông báo rằng modem đã sẵn sàng hoạt động.
Tính chất này dùng khi viết Data Set Ready/Data Terminal Ready handshaking routine cho
máy Data Terminal Equipment (DTE)‐ máy trang bị đầu cuối dữ liệu.
+ DTREnable: tính chất này quyết định khi nào cho phép đường Data Terminal Ready
(DTR) trong truyền thông. Tín hiệu DTR gửi từ máy tính tới modem đẻ báo rằng máy tính sẵn
sàng là nơi nhận dữ liệu. Khi DTREnable = true thì đường Data Terminal Ready set lên cao
khi cổng mở, và thấp khi cổng đóng. Nếu DTREnable = false thì đường đó luôn mức thấp.
Trong phần lớn trường hợp set đường Data Terminal Ready thành thấp để hang up telephone.
+ Handshaking: thiết lập và trả lại giao thức bắt tay phần cứng. object.Handshaking [ = value
]. Các giá trị của value:
comNone 0 (Mặc định) Không bắt tay
comXOnXOff 1 Bắt tay XON/XOFF
comRTS 2 Bắt tay RTS/CTS (Request To
Send/Clear To Send)
comRTSXOnXOff 3 Dùng cả bắt tay Request To Send and
XON/XOFF

Handshaking chỉ là giao thức truyền thông nội tại quyết định bởi dữ liệu nào được truyền từ
cổng phần cứng tới bộ đệm nhận.
+ RTSEnable: quết định khi nào cho phép đường Request To Send (RTS), Tín hiệu RTS từ
máy tính tới modem để yêu cầu được tryền dữ liệu. Khi RTSEnable = true thì đường RTS
mức cao khi cổng mở, tích mức thấp khi cổng đóng. Và hiển nhiên khi RTSEnable thì đường
RTS luôn mức thấp.
13
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

PHẦN II: THI CÔNG
A. Sơ đồ nguyên lý và sơ đồ mạch in:

1.Sơ đồ nguyên lý:
14
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

2.Sơ đồ mạch in:
15
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

B. Phần lập trình:
1.Phần lập trình trên vi điều khiển:
/*********************** BO TIEN XU LY ************************************/
/*================================================================*/
#include <REGX52.H> //KHAI BAO THU VIEN
#include<stdio.h> //KHAI BAO THU VIEN
#include<math.h> //KHAI BAO THU VIEN TOAN HOC
/******************** KHAI BAO TOAN CUC *********************************/
/*================================================================*/
sbit rd_adc=P3^2; //gan ten bien bang cac chan P2.2

sbit wr_adc=P3^3; //gan ten bien bang cac chan P2.3
sbit intr_adc=P3^4; //gan ten bien bang cac chan P2.4
sbit led=P2^0; //gan ten bien led bang cac chan P2.0
unsigned char adc_gt; //Khai bao bien adc(adc co dang unsigned char)
/************************* HAM TAO TRE **********************************/
/*================================================================*/
void delay(unsigned int t)
{
unsigned int i;
for(i=0;i<t;i++);
}
/******************************* HAM BIEN DOI ADC ***********************/
/*================================================================*/
void adc(void)
{
int t;
wr_adc=1; //câ'm chê' dô chuyen doi ADC
rd_adc=1; //câ'm chê' do doc
delay(10); //tre
wr_adc=0; //cho phep adc luon o che do ghi
16
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

for(t=0;t<=20;t++); //tao tre
while(!intr_adc); //cho co bao tran cua ADC0804
{
rd_adc=0; //doc adc
delay(10); //tre
adc_gt=P1; //lay gia tri tu P1 cho adc
rd_adc=1; //câ'm chê' do doc

}
}
/******************************* HAM MAIN *******************************/
/*================================================================*/
void main(void)
{
unsigned char x;
long int s,s1;
int dem;
SCON=0x52; //Port noi tiep che do 1 Ren=TI=1
TMOD=0x20; //timer 1 che do 2
TH1=TL1=-3; //tao toc do baud 9600
TR1=1; //bat timer
led=1; //led
adc_gt=0; //cho gia tri adc ban dau
do //bat tay voi may tinh
x=_getkey(); //goi ham nhan
while(x!='@'); //cho cho toi khi nao nhan duoc ky tu @
while(1)
{
for(dem=0;dem<200;dem++)
{ adc(); //goi ham adc()
s1=s1+adc_gt; //Cong nhieu lan
}
s=s1/200; //chia lay gia tri trung binh
s1=0; //khoi dong lai cac gia tri
dem=0; //khoi dong lai cac gia tri
delay(10000); //tre
putchar(s); //gui gia tri adc len may tinh
if(adc_gt >=199) //khi gia tri dong la 1 ampe

led= 0; //Bat led bao dung khong van bien tro
else led=1;
};
}
17
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

2.Phần lập trình chương trình cho VB:
a. Giao diện:
18
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

b. Code VB:
Dim n As Integer 'khai bao bien n dang so nguyen
Dim kt As String 'khai bao bien kt dang ky tu
Dim X As String 'khai bao bien kt dang ky tu
Dim temp As Integer 'khai bao bien temp dang so nguyen
Dim ampe As Single 'khai bao bien ampe dang so thuc
Dim x1 As Integer 'khai bao bien x1 dang so nguyen
Dim y1 As Integer 'khai bao bien y1 dang so nguyen
Dim counter1 As Integer 'khai bao bien counter1 dang so nguyen
Dim counter2 As Integer 'khai bao bien counter2 dang so nguyen
Dim array_x1(10000) As Integer 'khai bao mang x1 gom 10000 phan tu dang so nguyen
Dim array_y1(10000) As Integer 'khai bao mang x1 gom 10000 phan tu dang so nguyen
Dim ve As Boolean 'khai bao bien ve dang TRUE or FALSE
'=================================================================='
'=================================================================='
Private Sub Form_Load()
With MSComm1 'Cai dat thuoc tinh cua cong COM
.Settings = "9600,N,8,1" 'Toc do baund 9600,khong ktra chan le,8bit du lieu,1bit stop

.CommPort = 1 'Chi so cua COM
.RThreshold = 1 'Thiet lap su kien cho ONCOM
.SThreshold = 1 'Thiet lap cho su kien ONCOM
.InputLen = 1 'Thiet lap hoac tra lai so byte moi lan thuoc tính Input doc trong
bo dem
End With
x1 = 2170 'gan gtri ban dau x=2170
counter1 = 0 'gan gtri ban dau couter1=0
End Sub
'================================================================'
'================================================================'
Private Sub convert_Click()
If MSComm1.PortOpen = False Then 'Neu cong Com chua mo
MSComm1.PortOpen = True 'Thi mo cong COM
End If
MSComm1.Output = "@" 'Gui ky tu @ xuong VDK thuc hien bat tay
Text1.Text = "" 'Xoa trang text1
Text2.Text = "" 'Xoa trang text2
End Sub
'================================================================'
'================================================================'
19
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

Private Sub vedothi_Click()
ve = True 'Khi nut Ve dc nhan thi cho bien Ve=TRUE
End Sub
'================================================================'
'================================================================'
Private Sub dung_Click()

ve = False 'Khi nut Dung dc nhan thi cho bien Ve=FALSE
End Sub
'================================================================'
'================================================================'
Private Sub thoat_Click()
End 'Khi nut Thoat dc nhan thi ket thuc toan bo
End Sub
'================================================================'
'================================================================'
Private Sub disconvert_Click() 'Disconvert dc nhan
If MSComm1.PortOpen = True Then 'Neu Cong COM mo
MSComm1.PortOpen = False 'Thi se dong Cong COM lai
counter2 = 0 'Xoa bien counter2
End If
Text1.Text = "" 'Xoa text1
Text2.Text = "" 'Xoa text2
ve = False
End Sub
'================================================================'
'================================================================'
Private Sub xoadothi_Click() 'Ham xoa man hinh
Dim i As Integer 'khai bao bien i dang so nguyen
Dim k As Integer 'khai bao bien k dang so nguyen
For i = 0 To 180 'Cho i chay tu 0 den 180
x1 = array_x1(i) 'Lay cho x1 gtri tu mang x1
y1 = array_y1(i) 'Lay cho y1 gtri tu mang y1
Circle (x1, y1), 20, vbWhite 'Ve duong tron mau trang tam(x,1y1),ban kinh 20
Line (x1, y1 + 25)-(x1, 9000), vbWhite 'Ve duong thang mau tang tu diem(x1,y1) toi truc
STEP
Next

counter1 = 0 'gan gtri ban dau x=2170
x1 = 2170 'gan gtri ban dau couter1=0
End Sub
20
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

'================================================================'
'================================================================'
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = 2 Then 'Neu cong COM co su kien thay doi
kt = MSComm1.Input 'gan gtri kt=dau vao cua cong COM
temp = Asc(kt) 'Chuyen ký tu thành mã Ascii
Text1.Text = counter2 'Hien text1 bang so STEP
ampe = Round((temp * 19.6) / 3.3, 2) 'Tinh gtri dong dien va lam tron lay 2 so sau dau
phay
'Dien tro bang 3,3ôm .dien ap tham chieu chan
9=2.5V
'=>Kich thuoc buoc nhay ADC la 19.6mV
Text2.Text = ampe 'Text2 hien gtri dong dien
End If
End Sub
'================================================================'
'================================================================'
Private Sub Timer1_Timer()
Label6.Caption = "Thêi gian: " & Format(Now, "ddd dd-mmm-yyyy hh:nn:ss")
'Lay thoi gian thuc tu may tinh
If ve = True Then 'Neu Nut bam VE duoc nhan
dothi (ampe) 'Thi goi lam ve do thi ra
End If
End Sub

'================================================================'
'================================================================'
Public Sub dothi(t As Single) 'Ham ve do thi
counter1 = counter1 + 1 'Moi lan lay mau ve thi tang len 1 lan
counter2 = counter2 + 1 'Moi lan lay mau ve thi tang len 1 lan
x1 = x1 + 72 'Sau moi lan ve tang len 72 Pixel de tang truc thoi gian
y1 = (9000 - t * (7200 / 1500)) 'Cong thuc lay toa do y,do thang y tu 0-1500
array_x1(counter1) = x1 'Luu toa do x1 vao mang x1
array_y1(counter1) = y1 'Luu toa do x1 vao mang y1
Circle (x1, y1), 20, vbRed 'Ve duong tron mau do,tam(x,1y1),ban kinh 20
Line (x1, y1 + 25)-(x1, 9000), vbBlue 'Ve duong thang mau xanh tu diem(x1,y1) toi truc
STEP
If counter1 >= 180 Then 'Neu Counter1>=180 thi
Call xoa_manhinh 'Thi goi ham xoa man hinh
End If
End Sub
'================================================================'
'================================================================'
Public Sub xoa_manhinh()
21
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

Dim i As Integer 'khai bao bien i dang so nguyen
Dim k As Integer 'khai bao bien k dang so nguyen
k = counter1 'Gan gtri k = counter1
For i = 0 To k 'Cho i chay tu 0 den k
x1 = array_x1(i) 'Lay cho x1 gtri tu mang x1
y1 = array_y1(i) 'Lay cho y1 gtri tu mang y1
Circle (x1, y1), 20, vbWhite 'Ve duong tron mau trang tam(x,1y1),ban kinh 20
Line (x1, y1 + 25)-(x1, 9000), vbWhite 'Ve duong thang mau tang tu diem(x1,y1) toi truc

STEP
Next
counter1 = 0 'gan gtri ban dau couter1=0
x1 = 2170 'gan gtri ban dau x=2170
End Sub
22
Trường ĐHCN Hà Nội – Khoa Cơ Khí Đề tài 28

PHẦN III: KẾT LUẬN
Kết thúc bài, chúng ta nắm bắt được những kiến thức cơ bản về vi điều khiển, kết nối
máy tinh qua cổng Com , chúng ta có được kết qua đo thực tế về nhiệt độ, đưa ra được các
thông số đánh giá về sai số của phép đo.
Bài tập lớn giúp chúng ta hiểu rõ hơn về các linh kiện như ADC,
LM358,89S52………. Ngoài ra còn tích lũy cho chúng ta một số kinh nghiệm về quá trình
làm mạch
Ngoài ra còn tích lũy cho chúng ta một số kinh nghiệm về quá trình làm mạch.
Chúng em chân thành cảm ơn thầy cô đã giúp đỡ chúng em trong quá trình thực hiện
đề tài này. Trong quá trình thi công không tránh được các thiếu sót, mong thầy cô và các bạn
đóng góp ý kiến cho nhóm em!
Tài liệu tham khảo
1. Đề cương thực hành ghép nối máy tính –Vũ Trung Kiên
2. Họ vi điều khiên 8051 – Nguyễn Tăng Cường.
3. Vi điều khiển với lập trình C – Ngô diện tập.
Vi điều khiển cấu trúc lập trình và ứng dụng – Kiều Xuân
23

×