Tải bản đầy đủ (.docx) (34 trang)

Thiết kế hệ thống báo cháy và cứu hỏa tự động cập nhập trạng thái các vùng trên màn hình LCD

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 (401.21 KB, 34 trang )

n n TRƯỜNG ĐẠI HỌC HÀNG HẢI
KHOA ĐIỆN-ĐIỆN TỬ TÀU BIỂN
BÀI TẬP LỚN
MÔN : VI XỬ LÝ
ĐỀ BÀI: 46
Thiết kế hệ thống báo cháy và cứu hỏa tự động cập nhập trạng
thái các vùng trên màn hình LCD
Yêu cầu công nghệ
- Mô hình công nghệ
- Xây dựng mạch phần ứng
- Thuyết minh nguyên lý
- Xây dựng lưu đồ thuật toán
Viết phần mềm điều khiển, thuyết minh cách thức hoạt động.
Giáo viên hướng dẫn : Nguyễn Văn Tiến
Sinh viên : Phùng Công Thành
Mã sinh viên : 36179
Hải phòng, năm 2012
1
ĐỀ CƯƠNG SƠ BỘ
Mục lục
Lời mở đầu
Chương I: Khái quát về vấn đề cần nghiên cứu
1.1. Giới thiệu về hệ thống thu thập ý kiến
Chương II : Xây dựng mạch phần cứng
2.1 Giới thiệu về vi điều khiển AT89C51
2.2. Sơ đồ phần cứng
- Sơ đồ nguyên lý
- Các phần tử trong mạch
- Thuyết minh nguyên lý hoạt động của mạch
Chương III : Thiết kế phần mềm điều khiển
3.1. Lưu đồ thuật toán


3.2. Phần mềm điều khiển
3.3. Kết luận
Tài liệu tham khảo
2
LỜI NÓI ĐẦU
Trong cuộc sống của chúng ta luôn tồn tại những khu vực dễ cháy, nên việc lắp đặt
hệ thống báo cháy có tầm quan trọng hết sức lớn lao. Nó giúp chúng ta phát hiện
nhanh chóng, chữa cháy kịp thời kỳ đầu của vụ cháy đem lại sự bình yên cho mọi
người, bảo vệ tài sản cho nhân dân, nhà máy xưởng sản xuất
Ngày nay, việc phòng cháy chưã cháy trở thành mối quan tâm hàng đầu của nước
ta cũng như nhiều nước trên thế giới. Nó trở thành nghiã vụ của mỗi người dân.
Trên các phương tiện thông tin đại chúng luôn tuyên truyền giáo dục cho mỗi
người dân ý thức phòng cháy chửa cháy, nhằm mục đích hạn chế những vụ cháy
đáng tiếc xảy ra.
Cùng với sự phát triển nhanh chóng của hệ thống thông tin điện thoại thì việc báo
cháy qua điện thoại ngày càng trở nên phổ biến, nó giúp ta báo kịp thời những
thông tin về vụ cháy đến các cơ quan chức năng.
Xuất phát từ những ý tưởng trên, em chọn đề tài “Thiết bị báo cháy và cứu hỏa tự
động” cho luận án tốt nghiệp. Do thời gian và sự hiểu biết có hạn, chắc chắn trong
quá trình làm em cũng có nhiều thiếu sót, mong các thầy cô và các bạn góp ý.
Chương I: Khái quát về vấn đề cần nghiên cứu
I. CÁCH NHẬN BIẾT VÀ BÁO CHÁY:
Khi một đám cháy xảy ra, ở những vùng cháy thường có những dấu hiệu sau:
¬ Lửa, khói, vật liệu chỗ cháy bị phá hủy.
¬ Nhiệt độ vùng cháy tăng lên cao.
¬ Không khí bị Oxy hóa mạnh.
¬ Có mùi cháy, mùi khét.
Để đề phòng cháy chúng ta có thể dựa vào những dấu hiệu trên để đặt các hệ thống
cảm biến làm các thiết bị báo cháy. Kịp thời khống chế đám cháy ở giai đoạn đầu.
Thiết bị báo cháy điện tử giúp chúng ta liên tục theo dõi để hạn chế các vụ cháy tai

hại, tăng cường độ an tồn, bình yên cho mọi người.
II. CÁC BỘ PHẬN CHÍNH:
3
1. Cảm biến:
Cảm biến là bộ phận hết sức quan trọng, nó quyết định độ nhạy và sự chính xác của
hệ thống.
Cảm biến hoạt động dựa vào các đặt tính vật lý của vật liệu cấu tạo nên chúng.
Cảm biến được dùng để chuyển đổi các tín hiệu vậy lý sang tín hiệu điện.
Các đặc tính của cảm biến: độ nhạy, độ ổn định, độ tuyến tính.
a. Cảm biến nhiệt:
Là loại cảm biến dùng để chuyển tín hiệu vật lý (nhiệt độ) thành tín hiệu điện, đây
là loại cảm biến có độ nhạy tương đối cao và tuyến tính. Nguyên tắc làm việc của
nó là dòng điện hay điện áp thay đổi khi nhiệt độ tại nơi đặt nó thay đổi. Tuy nhiên
nó cũng dễ báo động nhầm khi nguồn điện bên ngồi tác động không theo ý muốn.
Các loại cảm biến nhiệt:
IC cảm biến:
Là loại cảm biến bán dẫn được chế tạo thành các IC chuyên dụng với độ nhạy cao,
điện áp ra thay đổi tỉ lệ thuận với nhiệt độ, một số loại IC được bán bên ngồi thị
trường là: LM355, LM334,…
Thermistor:
Thermistor là loại điện trở có độ nhạy nhiệt rất cao nhưng không tuyến tính và với
hệ số nhiệt âm. Điện trở giảm phi tuyến với sự tăng của nhiệt độ. Vì bản thân là
điện trở nên trong quá trình hoạt động Thermistor tạo ra nhiệt độ vì vậy gây sai số
lớn.
Thermo Couples:
Thermo Couple biến đổi đại lượng nhiệt độ thành dòng điện hay điện áp DC nhỏ.
Nó gồm hai dây kim loại khác nhau nối với nhau tại hai mối nối. Khi các dây nối
đặc ở các vị trí khác nhau, trong dây xuất hiện suất điện động. Suất điện động tỉ lệ
thuận với sự chênh lệnh nhiệt độ giữa hai mối nối. Thermo couple có hệ số nhiệt
dương.

b. Cảm biến lửa:
Khi lửa cháy thì phát ra ánh sáng hồng ngoại, do đó ta sử dụng các linh kiện phát
hiện tia hồng ngoại để phát hiện lửa. Nguyên lý hoạt động là điện trở của các linh
kiện thu sóng hồng ngoại tăng, nó chuyển tín hiệu ánh sáng thu được thành tín hiệu
điện để báo động. Loại này rất nhạy đối với lửa. Tuy nhiên cũng dễ báo động nhầm
nếu ta để cảm biến ngồi trời hoặc gần ánh sáng bóng đèn tròn.
c. Cảm biến khói:
Thường cảm biến khói là bộ phân riêng biệt chạy bằng PIN được thiết kế để lắp đặt
trên trần nhà, trên tường. Ngồi yêu cầu kỹ thuật (chính xác, an tồn) còn đòi hỏi phải
đảm bảo về mặt thẩm mỹ. Có hai cách cơ bản để thiết kế bộ cảm biến khói.
Cách thứ nhất sử dụng nguyên tắc Ion hóa. Người ta sử dụng một lượng nhỏ chất
phóng xạ để Ion hóa trong bộ cảm biến. Không khí bị Ion hóa sẽ dẫn điện và tạo
thành một dòng điện chạy giữa chạy giữa hai cực đã đợc nạp điệän. Khi các phần tử
khói lọt vào khu vực cảm nhận được Ion hóa sẽ làm tăng điện trở trong buồng cảm
4
nhận và làm giảm luồng điện giữa hai cực. Khi luồng điện giảm xuống tới một giá
trị nào đó thì bộ cảm biến sẽ phát hiện và phát tín hiệu báo động.
Cách thứ hai sử dụng các linh kiện thu phát quang. Người ta dùng linh kiện phát
quang (Led, Led hồng ngoại…) chiếu một tia ánh sáng qua vùng bảo vệ vào một
linh kiện thu quang (photo diode, photo transistor, quang trở…). Khi có cháy, khói
đi ngang qua vùng bảo vệ sẽ che chắn hoặc làm giảm cường độ ánh sáng chiếu vào
linh kiện thu. Khi cường độ giảm xuống tới một giá trị nào đó thì bộ cảm biến sẽ
phát hiện và phát tín hiệu báo động.
Trong hai cách này thì phương pháp thứ nhất nhạy hơn và hiệu quả hơn phương
pháp thứ hai, nhưng khó thực thi, khó lắp đặt. Còn cách thứ hai tuy ít nhạy hơn
nhưng linh kiện dễ kiếm và dễ thực thi cũng như dễ lắp đặt.
Một nhược điểm của các loại cảm biến này là: mạch báo động có thể sai nếu vùng
bảo vệ bị xâm nhập bởi các lớp bụi…
d. Một số loại cảm biến quang:
Cảm biến quang có thể hoạt động với ánh sáng thấy được hoặc ánh sáng hồng

ngoại, tử ngoại…
- Quang trở:
Quang trở còn có tên gọi khác là vật dẫn quang (photo con) là linh kiện thụ động
được tạo ra từ vật liệu bán dẫn mà bề mặt của nó được phơi sáng và điện trở của nó
giãm khi tăng cường độ ánh sáng. Trong quang trở các điện tử tự do được tạo bằng
năng lượng ánh sáng, cường độ ánh sáng càng lớn thì số lượng điện tử tự do càng
lớn. Loại cảm biến này phi tuyến và có độ trể, do đó ít được dùng.
Đặc tuyến của một loại quang trở thông dụng:
- Cảm biến quang bán dẫn:
Đây là loại cảm biến dùng các linh kiện bán dẫn quang như: diode, photo diode,
phototransistor, …Khi có ánh sáng đập vào mặt bán dẫn làm giải phóng các điện tử
tự do và các đện tử này sẽ chuyễn động tạo thành dòng điện.
- Cảm biến quang nhiệt:
Cảm biến này chuyển quang năng thành nhiệt năng và nhiệt năng này sẽ được nhận
biến bằng bộ cảm biến nhiệt, nhiệt độ tỉ lệ với cường độ ánh sáng chiếu vào. Loại
cảm biến này có độ nhạy thấp, thời gian đáp ứng chậm.
Như vậy mỗi loại cảm biến có tính ưu việc riêng của nó. Tuy nhiên nếuϖ mạnh ở
mặt này thì nó sẽ bị hạn chế ở mặt khác, chẳng hạn bộ cảm biến nhiệt chỉ phát hiện
cháy ở vùng gần cảm biến cảm biến và tỏ ra không hiệu quả ở vùng có nhiều nguồn
nhiệt không phải phát sinh ra cháy. Còn các bộ cảm biến khác có thể phát hiện cháy
trong một phạm vi rộng nhưng có đám cháy có ít khói hoặc do các tác động không
phải do cháy ở tại nơi đặt cảm biến thì sẽ bị phát hiện nhầm. Vì vậy tùy theo từng
vùng, từng nơi mà ta thiết kế những bộ cảm biến thích hợp.
2.Thiết bị báo động:
Thiết bị báo động gồm có hai loại:
- Báo động tại chỗ.
- Báo động qua điện thoại.
5
Báo động tại chỗ ta có thể sử dụng các chuông điện, mạch tạo còi hụ hay phát ra
tiếng nói để cảnh báo.

Trong các hệ thống báo cháy, bộ cảm biến thường đặt ở những nơi dễ cháy và nối
với các thiết bị báo động bằng dây dẫn điện, do đó trong một số trường hợp có thể
làm dây bị đứt. Vì vậy một hệ thống báo cháy sẽ trở nên hiệu quả khi sử dụng các
bộ phát vô tuyến. Trong đó bộ phận thu gắn với mạch báo động, còn mạch phát gắn
với bộ cảm biến. Tuy nhiên việc lắp đặt gặp nhiều khó khăn và giá thành cao.
Báo động qua điện thoại giúp ta đáp ứng nhanh các thông tin về sự cố đến các cơ
quan chức năng. Khi có tín hiệu báo động sẽ tự động quay số đến các cơ quan như:
nhà riêng, công an, phòng cháy chữa cháy…
3.Thiết bị cứu hỏa:
- hệ thống phun nước
- hệ thống phun khí CO2 nén
Chương II : Xây dựng mạch phần cứng

2.1 Giới thiệu về vi điều khiển 8051
IC vi điều khiển 8051/8031 thuộc họ MCS51 có các đặt điểm sau :
- 4kbyte ROM (được lập trình bởi nhà sản xuất chỉ có ở 8051)
- 128 byte RAM
- 4port I10 8bit
- Hai bộ định thời 16bit
- Giao tiếp nối tiếp
- 64KB không gian bộ nhớ chương trình mở rộng
- 64 KB không gian bộ nhớ dữ liệu mở rộng
- một bộ xử lí luận lí (thao tác trên các bit đơn)
- 210 bit được địa chỉ hóa
- bộ nhân / chia 4 s
2.1.1: Chức năng của các chân vi điều khiển
6
VCC
U1
AT 89C51

9
18
19
20
29
30
31
40
1
2
3
4
5
6
7
8
21
22
23
24
25
26
27
2810
11
12
13
14
15
16

17
39
38
37
36
35
34
33
32
RST
XT AL2
XT AL1
GND
PSEN
ALE/PROG
EA/VPP
VCC
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12

P2.5/A13
P2.6/A14
P2.7/A15P3.0/RXD
P3.1/T XD
P3.2/INT O
P3.3/INT 1
P3.4/T O
P3.5/T 1
P3.6/WR
P3.7/RD
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
C3
10u
7408 & /RD
Address Bus
Max232
740 8
Address &
Data Bus
745 73
8255 & Ram
C210u
12Mz

VCC
R2
100
R1
10K
C110u
SW1
SW
Hình 2.2 : Sơ Đồ Chân 8051
a.Port0 : là port có 2 chức năng ở trên chân từ 32 đến 39 trong các thiết kế cỡ nhỏ
( không dùng bộ nhớ mở rộng ) có hai chức năng như các đường IO. Đối với các
thiết kế cỡ lớn ( với bộ nhớ mở rộng ) nó được kết hợp kênh giữ a các bus )
b.Port1 : port1 là một port I/O trên các chân 1-8. Các chân được ký hiệu P1.0,
P1.1, P1.2 … có thể dùng cho các thiết bị ngoài nếu cần. Port1 không có chức năng
khác, vì vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bị ngoài.
c.Port2 : port2 là một port công dụng kép trên các chân 21 - 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 kế dùng bộ
nhớ mở rộng.
d.Port3 : port3 là một port công dụng kép trên các chân 10 - 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ó liên hệ với các đặc tín
đặc biệt của 8051 / 8031 như ở bảng sau :
Bit Tên Chức năng chuyển đổi
7
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6

P3.7
RXD
TXD
INTO
INT1
TO
T1
WR
RD
Dữ liệu nhận cho port nối tiếp
Dữ liệu phát cho port nối tiếp
Ngắt 0 bên ngoài
Ngắt 1 bên ngoài
Ngõ vào của timer/counter 0
Ngõ vào của timer/counter 1
Xung ghi bộ nhớ dữ liệu ngoài
Xung đọc bộ nhớ dữ liệu ngoài
Bảng 2.1 : Chức năng của các chân trên port3
e.Chân PSEN (Program Store Enable ) : 8051 / 8031 có 4 tín hiệu điều khiển
PSEN là tín hiệu ra trên chân 29. Nó là tín hiệu điều khiển để cho phép bộ nhớ
chương trình mở rộng và thường được nối đến chân OE (Output Enable) của một
EPROM để cho phép đọc các bytes mã lệnh.
PSEN sẽ ở mức thấp trong thời gian lấy lệnh. Các mã nhị phân của chương trình
được đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh của 8051 để giải mã
lệnh. Khi thi hành chương trình trong ROM nội (8051) PSEN sẽ ở mức thụ động
(mức cao).
f.Chân ALE (Address Latch Enable ) :
Tín hiệu ra ALE trên chân 30 tương hợp với các thiết bị làm việc với các xử lí
8585, 8088, 8086, 8051 dùng ALE một cách tương tự cho làm việc giải các kênh
các bus địa chỉ và dữ liệu khi port 0 được dùng trong chế độ chuyển đổi của nó :

vừa là bus dữ liệu vừa là búyt thấp của địa chỉ, ALE là tín hiệu để chốt địa chỉ vào
một thanh ghi bên ngoài trong nữa đầu của chu kỳ bộ nhớ. Sau đó, các đường port
0 dùng để xuất hoặc nhập dữ liệu trong nữa sau chu kỳ của bộ nhớ.
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có thể
được dùng là nguồn xung nhịp cho các hệ thống. Nếu xung trên 8051 là 12MHz thì
ALE có tần số 2MHz. Chỉ ngoại trừ khi thi hành lệnh MOVX, một xung ALE sẽ bị
mất. Chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong 8051.
g. Chân EA (External Access) :
Tín hiệu vào EA trên chân 31 thường được mắc lên mức cao (+5V) hoặc mức thấp
(GND). Nếu ở mức cao, 8051 thi hành chương trình từ ROM nội trong khoảng địa
8
chỉ thấp (4K). Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng.
Khi dùng 8031, EA luôn được nối mức thấp vì không có bộ nhớ chương trình trên
chip. Nếu EA được nối mức thấp bộ nhớ bên trong chương trình 8051 sẽ bị cấm và
chương trình thi hành từ EPROM mở rộng. Người ta còn dùng chân EA làm chân
cấp điện áp 21V khi lập trình cho EPROM trong 8051.
h.Chân RST(reset)
Ngõ vào RST trên chân 9 là ngõ reset của 8051. 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 8051 được tải những giá trị
thích hợp để khởi động hệ thống.
i.Chân XTAL:Các ngõ vào bộ dao động trên chip :
Như đã thấy trong các hình trên , 8051 có một bộ dao động trên chip. Nó thường
được nối với thạch anh giữa hai chân 18 và 19. Các tụ giữa cũng cần thiết như đã
vẽ. Tần số thạch anh thông thường là 12MHz.
j.Các chân nguồn :
8051 vận hành với nguồn đơn +5V. Vcc được nối vào chân 40 và Vss (GND) được
nối vào chân 20.
2.1.2. Hoạt động của bộ định thời
a)Giới thiệu.
Một định nghĩa đơn giản của timer là một chuỗi các flip-flop chia đôi tần số nối

tiếp với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp. Ngõ ra của tần số
cuối làm nguồn xung nhịp cho flip-flop báo tràn của timer (flip-flop cờ). Giá trị nhị
phân trong các flip-flop của timer có thể xem như số đếm số xung nhịp (hoặc các
sự kiện) từ khi khởi động timer. Ví dụ timer 16 bit sẽ đếm lên từ 0000H đến
FFFFH. Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H.
8051 có 2 timer 16 bit, mỗi timer có bốn cách làm việc. Người ta sử dụng các
timer để : a) định khoảng thời gian, b) đếm sự kiện hoặc c) tạo tốc độ baud cho port
nối tiếp trong 8051
Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở một khoảng
đều đặn và đặt cờ tràn timer. Cờ được dùng để đồng bộ hóa chương trình để thực
hiện một tác động như kiểm tra trạng thái của các cửa ngõ vào hoặc gửi các sự kiện
9
ra các ngõ ra. Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của
timer để đo thời gian trôi qua giữa hai sự kiện (ví dụ : đo độ rộng xung).
Đếm sự kiện dùng để xác định số lần xẩy ra của một sự kiện. Một "sự kiện" là bất
cứ tác động ngoài nào có thể cung cấp một chuyển trạng thái trên một chân của
8051. Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho port nối tiếp trong
8051 Truy xuất timer của 8051 dùng 6 thanh ghi chức năng đặc biệt cho trong
bảng sau:
SFR MỤC ĐÍCH ĐỊA CHỈ Địa chỉ hóa từng bít
TCON
TMOD
TL0
TL1
TH0
TH1
Điều khiển timer
Chế độ timer
Byte thấp của timer 0
Byte thấp của timer 1

Byte cao của timer 0
Byte cao của timer 1
88H
89H
8AH
8BH
8CH
8DH

không
không
không
không
không
Bảng 2.2: Thanh ghi chức năng đặc biệt dùng timer.
2.1.3. Thanh ghi chế độ timer (TMOD)
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho timer 0
và timer 1.
10
Bi
t
7
6
5
4
3
2
1
0
Tên Timer Mô tả

GATE 1 Bit (Mở) cổng, khi lên 1 timer chỉ chạy khi
INT1
ở mức cao.
C/T 1 Bit chọn chế độ counter/timer
1=bộ đếm sự kiện
0=bộ định khoảng thời gian
M1 1 Bit 1 của chế độ(mode)
M0 1 Bit 0 của chế độ
00: chế độ 0 : timer 13 bit
01: chế độ 1 : timer 16 bit
10: chế độ 2 : tự động nạp lại 8255A bit
11: chế độ 3 : tách timer
GATE 0 Bit (mở) cổng
C/T 0 Bit chọn counter/timer
M1 0 Bit 1 của chế độ
M0 0 Bit 0 của chế độ

Bảng 2.3: Tóm tắt thanh ghi TMOD
2.1.4. Thanh ghi điều khiển timer (TCON)
Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển cho timer 0 và
timer 1.
Bảng 2.4: Tóm tắt thanh ghi TCON
+TF1: (địa chỉ 8Fh) cờ tràn bộ định thời 1. Được set bởi phần cứng khi bộ
định thời/ đếm bị tràn, được xoá bởi phần mềm hoặc bởi phần cứng khi trình phục
vụ ngắt được trỏ đến.
+TR1:(địa chỉ byte8Eh) bit điều khiển bộ định thời 1 hoạt động. Được set/
xoá bởi phần mềm để điều khiển bộ định thời hoạt động hoặc ngưng hoạt động.
+TF0(địa chỉ byte8Dh) cờ tràn của bộ định thời 0.
11
0

12
3
4
567
IT0IE0
IT1IE1
TR0TF0
TR1TF1
+TR0(địa chỉ byte8C) bit điều khiển bộ định thời 0 hoạt động.
+IE1:( địa chỉ byte8Bh) cờ ngắt ngoài 1 tác động cạnh. Được set bởi phần
cứng khi phát hiện có ngắt ngoài 1 tác động cạnh; được xoá bởi phần cứng khi ngắt
được xử lý.
+IT1(địa chỉ byte8Ah)bít điều khiển chọn loại ngắt. Được set/ xoá để xác
định ngắt ngoài thuộc loại tác động cạnh xuống hay tác động mức thấp.
+IE0(địa chỉ byte89h) cờ ngắt ngoài 0 tác động cạnh.
+IT0(địa chỉ byte88h)bit điều khiển chọn loại ngắt (kích khởi cạnh hoặc
mức).
2.1.5. Tổ chức ngắt của 8051.
+Có 5 nguyên nhân tạo ra ngắt : 2 ngắt do bên ngoài, hai ngắt do bộ định thời và
một ngắt do port nối tiếp.
+Khi xảy ra 2 hay nhiều ngắt đồng thời hoặc xảy ra một ngắt trong khi một
ngắt khác đang tác động thì lúc đó điều gì sẽ xảy ra :
-Nếu có 2 ngắt cùng mức ưu tiên thì chuổi vòng cố định sẽ xác định
ngắt nào được phục vụ trước. Chuổi vòng này sẽ là: ngắt ngoài 0, ngắt do bộ định
thời 0, ngắt ngoài 1, ngắt ngoài 1, ngắt do port nối tiếp.
-Khi có 2 ngắt với mức ưu tiên khác nhau xuất hiện đồng thời thì ngắt
có mức ưu tiên cao sẽ được phục vụ trước.
-Khi mức ngắt ưu tiên thấp đang thực hiện nếu có ngắt ở mức cao xuất
hiện thì trình thực hiện ngắt ở mức thấp phải tạm dừng. Nếu ngắt cao đang thực
hiện mà có một ngắt ở mức thấp tác động thì lúc này chương trình không thể dừng

ngắt ở mức ưu tiên cao để thực hiện được mà nó phải thực hiện chương trình ngắt ở
mức cao xong rồi mới phục vụ ngắt ở mức thấp.
*Vấn đề được xem xét kỹ hơn đó là nếu có ngắt xuất hiện thì điều gì sẽ xãy
ra trong bộ vi điều khiển.
+Hoàn tất lệnh hiện hành.
+Thanh ghi PC cất vào Stack.
+Trạng thái các ngắt hiện thời được lưu giữ lại.
+Các ngắt được chận lại ở mức ngắt.
+Bộ đếm chương trình PC được nạp địa chỉ chương trình phục vụ ngắt.
12
+Chương trình phục vụ ngắt được thực hiện cho đến khi gặp lệnh RETI trở
về chương trình ở ban đầu.
2.1.6. Tập lệnh của 8051
+Tập lệnh của MCS-51 được tối ưu hóa cho các ứng dụng điều khiển 8
bit. Tập lệnh củng hổ trợ các biến 1 bit cho phép quản lý bit trực tiếp trong các hệ
logic và điều khiển có yêu cầu xử lý bít.
+Cũng như các bộ vi xử lý 8-bit, các lệnh của 8051 có các ôpcde 8-bit, do
vậy số lệnh có thể lên đến 256 lệnh(thực tế có 255 lệnh, 1 lệnh không được định
nghĩa). Ngoài opcode, một số lệnh còn có thêm 1 hoặc 2 byte nữa cho dữ liệu hoặc
địa chỉ. Tập lệnh có 139 lệnh 1 byte, 92 lệnh 2-byte, 24 lệnh 3 byte.
+Một số kiểu định địa chỉ:
-Thanh ghi(register).
-Trực tiếp(direct).
-Gián tiếp(indirect).
-Tức thời(immediate).
-Tương đối(relative).
-Tuyệt đối(absolute).
-Dài (long).
-chỉ số(indexed).
*Các loại lệnh :

+Các lệnh của 8051 được chia làm 5 nhóm :
-Nhóm lệnh số học.
-Nhóm lệnh logic.
-Nhóm lệnh di chuyển dữ liệu.
-Nhóm lệnh xử lý bit.
-Nhóm lệnh rẽ nhánh.
a) Các lệnh logic:
+ Thực hiệnh các phép toán logic như AND, OR, XOR và NOT:
Vd: giả sử thanh ghi A có giá trị là 30h và B có giá trị là 40 h khi đó ta tiến hành
các phép toán sau:
ANL A,B : Khi đó thanh ghi A sẽ nhận giá trị mới là:08h
ORL A,B : Khi đó thanh ghi A sẽ nhận giá trị mới là:62h
13
XRL A,B : Khi đó thanh ghi A sẽ nhận giá trị mới là:54h
b) Các nhóm lệnh di chuyển dữ liệu :
+Cũng giống như hầu hết các bộ vi xử lý thời gian mà CPU thực hiện việc di
chuyển dữ liệu chiếm hết 2/3 thời gian hoạt động của nó.
+ Lệnh điển hình ở đây là : MOV <destination>,<source>.
c) Các lệnh xữ lý bit:
+Các bit có thể được set và xoá bằng 1 lệnh. Điều này rất linh hoạt mà ta
khó tìm thấy được ở bộ vi xử lý. Nó giúp ta tiết kiệm được số cổng I/0 và thực hiện
kiểm tra điều khiển được dễ dàng hơn nhiều.
+Lệnh thường gặp ở trong trường hợp này đó là:
SETB <đối tượng> ; CLR <đối tượng>
d) Các lệnh rẽ nhánh:
+Trong thực tế không phải lúc nào chương trình lúc nào cũng đi theo một
đường thẳng nhất định mà đôi khi nó chịu tác động của yếu tố ngoại cảnh tác động
làm cho chiều hướng chương trình bị rẽ sang một hướng nào đó.
+Với yếu tố trên thì 8051 cung cấp cho ta một số mã lệnh để thực hiện
công việc trên một cách dễ dàng.

+Các lệnh thường gặp đó là: JMP, JNB, JB, CJNE , DJNZ .v.v.
+Tuỳ theo các tình huốn cụ thể mà ta cho chương trình đi theo một chiều
hướng mong muốn.
2.2 Sơ đồ mạch phần cứng
14
sơ đồ hệ thống

sơ đồ mạch:
Các phần tử thực hiện mạch.
Đầu vào:
+sensor: cảm biến khi có dấu hiệu có cháy và gửi tín hiệu đến VĐK để xử lí
Điều khiển:
+Các vi điều khiển nhận tín hiệu từ cảm biến, xử lý, điều khiển hệ thống cứu hỏa,
giải mã, hiển thị tín hiệu trên LCD
Đầu ra:
+Hệ thống phun nước( nhận tín hiệu từ vi điều khiển) thực hiện chức năng cứu hỏa
+màn hình LCD hiển thị tình trạng hệ thống
=>Khối cảm biến :
15
DS1820 thường được ứng dụng trong các bộ điều khiển HVAC, hệ thống giám sát nhiệt độ trong
các tòa nhà, thiết bị máy móc…
DS1820 thường có 3 chân chức năng chính:
1. Chân GND: chân nối đất.
2. Chân DQ: chân trao đổi dữ liệu, đồng thời là chân cấp nguồn cho toàn bộ hoạt động của IC,
nếu chân Vcc không sử dụng. Khi kết nối với vi điều khiển thì cần phải có điện trở kéo lên
khoảng 4.7k.
3. Chân Vcc: chân cấp nguồn
16
sơ đồ khối IC điều khiển nhiệt độ DS1820
Nguyên tắc hoạt động:

Bên trong DS1820 sẽ có bộ chuyển đổi giá trị nhiệt độ sang giá trị số và được lưu
trong các thanh thi ở bộ nhớ scratchpad. Độ phân giải nhiệt độ đo có thể được cấu
hình ở chế độ 9 bits, 10bits, 11bits, 12bits. Ở chế độ mặc định thì DS1820 hoạt
động ở độ phân giải 12bits. Để bắt đầu quá trình đọc nhiệt độ, và chuyển đổi từ giá
trị tương tự sang giá trị số thì vi điều khiển gửi lênh Convert T [44h], sau khi
chuyển đổi xong thì giá trị nhiệt độ sẽ được lưu trong 2 thanh ghi nhiệt độ ở bộ nhớ
scratchpad và IC trở về trạng thái nghỉ.
Nhiệt độ được lưu bên trong DS1820 được tính ở nhiệt độ Celcius nếu tính ở nhiệt
độ Fahrenheit cần phải xây dựng thêm bảng chuyển đổi nhiệt độ.
=>Khối nguồn:
Phương pháp xử lý tín hiệu

Qua các sensor đưa cho ta các tín hiệu tương tự theo dạng điện áp . Ở đây việc
dùng OP-AM là hợp lý nhất .
17
IC LM 393 bao gồm có 2 op-am có chức năng so sánh tín hiệu từ cảm biến . Sau đó
đưa tín hiệu này vào vđk.
Tại chân số 3 ( IN+ )của LM393 ta nối với chiết áp tạo ra 1 ngưỡng so sánh
.Thường ta vặn biến trở để có giá trị vào chân IN+ khoảng 3V.
Chân số 2 (IN-) được nối với led thu , từ đó ta có thể xác định được vạch trắng
nhờ sự thay đổi điện áp của photodiode từ 0V > 5V tuỳ vào màu nên phản chiếu .
Bình thường điện áp ở chân số 2 khoảng 5V ,chân ra 1 của opam là 0V -khối led
hiển thị sáng đèn .Khi gặp vạch trắng led thu dẫn làm điện áp ở chân 2 giảm xuống
trong khoảng 0V->1V ,chân ra 1 của opam là 5V - khối led hiển thị tắt đèn.
Khối hiển thị
Chương III : Thiết kế phần mềm điều khiển
sơ đồ hệ thống
18
Nguồn
Vi điều khiển

Khối quét động
Khối giải mã
Khối hiển thị( 1LCD)Sensor
Đầu Vào Điều Khiển Đầu Ra
Hệ thống phun nước, khí CO2 nén
Cấu trúc chung
19
sơ đồ mạch:
Lập trình cho vi điều khiển:
//bat dau chuong trinh
//**************************
//phan khai bao bien:
#include<stdio.h>
#include<reg51.h>
sbit DQ = P2^0;
sbit DQ2 = P2^1;
sbit DQ3 = P2^2;
sbit DQ4 = P2^3;
char readdata[2];
unsigned int t1,t2,t3,t4,nhietdo;
int xe= 50;
sbit xevao = P3^0;
sbit xera = P3^1;
// Khai bao cho LCD
sbit RS = P3^6;
20
sbit EN = P3^7; //RW=1 => doc
//RS=0 => code
//RS=1 => data
#define lcd_PORT P0

//===========================
void delay_ms1(int n)
{
int k,j;
for(k=0;k<n;k++)
{
for(j=0;j<500;j++);
}
}
//==========================
void delay_5ms(){
int i,j;
for(i=0;i<250;i++)
for(j=0;j<4;j++){}
}
//===========================
void delay_15ms(){
int i,j;
for(i=0;i<250;i++)
for(j=0;j<100;j++){}
}
//============================
void lcd_command(unsigned char c) //CT con ghi du lieu len LCD
{
RS=0;
lcd_PORT=c;
EN=1;
EN=0;
delay_5ms();
}

//==============================
void lcd_data(unsigned char c) //CT con doc du lieu tu LCD
{
RS=1;
lcd_PORT=c;
21
EN=1;
EN=0;
delay_5ms();
}
//===============================
void lcd_init() // Khoi tao LCD
{
delay_15ms();
lcd_command(0x38);
lcd_command(0x0C);
lcd_command(0x01); // Xoa man hinh LCD
}
//=============================
void lcd_putsf(unsigned char *s)
{
while (*s)
{
lcd_data(*s);
s++;
}
}
// DS18b20
void DelayUs(int us)
{

int i;
for (i=0; i<us; i++);
}
//
// Reset DS1820
//
bit ResetDS1820(void)
{
bit presence;
DQ = 0; //pull DQ line low
DelayUs(29); // leave it low for about 490us
DQ = 1; // allow line to return high
DelayUs(3); // wait for presence 55 uS
presence = DQ; // get presence signal
22
DelayUs(25); // wait for end of timeslot 316 uS
return(presence); // presence signal returned
} // 0=presence, 1 = no part
//
// Read one bit from DS1820
//
unsigned char ReadBit(void)
{
unsigned char i;
DQ = 0; // pull DQ low to start timeslot
DQ=1;
for (i=0; i<3; i++); // delay 17 us from start of timeslot
return(DQ); // return value of DQ line
}
//

// Write one bit to DS1820
//
void WriteBit(char bitval)
{
DQ=0;
if(bitval==1)
DQ = 1;
DelayUs(5); // delay about 39 uS
DQ = 1;
}
//
// Read 1 byte from DS1820
//
unsigned char ReadByte(void)
{
unsigned char i;
unsigned char value = 0;
for (i=0;i<8;i++)
{
if(ReadBit()) value|=0x01<<i;
DelayUs(6);
}
return(value);
}
23
//
// Write 1 byte
//
void WriteByte(char val)
{

unsigned char i;
unsigned char temp;
for (i=0; i<8; i++) // writes byte, one bit at a time
{
temp = val>> i;
temp &=0x01;
WriteBit(temp);
}
DelayUs(5);
}
//
// Read temperature
//
void ReadTemp(void)
{
int k;
int thap, cao=0;
ResetDS1820();
WriteByte(0xcc); // skip ROM
WriteByte(0x44); // perform temperatur conversion
while (ReadByte()==0xff); // wait for conversion complete
ResetDS1820();
WriteByte(0xcc); // skip ROM
WriteByte(0xbe); // read the result
for (k=0; k<9; k++) // read 9 bytes but, use only one byte
{
readdata[k]=ReadByte(); // read DS1820
}
thap = readdata[0];
cao = readdata[1];

readdata[1]=readdata[1]<<4;
readdata[1]=readdata[1] & 0x70;
thap=readdata[0];
thap=thap>>4;
24
thap=thap & 0x0f;
readdata[1]=readdata[1] | thap;
thap=2;
t1=readdata[1];
}
// DS18B20 > 2
bit ResetDS18202(void)
{
bit presence;
DQ2 = 0; //pull DQ line low
DelayUs(29); // leave it low for about 490us
DQ2 = 1; // allow line to return high
DelayUs(3); // wait for presence 55 uS
presence = DQ2; // get presence signal
DelayUs(25); // wait for end of timeslot 316 uS
return(presence); // presence signal returned
} // 0=presence, 1 = no part
//
// Read one bit from DS1820
//
unsigned char ReadBit2(void)
{
unsigned char i;
DQ2 = 0; // pull DQ low to start timeslot
DQ2 = 1;

for (i=0; i<3; i++); // delay 17 us from start of timeslot
return(DQ2); // return value of DQ line
}
//
// Write one bit to DS1820
//
void WriteBit2(char bitval)
{
DQ2=0;
if(bitval==1)
DQ2 = 1;
DelayUs(5); // delay about 39 uS
DQ2 = 1;
}
25

×