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

Bài Tập Lớn ĐO LƯỜNG VÀ ĐIỀU KHIỂN sử dụng 8051 và Cảm biến DHT11 đô nhiệt độ báo ra Màn Hình LCD CÓ CHƯƠNG TRÌNH

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 (1.37 MB, 41 trang )

Trường Đại học Công Nghiệp Hà Nội

Khoa điện

LỜI CẢM ƠN
Trong những năm gần đây công nghệ thong tin có những bước phát
triển vượt tăng vọt, đặc biệt là sự ra đời của máy tính đã tạo cho xã hội một
bước phát triển mưới, nó ảnh hưởng đến hầu hết các vấn đề của xã hội trong
công nghiệp cũng vậy. Hòa cùng với sự phát triển đó, ngày càng nhiều nhà
sản xuất đã ứng dụng các họ vi xử lí có tính năng mạnh vào trong công
nghiệp, trong việc điều khiển và xử lý dữ liệu. Những hạn chết trong kỹ thuật
tương tự như sự trôi thông số, sự làm việc cố định dài hạn, những khó khăn
của việc chuyển nhanh công nghệ số. Ngoài ra điều khiển số còn cho phép tiết
kiệm linh kiện phần cứng, cho phép tiêu chuẩn hóa. Với cùng một bộ vi xử lý,
một cấu trúc phần cứng có thể dùng cho mọi ứng dụng, chỉ cần thay nội dung
ô nhớ. Tuy nhiên kỹ thuật số có những nhược điểm như xử lý các tín hiệu rời
rạc,…, đồng thời tín hiệu tương tự có ưu điểm mà kỹ thuật số không có như
tác động nhanh và liên tục. Vì cậy ngày nay xu hướng trong điều khiển là
phối hợp điều khiển số và điều khiển tương tự.
Để nắm vững được những kiến thức đã học thì việc nghiên cứu là cần
thiết đối với sinh viên. Bài tập lớn môn học Vi xử lý trong đo lường và điều
khiển đã giúp cho chúng em biết them được rất nhiều về cả kiến thức lẫn kinh
nghiệm.
Nhân đây em cũng xin cảm ơn rất nhiều đến thầy giáo Bùi Văn Huy đã
tận tình hướng dẫn và chỉ bảo em để làm bài này.

Nhóm 7

1

Lớp: ĐH Tự Động Hóa 3




Trường Đại học Công Nghiệp Hà Nội

Khoa điện

MỤC LỤC

Nhóm 7

2

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

DANH MỤC HÌNH VE

Nhóm 7

3

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội


Khoa điện

CHƯƠNG 1: TỔNG QUAN VỀ VI XỬ LÝ TRONG ĐO LƯỜNG
VÀ ĐIỀU KHIỂN
1.1. Cấu trúc hệ thống đo lường điều khiển có sử dụng Vi xử ly
1.1.1. Vi xử ly
Chữ "vi " trong khái niệm trên có nguồn gốc từ chữ "micro" ký hiệu là
"μ", có ý nghĩa là "một phần triệu" hoặc "rất nhỏ". Vi xử lý (Microprocessor)
có nghĩa là "bộ xử lý rất nhỏ", được ký hiệu là "μP".

Hình 1.1: Đơn vị xử lí trung tâm
Về cơ bản, μP thường có cấu trúc được thể hiện trong hình trên. Tùy
từng loại μP, chúng có thể có thêm một vài đơn vị chức năng khác nữa, nhưng
cấu trúc tối thiểu của chúng bao giờ cũng có ba khâu:
Khâu tính toán: gồm có đơn vị số học và lôgic (Arithmetic Logic Unit:
ALU), các thanh ghi số liệu và địa chỉ.
Nhóm 7

4

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

Khâu điều khiển: gồm có bộ giải mã lệnh và bộ đếm chương trình.
Khâu đệm: với các bộ đệm (thường là ba trạng thái: Tri-State), ghép nối
Bus trên phiến của μP với các Bus điều khiển, số liệu và địa chỉ nằm bên

ngoài.
Hai khâu tính toán và điều khiển thường được gọi ghép chung là đơn vị
xử lý trung tâm (Central Processing Unit: CPU). Khi nảy sinh nhu cầu sử
dụng μP trong các hệ thống điều khiển tự động (ĐKTĐ), ta sẽ phải sử dụng
thêm các phần tử ngoại vi, tạo thành giao diện thích hợp giữa μP với môi
trường công nghệ bên ngoài phiến (Chip).
1.1.2. Vi xử ly tín hiệu
Để phân biệt được sự khác nhau cơ bản giữa μP và vi xử lý tín hiệu
(Digital Signalprocessor, viết tắt: DSP) ta phải xem xét kỹ hơn khâu tính toán
thuộc CPU của μP.
Đối với μP thông thường, các phép tính số học thường được thực hiện
giữa các thanh ghi số liệu có bề rộng chính bằng bề rộng của số liệu. Ví dụ:
nếu μP 16-Bit thì các thanh ghi số liệu cũng là 16-Bit. Điều này dẫn đến
nhược điểm sau đây: Bất kỳ thanh ghi nào cũng có thể nhận kết quả của phép
tính số học như cộng trừ. Điều này gây khó khăn khi thực hiện các phép cộng
trừ có tích lũy, nhất là khi kết quả của các phép tính đó vượt quá kích cỡ số
liệu cho phép (ở ví dụ trên: 16-Bit)
Khi thực hiện phép nhân, kết quả bao giờ cũng có bề rộng gấp đôi của
số liệu chuẩn. Ví dụ: phép nhân 16-Bit x 16-Bit cho kết quả 32 Bit. Các μP có
hỗ trợ phép nhân thường cất kết quả ở 2 thanh ghi số liệu riêng biệt. Điều này
làm cho người lập trình sẽ phải tốn kém thêm vài thao tác lệnh nữa để làm
tròn số mới đi đến kết quả 16-Bit cuối cùng mà ít gây sai số.
Bí quyết thành công của DSP có thể được diễn giải một cách đơn giản
công thức:

Nhóm 7

5

Lớp: ĐH Tự Động Hóa 3



Trường Đại học Công Nghiệp Hà Nội

Khoa điện

Đó là công thức nổi tiếng tính "tổng tích lũy" được sử dụng trong hầu
hết các thuật toán xử lý tín hiệu số (digital) như các khâu lọc tín hiệu, biến đổi
Fourier ... Phần lớn các thuật toán điều khiển/ điều chỉnh (ĐK/ĐC) cũng có
thể quy về công thức đó. Nếu μP thông thường muốn thực hiện thuật toán (1)
với tốc độ cao, μP đó phải có khả năng thực hiện đồng thời một phép nhân và
một phép cộng chỉ trong một nhịp lệnh duy nhất. Vì giá trị của tổng (1) liên
tục được tăng thêm lượng bằng kết quả của phép nhân. μP sẽ phải có bộ phận
cứng và một thanh ghi tích lũy. Trong các μP thông thường không có thanh
ghi này, chí ít cũng thiếu bộ nhân. Khâu tính toán của DSP vì vậy được bổ
sung thêm một thanh ghi tích lũy (Accumlator, viết tắt: ACC) có bề rộng gấp
đôi bề rộng số liệu chuẩn. Ví dụ: nếu bề rộng số liệu là 16-Bit, ACC sẽ là 32Bit. Duy nhất thanh ghi ACC là nơi thực hiện và chứa kết quả của mọi phép
cộng/trừ, vì vậy rất thuận tiện cho các phép tính tích lũy sau khi nhân, cho
phép giảm một cách đáng kể (so sánh với μP thông thường) thời gian thực
hiện các phép tính xử lý tín hiệu.
Như vậy, về bản chất DSP là μP có thêm thanh ghi ACC và bộ nhân
cứng. Nhiều DSP kết hợp cả hai khâu đó trong một đơn vị gọi là MACC, ở
trên ta đã nhắc đến nhược điểm cố hữu của μP khi thực hiện phép nhân: đó là
việc bề rộng của kết quả nhân tăng gấp đôi và được cất ở 2 thanh ghi khác
nhau khiến cho thao tác làm tròn hoặc xử lý kết quả rất tổn thất thời gian.
Cũng tại đây, nổi bật lợi thế của DSP: nhiều DSP cho phép thực hiện các thao
tác đó đồng thời với nhân và tích lũy chỉ trong một nhịp lệnh duy nhất. Tuy
nhiên, có được thế mạnh đó còn là nhờ thay đổi cấu trúc Bus trên chip.
Ta hãy xét cách thực hiện một lệnh nhân của μP thông thường khi tính
công thức (1). Công thức đó có chứa các hệ số ai cố định, vì vậy chúng sẽ

được cất ở bộ nhớ chương trình. Các dữ liệu xi được cất ở bộ nhớ số liệu.
Chương trình và số liệu của các μP thông thường đều sử dụng chung 1 Bus
địa chỉ là 1 Bus số liệu. Vì vậy trình tự tính thường là như sau:

Nhóm 7

6

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội






Khoa điện

Xâm nhập vào bộ nhớ lần thứ 1 để đọc mã lệnh, mã lệnh được đưa từ bộ nhớ
tới μP.
μP giải mã lệnh và biết là phải thực hiện phép nhân.
Xâm nhập lần thứ 2 vào bộ nhớ chương trình để đọc giá trị của ai
Xâm nhập lần thứ 3 vào bộ nhớ số liệu để đọc giá trị của xi
Thực hiện phép nhân.
Ta đã biết, cách tổ chức Bus như trên được gọi là cấu trúc Vonneumann

Hình 1.2: Cấu trúc Vonneumann
Ngược với μP thông thường, DSP có nhiệm vụ chuyển số liệu tính tới

khâu tính càng nhanh càng tốt. Để làm được điều này, buộc phải tốn kém hơn:
phải chia không gian nhớ trên chip ra làm 2 và vì thế phải có 2 Bus địa chỉ và
2 Bus số liệu (hình b) độc lập cho 2 vùng nhớ. Nhờ cách tổ chức này, DSP có
khả năng thâm nhập vào 2 vùng nhớ để đọc 2 toán hạng chỉ trong 1 nhịp duy
nhất vì vậy tiết kiệm được nhiều thời gian. Cấu trúc Bus này có tên là cấu trúc
Harward.

Nhóm 7

7

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

Trên thực tế, vì lý do giá thành chỉ có thể thực hiện cấu trúc Bus
Harward cho các bộ nhớ trên phiến (on-chip). Do đó, khi tra cứu về cấu trúc
bên trong của DSP, bạn đọc sẽ thường gặp khái niệm Promgram Bus (hình b):
(Bus số liệu 2, Bus địa chỉ 2) và Data bus (Bus số liệu 1, Bus địa chỉ 1). Đối
với bên ngoài phiến, DSP vẫn sử dụng Bus địa chỉ, Bus số liệu chung cho cả
hai vùng nhớ. Điều này giải thích cho ta thấy: Tại sao DSP chỉ có khả năng
thực hiện phép nhân trong một nhịp duy nhất, nếu các toán hạng đều nằm ở
vùng nhớ on-chip.
Ngoài ra, khi thực hiện phép cộng tích lũy (1),đồng thời DSP có thể
phải thực hiện thêm các thao tác dịch trái, dịch phải (vị trí dấu phẩy) hay làm
tròn tổng cuối cùng. Nhiều DSP có khả năng kết hợp thao tác đó trong một
lệnh duy nhất.

Tóm lại DSP được phân biệt với μP thông thường là nhờ ở:




Có thêm thanh ghi tích lũy ACC và bộ nhân cứng
Có cấu trúc Bus trên phiến theo kiểu cấu trúc Harward
Có khả năng tích hợp nhiều thao tác lệnh trong cùng một lệnh duy nhất. Tất
cả các điểm khác nhau đó chỉ nhằm tạo cho DSP khả năng thực hiện với tốc
độ có phép tính tổng tích lũy (1)
Dễ dàng thấy rằng, ứng dụng của DSP không chỉ giới hạn trong việc
thực hiện các thuật toán xử lý số liệu (xử lý tín hiệu) tốc độ cao. DSP có thể
phát huy được ưu thế của nó trong tất cả các ứng dụng ĐK/ĐC thời gian thực,
nơi mà: thời gian tính toán (thời gian trích mẫu) chỉ nằm trong khoảng vài
trăm ms và phép cộng tích lũy (thuật toán điều chỉnh digital) thường xuyên
được cần đến.
Vi điều khiển = μP (hoặc DSP) + ngoại vi + ngắt không cần thủ tục

Nhóm 7

8

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

Trong quá trình đi lên của công nghệ tự động, μP được sử dụng ngày

càng nhiều trong các thiết bị ĐK/ĐC. Nhằm tăng độ tin cậy, đồng thời giảm
giá thành của hệ thống, người ta đã tìm cách tích hợp các phần tử ngoại vi cơ
bản trên phiến. Đó là những phần tử ngoại vi thường gặp nhất trong kỹ thuật:


Khâu biến đổi tượng tự số (Analog to Digital Con-verter, viết tắt: ACD):
Khâu này có thể gồm 1-2 bộ ADC với khả năng xen nhiều kênh. Độ phân giải



thường là 8-10 Bit.
Khâu điều chế điện áp hình sin (Puls Width Modulation, viết tắt: PWM):
Khâu PWM có thể có nhiều kênh, đặc biệt là khả năng tạo điện áp xoay chiều
3 pha với cơ chế bù thời gian an toàn bảo vệ van bán dẫn công suất lớn. Độ



phân giải từ 50nsec - vài msec.
Hệ thống thanh ghi CAPCOM(Capture/compara Register) phục vụ việc ghi
nhận tín hiệu từ bên ngoài đến (rất quan trọng trong đo lường) hoặc tạo tín



hiệu phát ra ngoài (rất quan trọng trong điều khiển).
Hệ thống các thanh ghi và cổng đặc biệt: Khi các phần tử ngoại vi được
tích hợp chung với μP trên cùng một phiến, linh kiện mới này được gọi là "Vi
điều khiển" (Microcontroller. Viết tắt: μC).
Tóm lại: μC được phân biệt với μP là do các đặc điểm có thêm các phần
tử ngoại vi cơ bản trên phiến và có cơ chế ngắt không cần thủ tục ngắt. Điều
này cho phép nâng cao tốc độ tính toán, tăng độ tin cậy, đồng thời giảm giá

thành của hệ thống.
1.2. Cấu trúc chung họ 8051
1.2.1 Giới thiệu về dòng vi điều khiển 8051
Vào năm 1981 hãng Intel giới thiệu bộ vi điều khiển được gọi là 8051.
Bộ vi điều khiển này có 128 byte RAM, 4K byte ROM trên chip, hai bộ định
thời, một cổng nối tiếp và 4 cổng (độ rộng 8 bit) vào – ra tất cả được đặt trên
một chip. 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ự
Nhóm 7

9

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

liệu 8 bit để xử lý. 8051 đã trở lê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 các dạng biến thể của 8051. Điều này dẫn đến sự ra
đời nhiều phiên bản của 8051 với các tốc độ khác nhau và dung lượng ROM
trên chip khác nhau. 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 chip, 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 viết chương trình của
mình cho một phiên bản nào của 8051 thì nó cũng sẽ chạy với mọi phiên bản
khác mà không phân biệt nó được sản xuất từ hãng nào.
Đặc tính

Số lượng

Rom trên chip
4K byte
RAM
128 byte
Bộ định thời
2
Số chân I/O
32
Cổng nối tiếp (UART)
1
Nguồn ngắt
6
Bảng 1.1: Các đặc tính của dòng 8051

Nhóm 7

10

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

1.2.2 Kiến trúc phân cứng
1.2.2.1 Sơ độ khổi
Kiến trúc cơ bản bên trong 8051 bao gồm các khối chức năng sau:

Hình 1.4: Kiến trúc cơ bản trong 8051

CPU
ROM
RAM
I/O Ports
Timer/Counter
Serial Port
Interrupt Control
OSC

Nhóm 7

: Đơn vị điều khiển trung tâm
: Bộ nhớ chương trình
: Bộ nhớ dữ liệu
: Cổng nhập xuất
: Bộ định thời/bộ đếm 16 bit
: Cổng nối tiếp
: Khối điều khiển ngắt
: Bộ chia tần số

11

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

1.2.2.2 Sơ đồ và chức năng của các chân


Hình1.5:Sơ đồ chân của 8051


Chân 9 – RST: Chân Reset
Khi tín hiệu này được đưa lên mức cao trong ít nhất là 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. Hay nói cách khác là vi điều khiển sẽ bị reset nếu chân này
được kích hoạt mức cao.

Nhóm 7

12

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

Hình 1.6: Sơ đồ reset ngoài của 8051


Chân 10 đến 17: được gọi là Cổng 3 (Port 3)
Tám chân này ngoài chức năng là xuất và nhập như các chân ở cổng 1
(chân 1 đến 8) thì mỗi chân này còn có chức năng riêng nữa, cụ thể như sau:
Bit
P3.0
P3.1

P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Nhóm 7

Tên
Chức năng
RxD
Chân nhận dữ liệu cho cổng nối tiếp
TxD
Chân truyền dữ liệu cho cổng nối tiếp
INT0
Chân ngắt ngoài 0
INT1
Chân ngắt ngoài 1
T0
Ngõ vào của Timer/Counter 0
T1
Ngõ vào của Timer/Counter 1
WR
Xung ghi bộ nhớ dữ liệu ngoài
RD
Xung đọc bộ nhớ dữ liệu ngoài
Bảng 1.2 : Bảng mô tả chức năng riêng của Port 3

13


Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội


Khoa điện

Chân 18 và 19 (XTAL1 và XTAL2)
Hai chân sử dụng để nối với bộ dao động thạch anh ngoài

Hình 1.8: Mạch dao động thạch anh ngoài của 8051
Thông thường một bộ dao động thạch anh sẽ được nối tới các chân đầu vào
XTAL1 (chân 19) và XTAL2 (chân 18) cùng với hai tụ gốm giá trị khoảng
30pF. Một phía của tụ điện được nối xuống đất như hình trên. Các hệ thống
xây dựng trên 8051 thường có tần số thạch anh từ 10 đến 40 MHz, thông



thường ta dùng thạch anh 11.0592 Mhz
Chân 20: được nối vào chân 0V của nguồn cấp
Chân 21 đến chân 28: được gọi là cổng 2 (Port 2)
Tám chân của cổng 2 có 2 công dụng, ngoài chức năng là cổng xuất và nhập
như cổng 1 thì cổng 2 này còn là byte cao của bus địa chỉ khi sử dụng bộ nhớ



ngoài.
Chân 29 (PSEN): Chân 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 của ROM ngoài để cho phép đọc các byte mã
lệnh trên ROM ngoài. PSEN ở mức thấp trong thời gian đọc mã lệnh. Khi
thực hiện chương trình trong ROM nội thì PSEN được duy trì ở mức cao

Nhóm 7

14

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện



Chân 30 (ALE): Chân ALE cho phép tách các đường dữ liệu và các đường địa



chỉ tại Port 0 và Port 2.
Chân 31 (EA): Tín hiệu chân EA cho phép chọn bộ nhớ chương trình là bộ
nhớ trong hay ngoài vi điều khiển. Nếu chân EA được nối ở mức cao (nối
nguồn Vcc), thì vi điều khiển thi hành chương trình trong ROM nội. Nếu chân
EA ở mức thấp (được nối GND) thì vi điều khiển thi hành chương trình từ bộ



nhớ ngoài.

Chân 32 đến 39: được gọi là cổng 0 (Port 0) Cổng 0 gồm 8 chân cũng có 2
công dụng, ngoài chức năng xuất nhập, cổng 0 còn là bus đa hợp dữ liệu và
địa chỉ, chức năng này sẽ được sử dụng khi 8051 giao tiếp với các biết bị
ngoài có kiến trúc Bus như các vi mạch nhớ... Vì cổng P0 là một máng mở
khác so với các cổng P1, P2 và P3 nên các chân ở cổng 0 phải được nối với
điện trở kéo khi sử dụng các chân này như chân vào/ra. Điện trở này tùy thuộc
vào đặc tính ngõ vào của thành phần ghép nối với chân của port 0. Thường ta
dùng điện trở kéo khoảng 4K7 đến 10K

Hình 1.8 : Nối trở kéo cho Port 0


Chân 40: chân nguồn của vi điều khiển, được nối vào chân Vcc của nguồn

Nhóm 7

15

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

1.2.3. Tổ chức bộ nhớ
Trên vi điều khiển 8051/8052 đều có cả bộ nhớ chương trình (ROM) và
bộ nhớ dữ liệu (RAM). Tuy nhiên dung lượng của các bộ nhớ trên chip là hạn
chế. Khi thiết kế các ứng dụng đòi hỏi bộ nhớ lớn người ta có thể dùng bộ
nhớ ngoài.

1.2.3.1. Bộ nhớ chương trình
Bộ nhớ chương trình là bộ nhớ chỉ đọc, là nơi lưu trữ chương trình của
vi điều khiển. Bộ nhớ chương trình của họ 8051 có thể thuộc một trong các
loại sau ROM, EPROM, FLASH hoặc không có bộ nhớ chương trình trên
chip. Với họ vi điều khiển 89xx, bộ nhớ chương trình được tích hợp sẵn trong
chip có kích thước nhỏ nhất là 4kByte. Với các vi điều khiển không tích hợp
sẵn bộ nhớ chương trình trên chip, buộc phải thiết kế bộ nhớ chương trình bên
ngoài.
Địa chỉ đầu tiên của bộ nhớ chương trình là 0000H, chính là địa chỉ
reset của vi điều khiển. Ngay khi bật nguồn hoặc reset vi điều khiển, thì CPU
sẽ nhảy đến thực hiện lệnh ở địa chỉ 0000H này.
Khi sử dụng bộ nhớ trên chip thì chân EA phải được nối lên mức logic
cao (+5V). Nếu bạn muốn mở rộng bộ nhớ chương trình thì chúng ta phải
dùng bộ nhớ ngoài với dung lượng tối đa là 64Kbyte.
1.2.3.2. Bộ nhớ dữ liệu
Bộ nhớ dữ liệu tồn tại độc lập so với bộ nhớ chương trình. Họ vi điều
khiển 8051 có bộ nhớ dữ liệu tích hợp trên chip nhỏ nhất là 128byte và có thể



mở rộng với bộ nhớ dữ liệu ngoài lên tới 64kByte.
Bộ nhớ dữ liệu được phân chia như sau:
Các băng thanh ghi có địa chỉ từ 00H đến 1FH
32 byte thấp của bộ nhớ nội được dùng cho các băng thanh ghi (dãy
thanh ghi). Bộ lệnh 8051 hỗ trợ 8 thanh ghi R0 đến R7 và theo mặc định sau
khi reset hệ thống, các thanh ghi này có các địa chỉ từ 00H đến 07H.
Do có 4 băng thanh ghi nên tại một thời điểm chỉ có duy nhất 1 băng
thanh ghi được truy suất bới các thanh ghi R0 - R7, để thay đổi các băng
thanh ghi thì ta thay đổi các bit chọn băng trong thanh ghi trạng thái PSW.
 Vùng RAM địa chỉ hóa từng bit có địa chỉ từ 20h đến 2Fh


Nhóm 7

16

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

8051 chứa 210 vị trí bit được định địa chỉ trong đó 128 bit chứa trong
các byte ở địa chỉ từ 20H đến 2FH (16 byte x 8 bit = 128 bit) và phần còn lại
chứa trong các thanh ghi đặc biệt. Ngoài ra 8051 còn có các cổng xuất/nhập
có thể định địa chỉ từng bit, điều này làm đơn giản việc giao tiếp bằng phần


mềm với các thiết bị xuất/nhập đơn bit.
Vùng RAM đa dụng có địa chỉ từ 30h đến 7Fh
Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được
truy xuất tự do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián
tiếp
Các thanh ghi chức năng đặc biệt có địa chỉ từ 80h đến FFh
Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năng
đặc biệt SFR chiếm phần trên của Ram nội từ địa chỉ 80H đến FFH. Cần lưu ý
là không phải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chỉ
có 21 địa chỉ được định nghĩa.
1.3. Tổng quan về ngôn ngữ C và các hàm, kiểu dữ liệu hay dùng cho việc
lập trình cho Vi điều khiển

1.3.1. Giới thiệu ngôn ngữ C
Trong kỹ thuật lập trình vi điều khiển ngôn ngữ lập trình chia làm 2
loại: Ngôn ngữ bậc thấp và Ngôn ngữ bậc cao. Ngôn ngữ bậc cao là các ngôn
ngữ gần vơi ngôn ngữ con người hơn nên đọc dễ hiểu. Có nhiều ngôn ngữ lập
trình bậc cao như Basic, Pascal,C,…
C là ngôn ngữ lập trình thông dụng.
Chương trình viết bằng ngôn ngữ bậc cao cũng sẽ được một phần mềm
trên máy tính gọi là trình biên dịch (Compiler) chuyển sang dạng hợp
ngữ trước khi chuyển sang mã máy.
Khi sử dụng ngôn ngữ C người lập trình không cần hiểu sâu sắc về cấu
trúc của bộ vi điều khiển. Có nghĩa là với một người chưa quen với một vi
điểu khiển cho trước sẽ xây dựng được chương trình một cách nhanh chóng
hơn, do không phải mất thời gian tìm hiểu kiến trúc của vi điều khiển đó. Và

Nhóm 7

17

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

việc sử dụng lại các chương trình đã xây dựng trước đó cũng dễ dàng hơn, có
thể sử dụng toàn bộ hoặc sửa chữa một phần.
1.3.2. Kiểu dữ liệu trong C
Kiểu
Char

Unsigned char
Int
Unsigned int
Long
Unsigned long
Kiểu
Float
Double
Long double

Độ rộng bit
Dãy giá tri
1 byte
-128 đến 127
1 Byte
0 đến 255
2 byte hoặc 4 byte
-32,768 đến 32,767
2 byte hoặc 4 byte
0 đến 65535
4 byte
-2,147,483,648 tới 2,147,483,647
4 byte
0 tới 4,294,967,295
Bảng 1.3: Kiểu số nguyên trong C
Độ rộng bit
Dãy giá tri
4 byte
1.2E-38 tới 3.4E+38
8 byte

2.3E-308 tới 1.7E+308
10 byte
3.4E-4932 tới 1.1E+4932
Bảng 1.4: Kiểu số thực trong C

1.3.3.Khai báo biến
– Cú pháp: Kiểu_dữ_liệu Vùng_nhớ Tên_biến _at_ Đia_chỉ;
Ví dụ: Unsigned char data x;
– Khi khai báo biến có thể gán luôn cho biến giá trị ban đầu.
Ví dụ: Thay vì unsigned char x;
x = 0;
Ta chỉ cần:

unsigned char x = 0;

– Có thể khai báo nhiều biến cùng một kiểu một lúc.
Ví dụ: Unsigned int x,y,z,t;
CHƯƠNG 2: Cảm biến DHT11 và giao tiếp chuẩn 1 Wire
2.1. Cấu tạo và đặc điểm của DHT11
2.1.1. Giới thiệu về cảm biến DHT11
Cảm biến nhiệt độ và độ ẩm DHT11
2.1.2. Thông số DHT 11
Tham số
Độ ẩm
Độ phân giải
Nhóm 7

Điều kiện

Minimum

Typical
1%RH
1%RH
8 Bit
18

Maximum
1%RH

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

Sai số
o

Độ chính xác
Interchangeabilit
y
Dải đo
Thời gian phản
hồi (giây)

25 C
0-50oC
Fully Interchangeable
0oCC

25oC
50oC
1/e(63%)
25 C,
1 m/s Air

30%RH
20%RH
20%RH
6s

Độ trễ
Độ ổn đinh

± 1%RH
± 4%RH
± 5%RH
90%RH
90%RH
80%RH
15 s

10 s
± 1%RH
±
1%RH/year

Điều kiện
thường


Nhiệt độ
Độ phân giải

1oC
8 Bit

Sai số
Độ chính xác
Dải đo
Thời gian phản
hồi (giây)

± 1o C
0oC
6s

1/e(63%)

1oC
8 Bit
± 1o C

1oC
8 Bit
± 1oC
50oC
30 s

Bảng 2.1: Thông số của cảm biến DHT 11


Nhóm 7

19

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

2.1.3. Sơ đồ nối dây

Hình 2.1: Sơ đồ nối dây DHT 11 với vi điều khiển








1Pin: Dương nguồn
2Pin: Chân data
3Pin: Ko kết nối ( Not connect)
4Pin: Âm nguồn
MCU: Vi điều khiển
Khi khoảng cách nối dây nhỏ hơn 20m thì phải có trở treo 5K Ohm
Khi khoảng cách nối dây lớn hơn 20m thì cần phải chọn trở hợp lí
2.1.4. Nguồn cho DHT 11

DHT 11 dùng nguồn từ 3 đến 5.5 VDC
Ta cần thêm 1 tụ gốm 100nF nối giữa chân VCC và GND để lọc nhiễu, ta
chon tụ gốm 104
2.1.5. Giao tiếp chuẩn 1 wire với DHT11

o
o

Giao tiếp chuẩn 1 wire được dùng để giao tiếp giữa DHT11 và vi điều khiển
1 chu kì lấy dữ liệu mất khoảng 4ms

Nhóm 7

20

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội
o

Khoa điện

Dữ liệu bao gồm 32 bite dữ liệu và 8 bit tổng để kiểm tra xem dữ liệu chuyển
về đã đúng chưa. Dữ liệu gửi về có dạng như sau:
0011 0101
0000 0000
HH
LH
Trong đó:


0001 1000
HT

0000 0000
LT

0100 1101
PT

HH

: Phần nguyên của độ ẩm ( High humidity)

LH

: Phần thập phân của độ ẩm ( Low humidiy)

HT

: Phần nguyên của nhiệt độ ( High temperature)

LT

: Phần thập phân của nhiệt độ ( Low temperature)

PT

: Byte kiểm tra tính toàn vẹn của dữ liệu ( Parity bit)


Tính toán:
0011 0101 + 0000 0000 +0001 1000 + 0000 0000 = 0100 1101
Kết quả trả về “true”
Độ ẩm: 0011 0101 = 53 %RH
Nhiệt độ: 0001 1000 = 24 oC
Nếu HH + LH + HT + LT ≠ PT thì đọc lại dữ liệu từ DHT11
2.2. Nguyên lí giao tiếp Vi điều khiển theo chuẩn 1 Wire
2.2.1. Giới thiệu chuẩn giao tiếp 1 wire:
Chuẩn giao tiếp 1 dây (1 wire) do hãng Dallas giới thiệu. Trong chuẩn
giao tiếp này chỉ cần 1 dây để truyền tín hiệu và làm nguồn nuôi (Nếu không
tín dây mass). Là chuẩn giao tiếp không đồng bộ và bán song công (halfduplex). Trong giao tiếp này tuân theo mối liên hệ chủ tớ một cách chặt chẽ.
Trên một bus có thể gắn 1 hoặc nhiều thiết bị slave. Nhưng chỉ có một master
có thể kết nối đến bus này.
Bus dữ liệu khi ở trạng thái rãnh (khi không có dữ liệu trên đường
truyền) phải ở mức cao do vậy bus dữ liệu phải được kéo lên nguồn thông qua
một điện trở. Giá trị điện trở này có thể tham khảo trong datasheet của thiết bị
/ các thiết bị slave.
Nhóm 7

21

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

Hình 2.2: Cấu trúc mạng 1 wire
Các thiết bị tớ (slave) kết nối với cùng một bus được phân biệt với nhau

nhờ 64 bit địa chỉ duy nhất (64-bit serial number). 8 byte (64 bit) này và được
chia làm ba phần chính:
+ Bắt đầu với LSB, là byte đầu tiên là mã họ thiết bị có độ lớn 8 bit (8bit family codes) xác định kiểu thiết bị. 6 byte tiếp theo lưu trữ địa chỉ riêng
của thiết bị. Byte cuối cùng (MSB) là byte kiểm tra tính toàn vẹn dữ
liệu cyclic redundancy check (CRC) có giá trị tương ứng với giá trị của 7 byte
đầu tiên. Nhờ byte CRC giúp cho master xác định có địa chỉ được đọc có bị
lỗi hay không. Với 224 địa chỉ khác nhau tạo ra một số lượng rất lớn các địa
chỉ.Do vậy vấn đề về địa chỉ không phải là vấn đề chính trong chuẩn giao tiếp
này.
2.2.2. Cách thức hoạt động:
Nhóm 7

22

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

Tín hiệu trên bus 1 wire chia thành các khe thời gian 60 µs. 1 bit dữ
liệu được truyền trên bus dựa trên khe thời gian (time slots). Các thiết bị slave
cho phép có thời gian nền có một chúc khác biệt từ thời gian nền danh nghĩa.
Tuy nhiên đối với thiết bị master cần có bộ định thời với độ chính xác
cao, để đảm bảo giao tiếp đúng với các thiết bị salve có thời gian nền khác
biệt. Do đó rất quan trọng để tuân theo giới hạn thời gian mô tả trong các
phần sau.
Bốn thao tác hoạt động cơ bản của bus 1 wire là Reset/Presence, gửi bit
1, gửi bit 0, và đọc bit. Thao tác byte như gửi byte và đọc byte dựa trên thao

tác từng bít.
Gửi bit 1 (“Write 1” signal)
Thiết bị master kéo bus xuống mức thấp trong khoảng 1 đến 15µs. Sau
đó nhả bus (releases the bus) cho đến hết phần còn lại của khe thời gian.

Gửi bit 0 ("Write 0" signal)
Kéo bus xuống mức thấp trong ít nhất 60µs, với chiều dài tối đa là 120 µs

Lưu ý: giữa các lần gửi bit (0 hoặc 1), phải có khoảng thời gian phục
hồi bus (recovery time) tối thiểu 1 µs
Đọc bit:

Nhóm 7

23

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

Thiết bị master kéo bus xuống mức thấp từ 0 -15µs. Khi đó thiết bị tớ
khi đó sẻ giữ bus ở mức thấp nếu muốn gửi bit 0, Nếu muốn gửi bit 1 đơn
giản là nhả bus. Bus nên lấy mẫu 15 µs sau khi bus kéo xuống mức thấp.

"Reset/Presence":
Tín hiệu reset và Presence(Báo hiện diện) được trình bày như hình bên
dưới. Thiết bị master kéo bus xuống thấp ít nhất 8 khe thời gian (tức là 480

µs) và sau đó nhả bus. Khoảng thời gian bus ở mức thấp đó gọi là tín hiệu
reset. Nếu có thiết bị slave gắn trên bus nó sẻ trả lời bằng tín hiệu Presence
tức là thiết bị tớ sẻ kéo bus xuống mức thấp trong khoảng thời gian 60µs. Nếu
không có tín hiệu Presence, thiết bị master sẻ hiểu rằng không có thiết bị slave
nào trên bus, và các giao tiếp tiếp theo sẻ không thể diễn ra.

Nhóm 7

24

Lớp: ĐH Tự Động Hóa 3


Trường Đại học Công Nghiệp Hà Nội

Khoa điện

CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG TRÊN CƠ SỞ 8051
3.1. Lưu đồ thuật toán
3.2. Chương trình điều khiển xây dựng trên KeilC
3.2.1. Khai báo thư viện cà các biến dùng trong chương trình
#include <reg51.h>
sbit DHT11=P3^5;

// Chan tin hieu DHT11

sbit lcd_RS=P2^1;

// Chan RS cua LCD


sbit lcd_EN=P2^3;

// Chan EN cua LCD

sbit lcd_D4=P2^4;

// Chan D4 cua LCD

sbit lcd_D5=P2^5;

// Chan D5 cua LCD

sbit lcd_D6=P2^6;

// Chan D6 cua LCD

sbit lcd_D7=P2^7;

// Chan D7 cua LCD

int I_RH,D_RH,I_Temp,D_Temp,CheckSum;
Do LCD trong ứng dụng này chỉ cần đặt ở chế độ đọc nên ta cho chân
RW luôn có giá trị bằng 0, mặt khác ta sẽ nối chân RS của LCD xuống GND.
3.2.2. Chương trình giao tiếp với LCD16x2
//--------------Delay LCD------------------void delay_ms(unsigned int t)
{
unsigned int i,j;
for(i=0;ifor(j=0;j<125;j++);
}


Nhóm 7

25

Lớp: ĐH Tự Động Hóa 3


×