BÀI 4: GIỚI THIỆU HOẠT ĐỘNG CỦA BỘ ĐỊNH THỜI TRONG VI<br />
ĐIỀU KHIỂN 8051.<br />
Mục tiêu.<br />
Kiến thức:<br />
Nắm bắt được các chức năng của bộ định thời trong vi điều khiển<br />
8051.<br />
Nắm bắt được các chức năng của các thanh ghi định thời trong vi<br />
điều khiển 8051.<br />
Nắm bắt được các chế độ định thời trong vi điều khiển 8051.<br />
Nắm bắt được các chương trình điều khiển bộ định thời trong vi<br />
điều khiển 8051.<br />
Kỹ năng:<br />
Viết được một số chương trình điều khiển bộ định thời trong vi điều<br />
khiển 8051.<br />
Viết được một số bài tập thực hành liên quan đến hoạt động định<br />
thời để điều khiển các thiết bị ngoại vi có sẵn trên mô hình thực hành.<br />
Thái độ:<br />
Có ý thức tự giác.<br />
Tuân thủ nội quy và trình tự thực hiện.<br />
Có tinh thần hợp tác giúp đỡ lẫn nhau.<br />
Cẩn thận, đảm bảo an toàn vật liệu, linh kiện.<br />
Bảo quản thiết bị đo, mô hình học cụ.<br />
Vệ sinh mô hình, thiết bị học tập và phòng thực hành.<br />
Nội dung chính.<br />
4.1. Giới thiệu chung.<br />
<br />
275<br />
<br />
Tần số: tần số xung ngõ ra bằng tần số xung ngõ vào chia cho 2N.<br />
Giá trị: giá trị nhị phân trong các FF của bộ định thời là số đếm<br />
của các xung clock tại ngõ vào từ khi bộ định thời bắt đầu đếm.<br />
Tràn: xảy ra hiện tượng tràn (cờ tràn = 1) khi số đếm chuyển từ<br />
giá trị lớn nhất xuống giá trị nhỏ nhất của bộ định thời.<br />
Ví dụ: Bộ định thời 16 bit (chứa 16 FF bên trong).<br />
f<br />
f<br />
IN IN<br />
OUT<br />
216 65536<br />
Tần số:<br />
f<br />
<br />
Giá trị: số đếm nằm trong khoảng 0 (0000H) 65535 (FFFFH).<br />
Tràn: cờ tràn bằng 1 khi số đếm từ FFFFH chuyển xuống 0000H.<br />
Hình minh họa đơn giản hoạt động của bộ định thời 3 bit:<br />
<br />
Hoạt động của một bộ định thời 3 bit đơn giản được minh họa trong hình<br />
trên. Mỗi một tầng là D FF kích khởi cạnh âm hoạt động như một mạch chia 2<br />
do ta nối ngõ ra Q với ngõ vào D. Flipflop cờ (Flag FF) là một mạch chốt D<br />
276<br />
<br />
được set bằng 1 bởi tầng cuối của bộ định thời. Giản đồ thời gian cho thấy tầng<br />
thứ nhất (Q 0) chia 2 tần số xung clock, tầng thứ hai (Q 1) chia 4 tần số xung<br />
clock, … Số đếm được ghi ở dạng thập phân và được kiểm tra dễ dàng bằng<br />
cách khảo sát trạng thái của 3 flipflop. Ví dụ, số đếm là 4 xuất hiện khi Q2 = 1,<br />
Q1 = 0, Q0 = 0. Các flipflop ở trên là các flipflop tác động cạnh âm (nghĩa là<br />
trạng thái của các flipflop sẽ thay đổi theo cạnh âm của xung clock). Khi số đếm<br />
tràn từ 111 xuống 000, ngõ ra Q2 có cạnh âm làm cho trạng thái của flipflop cờ<br />
đổi từ 0 lên 1 (ngõ vào D của flipflop này luôn luôn ở logic 1).<br />
<br />
Ứng dụng định thời gian (TIMER): bộ định thời được lập trình<br />
sao cho sẽ tràn sau một khoảng thời gian đã qui định và khi đó cờ tràn của bộ<br />
định thời sẽ bằng 1.<br />
Ứng dụng đếm sự kiện (COUNTER): để xác định số lần xuất hiện<br />
của một kích thích từ bên ngoài tới một chân của chip 8051 (kích thích là sự<br />
chuyển trạng thái từ 1 xuống 0).<br />
Ứng dụng tạo tốc độ baud cho port nối tiếp: xem thêm trong phần<br />
“Hoạt động port nối tiếp.”.<br />
<br />
4.2. Bộ định thời của vi điều khiển 8051.<br />
4.2.1. Thanh ghi THx/TLx.<br />
TL0: Chứa byte thấp của bộ định thời 0.<br />
TL1: Chứa byte thấp của bộ định thời 1.<br />
TH0: Chứa byte cao của bộ định thời 0.<br />
TH0: Chứa byte cao của bộ định thời 1.<br />
4.2.2. Thanh ghi TMOD.<br />
277<br />
<br />
Thanh ghi TMOD (Timer Mode Register) chứa các bit dùng để thiết<br />
lập chế độ hoạt động cho bộ định thời 0 và bộ định thời 1.<br />
Thanh ghi TMOD được nạp giá trị một lần tại thời điểm bắt đầu<br />
của chương trình để qui định chế độ hoạt động của các bộ định thời.<br />
Cấu trúc thanh ghi TMOD:<br />
<br />
Các chế độ hoạt động của bộ định thời:<br />
<br />
Ví dụ 1: Cho biết giá trị cần nạp cho thanh ghi TMOD để<br />
Timer 0: là bộ định thời gian 16 bit, được điều khiển bằng phần<br />
mềm (bit TR0).<br />
278<br />
<br />
Timer 1: là bộ đếm xung 13 bit, được điều khiển bằng phần cứng<br />
(chân INT1).<br />
Giải<br />
Phân tích:<br />
(1): Chế độ 16 bit.<br />
(2): Bộ định thời gian.<br />
(3): Điều khiển bằng phần mềm.<br />
(4): Chế độ 13 bit.<br />
(5): Bộ đếm xung.<br />
(6): Điều khiển bằng phần cứng.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
M1 = 0, M0 = 1.<br />
C / T = 0.<br />
GATE = 0.<br />
M1 = 0, M0 = 0.<br />
C / T = 1.<br />
GATE = 1.<br />
<br />
Từ đó ta có: (TMOD) = 11000001B = C1H.<br />
Ví dụ 2: Cho biết giá trị cần nạp cho thanh ghi TMOD để<br />
Timer 0: không sử dụng.<br />
Timer 1: là bộ định thời gian 8 bit tự nạp lại, được điều khiển bằng<br />
phần mềm (bit TR1).<br />
Giải<br />
Phân tích:<br />
(1): Không sử dụng.<br />
<br />
M1 = 0, M0 = 0.<br />
(2): Không sử dụng.<br />
<br />
C / T = 0.<br />
(3): Không sử dụng.<br />
<br />
GATE = 0.<br />
Do Timer 0 không sử dụng, nên ta có thiết lập nó ở bất cứ chế độ<br />
nào. Thông thường để dễ dàng ta nên cho: GATE=0, C / T = 0, M1<br />
= 0 và M0 = 0.<br />
(4): Chế độ 8 bit tự động nạp lại.<br />
<br />
M1 = 1, M0 = 0.<br />
(5): Bộ định thời gian.<br />
<br />
C / T = 0.<br />
(6): Điều khiển bằng phần mềm.<br />
<br />
GATE = 0.<br />
<br />
279<br />
<br />