Tải bản đầy đủ

Đo nhiệt độ sử dụng DS18B20 hiển thị LCD 8051

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
BỘ CÔNG THƯƠNG


BÀI TẬP LỚN :
HỌC PHẦN VI XỬ LÍ TRONG ĐO LƯỜNG
VÀ ĐIỀU KHIỂN
Tên đề tài:
Đo và điều khiển nhiệt độ dùng DS18B20 hiển thị LCD

Hà Nội-2019


Mục lục
Chương 1: Tổng quan về Vi xử lý trong Đo lường và Điều khiển ........................... 1
1.1 Cấu trúc hệ thống đo lường điều khiển có sử dụng Vi xử lý. .......................... 1
1.1.1 Vi xử lý. ................................................................................................... 1
1.1.2 Cấu trúc của một hệ vi xử lý. .................................................................... 2
1.1.2.1 Khối xử lý trung tâm (CPU) ............................................................... 3
1.1.2.2. Hệ thống bus ..................................................................................... 4
1.2 Cấu trúc chung họ 8051 và AT89S51. ............................................................ 5

1.2.1 Bộ vi điều khiển 8051 .............................................................................. 5
1.2.2 Sơ lược về AT89S52 ................................................................................ 6
1.2.3 Các thanh ghi cơ bản .............................................................................. 11
1.2.3.1 Thanh ghi TMOD ( Timer Mode) ..................................................... 11
1.2.3.2 Thanh ghi TCON ( Timer Control) ................................................... 13
1.2.3.3 Thanh ghi cho phép ngắt/cấm ngắt ngoài: IE (Interrupt Enable) ....... 15
1.2.4 Trình phục vụ ngắt ................................................................................. 15
1.3. Ngôn ngữ C cho vi điều khiển ..................................................................... 16
1.3.1 Giới thiệu ngôn ngữ C ........................................................................... 16
1.3.2 Các hàm trong C ..................................................................................... 16
1.3.3 Kiểu dữ liệu ............................................................................................ 18
Chương 2: Cảm biến 18B20 và giao tiếp 1W ........................................................ 20
2.1. Cấu tạo và đặc điểm của 18B20 .................................................................. 20
2.2. Nguyên lý giao tiếp Vi điều khiển theo chuẩn 1W ....................................... 22
2.3 Màn hình LCD ............................................................................................. 25
2.3.1 Cấu trúc của LCD ................................................................................... 25
2.3.2 Cách kết nối, lập trình để sử dụng LCD .................................................. 26
Chương 3: Xây dựn ứng dụng trên cơ sở 8051 ...................................................... 27
3.1 Lưu đồ thuật toán ......................................................................................... 27
3.2 Chương trình điều khiển xây dựng trên keil C .............................................. 28
3.3. Kết quả mô phỏng ....................................................................................... 39


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ử lý.
1.1.1 Vi xử lý.
Vi xử lý (viết tắt là µP hay uP), đôi khi còn được gọi là bộ vi xử lý, là một
linh kiện điện tử được chế tạo từ các tranzito thu nhỏ tích hợp lên trên một vi
mạch tích hợp hơn. Khối xử lý trung tâm (CPU) là một bộ vi xử lý được nhiều
người biết đến nhưng ngoài ra nhiều thành phần khác trong máy tính cũng có
bộ vi xử lý riêng của nó, ví dụ trên card màn hình (video card) chúng ta cũng
có một bộ vi xử
Trước khi xuất hiện các bộ vi xử lý, các CPU được xây dựng từ các mạch
tích hợp cỡ nhỏ riêng biệt, mỗi mạch tích hợp chỉ chứa khoảng vào chục
tranzito. Do đó, một CPU có thể là một bảng mạch gồm hàng ngàn hay hàng
triệu vi mạch tích hợp. ngày nay, công nghệ tích hợp đã phát triển, một CPU
có thể tích hợp lên một hoặc vài vi mạch tích hợp cỡ lớn, mỗi vi mạch tích hợp
cỡ lớn chứa hàng ngàn hoặc hàng triệu tranzito. Nhờ đó công suất tiêu thụ và
giá thành của bộ vi xử lý đã giảm đáng kể.
Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường được
sử dụng để điều khiển các thiết bị điện tử. Vi điều khiển, thực chất, là một hệ
thống bao gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với
các bộ vi xử lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như
bộ nhớ, các mô đun vào/ra, các mô đun biến đổi số sang tương tự và tương tự
sang số,... Ở máy tính thì các mô đun thường được xây dựng bởi các chíp và
mạch ngoài.
Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng. Nó xuất
hiện khá nhiều trong các dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng,
điện thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động, v.v.
Hầu hết các vi điều khiển ngày nay được xây dựng dựa trên kiến trúc
Harvard, kiến trúc này định nghĩa bốn thành phần cần thiết của một hệ thống
nhúng. Những thành phần này là lõi CPU, bộ nhớ chương trình (thông thường
là ROM hoặc bộ nhớ Flash), bộ nhớ dữ liệu (RAM), một hoặc vài bộ định thời
và các cổng vào/ra để giao tiếp với các thiết bị ngoại vi và các môi trường bên
ngoài - tất cả các khối này được thiết kế trong một vi mạch tích hợp. Vi điều
khiển khác với các bộ vi xử lý đa năng ở chỗ là nó có thể hoạt động chỉ với vài
vi mạch hỗ trợ bên ngoài.
1


1.1.2 Cấu trúc của một hệ vi xử lý.
Sơ đồ khối một máy tính cổ điển

- ALU (đơn vị logic số học): thực hiện các bài toán cho máy tính bao gồm: +,
*, /,-, phép toán logic, …
- Control (điều khiển): điều khiển, kiểm soát các đường dữ liệu giữa các thành
phần của máy tính.
- Memory (bộ nhớ): lưu trữ chương trình hay các kết quả trung gian.
- Input (nhập), Output (Xuất): xuất nhập dữ liệu (còn gọi là thiết bị ngoại vi).
Về cơ bản kiến trúc của một vi xử lý gồm những phần cứng sau:
 Đơn vị xử lý trung tâm CPU (Central Processing Unit).
 Các bộ nhớ (Memories).
 Các cổng vào/ra (song song (Parallel I/O Ports), nối tiếp (Serial I/O
Ports))
 Các bộ đếm/bộ định thời (Timers).
 Hệ thống BUS (Địa chỉ, dữ liệu, điều khiển)
Ngoài ra với mỗi loại vi điều khiển cụ thể còn có thể có thêm một số phần
cứng khác như bộ biến đổi tương tự-số ADC, bộ biến đổi số-tương tự DAC,
các mạch điều chế dạng sóng WG, điều chế độ rộng xung PWM…Bộ não của
mỗi vi xử lý chính là CPU, các phần cứng khác chỉ là các cơ quan chấp hành
dưới quyền của CPU. Mỗi cơ quan này đều có một cơ chế hoạt động nhất
định mà CPU phải tuân theo khi giao tiếp với chúng.

2


Sơ đồ khối hệ vi xử lý
Để có thể giao tiếp và điều khiển các cơ quan chấp hành (các ngoại vi),
CPU sử dụng 03 loại tín hiệu cơ bản là tín hiệu địa chỉ (Address), tín hiệu dữ
liệu (Data) và tín hiệu điều khiển (Control). Về mặt vật lý thì các tín hiệu này
là các đường nhỏ dẫn điện nối từ CPU đến các ngoại vi hoặc thậm chí là giữa
các ngoại vi với nhau. Tập hợp các đường tín hiệu có cùng chức năng gọi là
các bus. Như vậy ta có các bus địa chỉ, bus dữ liệu và bus điều khiển.
1.1.2.1 Khối xử lý trung tâm (CPU)
CPU có cấu tạo gồm có đơn vị xử lý số học và lôgic (ALU), các thanh
ghi, các khối lôgic và các mạch giao tiếp. Chức năng của CPU là tiến hành
các thao tác tính toán xử lý, đưa ra các tín hiệu địa chỉ, dữ liệu và điều khiển
nhằm thực hiện một nhiệm vụ nào đó do người lập trình đưa ra thông qua các
lệnh (Instructions).

3


Khối xử lý trung tâm
1.1.2.2. Hệ thống bus
Là các đường tín hiệu song song 1 chiều nối từ CPU đến bộ nhớ, bao
gồm:
- Bus địa chỉ
- Address bus
Độ rộng bus: là số các đường tín hiệu, có thể là 8, 18, 20, 24, 32 hay 64. CPU
gửi giá trị địa chỉ của ô nhớ cần truy nhập (đọc/ghi) trên các đường tín hiệu
này.
1 CPU với n đường địa chỉ sẽ có thể địa chỉ hoá được 2n ô nhớ. Ví dụ, 1
Cpu có 16 đường địa chỉ có thể địa chỉ hoá được 216 hay 65,536 (64K) ô nhớ.
a. Bus dữ liệu - Data bus
Là các đường tín hiệu song song 2 chiều, nhiều thiết bị khác nhau có
thể được nối với bus dữ liệu; nhưng tại một thời điểm, chỉ có 1 thiết bị duy
nhất có thể được phép đưa dữ liệu lên bus dữ liệu.
Độ rộng Bus: 4, 8, 16, 32 hay 64 bits
Bất kỳ thiết bị nào được kết nối đến bus dữ liệu phải có đầu ra ở dạng 3
trạng thái, sao cho nó có thể ở trạng thái treo (trở kháng cao) nếu không được
sử dụng.
4


b. Bus điều khiển - Control bus
Bao gồm 4 đến 10 đường tín hiệu song song.
CPU gửi tín hiệu ra bus điều khiển để cho phép các đầu ra của ô nhớ hay
các cổng I/O đã được địa chỉ hoá. Các tín hiệu điều khiển thường là: đọc/ ghi
bộ nhớ - memory read, memory write, đọc/ ghi cổng vào/ra - I/O read, I/O
write.
Ví dụ, để đọc 1 byte dữ liệu từ ô nhớ sẽ cần đến các hoạt động sau: CPU
đưa ra địa chỉ của ô nhớ cần đọc lên bus địa chỉ.
CPU đưa ra tín hiệu đọc bộ nhớ - Memory Read trên bus điều khiển. Tín
hiệu điều khiển này sẽ cho phép thiết bị nhớ đã được địa chỉ hoá đưa byte dữ
liệu lên bus dữ liệu. Byte dữ liệu từ ô nhớ sẽ được truyền tải qua bus dữ liệu
đến CPU.
1.2 Cấu trúc chung họ 8051 và AT89S51.
1.2.1 Bộ vi điều khiển 8051
 Vcc (40): Chân cung cấp điện (5V)
 GND (20): Chân nối đất (0V)
 Port 0 (32-39): Port 0 là port xuất
nhập 8-bit hai chiều.
 Port 1(1-8):Port 1 là port xuất nhập
8-bit hai chiều.
 Port 2 là port xuất nhập 8-bit hai
chiều.
 Trong bất kỳ hệ thống nào sử dụng
8751, 89C51 hoặc DS5000 ta thường nối
cổng P0 tới các điện trở kéo.
 Port 3 là Port xuất nhập 8-bit hai
chiều. Port 3 cũng còn làm các chức năng
khác của AT89C51

Sơ đồ chân của IC 8501

5


Hình: Cấu trúc vi điều khiển 8051

Các thành viên họ 8501
1.2.2 Sơ lược về AT89S52
AT89S52 có các đặc tính như sau:
6


+ 8 KB PEROM (Flash Programmable and Erasable Read Only
Memory), có khả năng tới 1000 chu kỳ ghi xoá
+ Tần số hoạt động từ: 0Hz đến 24
+ 3 mức khóa bộ nhớ lập trình
+ 256 Byte RAM nội.
+ 4 Port xuất /nhập I/O 8 bit.
+ 3 bộ Timer/counter 16 Bit.
+ 8 nguồn ngắt.
+ Giao tiếp nối tiếp điều khiển bằng phần cứng.
+ 128 KB vùng nhớ mã ngoài
+ 128 KB vùng nhớ dữ liệu ngoài.
+ Cho phép xử lý bit.
+ 210 vị trí nhớ có thể định vị bit.
+ 4 chu kỳ máy (4 µs đối với thạch anh 12MHz) cho hoạt động nhân
hoặc chia.
+ Có các chế độ nghỉ (Low-power Idle) và chế độ nguồn giảm (Powerdown).

7


Sơ đồ chân AT89S52.

- Nhóm chân nguồn:
+ VCC: chân 40, điện áp cung cấp 5VDC
8


+ GND: chân 20(hay nối Mass).
- Nhóm chân dao động: gồm chân 18 và chân 19 (Chân XTAL1 và XTAL2),
cho phép ghép nối thạch anh vào mạch dao động bên trong vi điều khiển, được
sử dụng để nhận nguồn xung clock từ bên ngoài để hoạt động, thường được
ghép nối với thạch anh và các tụ để tạo nguồn xung clock ổn định.
XTAL 1: Ngõ vào đến mạch khuếch đại dao động đảo và ngõ vào đến mạch
tạo xung clock bên trong.
XTAL 2: Ngõ ra từ mạch khuếch đại dao động đảo.
+ Chân chọn bộ nhớ chương trình: chân 31 (EA/VPP): dùng để xác định
chương trình thực hiện được lấy từ ROM nội hay ROM ngoại.
- Chân 31 nối mass: sử dụng bộ nhớ chương trình bên ngoài vi điều khiển
-Chân 31 nối VCC: sử dụng bộ nhớ chương trình (8Kb) bên trong vi điều khiển
RST(Chân RESET): Ngõ vào RST ở chân 9 là ngõ vào Reset dùng để thiết lập
trạng thái ban đầu cho vi điều khiển. Hệ thống sẽ được thiết lập lại các giá trị
ban đầu nếu ngõ này ở mức 1 tối thiểu 2 chu kì máy.
+ Chân cho phép bộ nhớ chương trình PSEN: PSEN ( program store
enable) tín hiệu được xuất ra ở chân 29 dùng để truy xuất bộ nhớ chương trình
ngoài. Chân này thường được nối với chân OE (output enable) của ROM ngoài.
Khi vi điều khiển làm việc với bộ nhớ chương trình ngoài, chân này phát ra tín
hiệu kích hoạt ở mức thấp và được kích hoạt 2 lần trong một chu kì máy
Khi thực thi một chương trình ở ROM nội, chân này được duy trì ở mức logic
không tích cực (logic 1)
(Không cần kết nối chân này khi không sử dụng đến).
Chân ALE :(chân cho phép chốt địa chỉ-chân 30)
Khi Vi điều khiển truy xuất bộ nhớ từ bên ngoài, port 0 vừa có chức năng
là bus địa chỉ, vừa có chức năng là bus dữ liệu do đó phải tách các đường dữ
liệu và địa chỉ. Tín hiệu ở chân ALE dùng làm tín hiệu điều khiển để giải đa
hợp các đường địa chỉ và các đường dữ liệu khi kết nối chúng với IC chốt.
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động đưa vào
Vi điều khiển, như vậy có thể dùng tín hiệu ở ngõ ra ALE làm xung clock cung
cấp cho các phần khác của hệ thống.
*Ghi chú : khi không sử dụng có thể bỏ trống chân này .
9


+ Nhóm chân điều khiển vào/ra:
Ø Port 0:
Gồm 8 chân (từ chân 32 đến 39) có hai chức năng:
-Chức năng xuất/nhập :các chân này được dùng để nhận tín hiệu từ bên ngoài
vào để xử lí, hoặc dùng để xuất tín hiệu ra bên ngoài, chẳng hạn xuất tín hiệu
để điều khiển led đơn sáng tắt.
- Chức năng là bus dữ liệu và bus địa chỉ (AD7-AD0) : 8 chân này (hoặc Port
0) còn làm nhiệm vụ lấy dữ liệu từ ROM hoặc RAM ngoại (nếu có kết nối với
bộ nhớ ngoài), đồng thời Port 0 còn được dùng để định địa chỉ của bộ nhớ
ngoài.
Ø Port 1 (P1): gồm 8 chân (từ chân 1 đến chân , chỉ có chức năng làm các
đường xuất/nhập, không có chức năng khác.
Ø Port 2 (P2) : gồm 8 chân (từ chân 21 đến chân 28) có hai chức năng:
- Chức năng xuất/nhập
- Chức năng là bus địa chỉ cao (A8-A15): khi kết nối với bộ nhớ ngoài có
dung lượng lớn,cần 2 byte để định địa chỉ của bộ nhớ, byte thấp do P0 đảm
nhận, byte cao do P2 này đảm nhận.
Ø Port 3 (P3): gồm 8 chân (từ chân 10 đến 17): Chức năng xuất/nhập
Với mỗi chân có một chức năng riêng:
P3.0 RxD : Ngõ vào nhận dữ liệu nối tiếp
P3.1 TxD : Ngõ xuất dữ liệu nối tiếp
P3.2 INT0: Ngõ vào ngắt cứng thứ 0
P3.3 INT1: Ngõ vào ngắt cứng thứ 1
P3.4 T0 : Ngõ vào của Timer/Counter thứ 0
P3.5 T1 : Ngõ vào của Timer/Counter thứ 1
P3.6 WR : Ngõ điều khiển ghi dữ liệu lên bộ nhớ ngoài
P3.7 RD : Ngõ điều khiển đọc dữ liệu từ bộ nhớ bên ngoài
P1.0 T2 : Ngõ vào của Timer/Counter thứ 2
P1.1 T2X : Ngõ Nạp lại/thu nhận của Timer/Counter thứ 2

10


1.2.3 Các thanh ghi cơ bản
1.2.3.1 Thanh ghi TMOD ( Timer Mode)
Cả hai bộ định thời Timer 0 và Timer 1 đều dùng chung một thanh ghi
được gọi là TMOD: để thiết lập các chế độ làm việc khác nhau của bộ định
thời.
Thanh ghi TMOD là thanh ghi 8 bit gồm có:
+ 4 bit thấp để thiết lập cho bộ Timer 0.
+ 4 bit cao để thiết lập cho Timer 1.
Trong đó:
+2 bit thấp của chúng dùng để thiết lập chế độ của bộ định thời.
+ 2 bit cao dùng để xác định phép toán.

Hình: Thanh ghi TMOD.
Các chế độ của thanh ghi TMOD
Là các bit chế độ của các bộ Timer 0 và Timer 1. Chúng chọn chế độ của
các bộ định thời: 0, 1, 2 và 3 như bảng dưới. Chúng ta chỉ tập chung vào các
chế độ thường được sử dụng rộng rãi nhất là chế độ 1 và chế độ 2. Chúng ta sẽ
sớm khám phá ra các đặc tính của các chế độ này sau khi khám phần còn lại
của thanh ghi TMOD. Các chế độ được thiết lập theo trạng thái
của M1 và M0 như sau:

11


M1 M0

Chế
độ

Chế độ hoạt động

0

0

0

Bộ định thời 13 bit:8 bit là bộ định thời/bộ đếm, 5 bit
đặt trước.

0

1

1

Bộ định thời 16 bit: không có đặt trước.

1

0

2

Bộ định thời 8 bit: tự nạp lại.
Timer 0 được tách thành 2 Timer 8 bit

1

1

3

-Timer 8 bit TL0 được điều khiển bởi các bit của
mode Timer0
-Timer 8 bit TH0 được điều khiển bởi các bit của
mode Timer1
-Timer 1 không hoạt động ở mode 3

Bảng: Các chế độ hoạt động của bộ đếm/bộ định thời
Bit C/T (Counter/Timer)
Bit này trong thanh ghi TMOD được dùng để quyết định xem bộ định thời
được dùng như một máy tạo độ trễ hay bộ đếm sự kiện. Nếu bit C/T = 0 thì nó
được dùng như một bộ định thời tạo độ trễ thời gian.
Ví dụ 1:
TMOD = 0000 0001 (01H) : chế độ 1 của bộ định thời Timer 0 được chọn.
TMOD = 0010 0000 (20H) : chế độ 2 của bộ định thời Timer 1 được chọn.
TMOD = 0001 0010 (12H) : chế độ 1 của bộ định thời Timer 1 và chế độ 2 của
Timer 0 được chọn.
Nguồn đồng hồ cho chế độ trễ thời gian là tần số thạch anh của 8051. Điều
đó có nghĩa là độ lớn của tần số thạch anh đi kèm với 8051 quyết định tốc độ
nhịp của các bộ định thời trên 8052. Tần số của bộ định thời luôn bằng 1/12 tần
số của thạch anh gắn với 8052.
Các giá trị đếm được của Timer/Counter thì được lưu trong thanh ghi THx
và TLx. Nếu ta không thiết lập giá trị bắt đầu đếm cho các thanh ghi TLx và
THx là 0000h thì Timer sẽ bắt đầu đếm từ giá trị 0000H đến giá trị FFFFH.
12


Hình : Tần số của bộ đếm/bộ định thời
Ví dụ 2:
Tần số thạch
anh

Tần số bộ định thời

Chu kỳ bộ định thời

20MHz

20MHz/12=1,6666MHz

1/1,6666MHz=0,6us

12MHz

12MHz/12=1MHz

1/1MHz=1us

11,0592MHz

11,0592MHz/12=0,9216MHz

1/0,9216MHz=1,085us

Bảng : Một số tần số thông dụng
Mặc dù các hệ thống 8052 có thể sử dụng tần số thạch anh từ 10 đến 40MHz,
song ta chỉ tập trung vào tần số thạch anh 11,0592MHz. Lý do đằng sau một số
lẻ như vậy là tốc độ baud đối với truyền thông nối tiếp của 8052. Tần số XTAL
= 11,0592MHz cho phép hệ thống 8052 truyền thông với PC mà không có lỗi.
1.2.3.2 Thanh ghi TCON ( Timer Control)

Thanh ghi TCON
Thanh ghi TCON chứa các bit điều khiển và trạng thái của bộ định thời 0
và bộ định thời 1 ( xem bảng 4.4 ). Bốn bit cao trong TCON(TCON.4 TCON.7 ) được dùng để điều khiển các bộ định thời hoạt động hoặc ngừng
( TR0, TR1 ) hoặc để báo các bộ định thời tràn (TF0, TF1). Các bit này được
dùng rộng rãi trong các thí dụ của chương này.
Bốn bit thấp của TCON ( TCON.0 - TCON.3 ) không dùng để điều khiến các
bộ định thời, chúng được dùng để phát hiện và khởi động các ngắt ngoài.
13


Cờ báo tràn TFx
Nếu ta thiết lập giá trị bắt đầu đếm cho các thanh ghi TLx và THx là khác
0000h thì Timer sẽ bắt đầu đếm từ giá trị ta gán đến giá trị FFFFH. Nhưng khi
chuyển từ giá trị FFFFh đến 0000h thì sẽ sinh ra tràn làm cho bit TFx = 1 rồi
tiếp tục đếm từ giá trị 0000h. Để cho Tiner luôn bắt đầu đếm từ giá trị ta gán
thì ta có thể lập trình chờ sau mỗi lần tràn ta sẽ cho xóa cờ TFx và gán lại giá
trị cho TLx/THx để Timer luôn bắt đầu đếm từ giá trị khởi gán lên.
Thanh ghi điều khiển TRx
Thanh ghi này có tác dụng cho Timer được hay không được phép đếm
xung Nếu TRx = 1 thì Timer được phép đếm xung.
Nếu TRx = 0 thì timer không được phép đếm xung.

14


1.2.3.3 Thanh ghi cho phép ngắt/cấm ngắt ngoài: IE (Interrupt Enable)

Thanh ghi IE.
Chức năng các bit:
- EA: Bit cho phép ngắt/cấm ngắt toàn cục. Khi EA = 0 thì không một tín
hiệu ngắt nào được chấp nhận. Khi EA = 1 thì các tín hiệu ngắt sẽ được
chấp nhận nếu như bit điều khiển ngắt của các nguồn ngắt đó được bật.
- ET2: Bit điều khiển ngắt tràn Timer 2. Nếu ET2 = 0, ngắt tràn Timer 2
bị cấm, nếu ET2 = 1, ngắt tràn Timer 2 được chấp nhận.
- ES: Bit điều khiển ngắt UART.
- ET1: Bit điều khiển ngắt tràn Timer 1.
- EX1: Bit điều khiển ngắt ngoài 1.
- ET0: Bit điều khiển ngắt tràn Timer 0.
- EX0: Bit điều khiển ngắt ngoài 0.
1.2.4 Trình phục vụ ngắt
Đối với mỗi ngắt thì phải có một trình phục vụ ngắt (ISR) hay trình quản lý
ngắt để đưa ra nhiệm vụ cho bộ vi điều khiển khi được gọi ngắt. Khi một ngắt
được gọi thì bộ vi điều khiển sẽ chạy trình phục vụ ngắt. Đối với mỗi ngắt thì
có một vị trí cố định trong bộ nhớ để giữ địa chỉ ISR của nó. Nhóm vị trí bộ
nhớ được dành riêng để lưu giữ địa chỉ của các ISR được gọi là bảng vector
ngắt

Hình 1: Bảng vector ngắt của 8051.
15


Trong lập trình C trên Keil c cho 8052, chúng ta khai báo trình phục vụ
ngắttheo cấu trúc sau:
Void Name (void) interrupt X

//( X: là số thứ tự của ngắt )

{
// chương trình phục vụ ngắt
}
Khi đó địa chỉ ngắt sẽ được tự động tính bằng:
Interrupt Address = (X * 8) + 3
1.3. Ngôn ngữ C 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 nói chung, ngôn ngữ lập trình được
sử dụng thường 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, do đó
việc lập trình bằng các ngôn ngữ này trở nên dễ dàng và đơn giản hơn. Có thể
kể đến một số ngôn ngữ lập trình bậc cao như C, Basic, Pascal… trong dó C là
ngôn
ngữ thông dụng hơn cả trong kỹ thuật vi điều khiển. Về bản chất, sử dụng các
ngôn ngữ này thay cho ngôn ngữ bậc thấp là giảm tải cho lập trình viên trong
việc nghiên cứu các tập lệnh và xây dựng các cấu trúc giải thuật. 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à 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 Các hàm trong C
Có hai loại hàm trong C :
a) Hàm trả lai giá trị:
Kiểu giá trị hàm trả lại Tên hàm(Biến truyền vào hàm)
16


{
// Các câu lệnh xử lý
}
VD;
unsigned char cong(unsigned char x, unsigned char y)
+ Hàm không trả lại giá trị
void Tên hàm( Biến truyền vào hàm)
{
// các câu lệnh xử lý
}
VD:
void cong(unsigned char x,unsigned char y)
{
//các câu lệnh
}
(*) Hàm có thể có biến truyền vào hoặc không
+ Hàm không có biến truyền vào
unsigned char Tên hàm(void)
{
//câu lệnh
}
+ Hàm có biến truyền vào
void Tên hàm(unsigned char x)
{
//các câu lệnh
}
(**) Số biến truyền vào là tùy ý miễn sao là đủ bộ nhớ , các biến ngăn cách
nhau bằng dấu “,”.
VD: void Tên hàm(unsigned char x,unsigned char y,unsigned char z)
(***) Ngoài ra trong Keil C còn co một loại hàm là hàm ngắt:
Cấu trúc:
void Tên hàm(void) interrupt nguồn ngắt using băng thanh ghi
{
}
Hàm ngắt không được phép trả lại giá tri hay truyền tham biến vào hàm
Tên hàm : tùy chọn
17


Interrupt : từ khóa chỉ hàm ngắt
Nguồn ngắt : từ 0 đến 5 theo bảng vecter ngắt

1.3.3 Kiểu dữ liệu
a) Kiểu dữ liệu trong C
Kiểu

Số
Byte

Khoảng giá trị

Char

1

-128 – +127

Unsigned char

1

0 – 255

Int

2

-32768 - +32767

Unsigned int

2

0 - 65535

Long

4

-2147483648 - +2147483647

Unsigned long

4

0 – 4294697295

Float

4

b) Kiểu dữ liệu trong Keil C
Kiểu

Số bit

Bit

1

Sbit

1

Sfr

8

Sfr16

16
18


- bit : dùng để khai báo các biến có giá trị 0 hoặc một hay các biến logic trên
vùng RAM của vi điều khiển. Khi khai báo biến kiểu bit trình dịc Keil C sẽ
mặc định vùng nhớ sử dụng là BDATA.
-sbit, sfr, sfr16: dùng để định nghĩa các cho các thanh ghi chức năng hoặc các
cổng trên vi điều khiển dùng để truy nhập các đoạn dữ liệu 1 bit, 8 bit, 16 bit

19


Chương 2: Cảm biến 18B20 và giao tiếp 1W
2.1. Cấu tạo và đặc điểm của 18B20
DS18B20 là IC cảm biến nhiệt độ, chỉ bao gồm 3 chân, đóng gói dạng
TO-92 hay dạng SMD 8 chân
Cảm biến DS18B20 được dùng để đo nhiệt độ môi trường .

ĐẶC ĐIỂM DS18B20.
+ Lấy nhiệt độ theo giao thức 1 dây (1wire)
+ Cung cấp nhiệt độ với độ phân giải config 9,10,11,12 bit, tùy theo sử dụng.
Trong trường hợp không config thì nó tự động ở chế độ 12 bit.
Thời gian chuyển đổi nhiệt độ tối đa là 750ms cho độ phân giải 12 bit
+ Có thể đo nhiệt độ trong khoảng -55 -> +125°C. Với khoảng nhiệt độ là 10°C tới 85°C thì độ chính xác ±0.5°C,±0.25°C ,±0.125°C,±0.0625°C. theo
số bít config.
+ Có chức năng cảnh báo nhiệt khi nhiệt độ vượt ngưỡng cho phép. Người
dùng có thể lập trình chức năng này cho DS18B20. Bộ nhớ nhiệt độ cảnh báo
20


không bị mất khi mất nguồn vì 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.
+ Cảm biến nhiệt độ DS18B20 có mã nhận diện lên đến 64-bit, vì vậy có thể
kiểm tra nhiệt độ với nhiều IC DS18B20 mà chỉ dùng 1 dây dẫn duy nhất để
giao tiếp với các IC này.
+ Điện áp sử dụng : 3 – 5.5 V ( có thể lấy từ nguồn ngoài hoặc là lấy từ dây
data )
+ Dòng tiêu thụ tại chế độ nghỉ rất nhỏ.
+ Thời gian chuyển đổi lớn nhất là 750ms ( với config 12bit)
Kết nối và chế độ hoạt động :

21


2.2. Nguyên lý giao tiếp Vi điều khiển theo chuẩn 1W
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 (half-duplex).
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.

22


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 (8-bit
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.
Cách thức hoạt động:
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.

23


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×

×