Giáo trình Vi điều khiển (Phần 2) - Trường Cao đẳng nghề Công nghiệp Hà Nội

BÀI 4: GIỚI THIỆU HOẠT ĐỘNG CỦA BỘ ĐỊNH THỜI TRONG VI

ĐIỀU KHIỂN 8051.

Mục tiêu.

Kiến thức:

 Nắm bắt được các chức năng của bộ định thời trong vi điều khiển

8051.

 Nắm bắt được các chức năng của các thanh ghi định thời trong vi

điều khiển 8051.

 Nắm bắt được các chế độ định thời trong vi điều khiển 8051.

 Nắm bắt được các chương trình điều khiển bộ định thời trong vi

điều khiển 8051.

Kỹ năng:

 Viết được một số chương trình điều khiển bộ định thời trong vi điều

khiển 8051.

 Viết được một số bài tập thực hành liên quan đến hoạt động định

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.

Thái độ:

 Có ý thức tự giác.

 Tuân thủ nội quy và trình tự thực hiện.

 Có tinh thần hợp tác giúp đỡ lẫn nhau.

 Cẩn thận, đảm bảo an toàn vật liệu, linh kiện.

 Bảo quản thiết bị đo, mô hình học cụ.

 Vệ sinh mô hình, thiết bị học tập và phòng thực hành.

pdf 146 trang Bích Ngọc 04/01/2024 3320
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Vi điều khiển (Phần 2) - Trường Cao đẳng nghề Công nghiệp Hà Nội", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Vi điều khiển (Phần 2) - Trường Cao đẳng nghề Công nghiệp Hà Nội

Giáo trình Vi điều khiển (Phần 2) - Trường Cao đẳng nghề Công nghiệp Hà Nội
275 
BÀI 4: GIỚI THIỆU HOẠT ĐỘNG CỦA BỘ ĐỊNH THỜI TRONG VI 
ĐIỀU KHIỂN 8051. 
Mục tiêu. 
Kiến thức: 
 Nắm bắt được các chức năng của bộ định thời trong vi điều khiển 
8051. 
 Nắm bắt được các chức năng của các thanh ghi định thời trong vi 
điều khiển 8051. 
 Nắm bắt được các chế độ định thời trong vi điều khiển 8051. 
 Nắm bắt được các chương trình điều khiển bộ định thời trong vi 
điều khiển 8051. 
Kỹ năng: 
 Viết được một số chương trình điều khiển bộ định thời trong vi điều 
khiển 8051. 
 Viết được một số bài tập thực hành liên quan đến hoạt động định 
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. 
Thái độ: 
 Có ý thức tự giác. 
 Tuân thủ nội quy và trình tự thực hiện. 
 Có tinh thần hợp tác giúp đỡ lẫn nhau. 
 Cẩn thận, đảm bảo an toàn vật liệu, linh kiện. 
 Bảo quản thiết bị đo, mô hình học cụ. 
 Vệ sinh mô hình, thiết bị học tập và phòng thực hành. 
Nội dung chính. 
4.1. Giới thiệu chung. 
 276 
 Tần số: tần số xung ngõ ra bằng tần số xung ngõ vào chia cho 2N. 
 Giá trị: giá trị nhị phân trong các FF của bộ định thời là số đếm 
của các xung clock tại ngõ vào từ khi bộ định thời bắt đầu đếm. 
 Tràn: xảy ra hiện tượng tràn (cờ tràn = 1) khi số đếm chuyển từ 
giá trị lớn nhất xuống giá trị nhỏ nhất của bộ định thời. 
Ví dụ: Bộ định thời 16 bit (chứa 16 FF bên trong). 
 Tần số: 65536
162
IN
f
IN
f
OUT
f 
 Giá trị: số đếm nằm trong khoảng 0 (0000H) 65535 (FFFFH). 
 Tràn: cờ tràn bằng 1 khi số đếm từ FFFFH chuyển xuống 0000H. 
 Hình minh họa đơn giản hoạt động của bộ định thời 3 bit: 
Hoạt động của một bộ định thời 3 bit đơn giản được minh họa trong hình 
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 
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 
277 
đượ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 
thứ nhất (Q0) chia 2 tần số xung clock, tầng thứ hai (Q1) chia 4 tần số xung 
clock,  Số đếm được ghi ở dạng thập phân và được kiểm tra dễ dàng bằng 
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, 
Q1 = 0, Q0 = 0. Các flipflop ở trên là các flipflop tác động cạnh âm (nghĩa là 
trạng thái của các flipflop sẽ thay đổi theo cạnh âm của xung clock). Khi số đếm 
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ờ 
đổi từ 0 lên 1 (ngõ vào D của flipflop này luôn luôn ở logic 1). 
 Ứng dụng định thời gian (TIMER): bộ định thời được lập trình 
sao cho sẽ tràn sau một khoảng thời gian đã qui định và khi đó cờ tràn của bộ 
định thời sẽ bằng 1. 
 Ứng dụng đếm sự kiện (COUNTER): để xác định số lần xuất hiện 
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ự 
chuyển trạng thái từ 1 xuống 0). 
 Ứng dụng tạo tốc độ baud cho port nối tiếp: xem thêm trong phần 
“Hoạt động port nối tiếp.”. 
4.2. Bộ định thời của vi điều khiển 8051. 
4.2.1. Thanh ghi THx/TLx. 
 TL0: Chứa byte thấp của bộ định thời 0. 
 TL1: Chứa byte thấp của bộ định thời 1. 
 TH0: Chứa byte cao của bộ định thời 0. 
 TH0: Chứa byte cao của bộ định thời 1. 
4.2.2. Thanh ghi TMOD. 
 278 
 Thanh ghi TMOD (Timer Mode Register) chứa các bit dùng để thiết 
lập chế độ hoạt động cho bộ định thời 0 và bộ định thời 1. 
 Thanh ghi TMOD được nạp giá trị một lần tại thời điểm bắt đầu 
của chương trình để qui định chế độ hoạt động của các bộ định thời. 
 Cấu trúc thanh ghi TMOD: 
 Các chế độ hoạt động của bộ định thời: 
Ví dụ 1: Cho biết giá trị cần nạp cho thanh ghi TMOD để 
 Timer 0: là bộ định thời gian 16 bit, được điều khiển bằng phần 
mềm (bit TR0). 
279 
 Timer 1: là bộ đếm xung 13 bit, được điều khiển bằng phần cứng 
(chân 1INT ). 
Giải 
Phân tích: 
(1): Chế độ 16 bit.  M1 = 0, M0 = 1. 
(2): Bộ định thời gian.  TC / = 0. 
(3): Điều khiển bằng phần mềm.  GATE = 0. 
(4): Chế độ 13 bit.  M1 = 0, M0 = 0. 
(5): Bộ đếm xung.  TC / = 1. 
(6): Điều khiển bằng phần cứng.  GATE = 1. 
Từ đó ta có: (TMOD) = 11000001B = C1H. 
Ví dụ 2: Cho biết giá trị cần nạp cho thanh ghi TMOD để 
 Timer 0: không sử dụng. 
 Timer 1: là bộ định thời gian 8 bit tự nạp lại, được điều khiển bằng 
phần mềm (bit TR1). 
Giải 
Phân tích: 
(1): Không sử dụng.  M1 = 0, M0 = 0. 
(2): Không sử dụng.  TC / = 0. 
(3): Không sử dụng.  GATE = 0. 
Do Timer 0 không sử dụng, nên ta có thiết lập nó ở bất cứ chế độ 
nào. Thông thường để dễ dàng ta nên cho: GATE=0, TC / = 0, M1 
= 0 và M0 = 0. 
(4): Chế độ 8 bit tự động nạp lại.  M1 = 1, M0 = 0. 
(5): Bộ định thời gian.  TC / = 0. 
(6): Điều khiển bằng phần mềm.  GATE = 0. 
 280 
Từ đó ta có: (TMOD) = 00100000B = 20H. 
Ví dụ 3: Cho biết (TMOD) = A5H. Hãy cho biết chế độ hoạt động của các 
Timer 0 và Timer 1. 
Giải 
Ta có: (TMOD) = A5H = 10100101B. 
Giải thích: 
M1 = 1, M0 = 0.  (4): Chế độ 8 bit tự động nạp lại. 
TC / = 0.  (5): Bộ định thời gian. 
GATE = 1.  (6): Điều khiển bằng phần cứng. 
M1 = 0, M0 = 1.  (1): Chế độ 16 bit. 
TC / = 1.  (2): Bộ đếm xung. 
GATE = 0.  (3): Điều khiển bằng phần mềm. 
Từ đó ta có: 
o Timer 0: là bộ đếm xung 16 bit, được điều khiển bằng phần mềm (bit 
TR0). 
o Timer 1: là bộ định thời gian 8 bit tự nạp lại, được điều khiển bằng 
phần cứng (chân 1INT ). 
Ví dụ 4: Cho biết (TMOD) = 21H. Hãy cho biết chế độ hoạt động của các 
Timer 0 và Timer 1. 
Giải 
Ta có: (TMOD) = 21H = 00100001B. 
Giải thích: 
M1 = 1, M0 = 0.  (4): Chế độ 8 bit tự động nạp lại. 
TC / = 0.  (5): Bộ định thời gian. 
GATE = 0.  (6): Điều khiển bằng phần mềm. 
M1 = 0, M0 = 1.  (1): Chế độ 16 bit. 
281 
TC / = 0.  (2): Bộ định thời gian. 
GATE = 0.  (3): Điều khiển bằng phần mềm. 
Từ đó ta có: 
 Timer 0: là bộ định thời gian 16 bit, được điều khiển bằng phần 
mềm (bit TR0). 
 Timer 1: là bộ định thời gian 8 bit tự nạp lại, được điều khiển bằng 
phần mềm (bit TR1). 
4.2.3. Thanh ghi TCON. 
 Thanh ghi TCON (Timer Control Register) chứa các bit dùng để 
điều khiển và báo trạng thái của bộ định thời 0 và bộ định thời 1. 
 Cấu trúc thanh ghi TCON: 
 282 
 Lưu ý:Các bit IT0, IT1, IE0, IE1 không dùng để điều khiển các bộ 
định thời. Các bit này được dùng để phát hiện và khởi động các ngắt ngoài. Việc 
thảo luận các bit này sẽ được trình bày trong “Hoạt động ngắt.”. 
4.2.4. Các chế độ định thời. 
4.2.4.1. Chế độ định thời 13 bit (Chế độ 0): 
Chế độ 0 (Mode 0): 
 Chế độ định thời 13 bit. 
 Sử dụng 8 bit của thanh ghi THx và 5 bit thấp của thanh ghi TLx để 
tạo ra bộ định thời. 
 Số đếm: 0000H 1FFFH nghĩa là từ 0 8191. Thời gian định 
thời: từ 1.TTimer 2
13.TTimer nghĩa là từ 1.TTimer 8192.TTimer. 
 Thanh ghi THx và TLx chứa giá trị của bộ định thời. 
 Khi có xung clock, bộ định thời bắt đầu đếm lên từ giá trị chứa 
trong THx/TLx. 
 Xảy ra tràn (cờ tràn TFx=1) khi số đếm chuyển từ 1FFFH sang 
0000H và việc đếm sẽ tiếp tục đếm lên từ giá trị 0000H. 
283 
Hình 4.2.1: Kiến trúc của Timer 0 ở chế độ 0 (Mode 0). 
4.2.4.2. Chế độ định thời 16 bit (Chế độ 1): 
Chế độ 1 (Mode 1): 
 Chế độ định thời 16 bit. 
 Sử dụng thanh ghi THx và TLx để tạo ra bộ định thời. 
 Số đếm: 0000H FFFFH nghĩa là từ 0 65535. Thời gian định 
thời: từ 1.TTimer 2
16.TTimer nghĩa là từ 1.TTimer 65536.TTimer. 
 Thanh ghi THx và TLx chứa giá trị của bộ định thời. 
 Khi có xung clock, bộ định thời bắt đầu đếm lên từ giá trị chứa 
trong THx/TLx. 
 Xảy ra tràn (cờ tràn TFx=1) khi số đếm chuyển từ FFFFH sang 
0000H và việc đếm sẽ tiếp tục đếm lên từ giá trị 0000H. 
Hình 4.2.2: Kiến trúc của Timer 0 ở chế độ 1 (Mode 1). 
4.2.4.3. Chế độ định thời 8 bit tự nạp lại (Chế độ 2): 
 284 
Chế độ 2 (Mode 2): 
 Chế độ định thời 8 bit tự nạp lại. 
 Sử dụng thanh ghi TLx để tạo ra bộ định thời. 
 Số đếm: 00H FFH nghĩa là từ 0 255. Thời gian định thời: từ 
1.TTimer 2
8.TTimer nghĩa là từ 1.TTimer 256.TTimer. 
 Thanh ghi TLx chứa giá trị của bộ định thời và thanh ghi THx chứa 
giá trị sẽ được dùng để nạp lại cho bộ định thời. 
 Khi có xung clock, bộ định thời bắt đầu đếm lên từ giá trị chứa 
trong TLx (THx không thay đổi giá trị). 
 Xảy ra tràn (cờ tràn TFx=1) khi số đếm chuyển từ FFH sang 00H, 
đồng thời giá trị trong THx sẽ được nạp vào TLx và việc đếm sẽ tiếp tục đếm 
lên từ giá trị chứa trong thanh ghi TLx (giá trị này bằng với giá trị của THx). 
Hình 4.2.3: Kiến trúc của Timer 0 ở chế độ 2 (Mode 2). 
4.2.4.4. Chế độ định thời chia xẻ (Chế độ 3): 
285 
Chế độ 3 (Mode 3) là: 
 Chế độ định thời chia xẻ. 
 Bộ định thời 0 được chia ra: 
o Bộ định thời 8 bit thứ I: 
 Sử dụng thanh ghi TL0 để tạo ra bộ định thời. 
 Số đếm: 00H FFH nghĩa là từ 0 255. Thời gian 
định thời:từ 1.TTimer 2
8.TTimer nghĩa là từ 1.TTimer 
256.TTimer. 
 Thanh ghi TL0 chứa giá trị của bộ định thời. 
 Khi có xung clock, bộ định thời bắt đầu đếm lên từ 
giá trị chứa trong TL0. 
 Xảy ra tràn (cờ tràn TF0=1) khi số đếm chuyển từ 
FFH sang 00H và việc đếm sẽ tiếp tục đếm lên từ giá 
trị 00H. 
o Bộ định thời 8 bit thứ II: 
 Sử dụng thanh ghi TH0 để tạo ra bộ định thời. 
 Số đếm: 00H FFH nghĩa là từ 0 255. Thời gian 
định thời:từ 1.TTimer 2
8.TTimer nghĩa là từ 1.TTimer 
256.TTimer. 
 Thanh ghi TH0 chứa giá trị của bộ định thời. 
 Khi có xung clock, bộ định thời bắt đầu đếm lên từ 
giá trị chứa trong TH0. 
 Xảy ra tràn (cờ tràn TF1=1) khi số đếm chuyển từ 
FFH sang 00H và việc đếm sẽ tiếp tục đếm lên từ giá 
trị 00H. 
 Bộ định thời 1: 
 286 
o Là bộ định thời 16 bit. 
o Không hoạt động ở chế độ 3 nhưng có thể hoạt động các chế 
độ khác (chế độ 0, 1, 2). 
o Không có cờ báo tràn như các bộ định thời khác. 
Hình 4.2.4: Kiến trúc của Timer 0 ở chế độ 3 (Mode 3). 
4.2.5. Các nguồn xung clock. 
Nguồn xung cho bộ định thời được tạo ra từ: 
 Mạch dao động trên chip dùng cho tính năng định thời gian. 
 Xung kích thích bên ngoài dùng cho tính năng đếm sự kiện. 
4.2.5.1. Trường hợp định thời gian: 
Nếu C/T=0 thì: 
 Bộ định thời được dùng để định thời gian (Timer). 
287 
 Nguồn xung clock định thời được lấy từ mạch dao động trên chip. 
Lưu ý: 
o Tần số xung clock cung cấp cho bộ định thời bằng 1/12 tần 
số của mạch dao động trên chip 8051. 
o Thời gian định thời là khoảng thời gian được tính từ lúc bộ 
định thời bắt đầu đếm lên (từ giá trị chứa trong các thanh ghi THx/TLx) cho đến 
lúc bộ định thời bắt đầu tràn (thời gian này phụ thuộc vào giá trị ban đầu được 
nạp cho các thanh ghi THx và TLx). 
Ví dụ: Tìm tần số xung clock và chu kỳ của bộ định thời đối với trường hợp 
các hệ thống vi điều khiển xây dựng trên chip 8051 với tần số thạch anh như 
sau: 11,0592 MHz, 12 MHz và 16 MHz. 
Giải 
Gọi fTIMER là tần số xung clock của bộ định thời, fOSC là tần số xung clock 
của thạch anh. Theo như trên đã trình bày, ta có: 
 s
KHz
TIMER
fTIMER
T
KHz
MHzOSC
f
TIMER
fMHz
OSC
f
085,1
6,921
11
6,921
12
0592,11
12
0592,11
 s
MHz
TIMER
fTIMER
T
MHz
MHzOSC
f
TIMER
fMHz
OSC
f
1
1
11
1
12
12
12
12
 s
MHz
TIMER
fTIMER
T
MHz
MHzOSC
f
TIMER
fMHz
OSC
f
75,0
333,1
11
333,1
12
16
12
16
4.2.5.2. Trường hợp đếm sự kiện: 
 288 
Nếu C/T=1 thì: 
 Bộ định thời được dùng để đếm sự kiện (Counter). 
 Nguồn xung clock định thời được lấy từ xung kích thích bên ngoài 
tại hai chân T0 và T1 của chip 8051. 
Lưu ý: 
o Tần số kích thích tối đa cho phép tại chân T0 và T1: 
2)(1,0
TIMER
f
MAXTT
f 
 fTIMER: tần số xung clock định thời. 
 fT0,T1(MAX): tần số kích thích tối đa cho phép tại T0 và T1. 
Ví dụ: Tính tần số kích thích tối đa cho phép tại chân T0 và T1 đối với 
trường hợp các hệ thống vi điều khiển xây dựng trên chip 8051 với tần số thạch 
anh như sau: 11,0592 MHz, 12 MHz và 16 MHz. 
Giải 
 KHzKHzTIMER
f
MAXTT
fMHz
OSC
f 8,460
2
6,921
2)(1,0
0592,11 
 KHzMHzTIMER
f
MAXTT
fMHz
OSC
f 500
2
1
2)(1,0
12 
 KHzMHzTIMER
f
MAXTT
fMHz
OSC
f 5,666
2
333,1
2)(1,0
16 
o Số lượng sự kiện (số xung) mà bộ định thời đếm được sẽ 
được chứa trong các thanh ghi THx/TLx, giá trị trong các thanh ghi này sẽ tăng 
theo mỗi xung kích thích bên ngoài tại T0 và T1 của chip 8051. 
Một kích thích được gọi là một sự kiện (một xung) khi xảy ra sự chuyển trạng 
thái từ 1 xuống 0 ở chân T0 hoặc T1. 
4.3. Phương pháp lập trình điều khiển bộ định thời. 
4.3.1. Lập trình định thời gian. 
Các bước cơ bản để khởi động Timer: 
 Chọn chế độ hoạt động cho Timer, cho bit GATE=0 và C/T=0: 
MOV TMOD, #...(1) 
 Chọn giá trị thích hợp (khoảng thời gian định thời) cho Timer: 
MOV THx, #...(2) 
MOV TLx, #...(3) 
289 
 Cho Timer chạy: 
SETB TRx 
 Kiểm tra cờ báo tràn (kiểm tra đủ thời gian định thời): 
JNB TFx, $ 
 hoặc 
WAIT: JNB TFx, WAIT 
 Xóa cờ báo tràn (chuẩn bị cho lần định thời tiếp theo): 
CLR TFx 
 Dừng Timer (sau khi đã hoàn tất quá trình định thời): 
CLR TRx 
Lưu ý: 
 x: Số thứ tự của Timer sử dụng. 
 (1): Giá trị này phụ thuộc vào Timer được chọn và chế độ hoạt động của 
Timer đó. 
 (2), (3): Giá trị này phụ thuộc vào khoảng thời gian cần định thời. Cũng 
cần lưu ý thêm, việc chọn giá trị cho không phải lúc nào ta cũng phải chọn giá 
trị cho cả hai thanh ghi này mà nó tùy thuộc vào từng chế hoạt động của Timer 
(Mode 0: THx/TLx, Mode 1: THx/TLx, Mode 2: THx, Mode 3: THx hoặc TLx). 
 Các giá trị trên phải thoả mãn điều kiện sau: 
 Chế độ 8 bit: giá trị trong khoảng từ -255 đến -1 (tương ứng từ 
255.TTIMER đến 1.TTIMER). 
 Ví dụ: MOV TH1, #(-255) định thời 255.TTIMER 
 Chế độ 13 bit: giá trị trong khoảng từ -8191 đến -1 (tương ứng từ 
8191.TTIMER đến 1.TTIMER). 
 Ví dụ: MOV TL1, #LOW(-8000) định thời 8000.TTIMER 
 MOV TH1, #HIGH(-8000) 
 Chế độ 16 bit: giá trị trong khoảng từ -65535 đến -1 (tương ứng từ 
65535.TTIMER đến 1.TTIMER). 
 Ví dụ: MOV TL1, #LOW(-10000) định thời 10000.TTIMER 
 MOV TH1, #HIGH(-10000) 
Trường hợp đặc biệt nếu giá trị (N) nạp vào thanh ghi THx/TLx là giá trị 0 
thì thời gian định thời sẽ là lớn nhất cho từng chế độ. 
 Chế độ 8 bit: N = 0 tDELAY = 256.TTIMER. 
 Chế độ 13 bit: N = 0 tDELAY = 8192.TTIMER. 
 290 
 Chế độ 16 bit: N = 0 tDELAY = 65536.TTIMER. 
4.3.2. Lập trình đếm sự kiện. 
Các bước cơ bản để khởi động Counter: 
 Chọn chế độ hoạt động cho Counter, cho bit GATE=0 và C/T=1: 
MOV TMOD, #...(1) 
 Xoá các giá trị chứa trong thanh ghi THx và TLx (nghĩa là cho số 
xung ban đầu bằng 0): 
MOV THx, #00H 
MOV TLx, #00H 
 Cho Counter chạy: 
SETB TRx 
 Kiểm tra cờ báo tràn (kiểm tra số đếm bị tràn) để xử lý trường hợp 
số đếm bị tràn. 
 Xóa cờ báo tràn (sau khi đã xử lý cho trường hợp số đếm bị tràn): 
CLR TFx 
 Dừng Counter (sau khi đã hoàn tất quá trình đếm xung): 
CLR TRx 
 Đọc số xung đếm được trong thanh ghi THx và TLx. 
Lưu ý: 
 x: Số thứ tự của Counter sử dụng. 
 (1): Giá trị này phụ thuộc vào Counter được chọn và chế độ hoạt động 
của Counter. Giá trị này phải thoả mãn điều kiện sau: 
 Chế độ 8 bit: số lượng xung tối đa mà Counter đếm được từ 0 đến 
255. 
 Chế độ 13 bit: số lượng xung tối đa mà Counter đếm được từ 0 đến 
8191. 
 Chế độ 16 bit: số lượng xung tối đa mà Count ... R12
330
+5V
D11
R13
330
+5V
D12
R14
330
+5V
D13
R15
330
+5V
D14
R16
330
+5V
D15
R17
330
+5V
KEY15 KEY14 KEY13 KEY12 KEY11 KEY10 KEY9 KEY8
Hình 6.5.15: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển. 
 Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính với tên tập 
tin là: SerialPort_1.DSN. Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng 
hoặc lấy mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học. 
 Bước 9: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy 
đã được tạo ra từ Bước 6) cho hệ thống vi điều khiển: SP_1_M.HEX và 
SP_1_S.HEX 
 412 
 Bước 10: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả 
trên màn hình máy tính. 
o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh 
khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thông thường do giải thuật 
chương trình không chính xác hoặc do mạch mô phỏng vẽ không chính xác, cần 
phải được kiểm tra lại. Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở về 
thực hiện từ Bước 5 (do giải thuật chương trình không chính xác) hoặc Bước 8 
(do mạch mô phỏng vẽ không chính xác). 
o Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần 
nội dung dưới đây. 
6.5.13. Lắp mạch và nạp chương trình điều khiển. 
Sử dụng các khối "Microcontroller Unit Slot", "Point LED", "Inverter" và 
"Power Supply" có sẵn trên mô hình thực hành vi điều khiển để lắp ráp mạch 
theo thiết kế bên trên. 
 Bước 11: Kết nối các khối trên mô hình như Hình 6.5.16 để tạo 
thành hệ thống mạch điều khiển như bên trên. 
o Tắt nguồn AC cấp cho mô hình thực hành. 
Hình 6.5.16: Sơ đồ kết nối mạch trên mô hình. 
Sử dụng phần mềm Flash Magic để thực hiện việc nạp chương trình cho vi 
điều khiển P89V51RB2 trên mô hình thực hành. 
 Bước 12: Bật nguồn AC cấp cho mô hình thực hành. 
 Bước 13: Khởi động phần mềm Flash Magic. 
 Bước 14: Kiểm tra cấu hình phần mềm (loại vi điều khiển, cổng 
COM, tốc độ truyền, chuẩn giao tiếp,... 
 Bước 15: Chọn tập tin chương trình điều khiển (tập tin mã máy đã 
được tạo ra từ Bước 6): SP_1_M.HEX và SP_1_S.HEX 
413 
 Bước 16: Nạp chương trình vào vi điều khiển. 
 Bước 17: Nhấn nút "Master Reset" ở khối "Microcontroller Unit 
Slot" để chạy chương trình và quan sát trực tiếp kết quả trên mô hình thực hành. 
o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh 
khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần 
cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại. 
Sau khi hoàn tất việc kiểm tra và hiệu chỉnh sai sót thì quay trở về thực hiện từ 
Bước 15. 
o Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành. 
6.5.14. Bài tập thực hành. 
6.5.14.1. Bài tập mẫu. 
 Bài tập số 1: 
Nội dung: 
"Viết chương trình, mô phỏng và lắp ráp mạch điều khiển truyền dữ 
liệu thông qua port nối tiếp. Thay đổi trạng thái của các LED đơn tại vi 
điều khiển 2 (Slave) theo trạng thái của các nút nhấn tại vi điều khiển 1 
(Master) và ngược lại, trong khi các LED 7 đoạn vẫn hiển thị số đếm liên 
tục từ 00 đến 99. Sử dụng phương pháp ngắt port nối tiếp cho việc truyền 
dữ liệu." 
Lưu đồ giải thuật: 
 414 
Sơ đồ nguyên lý mô phỏng: 
P0.7M
P0.0M
P0.0M
P0.1M
P0.2M
P0.3M
P0.4M
P0.5M
P0.6M
P0.7M
P0.6M
P0.5M
P0.4M
P0.3M
P0.2M
P0.1M
P0.7S
P0.0S
P0.0S
P0.1S
P0.2S
P0.3S
P0.4S
P0.5S
P0.6S
P0.7S
P0.6S
P0.5S
P0.4S
P0.3S
P0.2S
P0.1S
D
0
S
D0M D0M
D1M D1M
D2M D2M
D3M D3M
D4M D4M
D5M D5M
D6M D6M
D7M D7M
D
7
S
D
6
S
D
5
S
D
4
S
D
3
S
D
2
S
D
1
S
P
0
.0
S
P
0
.1
S
P
0
.2
S
P
0
.3
S
P
0
.4
S
P
0
.5
S
P
0
.6
S
P
0
.7
S
D0SD0S
D1SD1S
D2SD2S
D3SD3S
D4SD4S
D5SD5S
D6SD6S
D7SD7S
D
0
M
D
7
M
D
6
M
D
5
M
D
4
M
D
3
M
D
2
M
D
1
M
P
0
.0
M
P
0
.1
M
P
0
.2
M
P
0
.3
M
P
0
.4
M
P
0
.5
M
P
0
.6
M
P
0
.7
M
P2.0M
P2.7M
P2.0S
P2.7S
P2.1M
P2.2M
P2.3M
P2.4M
P2.5M
P2.6M
P2.1S
P2.2S
P2.3S
P2.4S
P2.5S
P2.6S
P2.4M
P2.5M
P2.6M
P2.7M
A1
B1
C1
D1
E1
F1
G1
A1
B1
C1
D1
E1
F1
G1
P2.0M
P2.1M
P2.2M
P2.3M
A2
B2
C2
D2
E2
F2
G2
A2
B2
C2
D2
E2
F2
G2
P2.4S
P2.5S
P2.6S
P2.7S
A3
B3
C3
D3
E3
F3
G3
A3
B3
C3
D3
E3
F3
G3
P2.0S
P2.1S
P2.2S
P2.3S
A4
B4
C4
D4
E4
F4
G4
A4
B4
C4
D4
E4
F4
G4
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U9
AT89C51
C1
33p
C2
33p
X1
11.0592MHz
C3
10uF
R1
10k
+5V
2
3
4
5
6
7
8
9
1
RP1
10K
+
5
V
MA ÏCH Ñ I EÀU K H I EÅN GI A O T I EÁP COÅN G N OÁI T I EÁP
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
C4
33p
C5
33p
X2
11.0592MHz
C6
10uF
R18
10k
+5V
2
3
4
5
6
7
8
9
1
RP2
10K
+
5
V
MA ST ER SLA V E
D0
R2
330
+5V
D1
R3
330
+5V
D2
R4
330
+5V
D3
R5
330
+5V
D4
R6
330
+5V
D5
R7
330
+5V
D6
R8
330
+5V
D7
R9
330
+5V
1B
1
2B
2
3B
3
4B
4
5B
5
6B
6
7B
7
8B
8
1C
18
2C
17
3C
16
4C
15
5C
14
6C
13
7C
12
8C
11
COM
10
U2
ULN2803
2
3
4
5
6
7
8
9
1
RP3
10K
+5V
+5V
KEY7 KEY6 KEY5 KEY4 KEY3 KEY2 KEY1 KEY0
1B
1
2B
2
3B
3
4B
4
5B
5
6B
6
7B
7
8B
8
1C
18
2C
17
3C
16
4C
15
5C
14
6C
13
7C
12
8C
11
COM
10
U3
ULN2803
2
3
4
5
6
7
8
9
1
RP4
10K
+5V
+5V
D8
R10
330
+5V
D9
R11
330
+5V
D10
R12
330
+5V
D11
R13
330
+5V
D12
R14
330
+5V
D13
R15
330
+5V
D14
R16
330
+5V
D15
R17
330
+5V
KEY15 KEY14 KEY13 KEY12 KEY11 KEY10 KEY9 KEY8
A
7
QA
13
B
1
QB
12
C
2
QC
11
D
6
QD
10
BI/RBO
4
QE
9
RBI
5
QF
15
LT
3
QG
14
U4
74LS47
+5VR19
56
R20
56
R21
56
R22
56
R23
56
R24
56
R25
56
A
7
QA
13
B
1
QB
12
C
2
QC
11
D
6
QD
10
BI/RBO
4
QE
9
RBI
5
QF
15
LT
3
QG
14
U5
74LS47
R2656
R2756
R2856
R2956
R3056
R3156
R3256
+5V
A
7
QA
13
B
1
QB
12
C
2
QC
11
D
6
QD
10
BI/RBO
4
QE
9
RBI
5
QF
15
LT
3
QG
14
U6
74LS47
+5VR33
56
R34
56
R35
56
R36
56
R37
56
R38
56
R39
56
A
7
QA
13
B
1
QB
12
C
2
QC
11
D
6
QD
10
BI/RBO
4
QE
9
RBI
5
QF
15
LT
3
QG
14
U7
74LS47
R4056
R4156
R4256
R4356
R4456
R4556
R4656
+5V
415 
Sơ đồ lắp ráp: 
Chương trình điều khiển cho vi điều khiển Master: 
;*************************************************** 
;CHUONG TRINH DIEU KHIEN GIAO TIEP PORT NOI TIEP TRUC TIEP 
GIUA HAI VI DIEU KHIEN. 
;CHUONG TRINH CHO VI DIEU KHIEN MASTER. 
;DIEU KHIEN CAC LED SANG/TAT THEO SU DIEU KHIEN CUA CAC 
SW TUONG UNG. 
;TRONG KHI SO DEM TANG DAN TU 00 DEN 99. 
;MO PHONG PROTUES: SERIALPORT_1. 
;*************************************************** 
;*************************************************** 
;KET NOI: 8 SWITCH -> PORT 0 (ACT = 0). 
; 8 LED -> PORT 1 (CO SU DUNG DEM DAO - ACT = 1). 
; 2 LED 7 -> PORT 2 (BCD). 
;*************************************************** 
 $MOD51 
 ORG 00H ;DIEM NHAP RESET. 
 SJMP MAIN 
 ORG 23H ;DIEM NHAP NGAT PORT NOI TIEP. 
 AJMP SP_ISR ;NHAY TOI CTC PHUC VU NGAT PORT NOI 
TIEP. 
 ORG 30H ;DIEM NHAP CHUONG TRINH CHINH. 
MAIN: 
 MOV P1,#00H ;LED TAT 
 ;**************************************************** 
 416 
 ;KHOI DONG PORT NOI TIEP. 
 MOV SCON,#52H;SERIAL: MODE 1, TI = 1, RI = 0, REN = 1. 
 MOV TMOD,#20H ;TIMER 1: MODE 2 - TAO TOC DO BAUD 
CHO SERIAL PORT. 
 MOV TH1,#(-3) ;BAUD RATE = 9600. 
 SETB TR1 ;TIMER HOAT DONG - PORT NOI TIEP HOAT 
DONG. 
 ;**************************************************** 
 ;THIET LAP CAC NGAT CHO PORT NOI TIEP. 
 MOV IE,#90H ;CHO PHEP NGAT PORT NOI TIEP. 
 ;**************************************************** 
MP1: ;DOAN CHUONG TRINH SE THUC HIEN KHI KHONG 
CO TIN HIEU NGAT. 
 MOV A,#00H ;GIA TRI BAT DAU. 
LOOP: 
 MOV P2,A ;XUAT HIEN THI. 
 LCALLDELAY500MS 
 ADD A,#1 ;TANG GIA TRI (+1). 
 DA A 
 CJNE A,#00,LOOP 
 SJMP MP1 ;QUAY LAI. 
;**************************************************** 
SP_ISR: ;CTC PHUC VU NGAT PORT NOI TIEP. 
 ;P0 = DU LIEU PHAT. 
 ;P1 = DU LIEU THU. 
 PUSH ACC 
 JB TI,TRANS_DATA ;KIEM TRA TIN HIEU NGAT LA 
NGAT PHAT HAY NGAT THU. 
RECEI_DATA: ;XU LY THU DU LIEU TU PORT NOI TIEP 
VAO THANH GHI A. 
 CLR RI ;XOA RI DE CHUAN BI CHO LAN THU KE TIEP. 
 MOV A,SBUF ;THU DU LIEU. 
 MOV P1,A ;XUAT DU LIEU THU DUOC RA PORT LED. 
 SJMP EXIT_SP_ISR ;THOAT KHOI ISR. 
TRANS_DATA: ;XU LY PHAT DU LIEU TU THANH GHI A 
RA PORT NOI TIEP. 
 CLR TI ;XOA TI DE CHUAN BI CHO LAN PHAT KE TIEP. 
 MOV A,P0 ;DOC DU LIEU LAY TU PORT SW. 
 CPL A ;DAO TRANG THAI (SW ACT = 0, LED ACT = 1). 
 MOV SBUF,A ;PHAT DU LIEU. 
EXIT_SP_ISR: 
 POP ACC 
 RETI 
;*************************************************** 
417 
DELAY500MS: ;CHUONG TRINH CON TAO THOI GIAN TRE 500MS 
 PUSH 00H 
 PUSH 01H 
 PUSH 02H 
MOV R0,#250 
DEL2: 
 MOV R1,#100 
DEL1: 
 MOV R2,#10 
DJNZ R2,$ 
 DJNZ R1,DEL1 
 DJNZ R0,DEL2 
 POP 02H 
 POP 01H 
 POP 00H 
 RET 
 END 
Chương trình điều khiển cho vi điều khiển Slave: 
;*************************************************** 
;CHUONG TRINH DIEU KHIEN GIAO TIEP PORT NOI TIEP TRUC TIEP 
GIUA HAI VI DIEU KHIEN. 
;CHUONG TRINH CHO VI DIEU KHIEN SLAVER. 
;DIEU KHIEN CAC LED SANG/TAT THEO SU DIEU KHIEN CUA CAC 
SW TUONG UNG. 
;TRONG KHI SO DEM GIAM DAN TU 99 DEN 00. 
;MO PHONG PROTUES: SERIALPORT_1. 
;*************************************************** 
;KET NOI: 8 SWITCH -> PORT 0 (ACT = 0). 
; 8 LED -> PORT 1 (CO SU DUNG DEM DAO - ACT = 1). 
; 2 LED 7 -> PORT 2 (BCD). 
;*************************************************** 
 $MOD51 
 ORG 00H ;DIEM NHAP RESET. 
 SJMP MAIN 
 ORG 23H ;DIEM NHAP NGAT PORT NOI TIEP. 
 AJMP SP_ISR ;NHAY TOI CTC PHUC VU NGAT PORT NOI 
TIEP. 
 ORG 30H ;DIEM NHAP CHUONG TRINH CHINH. 
MAIN: 
 MOV P1,#00H ;LED TAT 
 ;**************************************************** 
 ;KHOI DONG PORT NOI TIEP. 
 MOV SCON,#52H;SERIAL: MODE 1, TI = 1, RI = 0, REN = 1. 
 418 
 MOV TMOD,#20H ;TIMER 1: MODE 2 - TAO TOC DO BAUD 
CHO SERIAL PORT. 
 MOV TH1,#(-3) ;BAUD RATE = 9600. 
 SETB TR1 ;TIMER HOAT DONG - PORT NOI TIEP HOAT 
DONG. 
 ;**************************************************** 
 ;THIET LAP CAC NGAT CHO PORT NOI TIEP. 
 MOV IE,#90H ;CHO PHEP NGAT PORT NOI TIEP. 
 ;**************************************************** 
MP1: ;DOAN CHUONG TRINH SE THUC HIEN KHI KHONG 
CO TIN HIEU NGAT. 
 MOV A,#99H ;GIA TRI BAT DAU. 
LOOP: 
 MOV P2,A ;XUAT HIEN THI. 
 LCALLDELAY500MS 
 ADD A,#99H ;GIAM GIA TRI (-1). 
 CJNE A,#0FFH,PROCESS_ERROR ;KIEM TRA LOI KHI GIAM QUA 
GIA TRI 66 - 65. 
 SETB C ;XU LY LOI (CHO CO C = 1). 
PROCESS_ERROR: 
 DA A 
 CJNE A,#0F9H,LOOP 
SJMP MP1 ;QUAY LAI. 
;**************************************************** 
SP_ISR: ;CTC PHUC VU NGAT PORT NOI TIEP. 
 ;P0 = DU LIEU PHAT. 
 ;P1 = DU LIEU THU. 
 PUSH ACC 
 JB TI,TRANS_DATA ;KIEM TRA TIN HIEU NGAT LA 
NGAT PHAT HAY NGAT THU. 
RECEI_DATA: ;XU LY THU DU LIEU TU PORT NOI TIEP 
VAO THANH GHI A. 
 CLR RI ;XOA RI DE CHUAN BI CHO LAN THU KE TIEP. 
 MOV A,SBUF ;THU DU LIEU. 
 MOV P1,A ;XUAT DU LIEU THU DUOC RA PORT LED. 
 SJMP EXIT_SP_ISR ;THOAT KHOI ISR. 
TRANS_DATA: ;XU LY PHAT DU LIEU TU THANH GHI A 
RA PORT NOI TIEP. 
 CLR TI ;XOA TI DE CHUAN BI CHO LAN PHAT KE TIEP. 
 MOV A,P0 ;DOC DU LIEU LAY TU PORT SW. 
 CPL A ;DAO TRANG THAI (SW ACT = 0, LED ACT = 1). 
 MOV SBUF,A ;PHAT DU LIEU. 
EXIT_SP_ISR: 
 POP ACC 
419 
 RETI 
;*************************************************** 
DELAY500MS: ;CHUONG TRINH CON TAO THOI GIAN TRE 500MS 
 PUSH 00H 
 PUSH 01H 
 PUSH 02H 
MOV R0,#250 
DEL2: 
 MOV R1,#100 
DEL1: 
 MOV R2,#10 
DJNZ R2,$ 
 DJNZ R1,DEL1 
 DJNZ R0,DEL2 
 POP 02H 
 POP 01H 
 POP 00H 
 RET 
 END 
6.5.15. Bài tập ứng dụng. 
 Bài 1: Cho hệ thống truyền dữ liệu giữa hai vi điều khiển (Master 
và Slave) thông qua port nối tiếp (UART) được thiết kế như hình vẽ bên dưới. 
Viết chương trình điều khiển hệ thống để thực hiện các hoạt động sau: 
o Ban đầu khi chưa nhấn nút thì tất cả các LED đơn đều tắt và 
các LED 7 đoạn đều hiển thị số 0. 
o Truyền dữ liệu từ MASTER sang SLAVE: 
 Nhấn nút “KEY8/MASTER”: 8 LED đơn “D0-
D7/SLAVE” sáng tắt liên tục. 
 Nhấn nút “KEY9/MASTER”: 8 LED đơn “D0-
D7/SLAVE” sáng đuổi từ trái sang phải liên tục. 
 Nhấn nút “KEY10/MASTER”: 8 LED đơn “D0-
D7/SLAVE” sáng dần từ trái sang phải liên tục. 
 Nhấn nút “KEY11/MASTER”: 8 LED đơn “D0-
D7/SLAVE” sáng dần từ hai bên vào giữa liên tục. 
 Nhấn nút “KEY12/MASTER”: 8 LED đơn “D0-
D7/SLAVE” tắt hết. 
 Nhấn nút “KEY13/MASTER”: 8 LED đơn “D0-
D7/SLAVE” sáng hết. 
o Truyền dữ liệu từ SLAVE sang MASTER: 
 420 
 Nhấn nút “KEY0/SLAVE”: 2 LED 7 đoạn 
“7seg/MASTER” đếm lên liên tục (giá trị đếm nằm trong khoảng 0099). 
 Nhấn nút “KEY0/SLAVE”: 2 LED 7 đoạn 
“7seg/MASTER” đếm xuống liên tục (giá trị đếm nằm trong khoảng 0099). 
 Nhấn nút “KEY1/SLAVE”: 2 LED 7 đoạn 
“7seg/MASTER” đang đếm (lên hoặc xuống) sẽ bị dừng lại và hiển thị liên tục 
giá trị tại thời điểm bị dừng. 
 Nhấn nút “KEY2/SLAVE”: 2 LED 7 đoạn 
“7seg/MASTER” đang dừng sẽ tiếp tục đếm (lên hoặc xuống) từ giá trị bị dừng. 
 Nhấn nút “KEY4/SLAVE”: 2 LED 7 đoạn 
“7seg/MASTER” hiển thị liên tục giá trị 00. 
 Bài 2: Cho hệ thống truyền dữ liệu giữa hai vi điều khiển (Master 
và Slave) thông qua port nối tiếp (UART) như hình vẽ ở Bài 1 bên trên. Viết 
chương trình điều khiển hệ thống để thực hiện các hoạt động sau: 
o Ban đầu khi chưa nhấn nút thì tất cả các LED đơn đều tắt và 
các LED 7 đoạn đều hiển thị số 0. 
o Nhấn nút “KEY8/MASTER”: 16 LED đơn “D8-
D15/MASTER” và “D0-D7/SLAVE” sáng đuổi từ trái sang phải liên tục. 
o Nhấn nút “KEY9/MASTER”: 16 LED đơn “D8-
D15/MASTER” và “D0-D7/SLAVE” sáng đuổi từ phải sang trái liên tục. 
o Nhấn nút “KEY10/MASTER”: 16 LED đơn “D8-
D15/MASTER” và “D0-D7/SLAVE” tắt hết. 
o Nhấn nút “KEY0/SLAVE”: 4 LED 7 đoạn “7seg/MASTER” 
và “7seg/SLAVE” đếm lên liên tục từ 0000 đến 9999. 
o Nhấn nút “KEY1/SLAVE”: 4 LED 7 đoạn “7seg/MASTER” 
và “7seg/SLAVE” đếm xuống liên tục từ 9999 đến 0000. 
o Nhấn nút “KEY2/SLAVE”: 4 LED 7 đoạn “7seg/MASTER” 
và “7seg/SLAVE” hiển thị giá trị 0000. 

File đính kèm:

  • pdfgiao_trinh_vi_dieu_khien_phan_2_truong_cao_dang_nghe_cong_ng.pdf