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

Vi xử lý sử dụng 8051RD2 đo cảnh báo nhiệt độ DS18B20 có code asimply

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 (580.2 KB, 30 trang )

LỜI NÓI ĐẦU
Với sự tiến bộ của con người, với sự phát triển của khoa học kỹ thuật thì các nghành
công nghiệp phát triển mạnh mẽ, các hệ thống ứng dụng ra đời, điều đó cũng đặt ra yêu
cầu cao về chất lượng, độ chính xác. Một trong những hệ thống được ứng dụng nhiều
nhất là: hệ thống đo điều khiển và hiển thị ra led 7 thanh.Các hệ thống đang ngày dần
được tự động hóa với những kỹ thuật như vi xử lý, vi điều khiển… đang ngày một làm
cho các bộ tự động dần trở nên tốt hơn đảm bảo yêu cầu hơn.
Trong quá trình sản xuất ở các nhà máy,xí nghiệp; quá trình điều khiển nhiệt độ trong
các phòng, hội nghị, các khu chung cư, việc đo và khống chế nhiệt độ tự động là yêu cầu
hết sức cần thiết và quan trọng. Vì nếu nắm bắt được nhiệt độ làm việc của các hệ thống,
dây chuyền sản xuất… thì giúp chúng ta biết được tình trạng làm việc theo yêu cầu và có
những xử lý kịp thời để tránh hư hỏng và giải quyết các sự cố sảy ra.Yêu cầu của các hệ
thống là phải đảm bảo chính xác, kịp thời và nhanh, hệ thống làm việc ổn định ngay cả
khi có nhiễu và do tác động khác.
Để đáp ứng nhu cầu thực tế đặt ra ngày càng cao của con người thì các ứng dụng vi xử
lý là vô cùng cấp thiết. Vì vậy, trong đồ án này chúng em tập trung đi sâu vào nghiên cứu
ứng dụng của họ vi xử lý 8051 và vi mạch DS18B20 vào đo nhiệt độ. Trong quá trình
thực hiện vẫn có nhiều khuyết điểm do thiếu khiến thức thực tế,chưa tiếp xúc nhiều các
thiết bị, hệ thống được xây dựng trên các thiết bị mô phỏng nhưng đã có phần sát với
thực tế khách quan.
Thay mặt các thành viên trong nhóm em xin gửi lời cảm ơn tới giảng viên Nguyễn Thu
Hà (Bộ môn đo lường và điều khiển ) đã hướng dẫn nhóm em thực hiện đồ án này. Do
vẫn tồn tại nhiều khuyết điểm nên rất mong nhận được nhiều ý kiến đóng góp của tất cả
mọi người để đồ án ngày càng hoàn thiện hơn.
Xin chân thành cảm ơn !


Chương 1: Phân tích yêu cầu công nghệ
1.1 Phân tích và giới hạn về đặc điểm thiết bị và tham số

1.1.1 Vi xử lý họ 8051


Họ vi điều khiển 8051(còn gọi là C51) là một trong những họ vi điều khiển thông
dụng nhất. Bộ vi điều khiển này có 128 byte RAM,4K byte ROM trên chíp, hai
bộ định thời, một cổng nối tiếp và 4 cổng (đều rộng 8 bit) vào ra t ấ t c ả đ ư ợ c
đ ặ t t r ê n m ộ t c h í p . L ú c ấ y n ó đ ư ợ c c o i l à m ộ t “ h ệ t h ố n g t r ê n chíp”. 8051
là một bộ xử lý 8 bit có nghĩa là CPU chỉ có thể làm việc với 8 bit dữ liệu tại một thời
điểm. Dữ liệu lớn hơn 8 bit được chia ra thành các dữ liệu 8 bit để cho xử lý. 8051
có tất cả 4 cổng vào-ra I/O mỗi cổng rộng 8 b i t . M ặ c d ù 8 0 5 1 c ó t h ể c ó m ộ t
ROM trên chíp cực đại là 64 K byte,nhưng các nhà sản xuất lúc đó đã
c h o x u ấ t x ư ở n g c h ỉ v ớ i 4 K b y t e R O M trên chíp 8051 đã trở nên phổ biến sau
khi Intel cho phép các nhà sản xuất khác sản xuất và bán bất kỳ dạng biến thể nào
của 8051 mà họ thích với điều kiện họ phải để mã lại tương thích với
8051.Điều này dẫn đến sự ra đ ờ i n h i ề u p h i ê n b ả n c ủ a 8 0 5 1 v ớ i c á c t ố c đ ộ
k h á c n h a u v à d u n g l ư ợ n g ROM trên chíp khác nhau được bán bởi hơn nửa
các nhà sản xuất. Điềunày quan trọng là mặc dù có nhiều biến thể khác nhau
của 8051 về tốc độvà dung lương nhớ ROM trên chíp, nhưng tất cả chúng đều tương
thích với 8051 ban đầu về các lệnh. Điều này có nghĩa là nếu ta viết chương
trình của mình cho một phiên bản nào đó thì nó cũng sẽ chạy với mọi phiên bản bất kỳ
khác mà không phân biệt nó từ hãng sản xuất nào.
1.1.1.1 Cấu trúc chung của họ 8051












Interrupt control : Điều khiển ngắt.
Other registers : Các thanh ghi khác.
ROM : là loại bộ nhớ không mất dữ liệu khi mất nguồn cung cấp, được gọi là
nhữngchương trình bên trong .
RAM : là bộ nhớ dữ liệu bên trong có dung lượng 128Byte dùng để lưu trữ dữ liệu như
biến số, hằng số, bộ đệm truyền thông.
Timer 2, 1 , 0 : Bộ định thời 2 , 1 , 0
CPU : Đơn vị điều khiển trung tâm.
Oscillator : Mạch dao động.
Bus control: Điều khiển Bus
I/O ports: Các ports vào/ ra
Serial port: port nối tiếp




Address/data : địa chỉ/ dữ liệu.

Hình 1.1 cấu trúc trong của 8051


1.1.1.2 Sơ đồ chân của 8051

Hình 1.2 Sơ đồ chân của 8051

-

Chức năng :
- Chân 40 nối dương nguồn 5V
- Chân 20 nối đất (Mass,GND)

- Chân 29 (PSEN): là tín hiệu điều khiển xuất ra của 8051, nó cho phép chọn bộ nhớ
ngoài và được nối chung với chân OE (output) của EPROM ngoài để cho phép đọc
các byte của chương trình ( ở đây là đọc các lệnh- khác với đọc dữ liệu).
- Chân 30 (ALE) là tín hiệu điều khiển xuất ra của 8051, nó cho phép kênh Bus địa chỉ
và Bus dữ liệu của Port 0.
- Chân 31 (EA) được đưa xuống thấp cho phép chọn bộ nhớ mã ngoài đối với 8051.
- P0 từ chân 39-> 32 tương ứng là các chân P0_0 -> P0_7
- P1 từ chân 1->8 tương ứng với các chân P1_0 -> P1_7
P2 từ chân 21->28 tương ứng là các chân P2_0->P2_7
P3 từ chân 10->17 tương ứng là các chân P3_0->P3_7
Riêng cổng 3 có 2 chức năng ở mỗi chân như trên hình vẽ :
P3.0 – RxD : chân nhận dữ liệu nối tiếp khi giao tiếp với RS232 (COM)
P3.1 – TxD : phân truyền dữ liệu nối tiếp khi giao tiếp RS232
P3.2 – INT0 : interupt 0, ngắt ngoài 0.
P3.3 – INT1 : interupt 1 ngắt ngoài 1.
P3.4 – T0 : Timer 0 đầu vào timer 0.
P3.5 – T1 : Timer 1 đầu vào timer 1.
P3.6 – WR : Điều khiển ghi dữ liệu


-

P3.7 – RD : Điều khiển đọc dữ liệu
Chân 18,19 nối với thạch anh tạo thành mạch dao động cho vi điều khiển, vi xử lý.
Tần số thạch anh thường dùng trong các ứng dụng là 12Mhz và 11.092MHz (Giao tiếp
với cổng COM), tần số tối đa là 24Mhz.
Cổng vào ra song song(I/O port)
8051 có 4 cổng vào ra song song có tên lần lượt là P0, P1, P2, P3 tất cả các cổng này
đều là cổng ra vào 2 chiều 8 bit. Các bít của mỗi cổng là một chân trên chíp như vậy mỗi
cổng sẽ có 8 chân trên chíp. Hướng dữ liệu dùng cổng đó làm cổng ra hay cổng vào là

độc lập giữa các cổng và giữa các chân trong cùng 1 cổng.
Các chân P0 không có điện trở treo cao (pullup resistor) bên trong, mạch lái tạo mức
cao chi có khi sử dụng cổng này với tính năng là bus dồn kênh địa chỉ/ dữ liệu. Như vậy
với chức năng ra thông thường, P0 là cổng ra open drain, với chức năng vào, P0 là cổng
cao trở. Nếu muốn sử dụng cổng P0 làm cổng vào /ra thông dụng thì ta phải thêm trở tử
4K7 đến 10K. Các cổng P1, P2, P3 đều có điện trở pullup bên trong, do đó có thể dùng
với chức năng cổng vào/ra thông thường mà không cần thêm điện trở bên ngoài.
• Cổng truyền thông nối tiếp ( Serial Port) :
Cổng nối tiếp trong 8051 chủ yếu được dùng trong các ứng dụng có yêu cầu truyền
thông với máy tính, hoặc với 1 vi điều khiển khác. Liên quan đến cổng nối tiếp chủ yếu
có 2 thanh ghi : SCON và SBUF. Ngoài ra, một thanh ghi khác là thanh ghi PCON
(không đánh địa chỉ bít) có bít 7 tên là SMOD quy định tốc độ truyền của cổng nối tiếp
có gấp đôi lên (SMOD=1) hay không (SMOD=0).
Cổng có đặc điểm :
- Truyền song công : có nghĩa là tại một thời điểm có thể vừa truyền vừa nhận dữ
liệu.
- Phương thức truyền không đồng bộ: là dữ liệu được truyền đi theo từng kí tự.
- Bộ đệm truyền nhận dữ liệu đều có tên là SBUF
- SCON là thanh ghi bit được dùng để lập trình việc đóng khung dữ liệu, xác định
chế độ làm việc của cổng truyền thông nối tiếp.

Bảng dưới đây mô tả chi tiết các bit khác nhau của thanh ghi SCON :
Bit
Tên
Địa chỉ
Chức năng
7
SM0
9FH
Xác định chế độ cổng nối tiếp (bit 0)



6
SM1
9EH
Xác định chế độ cổng nối tiếp (bit 1)
5
SM2
9DH
Cho phép truyền thông đa xử lý
4
REN
9CH
Bít cho phép nhận
3
TB8
9BH
Sử dụng trong chế độ 2 và 3
2
RB8
9AH
Sử dụng trong chế độ 2 và 3
1
TI
99H
Cờ truyền :nhận được sau khi truyền xong 1 byte
0
RI
98H
Cờ nhận: Nhận được sau khi nhận đủ 1 byte

Các chế độ làm việc của cổng truyền thông
SM0
0
0
1
1

SM1
0
1
0
1

Chế độ
0
1
2
3

Khung dữ liệu
8-bit Shift Register
8-bit UART
9-bit UART
9-bit UART

Tốc độ Baud
Oscillator/12
Cài đặt bởi timer 1(*)
Oscillator/64(*)
Cài đặt bởi timer 1(*)


1.1.2 Sơ lược về vi điều khiển AT89C51
AT 89C51 là họ vi xử lý do hãng Intel sản xuất. Các sản phẩm AT89C51 thích hợp cho
những ứng dụng điều khiển. Việc xử lý trên byte và các toán số học ở cấu trúc dữ liệu
nhỏ được thực hiện bằng nhiều chế độ truy xuất dữ liệu nhanh trên RAM nội. Tập lệnh
cung cấp một bảng tiện dụng của những tập lệnh số học 8 bit gồm cả lệnh nhân và chia.
Nó cung cấp những hỗ trợ mở rộng trên chip dùng cho những biến 1 bit như là kiểu dữ
liệu riêng biệt cho phép quản lý và kiểm tra từng bit trực tiếp trong hệ thống điều khiển.
Các đặc điểm của chip AT89C51 được tóm tắt như sau :

4Kbyte bộ nhớ có thể lập trình nhanh, có khả năng tới 1000 chu kỳ ghi/xóa

Tần số hoạt động từ: 0Hz đến 24MHz

3 mức khóa bộ nhớ lập trình

2 bộ Timer/counter 16 bit

128 Byte RAM nội

4 Port xuất /nhập I/O 8 bit.

Giao tiếp nối tiếp

64KB vùng nhớ mã ngoài

64KB vùng nhớ dữ liệu ngoại

4µs cho hoạt động nhân hoặc chia
1.1.3 LED bảy thanh

LED 7 thanh được dùng nhiều trong các mạch hiện thị thông báo, hiện thị số, kí tự đơn
giản... LED 7 được cấu tạo từ các LED đơn sắp xếp theo các thanh nét để có thể biểu diễn
các chữ số hoặc các kí tự đơn giản như từ số 0 đến 9 và A đến F chả hạn. LED 7 thanh


dùng để hiện số thì rất đẹp và dễ nhìn. Tùy vào kích thước của số và kí tự mà mỗi thanh
được cấu tạo bởi một hay nhiều LED đơn. Các LED đơn đó được ghép và được đặt tên
bằng các chữ cái a...g và có một dấu chấm dot ( dấu chấm này có thể sáng và tắt tùy theo
yêu cầu) được cấu tạo bởi 1 LED đơn. Qua đó người ta chỉ cần 8 bit tương ứng với 8
LED đơn để điều khiển được và hiện thị số từ 0 đến 9 và các kí tự từ A đến F.

Ở trên là
dạng
ngoài
và trong
nguyên
tạo.



hình
LED7
thực tế
mạch
và cấu

Cấu tạo
của LED chúng ta nhìn trên rất
đơn giản
chúng chỉ gồm các LED đơn được

xếp lại
với nhau thành hình như trên hình
vẽ. Các
LED đơn này chỉ chung nhau Anot hoặc Katot và riêng nhau các chân con lại Anot hặc
Katot. Nhiệm vụ của chúng ta là cho sáng các LED đơn đó để cho nó thành số hay kí tự
đơn giản.


Anot chung: đầu chung này được nối với +Vcc, các chân còn lại dùng để
điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt
vào các chân này ở mức 0.


Từ đó ta có bảng giải mã LED 7 đoạn Anode chung như sau:



Katot chung: đầu chung này được nối xuống Ground (hay Mass), các chân
còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng
khi tín hiệu đặt vào các chân này ở mức 1.


Từ đó ta có bảng giãi mã LED 7 đoạn Cathode chung như sau:

Hiện nay LED 7 được sản xuất theo 2 kiểu là Anot chung và Katot chung và được điều
khiển làm việc tương tự như bơm dòng hay nuốt dòng của các LED đơn có trong LED7
(Thường hay thiết kế theo kiểu bơm dòng cho LED). Thông thường trong các mạch thiết
kế thực tế người thiết kế thường hay sử dụng loại Anot chung. Phương pháp ghép nối là
cấp dòng, đảo trạng thái thông qua đệm và quét LED.



Ghép nối led 7 thanh:
Để ghép nối với LED7 có thể có nhiều cách, nhưng phải đảm bảo sao có thể điều
khiển tắt mở riêng từng LED đơn trong đó để tạo ra các số và các ký tự mong
muốn.Các ICs điều khiển đều khó khả năng sinh dòng kém tức là dòng đầu ra của các
chân ICs nhỏ hơn khả năng nuốt dòng. Do vậy, nếu ghép nối trực tiếp các net với các
chân cổng IC thì loại Anode chung là thích hợp hơn cả. Cần phải chú ý dòng dồn về ICs
quá mức chịu được thì cũng không được vì làm nóng và dei ICs điều khiển
* 2 cách ghép nối thường dùng:
+ Cách 1 : Dùng trực tiếp các chân điều khiển (vi xử lý)
Đối với cách này thì nhìn thì rất tốn chân của vi xử lý. Và dòng của LED sẽ dồn tất cả
về vi xử lý. Nếu một hệ thống lớn thì cách này không ổn vì ảnh hưởng đến vi xử lý và
nhiều dòng dồn về vi xử lý sẽ làm vi xử lý nóng và dẫn tới chết ( chúng ta tưởng tượng
xem nếu mà hệ thống nhiều phần điều khiển từ các chân vi xử lý mà tất cả các tải điều
khiển dồn trực tiếp dòng về vi xử lý thì lúc đó dòng trong 1 thời điểm khá lớn vượt quá
ngưỡng cho phép của vi xử lý.
Dòng mà vi xử lý chịu đựng được cũng khá nhỏ đâu dưới 100mA ). Các này chỉ
dùng được hệ thống điều khiển ít, mạch dùng vi xử lý khá đơn giản như hiện thị LED,
đếm số từ 0 đến 9 ... chẳng hạn.


Cách 2 : Dùng IC giải mã BCD sang LED 7 thanh

Sử dụng IC giải mã 7447 để giả mã từ mã BCD sang mã LED7. Đối với cách này thì
trông rất ổn. Vừa tiếp kiệm được chân vi xử lý và tránh được dòng dồn về vi xử lý (dòng
ở đây được dồn về 7447). Đây là cách mà người thiết kế thường dùng trong các hệ thống
cần đến hiện thị.
Thông thường các thiết kế, LED 7 thanh được dùng để hiện thị các giá trị các giá trị số
từ 0 đến 9 và đôi khi cần phải hiện thị các kí tự đơn giản như A đến F trong hệ thống để
báo trạng thái của hệ thống. Các giá trị hiện thị bao gồm nhiều chữ số tức là chúng ta

phải dùng đến nhiều LED7 ghép lại thì mới hiện thị được nhiều số. Ví dụ như muốn hiện
thị số 123 chả hạn thì chúng ta phải dùng đến 3 LED 7 thanh ghép lại.
Như vậy để ghép nhiều LED 7 thanh thay vì chung ta phải dùng 8 chân riêng rẽ cho
mỗi LED. Ví dụ để hiện thị được 3 chữ số lên LED 7 (123 chẳn hạn) khi đó ta sẽ mất 3x8
= 24 chân dữ liệu điều khiển để hiện thị được 3 chữ số. Như vậy sẽ rất tốn chân vi xử lý,
do vậy người ta dùng chung các đường dữ liệu cho các LED 7 thanh và thiết kế thêm các
tín hiệu điều khiển cấp nguồn riêng rẽ cho từng LED 7 một hay là cấp nguồn cho các
chân Anot chung hay Katot chung. Nhìn trên sơ đồ trên ta thấy được kiểu ghép nối giữa
các LED. Các đường dữ liệu vào của 3 LED được chung với nhau và các chân điều khiển
nguồn cho các LED được riêng rẽ và được điều khiển bằng transitor ( khuếch đại dòng).
Như vậy đối với mạch trên chúng ta tiếp kiệm được nhiều chân vi xử lý. Đối với mạch
trên và cách ghép nối như trên thì mất tối đa chỉ có 11 chân vi xử lý .


8 chân dữ liệu của LED 7 được chung nhau và chung được ghép nối qua 2 cách : Thứ
nhất dùng vào trực tiếp các chân vi xử lý và thứ 2 là qua các IC đệm hay IC giải
mã...Nhưng trong thiết kế không mấy khi người ta cho trực tiếp các chân dữ liệu đó vào
trực tiếp vi xử lý mà người ta phải cho qua các IC đệm hay giải mã đối với hệ thống lớn.
Chỉ những mạch đơn giản người ta mới cho vào trực tiếp vi xử lý.Thông thường người ta
dùng thêm các IC đệm hay giải mã như ULN2803, 74LS47
Đối với phương pháp ghép LED như thế này thì làm sao điều khiển được hiện thị số
123 chả hạn. Nếu chúng ta mới nhìn thì sẽ thấy các LED 7 sẽ hiện thị giống nhau vì
chúng chung nhau đường dữ liệu. Nhưng không phải là vậy. Nếu chung ta cho từng thời
điểm từng LED sáng 1 thì chúng ta sẽ thấy khác đó. Số 123 sẽ được hiện thị lên 3 LED
đó. Đó là thuật toán quét LED dựa vào hiện tượng lưu ảnh trong mắt khi chúng ta quét
với tần số lớn.
Như vậy đối với phương pháp này chúng ta tiếp kiệm được một số lượng lớn chân vi xử
lý và đồng thời tiếp kiệm được năng lượng tiêu thụ do phương pháp quét LED trong thời
gian ngắn. Khi đó tối đa trong 1 thời điểm có 1 LED sáng toàn bộ thôi. Cần phải tính toán
giá trị dòng vào cho LED sao cho LED sáng đẹp bằng cách thêm bớt điện trở.

1.1.4 Mạch truyền thông chuẩn MAX232
Ưu điểm: 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.


Những đặc điểm cần lưu ý trong chuẩn RS232: Trong chuẩn RS232 có mức giới hạn
trên và dưới (logic 0 và 1) là +-15V. Hiện nay đang được cố định trở kháng tải trong
phạm vi từ-7000Ω- 3000Ω. Mức logic 1 có điện áp nằm trong khoảng -3V đến -15V,
mức logic 0 từ -3V đến 15V.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.
Quá trình truyền dữ liệu:
Truyền dữ liệu qua cổng nối tiếp RS232 được thực hiện không đồng bộ. Do vậy nên tại
một thời điểm chỉ có một bit được truyền (1 kí tự). Bộ truyền gửi một bit bắt đầu (bit
start) để thông báo cho bộ nhận biết một kí tự sẽ được gửi đến trong lần truyền bit tiếp
the . Bit này luôn bắt đầu bằng mức 0.. Tiếp theo đó là các bit dữ liệu (bits data) được gửi
dưới dạng mã ASCII( có thể là 5,6,7 hay 8 bit dữ liệu) Sau đó là một Parity bit ( Kiểm tra
bit chẵn, lẻ hay không) và cuối cùng là bit dừng - bit stop có thể là 1, 1,5 hay 2 bit dừng.
Tốc độ Baud:
Đây là một tham số đặc trưng của RS232. Tham số này chính là đặc trưng cho quá trình
truyền dữ liệu qua cổng nối tiếp RS232 là tốc độ truyền nhận dữ liệu hay còn gọi là tốc
độ bit. Tốc độ bit được định nghĩa là số bit truyền được trong thời gian 1 giây hay số bit
truyền được trong thời gian 1 giây. Tốc độ bit này phải được thiết lập ở bên phát và bên
nhận đều phải có tốc độ như nhau
( Tốc độ giữa vi điều khiển và máy tính phải chung nhau 1 tốc độ truyền bit)
Ngoài tốc độ bit còn một tham số để mô tả tốc độ truyền là tốc độ Baud. Tốc độ Baud
liên quan đến tốc độ mà phần tử mã hóa dữ liệu được sử dụng để diễn tả bit được truyền

còn tôc độ bit thì phản ánh tốc độ thực tế mà các bit được truyền.Vì một phần tử báo hiệu
sự mã hóa một bit nên khi đó hai tốc độ bit và tốc độ baud là phải đồng nhất
Một số tốc độ Baud thường dùng: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600,
19200, 28800, 38400, 56000, 115200 … Trong thiết bị họ thường dùng tốc độ là 19200,
Khi sử dụng chuẩn nối tiếp RS232 thì yêu cầu khi sử dụng chuẩn là thời gian chuyển mức
logic không vượt quá 4% thời gian truyền 1 bit. Do vậy, nếu tốc độ bit càng cao thì thời
gian truyền 1 bit càng nhỏ thì thời gian chuyển mức logic càng phải nhỏ. Điều này làm
giới hạn tốc Baud và khoảng cách truyền.
Bit chẵn lẻ hay Parity bit
Đây là bit kiểm tra lỗi trên đường truyền. Thực chất của quá trình kiểm tra lỗi khi
truyền dữ liệu là bổ xungthêm dữ liệu được truyền để tìm ra hoặc sửa một số lỗi trong
quá trình truyền . Do đó trong chuẩn RS232 sử dụng một kỹ thuật kiểm tra chẵn lẻ.


Một bit chẵn lẻ được bổ sung vào dữ liệu được truyền để ch thấy số lượng các bit "1"
được gửi trongmột khung truyền là chẵn hay lẻ.
Một Parity bit chỉ có thể tìm ra một số lẻ các lỗi chả hạn như 1,3,,5,7,9... Nếu như một
bit chẵn được mắc lỗi thì Parity bit sẽ trùng giá trị với trường hợp không mắc lỗi vì thế
không phát hiện ra lỗi. Do đó trong kỹ thuật mã hóa lỗi này không được sử dụng trong
trường hợp có khả năng một vài bit bị mắc lỗi.
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ỏ.
1.2 Vi mạch DS18B20
DS18B20 là cảm biến nhiệt độ kỹ thuật số giao tiếp 1-Wire (1 dây duy nhất), bên trong
IC được tích hợp sẵn cảm biến nhiệt và bộ chuyển đổi, khối xử lý, giao tiếp 1 wire, bộ

nhớ ROM, EEPROM, báo thức nhiệt độ khi đạt ngưỡng...
Thông số của cảm biến:
- Giải đo: -55 đến +125 độ C (sai số 0.5 độ C trong điều kiện -10 to +85 độ C)
- Nguồn cung cấp: 3 - 5.5V
- Độ phân giải: 9bit, 12bit
- Môi trường làm việc: Mọi môi trường nếu có vỏ bảo vệ tốt.
Đặc điểm:
Các đặc điểm kỹ thuật của cảm biến DS18B20 có thể kể ra một cách tóm tắt như sau:
• Sử dụng giao diện một dây nên chỉ cần có một chân ra để truyền thông.
• Có thể đo nhiệt độ trong khoảng -55 -> +125 oC.Với khoảng nhiệt độ là -10°C to
+85°C thì độ chính xác ±0.5°C.Có chức năng cảnh báo nhiệt độ vượt qua giá trị cho
trước.


• Điện áp sử dụng : 3 – 5.5 V,có thể cấu hình mã hóa nhiệu độ từ 9 – 12 bit
số bit càng lớn thì độ chính xác cao hơn.Thời gian chuyển đổi nhiệt độ tối đa là 750ms
cho mã hóa 12 bit
• Dòng tiêu thụ tại chế độ nghỉ cực nhỏ.
• Mỗi cảm biến có một mã định danh duy nhất 64 bit chứa trong bộ nhớ ROM trên chip
(on chip), giá trị nhị phân được khắc bằng tia laze.
• Nếu cấu hình cho DS18B20 theo 9,10,11,12 bit thì ta có độ chính xác tương ứng là :
0.5°C , 0.25°C ,0.125°C, 0.0625°C.Theo mặc định của nhà sản xuất nếu chúng ta không
cấu hình chế độ chuyển đổi thì nó sẽ tự cấu hình là 12 bit.
Khi bắt đầu chuyển đổi nhiệt độ thì chân DQ sẽ được kéo xuống mức thấp và khi chuyển
đổi xong thì ở mức cao.Như vậy ta sẽ căn cứ vào hiện tượng này để xác định khi nào
chuyển đổi xong nhiệt độ.
Giá trị nhiệt độ sau khi được chuyển đổi sẽ được lưu vào byte 0 và byte 1 trong vùng
nhớ 8 byte của SCRATCHPAD, định dạng của 2 byte lưu giá trị nhiệt độ như sau:

2 byte LS BYTE và MS BYTE được ghép với nhau thành 1 thanh ghi 16 bit được đánh

số từ bit thứ 0 cho tới bit thứ 15. Trong đó các bit cao từ bit thứ 11 đến bit thứ 15 là các


bit dấu, khi các bit này nhận giá trị bằng 1 thì ta nhận được các giá trị nhiệt độ âm và
ngược lại khi các bit này nhận giá trị 0 ta nhận được giá trị nhiệt độ dương. Các bit từ thứ
4 đến bit thứ 10 là phần giá trị nguyên của nhiệt độ chúng ta đo được. Còn lại là các bit từ
thứ 0 đến bit thứ 3 là các bit của phần thập phân của nhiệt độ
Các tập lệnh của ds18b20
- READ ROM (33h)
Cho phép đọc ra 8 byte mã đã khắc bằng laser trên ROM, bao gồm: 8 bit mã định tên
linh kiện (10h), 48 bit số xuất xưởng, 8 bit kiểm tra CRC. Lệnh này chỉ dùng khi trên bus
có 1 cảm biến DS1820, nếu không sẽ xảy ra xung đột trên bus do tất cả các thiết bị tớ
cùng đáp ứng.
- MATCH ROM (55h)
Lệnh này được gửi đi cùng với 64 bit ROM tiếp theo, cho phép bộ điều khiển bus chọn
ra chỉ một cảm biến DS1820 cụ thể khi trên bus có nhiều cảm biến DS1820 cùng nối vào.
Chỉ có DS1820 nào có 64 bit trên ROM trung khớp với chuỗi 64 bit vừa được gửi tới mới
đáp ứng lại các lệnh về bộ nhớ tiếp theo. Còn các cảm biến DS1820 có 64 bit ROM
không trùng khớp sẽ tiếp tục chờ một xung reset. Lệnh này được sử dụng cả trong trường
hợp có một cảm biến một dây, cả trong trường hợp có nhiều cảm biến một dây.
- SKIP ROM (CCh)
Lệnh này cho phép thiết bị điều khiển truy nhập thẳng đến các lệnh bộ nhớ của DS1820
mà không cần gửi chuỗi mã 64 bit ROM. Như vậy sẽ tiết kiệm được thời gian chờ đợi
nhưng chỉ mang hiệu quả khi trên bú chỉ có một cảm biến.
- SEARCH ROM (F0h)
Lệnh này cho phép bộ điều khiển bus có thể dò tìm được số lượng thành viên tớ đang
được đấu vào bus và các giá trị cụ thể trong 64 bit ROM của chúng bằng một chu trình dò
tìm.
- ALARM SEARCH (ECh)
Tiến trình của lệnh này giống hệt như lệnh Search ROM, nhưng cảm biến DS1820 chỉ

đáp ứng lệnh này khi xuất hiện điều kiện cảnh báo trong phép đo nhiệt độ cuối cùng.
Điều kiện cảnh báo ở đây được định nghĩa là giá trị nhiệt độ đo được lớn hơn giá trị TH
và nhỏ hơn giá trị TL là hai giá trị nhiệt độ cao nhất và nhiệt độ thấp nhất đã được đặt
trên thanh ghi trong bộ nhớ của cảm biến.


Sau khi thiết bị chủ (thường là một vi điều khiển) sử dụng các lệnh ROM để định địa
chỉ cho các cảm biến một dây đang được đấu vào bus, thiết bị chủ sẽ đưa ra các lệnh chức
năng DS1820. Bằng các lệnh chức năng thiết bị chủ có thể đọc ra và ghi vào bộ nhớ nháp
(scratchpath) của cảm biến DS1820. khởi tạo quá trình chuyển đổi giá trị nhiệt độ đo
được và xác định chế độ cung cấp điện áp nguồn. Các lệnh chức năng có thể được mô tả
ngắn gọn như sau:

- WRITE SCRATCHPAD (4Eh)
Lệnh này cho phép ghi 2 byte dữ liệu vào bộ nhớ nháp của DS1820. Byte đầu tiên được
ghi vào thanh ghi TH (byte 2 của bộ nhớ nháp) còn byte thứ hai được ghi vào thanh ghi
TL (byte 3 của bộ nhớ nháp). Dữ liệu truyền theo trình tự đầu tiên là bit có ý nghĩa nhất
và kế tiếp là những bit có ý nghĩa giảm dần. Cả hai byte này phải được ghi trước khi thiết
bị chủ xuất ra một xung reset hoặc khi có dữ liệu khác xuất hiện.
- READ SCRATCHPAD (BEh)
Lệnh này cho phép thiết bị chủ đọc nội dung bộ nhớ nháp. Quá trình đọc bắt đầu từ bit
có ý nghĩa nhấy của byte 0 và tiếp tục cho đến byte rhứ 9 (byte 8 – CRC). Thiết bị chủ có
thể xuất ra một xung reset để làm dừng quá trình đọc bất kỳ lúc nào nếu như chỉ có một
phần của dữ liệu trên bộ nhớ nháp cần được đọc.
- COPYSCRATCHPAD (48h)
Lệnh này copy nội dung của hai thanh ghi TH và TL (byte 2 và byte 3) vào bộ nhớ
EEPROM. Nếu cảm biến được sử dụng trong chế dộ cấp nguồn l bắt đầu việc đo.
- CONVERT T (44h)
Lệnh này khởi động một quá trình đo và chuyển đổi giá trị nhiệt độ thành số (nhị phân).
Sau khi chuyển đổi giá trị kết quả đo nhiệt độ được lưu trữ trên thanh ghi nhiệt độ 2 byte

trong bộ nhớ nháp Thời gian chuyển đổi không quá 200 ms, trong thời gian đang chuyển
đổi nếu thực hiện lệnh đọc thì các giá trị đọc ra đều bằng 0.
- READ POWER SUPPLY (B4h)
Một lệnh đọc tiếp sau lệnh này sẽ cho biết DS1820 đang sử dụng chế độ cấp
nguồn như thế nào, giá trị đọc được bằng 0 nếu cấp nguồn bằng chính đường dẫn dữ liệu
và bằng 1 nếu cấp nguồn qua một đường dẫn riêng.
Sơ đồ bộ nhớ của ds18b20


Các byte thứ 5 của bộ nhớ đệm có chức năng đăng ký cấu hình (config) cho ds18b20, và
các bít được tổ chức như sau:


Các bit từ 0 đến 4 luôn được đọc giá trị là 1, bít số 7 luôn được đọc giá trị là 0. Cấu hình
độ phân giải cho ds18b20 được quyết định bởi R1 và R0 ta có bảng thiết lập.


Chương 2 Thiết kế hệ thống
2.1 Phân tích giới hạn và lựa chon thiết bị
2.1.1 Yêu cầu công nghệ
Ghép nối vi điều khiển 8051 với led 7 thanh để hiển thị số đo nhiệt độ dung vi mạch
DS18B20, khoảng đo [-55 tới 1250C], 2 nút START và STOP để khởi động và dừng hệ
thống, loa cảnh báo ngưỡng thấp, ngưỡng cao.
Khi ấn START hệ thống thực hiện đo nhiệt độ, còn khi ấn STOP hệ thống lưu giá trị đo
cuối cùng
2.1.2 Các thiết bị sử dụng trong hệ thống
• Vi điều khiển AT89C51RD2
• 4 led bảy thanh
• Cảm biến nhiệt độ DS18B20
• Loa cảnh báo

• Nút ấn start/stop
• Vi mạch MAX232
2.2 Giao tiếp giữa 8051 với DS18B20
Cảm biến DS18B20 cho phép bạn kết nối nhiều cảm biến trên một đường dây DATA
(DQ) và nó cho phép kết nối ít nhất là 2 dây DQ và GND không cần cấp VCC, lúc này
chân VCC nối tắt sang GND, như vậy thì làm sao cấp nguồn được cho cảm biến hoạt
động ??? Để cấp nguồn thì cảm biến được thiết kế có thể lấy trực tiếp áp từ dây tín hiệu
DQ để duy trì hoạt động.
Sơ đồ kết nối cảm biến nhiệt ds18b20

Sơ đồ khi mắc nhiều cảm biến. (Chúng ta cũng chỉ cần 1 dây để lấy mẫu nhiệt độ)


Đọc nhiệt độ
Khi bắt đầu chuyển đổi nhiệt độ thì chân DQ sẽ được kéo xuống mức thấp và khi
chuyển đổi xong thì ở mức cao.Như vậy ta sẽ căn cứ vào hiện tượng này để xác định khi
nào chuyển đổi xong nhiệt độ. Lưu ý luôn phải dùng một điện trở tầm 4.7k trở lên vào
chân DQ treo lên nguồn như sơ đồ mắc.
Dưới đây là một ví dụ mẫu đo nhiệt độ bằng ds18b20 hiển thị Led các bạn tham khảo sẽ
hiểu rõ hơn về sử dụng cảm biến này như thế nào. Đồng thời tham khảo thêm datasheet
của ds18b20 đã được trình bày ở mục 1.2

2.3 Xây dựng mạch nguyên lý và thuyết minh


Mạch nguyên lý

Nguyên lý hoạt động của mạch
Khi ta ấn nút Start mạch bắt đầu làm việc . Vi điều khiển AT89C51RD2 nhận tín hiệu
từ cảm biến DS18B20 .Tại đấy tín hiệu của cảm biến sẽ đk vi điều khiển xử lý và biến

đổi để hiển thị trên led bảy thanh thông qua một chương trình hợp ngữ được lập trình từ
trước.
Khi ta ấn nút STOP hệ thống dừng làm việc và lưu giá trị đo cuối cùng trên các led bảy
thanh.
Nếu nhiệt độ từ cảm biến gửi về trên 100 0C hoặc dưới 00C thì vi điều khiển sẽ gửi tín
hiệu cảnh báo ra loa

2.4 Xây dựng thuật toán


BẮT ĐẦU

Hỏi đã ấn nút STAR hay chưa. Nếu Đúng thì làm công việc tiếp. Nếu Sai hỏi kiểm tra lại

P1=FFH
START=0
ALE=0 Hỏi đã tác động vào nút START hay chưa. Nếu Đúng cho bít điều khiển”ON” =

S
ON=1
?
Đ
Các chương trình con

S

CONVERT
P3.7=0
?
HEXTOBCD


Đ
ON=1

BCDTO7T

DISPLAY


2.5 Viết chương trình
dvi equ 50h
chuc equ 51h
tram equ 52h
dum equ 53h
cuong equ 54h
tcao equ 58h
tthap equ 59h
zov equ 61h
save equ 60h
LS equ 55h
MS equ 56h
KQ EQU 57H
DS18 bit P3.7
thanh_cong bit p3.6
org 0000h
jmp main
org 000bh
jmp ngat0
org 100
main:

mov tmod,#01h
mov tl0,#0e0h
mov th0,#0b1h
setb tr0
setb et0
mov cuong,#08h
mov dum,#3
setb ea
here:
jb p1.0,doc
nop
jnb p1.0,luu
jmp doc
doc:
call doc_DS18B20
JMP KT

; khai báo biến


luu:
mov save,KQ
KT:
jmp here
call doc_DS18B20
jmp here
ngat0:
clr tf0
call mot
call hienthi

mov tl0,#0e0h
mov th0,#0b1h
setb tr0
reti
mot:
mov a,KQ
mov b,#100
subb a,b
mov zov,c
jb zov,canhbao
clr p3.6
jmp c_ret
canhbao:
setb p3.6
c_ret:
ret
doc_DS18B20:
call resetds ;khoi dong DS18B20
jnb thanh_cong,doc_DS18B20
mov A,#0CCh
call viet1byte_18B20
mov A,#44h
call viet1byte_18B20
call delay1s
call resetds
mov A,#0CCh
call viet1byte_18B20



×