MỤC LỤC
PHẦN A : LÝ THUYẾT LIÊN QUAN
CHƯƠNG I : GIỚI THIỆU VĐK 89C51 7
CHƯƠNG II : GIỚI THIỆU GIAO TIẾP NỐI TIẾP 12
CHƯƠNG III : VB VỚI TRUYỀN THÔNG NỐI TIẾP 15
PHẦN B : THỰC HIỆN MÔ HÌNH
CHƯƠNG I : MẠCH CẢM BIẾN HỒNG NGOẠI 23
CHƯƠNG II : GIAO TIẾP MÁY TÍNH 26
2.1 GIAO DIỆN VB 26
2.2 LƯU ĐỒ GIẢI THUẬT 27
2.3 CHƯƠNG TRÌNH VB 28
40 trang |
Chia sẻ: lethao | Lượt xem: 1717 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Hệ thống giám sát và điều khiển các thiết bị trong phòng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TPHCM
KHOA CÔNG NGHỆ ĐIỆN TỬ
ĐỀ TÀI:
GVHD : Th.S TRẦN NGUYÊN BẢO TRÂN
SVTH : DƯƠNG LÊ KÔNG ĐẠT
LỚP : ĐHĐT1A_LT
TP.HCM 12/2007
LỜI MỞ ĐẦU
---o0o---
Hòa nhịp vào sự phát triển chung của xã hội, ngành điện tử cũng không nằm ngoài qui luật phát triển chung đó. Ngoài những sản phẩm phục vụ cho nhu cầu đời sống, ngành điện tử đã và đang có những bước tiến trong ứng dụng thay thế hoạt động con người.
Lấy ý tưởng đó, em đã suy nghĩ ra một ứng dụng thực tế trong việc quản lí khách sạn. Bằng những kiến thức đã học, em đã thiết kế ra một hệ thống điều khiển và giám sát phòng trong khách sạn. Đề tài của em sử dụng VĐK 89C51 giao tiếp với máy tính thông qua Visual Basic để điều khiển các đèn, quạt trong phòng, cùng hệ thống cảm biến hồng ngoại để giám sát được số người trong phòng đó.
Tuy nhiên, do sự hạn chế về nhiều mặt nên đề tài chỉ dừng lại ở mức độ đơn giản nhất. Em rất mong nhận được sự đóng góp và hướng dẫn thêm của Quý thầy cô để đề tài này hoàn thiện hơn.
LỜI CẢM ƠN
---o0o---
“ Không thầy đố mày làm nên” , đó là một câu tục ngữ đã được truyền tụng từ đời này sang đời khác mà không ai có thể quên được. Thật vậy, qua hơn bốn năm học ở trường, nhờ sự tận tình dạy bảo của Quý thầy cô đã giúp em tích lũy được những kiến thức quí báu cho bản thân mình. Nhờ những kiến thức đó mà em đãa thể hiện được ý tưởng của mình ở đồ án này. Hơn thế nữa, với sự hướng dẫn tận tình của thầy TRẦN NGUYÊN BẢO TRÂN đã giúp em dễ dàng hơn trong việc thực hiện đồ án. Một lần nữa, em xin bày tỏ lòng biết ơn sâu sắc đến Quý thầy cô trong khoa, đặc biệt là giáo viên hướng dẫn trực tiếp đã giúp em hoàn thành tốt đồ án này.
Em xin chân thành cản ơn!
Nhận xét của giáo viên hướng dẫn
Ngày …… tháng …… năm 2011
Giáo Viên Hướng Dẫn
Nhận xét của giáo viên phản biện
Ngày …… tháng …… năm 2011
Giáo Viên Phản Biện
MỤC LỤC
---o0o---
PHẦN A : LÝ THUYẾT LIÊN QUAN
CHƯƠNG I : GIỚI THIỆU VĐK 89C51 7
CHƯƠNG II : GIỚI THIỆU GIAO TIẾP NỐI TIẾP 12
CHƯƠNG III : VB VỚI TRUYỀN THÔNG NỐI TIẾP 15
PHẦN B : THỰC HIỆN MÔ HÌNH
CHƯƠNG I : MẠCH CẢM BIẾN HỒNG NGOẠI 23
CHƯƠNG II : GIAO TIẾP MÁY TÍNH 26
2.1 GIAO DIỆN VB 26
2.2 LƯU ĐỒ GIẢI THUẬT 27
2.3 CHƯƠNG TRÌNH VB 28
2.4 CHƯƠNG TRÌNH VI XỬ LÝ 34
NỘI DUNG
PHẦN A :
LÝ THUYẾT LIÊN QUAN
Chương 1 : Giới thiệu VĐK 89C51
1.1 Giới thiệu:
Bộ vi điều khiển viết tắt là Micro-Controller, là mạch tích hợp trên một chip có thể lập trình được, dùng để điều khiển hoạt động của một thiết bị, hệ thống … Theo các tập lệnh của người lập trình, VĐK có thể đọc, lưu trử, xử lí thông tin…
Năm 1976 công ty INTEL đã cho ra đời bộ VĐK đơn chip đầu tiên với tên gọi 8084 và đến năm 1980 thế hệ thứ hai ra đời , đó là 8051. Và sau đó, hàng loạt các VĐK cùng loại với 8051 ra đời, hình thành họ VĐK MCS-51 như: 8031, 8032,8751, 8752, 8951, 8952…
1.2 Khảo sát bộ VĐK 89C51:
IC vi điều khiển 89C51 thuộc họ MCS-51 có các đặc điểm sau:
Bộ nhớ chương trình bên trong: 4 KB (ROM)
Bộ nhớ dữ liệu bên trong: 128 byte (RAM)
Bộ nhớ chương trình bên ngoài: 64 KB (ROM)
Bộ nhớ dữ liệu bên ngoài: 64 KB (RAM)
4 port IO 8 bit
2 bộ định thời 16 bit
Giao tiếp nối tiếp
Bộ xử lí bit (thao tác trên các bit riêng lẻ)
210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit
Nhân / chia trong 4 us
1.2.1 Cấu trúc bên trong của 89C51:
TXD* RXD*
T1*
T2*
P0 P1 P2 P3
INT\*1
INT\*0
TIMER2
TIMER1
PORTnối tiếp
EA\ RST PSEN ALE
Các thanh ghi khác
128 byte Ram
Rom
4K-8051
OK-8031
Timer1
Timer2
Điều khiển ngắt
Bus ĐK
CCPU
Port nt
Các port IO
Oscilator
CPU
Hình 1.1: Sơ đồ khối của 89C51
1.2.2 Sơ đồ chân của 89C51
18
19
12MHz
40
29
30
31
9
17
16
15
14
13
12
11
10
RD\WR\
T1
T0
INT1
INT0
TXD
RXD
A15
A14
A13
A12
A11
A10
A9
A8
28
27
26
25
24
23
22
21
8
7
6
5
4
3
2
1
32
33
34
35
36
37
38
39
Po.7
Po.6
Po.5
Po.4
Po.3
Po.2
Po.1
Po.0
AD7
AD6
AD5
AD4
AD3
AD2
AD1
AD0
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
PSEN\
ALE
EA\
RET
Vcc
20
Vss
30p
30p
XTAL1
XTAL2
Hình 1.2 : Sơ dồ chân của 89C51
Port 0 : từ chân 32 đến 39, trong những thiết kế nhỏ nó có 2 chức năng như các đường IO, trong những thiết kế lớn (với bộ nhớ mở rộng) nó được kết hợp kênh giữa các bus.
Port 1 : từ chân 1 đến chân 8, dùng giao tiếp với các thiết bị bên ngoài.
Port 2 : từ chân 21 đến 28, được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhó mở rộng.
Port 3 : từ chân 10 đến 17, các chân của port này có nhiều chức năng, các công dụng chuyển đổi được mô tả ở bảng sau:
Bit
Tên
Chức năng chuyển đổi
P3.0
RXD
Dữ liệu nhận cho port nối tiếp
P3.1
TXD
Dữ liệu phát cho port nối tiếp
P3.2
INTO
Ngắt 0 bên ngoài
P3.3
INT1
Ngắt 1 bên ngoài
P3.4
TO
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
Chân EA\ : truy xuất ngoài, chân số 31.
Chức năng :
Là tín hiệu cho phép truy xuất bộ nhớ chương trình (ROM) ngoài
Là tín hiệu nhập, tích cực mức thấp.
EA\ = 0 : Chip 8951 sử dụng chương trình ROM ngoài.
EA\ = 1 : Chip 8951 sử dụng chương trình ROM trong.
Chân PSEN\ : cho phép bộ nhớ chương trình, chân số 29
Chức năng :
- Là tín hiệu cho phép truy xuất bộ nhớ chương trình (ROM) ngoài.
- Là tín hiệu xuất, tích cực mức thấp.
PSEN\ = 0 : trong thời gian CPU tìm nạp lệnh từ ROM ngoài.
PSEN\ = 1 : CPU sử dụng ROM trong.
Chân ALE: cho phép chốt địa chỉ, chân số 30
Chức năng:
Là tín hiệu cho phép chốt địa chỉ để thực hiện giải đa hơp cho bus địa chỉ byte thấp và dữ liệu đa hợp( AD0 – AD7)
Là tín hiệu xuất, tích cực mức cao.
ALE = 0 : trong thời gian bus AD0 – AD7 đóng vai trò là bus D0 – D7.
ALE = 1 : trong thời gian bus AD0 – AD7 đóng vai trò là bus A0 – A7
Khi lập trình cho ROM trong chip thì chân ALE đóng vai trò là ngõ vào của xung lập trình.
Chân XTAL1, XTAL2: tinh thể thạch anh, chân 18-19
Chức năng :
Dùng để nối với thạch anh hoặc mạch dao động tạo xung clock bên ngoài, cung cấp tín hiệu xung clock cho chip hoạt động.
XTAL1: ngõ vào mạch tạo xung clock trong chip
XTAL2: ngõ ra mạch tạo xung clock trong chip
Chân RST : ngõ vào reset, chân số 19
Khi nó ở mức cao, (trong khoảng ít nhất 2 chu kì máy) các thanh ghi nội được nạp với giá trị tương ứng theo thứ tự khởi động hệ thống.
Nuồn cung cấp:
8951 sử dụng nguồn đơn 5V, Vcc được nối vào chân 40, Vss nối vào chân 20 .
Chương 2:
Giới Thiệu Giao Tiếp Nối Tiếp
2.1 Lập trình qua cổng COM:
Windows
VB
Delphi
VC
Matlad
Keil C
Dos
Pascal
Qbasic
Mrbol
2.2 Cấu trúc cổng COM:
25 Chân
9 Chân
Lối
Vào/Ra
Tên gọi
Chức năng
1
-
-
FG,Frame Ground
Đất vỏ máy
2
3
Out
TxD, Transmit Data
Truyền dữ liệu
3
2
In
RxD ,Receive Data
Nhận dữ liệu
4
7
Out
RTS,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
5
8
In
CTS,Clear to Send
Xoá để gởi ;bộ nhận đặt đường này lên mức hoạt động để thông báo cho bộ truyền là nó sẵn sàng nhận dữ liệu
6
6
In
DSR, Data Set Ready
Dữ liệu sẵn sàng ;tính hoạt động giống với CTS nhưng được kích hoạt bởi bộ truyền khi nó sẵn sàng nhận dữ liệu
7
5
-
SG, Signal Ground
Đất của tín hiệu
8
1
In
DCD, Data Carrier Detect
Phát hiện tín hiệu mang dữ liệu
20
4
Out
DTR, Data Terminal Ready
Đầu cuối dữ liệu sẵn sàng ; tính hoạt động giống với RTS nhưng được kích hoạt bởi bộ nhận khi muốn truyền dữ liệu
22
9
In
RI , Ring Indicate
Báo chuông , cho biết là bộ nhận đang nhận tín hiệu rung chuông
Chương 3:
VB Với Truyền Thông Nối Tiếp
Để xuất dữ liệu từ máy tính xuống cổng Com thì ta phải sử dụng chương trình để làm điều đó. Ở đây ta sử dụng chương trình VB để thực hiện, VB thực hiện công việc này qua một công cụ được lấy bằng :
Project ] Component ( Ctrl-T)
Hình 3.1 –
Phụ thêm thành phần Microsoft Comm vào Visual Basic 4.0/5.0 và 6.0
Hình 3.2 Toolbox chỉ ra các thành phần Comm
3.1 Các đặc tính:
Thành phần Comm được bổ sung vào biểu mẫu (form) bất cứ lúc nào cần đến việc truyền thông nối tiếp. Theo mặc định thì cổng thứ nhất tạo ra đối tượng có tên MSComm1, đối tượng ứng với cổng thứ 2 được gọi là MSComm2, v.v…Các đặc tính chính của đối tượng là: CommPort, DTREable, InputLen, Inputmode, OutBuffersize, ParityReplace, Rthreshold, RTSEnable, Settings (thiết lập thông số) …
Các đặc tính điều khiển truyền thông :
Các đặc tính
Sự mô tả
Commport
Đặt và trả lại số cổng truyền thông
Input (nhập vào )
Trả lại và loại bỏ ký tự khỏi bộ đệm
Output ( xuất ra )
Viết 1 xâu ký tự với bộ đệm truyền
PortOpen
Mở đóng 1 cổng ( tuỳ thuộc vào thông số )
Settings
Đặt và trả lại các tham số truyền thông như : tốc độ truyền , truyền theo bit, chẵn lẻ , số các bit dữ liệu v.v…
3.1.1 Đặc tính Settings:
Các đặc tính Settings đặt và trả lại các thông số truyền thông cho cổng RS232, như tốc độ baud , chẵn lẻ , số bit dữ liệu và các bit dừng.
Cú pháp của câu lệnh là :
[form.]MSComm.Setting [=param.String$]
Nếu paramString không có khi mở cổng thì điều khiển truyền thông phát sinh lỗi 380
Paramstring là một xâu chứa bốn thông số thiết lập cho cổng RS_232 và có dạng như sau : “BB,P,D,S”
Ở đây BBBB xác định tốc độ baud, P là bit chỉ tính chẵn lẻ. D là số bit dữ liệu, S là số bit dừng (bit stop). Giá trị mặc định của paramString là : “9600,N,8,1 “
Bảng sau đây liệt kê các giá trị baud hợp lệ :
Thông số baud
-110 -9600 -188000
-300 -14400 -256000
-600 -19200
-1200 -38400
-2400 -56000
Bẳng sau đây mô tả các giá trị chẵn lẻ hợp lệ :
Giá trị
Mô tả
E
M
N
O
S
Even ( chẵn )
Mark ( dấu)
None ( không kiểm tra chẳn lẻ_ mặc định)
Odd ( lẻ )
Space ( trống )
Bảng liệt kê số bit dữ liệu hợp lệ trong một lần truyền (khung truyền)
Giá trị
4
5
6
7
8
Bảng liệt kê số bit stop hợp lệ :
Giá trị
1
1.5
2
3.1.2 Đặc tính CommPort:
Đặc tính này đặt và trả lại số cổng truyền thông .
Cú pháp của câu lệnh là :
[form.]MSComm.CommPort[=port number%]
Trong khi thiết kế ta có thể đặt PortNumber bằng 1 giá trị nằm trong khoảng từ 1 đến 99 (giá trị mặc định là 1). Trước khi dùng lệnh này phải thiết lập cổng bằng Commport. Nếu dùng đặc tính PortOpen trước khi thiết lập cổng bằng CommPort thì điều khiển truyền thông sẽ phát sinh lỗi 68 (lỗi chưa có thiết bị hoặc cổng không tồn tại).
3.1.3 Đặc tính PortOpen:
Đặc tính PortOpen đặt và trả lại trạng thái của cổng truyền thông (đóng hoặc mở) . Đặc tính này không có trong thời gian thiết kế chương trình .
Cú pháp của câu lệnh là :
[form.]MSComm.PortOpen [={True/False}]
Thông số thiết lập là True để mở cổng, còn False là đóng cổng và xoá nội dung các bộ đệm truyền và nhận (tác động này tự động xảy ra khi ứng dụng được đóng).
Trước khi sử dụng đặc tính này phải đặt số cổng bằng đặc tính Comport , nếu ta quên đi đặc điểm này thì sẽ phát sinh lỗi 68.
3.1.4 Nhập dữ liệu :
Ba đặc tính chính được sử dụng để đọc dữ liệu từ bộ đệm nhận Input , InputBufferCount và InputBufferSize.
a) InPut ( Nhập vào)
Đặc tính Input trả và xoá bỏ một sâu ký tự từ bộ đệm nhưng trạng thái này không có trong [form]MSComm.Input
Đặc tính Inputlen quy định số kí tự được đọc bởi câu lệnh input, xác định số các kí tự trong bộ dếm đăc tính, InBufferCount được kiểm tra. Đặt InputLen là 0 là để đọc toàn bộ nội dung của bộ đệm nhận .
b) InBufferSize
Đặc tính InBufferSize đặt và trả lại kích thước bộ đệm nhân , tính theo byte. Cú pháp của câu lệnh là :
[form.] MSComm. InBufferSize [= numbyte%]
Đặc tính này có liên quan đến kích thước bộ đệm nhận. Giá trị mặc định là 1024 byte. Kích thước của bộ đệm phải được đặt sao cho có thể cất giữ được số lượng lớn nhất của các kí tự sẽ được nhận trước khi chương trình ứng dụng co thể đọc chúng từ bộ đệm trừ khi ta làm vịêc ở chế độ bắt tay( hand shaking). Kiểu dữ liệu của đặc tính này là số nguyên( integer).
c) InBufferCount
Đặc tính InBufferCuont trả lại số kí tự trong bộ đệm nhận. Nò cũng có thể được sử dụng để xóa bộ đệm bằng cách đặt số của các kí tự bằng 0. Dặc tính này không có trong thời gian thiết kế chương trình. Cú pháp của câu lệnh là:
[form.] MSComm. InBufferCount [=count%]
Ta có thể xóa bộ đệm nhận bằng cách đặt đặc tính InBufferCount=0 .Kiểu dử liệu của của đặc tính này là số nguyên (integer).
3.1.5 Xuất dữ liệu :
Có ba đặc tính chính được sử dụng để viết dữ liệu vào bộ đệm truyền là Output, OutBufferCount, OutBufferSize.
a) Output
Đặc tính Output sẽ viết 1 xâu kí tự vào bộ đệm truyền, đặc tính này không có trong thời gian thiết kế chương trình.
Cú pháp của câu lệnh này là :
[form.] MSComm. Output [=outstring$]
b) OutBufferSize
Đặc tính OutBufferSize đặt và trả lại kích thước của các lí tự trong bộ đệm truyền.
Cú pháp :
[form.] MSComm. OutBufferSize [=Numbyte%]
Giá trị mặc định của đặc tính này là 512 byte.
Chú ý :
Không được nhầm lẫn giữa 2 đặc tính OutBufferCount và OutBufferSize với nhau. Đặc tính OutBufferCount nói lên số byte hiện đang có trong bộ đệm truyền, còn OutBufferSize qui định tổng kích thước của bộ đệm truyền.
Không để kích thước bộ đệm truyền quá lớn . Tuy nhiên nếu để quá nhỏ thì xảy ra tình trạng tràn dữ liệu ( trừ khi làm việc ở chế độ bắt tay). Thông thường nên bắt đầu với kích thước bộ đệm truyền là 512 byte. Nếu lỗi tràn xảy thì phải tăng kích thước bộ đệm cho thích hợp với ứng dụng hiện tại.
c) OutBufferCount
Đặc tính OutBufferCount trả lại số kí tự trong bộ đệm truyền. Nhờ đặc tính này ta có thể xóa nội dung bộ đệm truyền bằng cách đặt giá trị của OutBufferCount=0 .
Cú pháp :
[form.] MSComm. OutBufferCount [=0]
3.1.6 Các đặc tính khác :
a) CommEvent
Đặc tính này trả lại hầu hết sự kiện hoặc lỗi truyền thông gần nhất.
Cú pháp của câu lệnh là :
[form.] MSComm.Event
Mặc dù sự kiện OnComm phát sinh ra lỗi truyền thông và các sự kiện nhưng đặc tính này lại chứa mã số của các lỗi và sự kiện đó.
Các sự kiện truyền thông :
Đặt
Giá trị
Sự mô tả
ComEvSend
1
Ký tự đã được gởi
ComEvReceive
2
Ký tự đã được nhận
ComEvCTS
3
Sự thay đổi trên đường dẫn CTS
ComEvDSR
4
Sự thay đổi trên đường dẫn DSR từ một mức cao sang thấp
ComEvCD
5
Sự thay đổi trên đường dẫn CD
ComEvRing
6
tiếng chuông được phát hiện
ComEvEOF
7
EOF ký tự nhận
b) Inputlen
Đặt và trả lại số kí tự mà đặc tính Input đọc được từ bộ đệm nhận. Giá trị mặc định của dặc tính này bằng 0 . Đặt Inputlen = 0 để điều khiểntruyền thông đọc hết nội dung bộ đệm nhận.
Cú pháp :
[form.] MSComm. Inputlen [=numchars%]
Đặc tính này rất có ích khi đọc dữ liệu từ các máy có lối ra bị cố dịnh về chiều dài khối dữ liệu.
c) Hàm Cominput
Trả lại và xóa xâu kí tự ở bộ đệm nhận.
Cú pháp :
Cominput (ByVal hwnd As Integer, LpData As Any, ByVal do Data As Integer) As Integer
Hàm này tương tự như đặc tính Input nhưng trả lại số byte nhận được.
d) Hàm Comoutput
Viết 1 xâu kí tự vào bộ đệm truyền.
Cú pháp :
Comoutput (ByVal hwnd As Integer ,LpData As Any, ByVal do As Integer) As Integer
Hàm này tương tự như đặc tính output nhưng trả lại số byte kí tự được gửi đi
3.1.7 Sư kiện OnComm:
Sự kiện OnCom được phát sinh vào bất cứ khi nào giá trị của đặc tính CommEvent thay đổi.
Sự kiện :
Private Sub MsComm_OnComm()
Đặc tính CommEvent chứa mã số của lỗi hay sự kiện phát sinh bởi sự kiện OnComm. Nên đặt các đặc tính Rthreshold hoặc Streshold bằng 0 để vô hiệu bẫy sự kiện Receive and Send.
PHẦN B :
Thực Hiện Mô Hình
Chương 1 : Mạch cảm biến hồng ngoại
Sơ đồ nguyên lý:
Q6
Q5
Q4
Q2
Q3
Q1
XVL
XVL
Giới thiệu linh kiện :
a ) IC 555 :
IC 555 là một IC rất đa năng, có nhiều công dụng trong thực tiễn. IC 555 dùng làm bộ định thời(Timer), bi65 tạo xung (Pulse Generator), tầng so áp (Comparator)… Sau đây là công dụng các chân:
Chân số 1 (GND)
Cho nối mass để lấy dòng cấp cho IC, dòng điện tử sẽ từ mass chảy vào IC.
Chân số 2 (TRIGGER)
Ngõ vào của một tầng so áp 2.
Chân số 3 (OUTPUT)
Xung ngõ ra.
Chân số 4 (RESET)
Xác lập trạng thái ngõ ra, khi chân số 4 ở mức cao thì ngõ ra mới được tự do và mới có thể lúc lên cao lúc xuống thấp.
Chân số 5 (CONTROL VOLTAGE)
Chân điều khiển, người ta đưa điện áp vào chân này để thực hiện sự điều chế tần số.
Chân số 6 (THRESHOLD)
Ngõ vào của một tầng so áp 1, mức áp chuẩn bằng 2/3 Vcc.
Chân số 7 (DISCHARGE)
Chân xả điện.
Chân số 8 (Vcc)
Chân nguồn, IC 555 có thể làm việc với mức nguồn nuôi từ 3V đến 18V.
b) Led phát hồng ngoại
Vật liệu dùng để chế tạo Led hồng ngoại là GaAs với vùng cấm có độ rộng khoảng 1.43eV tương ứng với bức xạ khoảng 900nm. Led hồng ngoại có hiệu suất lượng tử cao hơn so với led phát ra ánh sáng trông thấy được. Một số thông số kĩ thuật :
Bước sóng : 850 – 900nm
Cường độ bức xạ : 40 – 50 mW/sr
Độ dài xung đến 9.6 Kbaud : 1.41 – 22.13 uS
c) Transistor quang
TST quang có thể coi như một sensor ánh sáng tổ hợp chung với một mạch khuếch đại. Độ khuếch đại của TST quang từ 100 đến 1000. Độ khuếch đại/dòng quang điện không tuyến tính đối với cường độ chiếu sáng khoảng từ 10% đến 20%. TST quang có tần số làm việc cao nhất khoảng vài trăm KHz
Nguyên lý hoạt động :
Khi Led hồng ngoại D1 phát ra ánh sáng sẽ làm TST quan dẫn, Q2 ngưng dẫn, Q3 ngưng dẫn và đầu ra VXL ở mức thấp. Ngược lại, khi chắn ngang ánh sáng của Led phát sẽ làm TST quang ngưng dẫn và ngõ ra VXL ở mức cao. Và tương tự ở kênh còn lại cũng vậy.
Chương 2 :
GIAO TIẾP MÁY TÍNH
2.1 Giao diện VB
2.2 Lưu đồ giải thuật :
yes
START
Sensor1=0?
Sensor2=1?
Set Baud Rate
Enable Interupt
No
Sensor2=0?
Sensor1=1?
Sensor2=1?
SBUF=0XFF
Delay( )
SBUF=0X00
Delay( )
Sensor1=1?
END
yes
yes
No
No
2.3 Chương trình VB
Dim Baud, Com, i, Sele, Inc, Data, j, k, xn As Byte
Dim b As Double
Dim Comsetting, DataIn As String
Dim a As String
Private Sub Combo1_Click()
'If Combo2.Text = "" Then
' If MsgBox("Save all changes?", vbOKOnly) = vbOK Then Combo2.SetFocus
'Else
' Text1.Text = Combo1.Text
' MSComm1.CommPort = Combo1.Text
' Text2.Text = Combo2.Text
' MSComm1.Settings = "9600,E,8,1"
' MSComm1.CommPort = 2
Com = Combo1.Text
Combo1.Enabled = False
Combo2.Enabled = True
'If MsgBox("Please select baud rate ", vbOKOnly) = vbOK Then Combo2.SetFocus
'End If
End Sub
Private Sub Combo2_Click()
On Error GoTo X_Error
Baud = Combo2.Text
' If Timer1.Enabled = True Then Timer1.Enabled = False
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
MSComm1.CommPort = Com
Comsetting = CStr(Baud) & ",N,8,1"
MSComm1.Settings = Comsetting
MSComm1.InputLen = 0 ' Read all buffer on input
MSComm1.InBufferSize = 1024
'MSComm1.RThreshold = 0 ' khong tim kiem ky tu nhan duoc
MSComm1.RThreshold = 1 ' phat hien tung ky tu nhan duoc
MSComm1.InputMode = comInputModeText
MSComm1.OutBufferSize = 1024 ' Read all buffer on input
MSComm1.SThreshold = 0
MSComm1.Handshaking = comNone
' If Timer1.Enabled = False Then Timer1.Enabled = True
If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
Command2.Enabled = True
Command3.Enabled = True
Command4.Enabled = True
Command5.Enabled = True
Timer1.Enabled = True
GoTo KT
X_Error:
If MsgBox("Please select Com Port againt and then select Baud Rate ", vbOKOnly) = vbOK Then
Combo1.Enabled = True
Combo2.Enabled = False
Combo1.SetFocus
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = False
Timer1.Enabled = False
End If
KT:
End Sub
Private Sub Command1_Click()
xn = MsgBox("Do you want to exit ? ", vbOKCancel)
If xn = vbOK Then
Unload Me
End
End Sub
Private Sub Command2_Click()
If Command2.Caption = "OFF" Then
MSComm1.Output = Chr$(1)
Command2.Caption = "ON"
Shape1(0).BackColor = &HFF&
Else
MSComm1.Output = Chr$(5)
Command2.Caption = "OFF"
Shape1(0).BackColor = &HFFFFFF
End If
End Sub
Private Sub Command3_Click()
If Command3.Caption = "OFF" Then
MSComm1.Output = Chr$(2)
Command3.Caption = "ON"
Shape1(1).BackColor = &HFF&
Else
MSComm1.Output = Chr$(6)
Command3.Caption = "OFF"
Shape1(1).BackColor = &HFFFFFF
End If
End Sub
Private Sub Command4_Click()
If Command4.Caption = "OFF" Then
MSComm1.Output = Chr$(3)
Command4.Caption = "ON"
Shape1(2).BackColor = &HFF&
Else
MSComm1.Output = Chr$(7)
Command4.Caption = "OFF"
Shape1(2).BackColor = &HFFFFFF
End If
End Sub
Private Sub Command5_Click()
If Command5.Caption = "OFF" Then
MSComm1.Output = Chr$(4)
Command5.Caption = "ON"
Shape1(3).BackColor = &HFF&
Else
MSComm1.Output = Chr$(8)
Command5.Caption = "OFF"
Shape1(3).BackColor = &HFFFFFF
End If
End Sub
Private Sub Form_Load()
Combo2.Enabled = False
i = 60
Sele = 2
Inc = 0
Command2.Caption = "OFF"
Command3.Caption = "OFF"
Command4.Caption = "OFF"
Command5.Caption = "OFF"
For j = 0 To 3
Shape1(j).BackColor = &HFFFFFF
Next j
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = False
Text2.Text = 0
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
DataIn = MSComm1.Input
Data = Asc(DataIn)
If Data = 255 Then
Inc = Inc + 1
Text2.Text = Inc
End If
If Data = 0 Then
Inc = Inc - 1
Text2.Text = Inc
End If
End Selet
End Sub
Private Sub Timer1_Timer()
If Inc = 0 Then
For k = 0 To 3
Shape1(k).BackColor = &HFFFFFF
Next k
Command2.Caption = "OFF"
Command3.Caption = "OFF"
Command4.Caption = "OFF"
Command5.Caption = "OFF"
MSComm1.Output = Chr$(5)
MSComm1.Output = Chr$(6)
MSComm1.Output = Chr$(7)
MSComm1.Output = Chr$(8)
End If
End Sub
2.4 Chương trình VXL
#include
#include
#define XTAL 11059200
#define baudrate 9600
sbit Led1 = P0^0;
sbit Led2 = P0^1;
sbit Led3 = P0^2;
sbit Led4 = P0^3;
sbit Sensor1 = P2^0;
sbit Sensor2 = P2^1;
/*
* Program Delay
*/
void Delayms(unsigned char mmSecond)
{
unsigned int i;
unsigned char j;
for (j=0;j<=mmSecond;j++)
{
for (i=0;i<1000;i++)
{
}
}
}
void Delays(unsigned char s) // delay 0,1s
{
unsigned char i;
for (i=0;i<s;i++)
{
Delayms(100);
}
}
/*
* Serial Interrupt Service Routine
*/
static void com_isr (void) interrupt 4 using 1
{
unsigned char Data ;
/*----- Received data interrupt. ----------------------------------------*/
if (RI)
{
Data = SBUF;
if (Data==1) Led1 = 0;
if (Data==2) Led2 = 0;
if (Data==3) Led3 = 0;
if (Data==4) Led4 = 0;
if (Data==5) Led1 = 1;
if (Data==6) Led2 = 1;
if ((Data==7)) Led3 = 1;
if ((Data==1)) Led4 = 1;
P1 = SBUF; // read character
RI = 0; // clear interrupt request flag
}
/*------ Transmitted data interrupt. ------------------------------------*/
if (TI != 0)
{
TI = 0; // clear interrupt request flag
}
}
/*
* Function to initialize the serial port and the UART baudrate.
*/
void com_initialize (void)
{
// Configure timer 1 as a baud rate generator
PCON |= 0x80; // 0x80=SMOD: set serial baudrate doubler
TMOD &= 0x0f; // Tung
TMOD |= 0x20; // put timer 1 into MODE 2
TH1 = (unsigned char) (256 - (XTAL / (16L * 12L * baudrate)));
TR1 = 1; // start timer 1
SCON = 0x50; // serial port MODE 1, enable serial receiver
ES = 1; // enable serial interrupts
}
/*
* Main C function that start the interrupt-driven serial I/O.
*/
void main (void)
{
unsigned char j;
EA = 1; /* enable global interrupts */
com_initialize (); /* initialize interrupt driven serial I/O */
P0 = 0xff;
P1 = 0xff;
P2 = 0xff;
j = 0;
while (1)
{
// Input;
if ((Sensor1!=1 ) && (Sensor2!=0))
{
while (Sensor2)
{
}
// Led1=Led1;
SBUF = 0xff;
Delayms(700);
}
// Output;
if ((Sensor1!=0 ) && (Sensor2!=1))
{
while (Sensor1)
{
}
// Led1=Led1;
SBUF = 0x00;
Delayms(700);
}
/* for (j=0;j<=255;j++)
{
SBUF = j;
Delayms(255) ;
}
/*
j++ ;
SBUF = j;
P1=j ;
Delays(1);
Sensor1 =~ Sensor1;
//if (j=255) j=0;
*/
}
}
TÀI LIỆU THAM KHẢO
1. Họ vi điều khiển 8051 Tống Văn On
2. Linh khiện quang điện tử Dương Minh Trí
3. Tự học lập trình Visual Baic 6.0 Đậu Quang Tuấn
4. Lập trình ghép nối máy tính Ngô Diên Tập
Các file đính kèm theo tài liệu này:
- Hệ thống giám sát và điều khiển các thiết bị trong phòng.doc