Câu hỏi ôn tập
BÀI TẬP ỨNG DỤNG
Bài 1: Hãy viết chương trình điều khiển tạo xung 1 Hz (sử dụng Timer) tại chân P1.0 và hiển thị mức logic tại chân này lên LED. Tự lựa chọn phương pháp kết nối LED.
Bài 2: Hãy viết chương trình điều khiển tạo xung 3 Hz (sử dụng Timer) tại chân P1.0 và hiển thị mức logic tại chân này lên LED. Tự lựa chọn phương pháp kết nối LED.
Bài 3: Hãy viết chương trình điều khiển tạo xung 1 Hz hoặc 3 Hz (sử dụng Timer) tại chân P1.0 tùy thuộc vào ta nhấn hay nhả nút nhấn KEY0 và hiển thị mức logic tại chân này lên LED. Tự lựa chọn phương pháp kết nối LED và nút nhấn.
Bài 4: Hãy viết chương trình điều khiển đếm liên tục số lượng xung được đưa vào chân T0 của vi điều khiển và hiển thị số lượng xung này lên các LED 7 đoạn. Tự lựa chọn phương pháp kết nối thiết bị tạo xung và các LED 7 đoạn.
Bài 5: Hãy viết chương trình điều khiển đo tần số của xung (đơn vị tính là Hz) được đưa vào chân T0 của vi điều khiển và hiển thị giá trị tần số lên LED 7 đoạn. Tự lựa chọn phương pháp kết nối thiết bị tạo xung và các LED 7 đoạn.
Bài 6: Hãy viết chương trình điều khiển đo độ rộng xung (đơn vị tính là ms) được đưa vào chân T0 của vi điều khiển và hiển thị giá trị độ rộng xung lên LED 7 đoạn. Tự lựa chọn phương pháp kết nối thiết bị tạo xung và các LED 7 đoạn.
145 trang |
Chia sẻ: Tiểu Khải Minh | Ngày: 21/02/2024 | Lượt xem: 82 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình Kỹ thuật vi điều khiển (Trình độ: Trung cấp) - Trường Cao đẳng nghề Vĩnh Long, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
cao/số thấp.
MOV R7, B ; Lưu giá trị hàng đơn vị vào R7.
MOV B, #10 ; Nạp (B) = 10.
DIV AB ; Chia cho 10, tách lấy số cao/số thấp.
MOV R6, B ; Lưu giá trị hàng chục vào R6.
MOV R5, A ; Lưu giá trị hàng trăm vào R5.
Ví dụ 20:
Viết đoạn lệnh đọc và kiểm tra các giá trị tại Port 1 xem có chứa giá trị 45H hay
không? Nếu (P1) = 45H thì xuất giá trị 99H ra Port 2, ngược lại thì thoát khỏi đoạn
lệnh.
Giải
MOV P2, #00H ; Xoá P2, (P2) = 0.
MOV P1, #0FFH ; Cấu hình P1 là port nhập.
MOV R0, #45H ; Nạp (R0) = 45H, giá trị cần kiểm tra.
MOV A, P1 ; Đọc dữ liệu từ P1.
XRL A, R0 ; Kiểm tra dữ liệu có bằng 45H, nếu bằng
JNZ EXIT ; thì (A) = 0, không bằng thì (A) ≠ 0.
MOV P2, #99H ; Nạp (P2) = 99H nếu (P1) = 45H.
EXIT:
Ví dụ 21:
Viết đoạn lệnh để lấy "bù 2" của giá trị chứa trong thanh ghi R0.
Giải
MOV A, R0 ; Nạp dữ liệu cần lấy bù vào A.
CPL A ; Lấy bù 1.
ADD A, #1 ; Cộng thêm 1 để được bù 2.
Ví dụ 22:
97
Viết đoạn lệnh kiểm tra thanh ghi A xem có chứa giá trị 99H hay không? Nếu (A) =
99H thì nạp giá trị FFH vào thanh ghi R1, ngược lại thì nạp giá trị 00H vào thanh ghi
R1.
Giải
MOV R1, #0 ; Nạp (R0) = 00H.
CJNE A, #99H, NEXT ; So sánh A với giá trị 99H, nếu không
; bằng thì nhảy đến NEXT.
MOV R1, #0FFH ; Nạp (R0) = FFH nếu (A) = 99H.
NEXT:
Ví dụ 23:
Giả sử giá trị nhiệt độ đọc được từ một cảm biến nhiệt được đưa tới ngõ vào Port 1
(dạng số nhị phân 8 bit). Hãy viết đoạn lệnh đọc nhiệt độ này và so sánh với giá trị
nhiệt độ chuẩn 75. Dựa vào kết quả so sánh để đặt giá trị nhiệt độ này vào các thanh
ghi như sau:
Nếu t = 75OC thì (A) = 75.
Nếu t < 75OC thì (R1) = t.
Nếu t > 75OC thì (R2) = t.
Giải
MOV P1, #0FFH ; Cấu hình P1 là port nhập.
MOV A, P1 ; Đọc dữ liệu (t) từ P1.
CJNE A, #75, OVER ; So sánh dữ liệu (t) với giá trị 75, nếu
; không bằng thì nhảy đến OVER.
SJMP EXIT ; Nếu (A) = 75 thì thoát chương trình.
OVER: ; Trường hợp khi dữ liệu (t) khác 75.
JNC NEXT ; Nhảy đến NEXT nếu dữ liệu (t) > 75, (C) = 0.
MOV R1, A ; Nếu dữ liệu (t) < 75 thì nạp dữ liệu vào
SJMP EXIT ; R1 (R1 = A = t) và thoát chương trình.
NEXT: ; Trường hợp khi dữ liệu (t) > 75.
MOV R2, A ; Nạp dữ liệu vào R2 (R2 = A = t).
EXIT:
Ví dụ 24:
Viết đoạn lệnh liên tục kiểm tra giá trị tại Port 1 nếu giá trị này khác 63H. Còn trường
hợp nếu (P1) = 63H thì thoát đoạn lệnh không kiểm tra nữa.
Giải
MOV P1, #0FFH ; Cấu hình P1 là port nhập.
HERE:
MOV A, P1 ; Đọc dữ liệu từ P1.
98
CJNE A, #63H, HERE ; Duy trì kiểm tra đến khi (P1) = 63H.
Ví dụ 25:
Giả sử các ô nhớ của RAM bên trong có địa chỉ từ 40H – 44H chứa nhiệt độ của các
ngày được chỉ ra dưới đây. Hãy viết đoạn lệnh kiểm tra xem có giá trị nào bằng 35
không? Nếu có thì đặt địa chỉ của ô nhớ đó vào R4, ngược lại thì làm cho R4 = 0.
(40H) = 46, (41H) = 49, (42H) = 39, (43H) = 35, (44H) = 34
Giải
MOV R4, #0 ; Xoá (R4) = 0.
MOV R0, #40H ; Nạp địa chỉ bắt đầu chứa trong RAM.
MOV R1, #5 ; Nạp giá trị bộ đếm (số lượng ô nhớ).
MOV A, #35 ; Nạp giá trị cần tìm vào A, (A) = 35.
BACK:
CJNE A, @R0, NEXT ; So sánh dữ liệu do R0 trỏ đến với 35.
MOV R4, R0 ; Nếu bằng thì lưu địa chỉ ô nhớ đó vào R4.
SJMP EXIT ; Thoát chương trình.
NEXT: ; Trường hợp dữ liệu do R0 trỏ đến khác 35.
INC R0 ; Tăng con trỏ đến ô nhớ kế tiếp.
DJNZ R2, BACK ; Lặp lại cho đến khi bộ đếm bằng 0.
EXIT:
Ví dụ 26:
Viết đoạn lệnh tìm tổng các chữ số 1 trong thanh ghi R0.
Giải
MOV R1, #0 ; Xoá (R1) = 0, lưu số chữ số 1.
MOV R2, #8 ; Nạp giá trị bộ đếm (số bit kiểm tra).
MOV A, R0 ; Nạp dữ liệu cần kiểm tra từ R0 vào A.
LOOP:
RLC A ; Xoay trái, đưa bit cần kiểm tra vào cờ CY.
JNC NEXT ; Kiểm tra cờ CY.
INC R1 ; Tăng giá trị của R1 nếu cờ (CY) = 1.
NEXT:
DJNZ R2, LOOP ; Lặp lại cho đến khi bộ đếm bằng 0.
Ví dụ 27:
Viết đoạn lệnh để chuyển đổi số BCD nén chứa trong thanh ghi A thành hai số mã
ASCII và chứa hai số này trong thanh ghi R2 và R3.
Giải
MOV A, #29H ; Nạp (A) = 29H, mã BCD nén của số 29.
MOV R2, A ; Lưu lại số BCD cần chyển đổi trong R2.
99
ANL A, #0FH ; Xoá (che) 4 bit cao của số BCD – (A) = 09H.
ORL A, #30H ; Chuyển thành mã ASCII – (A) = 39H.
MOV R3, A ; Cất vào R3 ((R3) = 39H – mã ASCII của 9).
MOV A, R2 ; Lấy lại số BCD lúc ban đầu – (A) = 29H.
ANL A, #0F0H ; Xoá (che) 4 bit thấp của số BCD – (A) = 20H.
SWAP A ; Hoán chyển vị trí 4 bit cao vẫp bit thấp.
ORL A, #30H ; Chuyển thành mã ASCII – (A) = 32H.
MOV R2, A ; Cất vào R2 ((R2) = 32H – mã ASCII của 2).
Ví dụ 28:
Giả sử bit P2.3 là một đầu vào và biểu diễn nhiệt độ của một lò nhiệt. Nếu (P2.3) = 1
có nghĩa là lò quá nóng. Hãy liên tục kiểm tra bit này, nếu nhiệt độ quá cao thì hãy gửi
một xung mức cao đến P1.5 để bật còi báo hiệu.
Giải
JNB P2.3, $ ; Duy trì kiểm tra đầu vào.
SETB P1.5 ; Khi (P2.3) = 1, tạo mức cao cho P1.5 rồi
CLR P1.5 ; tạo mức thấp cho P1.5, phát một xung.
Ví dụ 29:
Viết đoạn lệnh kiểm tra xem thanh ghi A có chứa một số chẵn hay không? Nếu có thì
chia cho 2, nếu không thì tăng lên 1 để chẵn hoá số đó rồi chia nó cho 2.
Giải
MOV B, #2 ; Gán số chia, (B) = 2.
JNB ACC.0, OK ; Kiểm tra nếu là số chẵn thì nhảy đến OK.
INC A ; Chẵn hoá nếu là số lẻ.
OK:
DIV AB ; Chia A cho 2.
Câu hỏi ôn tập
1. Trình bày các cách định địa chỉ
2. Tốc độ baud là gì?
100
BÀI 4: BỘ ĐỊNH THỜI
Mục tiêu:
- Trình bày được cấu tạo và các chế độ làm việc của bộ định thời 8051 theo
nội dung đã học;
- Thực hiện khởi tạo bộ nhớ đúng yêu cầu kỹ thuật;
- Thực hiện đọc bộ định thời trong khi hoạt động đúng yêu cầu kỹ thuật;
- Thực hiện lập trình điều khiển dùng bộ định thời đúng yêu cầu kỹ thuật .
Nội dung:
1. Mở đầu
❖ 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:
101
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 đượ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.”.
102
2. Thanh ghi SFR của timer
2.1.Thanh ghi chế độ TMOD
- 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.
❖ 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:
103
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).
❖ 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.
104
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:
105
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.
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).
2.2. Thanh ghi điều khiển 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:
106
❖ 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.”.
3. Các chế độ làm việc
3.1.Chế độ Timer 13 bit
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→ 213.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.
Hình 0.2: Kiến trúc của Timer 0 ở chế độ 0 (Mode 0).
107
3.2.Chế độ Timer 16 bit
- 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→ 216.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 0.3: Kiến trúc của Timer 0 ở chế độ 1 (Mode 1).
- Chế độ định thời 8 bit tự nạp lại (Chế độ 2):
108
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→ 28.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 0.4: Kiến trúc của Timer 0 ở chế độ 2 (Mode 2).
3.4.Chế độ tách biệt Timer
- Chế độ định thời chia xẻ (Chế độ 3):
109
Chế độ 3 (Mode 3) là:
❖ Chế độ định thời chia xẻ.
❖ Bộ định thời 0 được chia ra:
• 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→ 28.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.
• 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→ 28.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:
• Là bộ định thời 16 bit.
• Không hoạt động ở chế độ 3 nhưng có thể hoạt động các chế độ
khác (chế độ 0, 1, 2).
110
• Không có cờ báo tràn như các bộ định thời khác.
Hình 0.5: Kiến trúc của Timer 0 ở chế độ 3 (Mode 3).
4. Nguồn cung cấp xung cho Timer
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.1.Chức năng định thời
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).
❖ Nguồn xung clock định thời được lấy từ mạch dao động trên chip.
Lưu ý:
• 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.
111
• 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.Chức năng đếm sự kiện
❖ Trường hợp đếm sự kiện:
Nếu C/T=1 thì:
❖ Bộ định thời được dùng để đếm sự kiện (Counter).
112
❖ 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 ý:
• 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
( )
( )
( )KHz
KHzTIMER
f
MAXTT
fMHz
OSC
f 8,460
2
6,921
2)(1,0
0592,11 ===→=
( )
( )
( )KHz
MHzTIMER
f
MAXTT
fMHz
OSC
f 500
2
1
2)(1,0
12 ===→=
( )
( )
( )KHz
MHzTIMER
f
MAXTT
fMHz
OSC
f 5,666
2
333,1
2)(1,0
16 ===→=
• 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.
5. Khởi động, dừng, điều khiển Timer
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)
❖ 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, $
113
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.
❖ Chế độ 16 bit: N = 0 → tDELAY = 65536.TTIMER.
6. Khởi tạo và truy xuất thanh ghi Timer
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)
114
❖ 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à Counter đếm được từ 0 đến
65535.
Trong quá trình đọc số xung đếm được chứa trong các thanh ghi THx/TLx ta
phải chú ý đến trường hợp Counter bị tràn. Vì khi đó giá trị trong thanh ghi THx/TLx
(nơi chứa số xung đếm được) sẽ trở về 0. Cho nên nếu ta không có biện pháp xử lý cho
trường hợp này thì kết quả là số xung mà ta nhận được sẽ bị sai. Vì thế, nếu ta giả sử
ban đầu Counter được khởi động với giá trị là 0 thì cứ mỗi lần Counter bị tràn thì ta
phải cộng thêm vào số xung đọc về 256 xung (trường hợp 8 bit) hoặc 8192 xung
(trường hợp 13 bit) hoặc 65536 xung (trường hợp 16 bit).
7. Timer 2 của 8052
Họ vi điều khiển MCS52 có 3 timer T0, T1, T2. Các timer T0, T1 có các thanh
ghi và hoạt động giống như họ 51.
Các thanh ghi của timer/counter T2 bao gồm: thanh ghi TL2, TH2, thanh ghi
điều khiển T2CON, thanh ghi RCAP2L và RCAP2H.
Timer/counter T2 có thể dùng để định thời timer hặc dùng như bộ đếm counter
để đếm xung ngoài đưa đến ngõ vào T2 chính là chân P1.0
115
Timer/counter T2 có 3 kiểu hoạt động: tự động nạp lại, thu nhận và thiết lập tốc
độ baud phục vụ cho truyền dữ liệu.
8. Bài tập
- Sơ đồ nguyên lý.
Hình 0.6: Sơ đồ nguyên lý khối LED đơn (Point LED).
- Sơ đồ bố trí linh kiện.
Hình 0.7: Khối Khối LED đơn (Point LED).
BÀI THỰC HÀNH
Viết chương trình, mô phỏng và lắp ráp mạch điều khiển 8 LED đơn được nối với Port
0 sáng tắt (có sử dụng bộ đệm đảo) với thời gian trễ là 500ms.
- Lưu đồ giải thuật.
❖ Bước 1: Vẽ lưu đồ giải thuật của chương trình điều khiển.
GND
GND
+5V
L
E
D
5
L
E
D
2
L
E
D
1
L
E
D
6
L
E
D
4
L
E
D
0
L
E
D
7
L
E
D
3
L
E
D
2
L
E
D
1
L
E
D
4
L
E
D
0
L
E
D
5
L
E
D
3
L
E
D
6
L
E
D
7
L
E
D
0
D29
LED
L
E
D
3
D22
LED
D23
LED
R3 330
1 2 3 4 5 6 7 8 9
D1
LED
J1
POWER
1
2
3
D13
LED
D4
LED
D27
LED
J3
BARLED2
1 2 3 4 5 6 7 8
D25
LED
D21
LED
D19
LED
D31
LED
D30
LED
D12
LED
D10
LED
D24
LED
D7
LED
R2 330
1 2 3 4 5 6 7 8 9
D8
LED
D26
LED
D9
LED
R4 330
1 2 3 4 5 6 7 8 9
D15
LED
D2
LED
D20
LED
D14
LED
J5
BARLED4
1 2 3 4 5 6 7 8
J2
BARLED1
1 2 3 4 5 6 7 8
D5
LED
J4
BARLED3
1 2 3 4 5 6 7 8
D32
LED
D3
LED
D11
LED
R1 330
1 2 3 4 5 6 7 8 9
D16
LED
D6
LED
D18
LED
D17
LED
D28
LED
L
E
D
4
L
E
D
5
L
E
D
2
L
E
D
1
L
E
D
7
L
E
D
6
VCC
VCC VCC VCCVCC
L
E
D
2
L
E
D
1
L
E
D
0
L
E
D
5
L
E
D
3
L
E
D
6
L
E
D
4
L
E
D
7
116
Hình 0.8: Lưu đồ giải thuật của chương trình.
- Chương trình điều khiển.
Sử dụng phần mềm Topview Simulation để thực hiện việc viết chương trình và
biên dịch, kiểm tra lỗi cú pháp của chương trình.
❖ Bước 2: Khởi động phần mềm Topview Simulation.
❖ Bước 3: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin
chương trình là: A1.ASM
❖ Bước 4: Viết chương trình điều khiển dưới đây vào máy tính.
;***************************************************
;CHUONG TRINH DIEU KHIEN 8 LED SANG TAT
;***************************************************
;KET NOI: 8 LED ->PORT0 (CO DEM DAO).
;***************************************************
ORG 00H
CHOPTAT:
MOV P0,#00H ;LED TAT
LCALL DELAY500MS
MOV P0,#0FFH ;LED SANG
117
LCALL DELAY500MS
SJMP CHOPTAT ;QUAY LAI
;****************************************************
DELAY500MS: ;CHUONG TRINH CON TAO THOI GIAN TRE 500MS
PUSH 00H
MOV R0,#100
MOV TMOD,#01H
LOOP2:
MOV TH0,#HIGH(-5000)
MOV TL0,#LOW(-5000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
DJNZ R0,LOOP2
POP 00H
RET
END
❖ Bước 5: Lưu chương trình trên vào máy tính.
❖ Bước 6: Thực hiện biên dịch và kiểm tra lỗi chương trình.
• 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 cú
pháp của các lệnh 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.
• Nếu không có lỗi xuất hiện thì phần mềm sẽ tự động tạo tập tin
mã máy với tên là: A1.HEX và thực hiện tiếp theo các phần nội
dung dưới đây.
- Mô phỏng hoạt động.
Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mô phỏng
quá trình hoạt động của hệ thống vi điều khiển.
❖ Bước 7: Khởi động phần mềm ISIS 7 Professional (Protues 7.10).
❖ Bước 8: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển LED đơn như
Hình 4.5.4 dưới đây.
118
Hình 0.9: 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à: A-8LED.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: A1.HEX
❖ 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.
• 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).
• 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.
- 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.
D
7
D
0
D
1
D
2
D
3
D
4
D
5
D
6
AD7 AD7
AD0
D0AD0 AD0
AD1 AD1
AD2 AD2
AD3 AD3
AD4 AD4
AD5 AD5
AD6 AD6
AD7
AD6
AD5
AD4
AD3
AD2
AD1
D7
D6
D5
D4
D3
D2
D1
D0
D1
D2
D3
D4
D5
D6
D7
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
C1
33p
C2
33p
X1
12MHz
C3
10uF
R1
10k
+5V
D1
R2
330
+5V
D2
R3
330
+5V
D3
R4
330
+5V
D4
R5
330
+5V
D5
R6
330
+5V
D6
R7
330
+5V
D7
R8
330
+5V
D8
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
+5V
2
3
4
5
6
7
8
9
1
RP1
10K
+
5
V
MAÏCH ÑIEÀU KHIEÅN LED ÑÔN
2
3
4
5
6
7
8
9
1
RP2
10K
+5V
119
❖ Bước 11: Kết nối các khối trên mô hình như Hình 4.5.5 để tạo thành hệ
thống mạch điều khiển như bên trên.
• Tắt nguồn AC cấp cho mô hình thực hành.
• Dùng dây bus 8 nối J130 (PORT0) ở khối "Microcontroller Unit
Slot" với J61 (INPUT 1) ở khối "Driver Arrays (Inverter)".
• Dùng dây bus 8 nối J65 (OUTPUT 1) ở khối "Driver Arrays
(Inverter)" với J2 (BAR LED 1) ở khối "Point LED".
• Dùng hai dây bus 3 nối J1 (POWER) ở khối "Point LED" và J62
(POWER) ở khối "Driver Arrays (Inverter)" với nguồn +5V ở
khối "Power Supply".
Hình 0.10: 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): xxx.HEX
❖ 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.
120
• 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.
• Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành.
BÀI TẬP THỰC HÀNH
Bài tập mẫu.
❖ Bài tập số 1:
Nội dung:
"Chương trình con điều khiển tạo thời gian trễ 200s sử dụng Timer."
Lưu đồ giải thuật:
Chương trình điều khiển:
;***************************************************
;CHUONG TRINH DIEU KHIEN 8 LED SANG TAT
;***************************************************
;KET NOI: 8 LED ->PORT0 (CO DEM DAO).
;***************************************************
ORG 00H
CHOPTAT:
MOV P0,#00H ;LED TAT
LCALL DELAY200US
MOV P0,#0FFH ;LED SANG
121
LCALL DELAY200US
SJMP CHOPTAT ;QUAY LAI
;***************************************************
;CHUONG TRINH CON TAO THOI GIAN TRE
;***************************************************
;TIME DELAY: 200US
;***************************************************
;TUONG DOI: TIME = [R0]*[R1]*2T
;CHINH XAC: TIME = 2T+2T+1T+(1T+2T*[R1]+2T)*[R0]+2T+2T+2T
; VOI T LA CHU KY MAY
;***************************************************
DELAY200US:
PUSH 00H
PUSH 01H
MOV R0,#10
DEL:
MOV R1,#10
DJNZ R1,$
DJNZ R0,DEL
POP 01H
POP 00H
RET
END
❖ Bài tập số 2:
Nội dung:
" Chương trình con điều khiển tạo thời gian trễ 20ms sử dụng Timer."
Lưu đồ giải thuật:
122
Chương trình điều khiển:
;***************************************************
;CHUONG TRINH DIEU KHIEN 8 LED SANG TAT
;***************************************************
;KET NOI: 8 LED ->PORT0 (CO DEM DAO).
;***************************************************
ORG 00H
CHOPTAT:
MOV P0,#00H ;LED TAT
LCALL DELAY20MS
MOV P0,#0FFH ;LED SANG
LCALL DELAY20MS
SJMP CHOPTAT ;QUAY LAI
;***************************************************
;CHUONG TRINH CON TAO THOI GIAN TRE
;***************************************************
;TIME DELAY: 20MS
;***************************************************
;TUONG DOI: TIME = (|TH0,TL0|)*T
;CHINH XAC: TIME = 2T+2T+2T+1T+(|TH0,TL0|)*T+1T+1T++2T
; VOI T LA CHU KY MAY
;***************************************************
DELAY20MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-20000)
MOV TL0,#LOW(-20000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
END
❖ Bài tập số 3:
Nội dung:
" Chương trình con điều khiển tạo thời gian trễ 2s sử dụng Timer."
Lưu đồ giải thuật:
123
Chương trình điều khiển:
;***************************************************
;CHUONG TRINH DIEU KHIEN 8 LED SANG TAT
;***************************************************
;KET NOI: 8 LED ->PORT0 (CO DEM DAO).
;***************************************************
ORG 00H
CHOPTAT:
MOV P0,#00H ;LED TAT
LCALL DELAY2S
MOV P0,#0FFH ;LED SANG
LCALL DELAY2S
SJMP CHOPTAT ;QUAY LAI
;***************************************************
;CHUONG TRINH CON TAO THOI GIAN TRE
;***************************************************
;TIME DELAY: 2S
;***************************************************
;TUONG DOI: TIME = (|TH0,TL0|)*[R0]*T
124
;CHINH XAC: TIME =
2T+1T+2T+(2T+2T+1T+(|TH0,TL0|)*T+1T+1T+2T)*[R0]+2T+2T
; VOI T LA CHU KY MAY
;***************************************************
DELAY2S:
PUSH 00H
MOV R0,#200
MOV TMOD,#01H
DEL:
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
DJNZ R0,DEL
POP 00H
RET
END
BÀI TẬP ỨNG DỤNG
Bài 1: Hãy viết chương trình con điều khiển tạo thời gian trễ 250s sử dụng Timer.
Bài 2: Hãy viết chương trình con điều khiển tạo thời gian trễ 1ms sử dụng Timer.
Bài 3: Hãy viết chương trình con điều khiển tạo thời gian trễ 100ms sử dụng Timer.
Bài 4: Hãy viết chương trình con điều khiển tạo thời gian trễ 1s sử dụng Timer.
Bài 5: Hãy viết chương trình con điều khiển tạo thời gian trễ 3s sử dụng Timer.
Bài 6: Hãy viết chương trình con điều khiển tạo thời gian trễ 10s sử dụng Timer.
Bài 7: Hãy viết chương trình con điều khiển tạo thời gian trễ 1 phút sử dụng Timer.
Bài 8: Hãy viết chương trình con điều khiển tạo thời gian trễ 1 giờ sử dụng Timer.
Ứng dụng đếm sự kiện trong lập trình điều khiển thiết bị ngoại vi.
- Sơ đồ nguyên lý.
125
Hình 0.1: Sơ đồ nguyên lý khối phát xung vuông (Square Wave Generator).
- Sơ đồ bố trí linh kiện.
Hình 0.2: Khối phát xung vuông (Square Wave Generator).
BÀI THỰC HÀNH
Viết chương trình, mô phỏng và lắp ráp mạch điều khiển đếm liên tục số lượng
xung (0000 – 9999) được đưa vào chân T1 của vi điều khiển và hiển thị số
lượng xung này lên các LED 7 đoạn (PULSE được nối với chân T1, LED7 –
LED4 được nối với Port0, SEL IN1 được nối với Port1)
- Lưu đồ giải thuật.
VCC
C56
220p
C55
220p
Y5
32.768 KHz
VCC
C57
104
VCC
C149
104
1024 Hz
2048 Hz
256 Hz
512 Hz
32 Hz
128 Hz
64 Hz
8 Hz
J248
CLOCK OUT
1
2
3
4
5
6
7
8
J249
CLOCK OUT
1
2
3
J246
POWER
1
2
3
VCC
GND
+5V
GND
2 Hz
4 Hz
1 Hz
R94
10M
U40A 4013
D
5
CLK
3
Q
1
Q
2
VDD
14S
6
GND
7
R
4
U41 4060
CLK
11
RST
12
Q4
7
Q5
5
Q6
4
Q7
6
Q8
14
Q9
13
Q10
15
Q12
1
Q13
2
Q14
3VCC
16
GND
8
OSC
9
OSC
10
VCC
126
❖ Bước 1: Vẽ lưu đồ giải thuật của chương trình điều khiển.
Hình 0.3: Lưu đồ giải thuật của chương trình.
- Chương trình điều khiển.
Sử dụng phần mềm Topview Simulation để thực hiện việc viết chương trình và
biên dịch, kiểm tra lỗi cú pháp của chương trình.
❖ Bước 2: Khởi động phần mềm Topview Simulation.
❖ Bước 3: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin
chương trình là: K1.ASM
❖ Bước 4: Viết chương trình điều khiển dưới đây vào máy tính.
;***************************************************
;CHUONG TRINH DIEU KHIEN TIMER/COUNTER DEM (0000 - 9999) VA HIEN
THI XUNG TAI CHAN T1
;***************************************************
;KET NOI: PORT0 -> 7 SEGMENT (DP -> A)
; PORT1 -> SELECT LED
; PULSE -> T1 PIN
;***************************************************
ORG 00H
MAIN:
MOV TMOD,#50H ;COUNTER 16 BIT (MODE 1)
MOV TH1,#0 ;XOA COUNTER 1
MOV TL1,#0
127
SETB TR1 ;CHO PHEP COUNTER BAT DAU HOAT DONG
MP1:
MOV R7,TH1 ;CHUYEN SO XUNG DEM DUOC (TH1,
TL1) RA HIEN THI
MOV R6,TL1
ACALL BIN16TOBCD ;DOI MA BIN SANG MA BCD
ACALL BCD4TO7SEG ;DOI MA BCD SANG MA 7 DOAN
ACALL DISP7SEGMUL4 ;HIEN THI GIA TRI LEN LED
SJMP MP1
;***************************************************
BIN16TOBCD: ;CTC CHUYEN DOI SO BINARY 16 BIT (<= 9999)
SANG SO BCD.
PUSH ACC
PUSH B
MOV B,#10
ACALL DIV16TO8 ;LAY R7,R6 CHIA CHO 10
PUSH B ;CAT SO HANG DON VI
MOV B,#10
ACALL DIV16TO8 ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG CHUC
MOV B,#10
MOV A,R6
DIV AB ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG TRAM, ACC CHUA SO HANG NGAN
SWAP A ;DUA SO HANG NGAN LEN 4 BIT CAO
POP B ;LAY SO HANG TRAM TU STACK
ORL A,B ;KET HOP SO HANG NGAN VA SO HANG TRAM
MOV R7,A ;R7 = NGAN - TRAM
POP ACC ;LAY SO HANG CHUC TU STACK
SWAP A ;DUA SO HANG CHUC LEN 4 BIT CAO
POP B ;LAY SO HANG DON VI TU STACK
ORL A,B ;KET HOP SO HANG CHUC VA SO HANG DON VI
MOV R6,A ;R6 = CHUC - DON VI
POP B
POP ACC
RET
;***************************************************
128
DIV16TO8: ;CTC CHIA SO BINARY 16 BIT CHO SO BINARY 8 BIT.
PUSH 02H ;CAT THANH GHI R2
PUSH ACC ;CAT THANH GHI A
MOV R2,#16 ;CHO PHEP DICH 16 LAN
CLR A
DIVIDE:
CLR C
XCH A,R6 ;DICH BIT 7 CUA R6 VAO
RLC A ;CARRY, BIT 0 CUA R6
XCH A,R6 ;BANG 0.
XCH A,R7 ;DICH BIT CARRY VAO
RLC A ;BIT 0 CUA R7
XCH A,R7
RLC A ;DICH BIT 7 CUA R7 VAO A.
CJNE A,B,NOT_EQUAL ;XEM SO BIT DA DICH >=
SJMP A_GREATER_EQ_B ;SO CHIA CHUA ?
NOT_EQUAL:
JC BELOW ;N: THUONG SO = 0 TRONG R6.
A_GREATER_EQ_B:
SUBB A,B ;Y: SO DU CAT TRONG A.
XCH A,R6
ORL A,#1 ;THUONG SO = 1
XCH A,R6 ;CAT TRONG R6
BELOW:
DJNZ R2,DIVIDE ;DICH TIEP DEN 16 LAN.
XCH A,B ;SAU 16 LAN DICH TA DUOC B = SO DU.
POP ACC
POP 02H
RET
;***************************************************
BCD4TO7SEG: ;CTC GIAI MA TU SO BCD NEN SANG MA 7 DOAN
(2 SO BCD NEN).
PUSH DPH ;CATTAM THOI GIA TRI CAC THANH GHI
PUSH DPL
PUSH ACC
MOV DPTR,#CODE7SEG ;DIA CHI VUNG MA 7 DOAN
MOV A,R6 ;LAY SO BCD CAN GIAI MA
129
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 60H,A ;CAT BCD HANG DON VI VAO O NHO
MOV A,R6 ;LAY SO BCD CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 61H,A ;CAT BCD HANG CHUC VAO O NHO
MOV A,R7 ;LAY SO BCD CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 62H,A ;CAT BCD HANG TRAM VAO O NHO
MOV A,R7 ;LAY SO BCD CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 63H,A ;CAT BCD HANG NGAN VAO O NHO
POP ACC ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP DPL
POP DPH
RET
CODE7SEG: ;VUNG CHUA MA 7 DOAN (0 -> 9)
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;***************************************************
DISP7SEGMUL4: ;CTC QUET HIEN THI LED 7 DOAN (4 LED 7 DOAN).
PUSH ACC ;CATTAM THOI GIA TRI CAC THANH GHI
PUSH 00H
MOV A,#0F7H ;MA QUET
MOV R0,#63H ;DIA CHI VUNG MA HIEN THI
DISP:
MOV P0,@R0 ;XUAT MA HIEN THI
MOV P1,A ;XUAT MA QUET
LCALL DELAYLED
MOV P1,#0FFH ;CHONG LEM
DEC R0 ;LAY MA HIEN THI KE TIEP
RR A ;CHUYEN SANG LED KE TIEP
CJNE R0,#5FH,DISP ;KIEM TRA DA QUET XONG CHUA
130
POP 00H ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP ACC
RET
;***************************************************
DELAYLED: ;CHUONG TRINH CON TAO THOI GIAN TRE 2.5MS
PUSH 00H
PUSH 01H
MOV R1,#5
DEL:
MOV R0,#250
DJNZ R0,$
DJNZ R1,DEL
POP 01H
POP 00H
RET
END
❖ Bước 5: Lưu chương trình trên vào máy tính.
❖ Bước 6: Thực hiện biên dịch và kiểm tra lỗi chương trình.
• 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 cú pháp của các lệnh
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.
• Nếu không có lỗi xuất hiện thì phần mềm sẽ tự động tạo tập tin mã máy với
tên là: K1.HEX và thực hiện tiếp theo các phần nội dung dưới đây.
- Mô phỏng hoạt động.
Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mô phỏng
quá trình hoạt động của hệ thống vi điều khiển.
❖ Bước 7: Khởi động phần mềm ISIS 7 Professional (Protues 7.10).
❖ Bước 8: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển xxx như
Hình 4.6.4 dưới đây.
131
Hình 0.4: 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à: xxx.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: K1.HEX
❖ 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.
• 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).
• 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.
- 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", "Square Wave Generator", "7
Segment Display" 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 4.6.5 để tạo
thành hệ thống mạch điều khiển như bên trên.
• Tắt nguồn AC cấp cho mô hình thực hành.
AD7
AD0
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
AD6
AD5
AD4
AD3
AD2
AD1
A
B
C
D
E
F
G
A
B
C
D
E
F
G
AD0 A
AD1 B
AD2 C
AD3 D
AD4 E
AD5 F
AD6 G
A
B
C
D
E
F
G
A
B
C
D
E
F
G
P1.3
P
1
.0
P
1
.1
P
1
.2
P
1
.3
P1.2
P1.1
P1.0
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
C1
33p
C2
33p
X1
12MHz
2
3
4
5
6
7
8
9
1
RP1
10K
+
5
V
MAÏCH ÑIEÀU KHIEÅN TIMER/COUNTER (ÑEÁM XUNG)
LED7
Q1
A1015
+5V
LED6
Q2
A1015
+5V
R2
1K
R3
1K
R4
56
R5
56
R6
56
R7
56
R8
56
R9
56
R10
56
LED5
Q3
A1015
+5V
LED4
Q4
A1015
+5V
R11
1K
R12
1K
C3
10uF
R1
10k
+5V
A
B
U1(P3.5/T1)
132
• Dùng dây bus 4 nối J64 (PORT1) ở khối vi điều khiển với J1 (SEL IN1) ở
khối LED 7 đoạn (chú ý là ta chỉ nối 4 bit thấp của J64 với J1).
• Dùng dây bus 8 nối J63 (PORT0 / DATA) ở khối vi điều khiển với J4
(7SEG IN MUL) ở khối giải mã.
• Dùng dây bus 1 nối J33 (PULSE) ở khối tạo xung với J66 (PORT3 /
FUNCTION) ở khối vi điều khiển (chú ý là ta chỉ nối bit 5 (chân T1) của
J66 và J33 lại với nhau).
• Dùng dây bus 3 nối J113 (POWER) ở khối tạo xung và J110 (POWER) ở
khối LED 7 đoạn với nguồn +5V ở khối nguồn.
Hình 0.5: 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): K1.HEX
❖ 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.
• 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
133
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.
• Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành.
BÀI TẬP THỰC HÀNH
Nội dung: "Chương trình điều khiển đo tần số của xung (0000 – 9999, đơn vị là
Hz) được đưa vào chân T1 của vi điều khiển và hiển thị tần số của xung này lên các
LED 7 đoạn (PULSE được nối với chân T1, LED7 – LED4 được nối với Port0, SEL
IN1 được nối với Port1)"
Lưu đồ giải thuật:
134
Chương trình điều khiển:
;***************************************************
;CHUONG TRINH DIEU KHIEN TIMER/COUNTER DO TAN SO XUNG TAI
CHAN T1
;***************************************************
;KET NOI: PORT0 -> 7 SEGMENT (DP -> A) PORT1 -> SELECT
LED; PULSE -> T1 PIN
;***************************************************
ORG 00H ;DIEM NHAP RESET
SJMP MAIN
135
ORG 0BH ;DIEM NHAP ISR TIMER0
LJMP T0ISR
ORG 30H ;DIEM NHAP CHUONG TRINH CHINH
MAIN:
MOV TMOD,#51H ;TIMER1: COUNTER 16 BIT (MODE 1), TIMER0:
TIMER 16 BIT (MODE 1)
MOV TH0,#HIGH(-50000) ;NAP GIA TRI THOI GIAN TRE 50 MS
MOV TL0,#LOW(-50000)
SETB TR0 ;CHO TIMER BAT DAU CHAY
MOV IE,#82H ;CHO PHEP NGAT TIMER0 HOAT DONG
MP1:
MOV 40H,#0 ;NAP GIA TRI BIEN DEM SO LAN NGAT TIMER0
MOV R7,TH1 ;CHUYEN SO XUNG DEM DUOC (TH1, TL1) RA
HIEN THI
MOV R6,TL1
MOV TH1,#0 ;XOA COUNTER 1, CHUAN BI CHO LAN DEM XUNG
TIEP THEO
MOV TL1,#0
SETB TR1 ;COUNTER BAT DAU DEM
ACALL BIN16TOBCD ;DOI MA BIN SANG MA BCD
ACALLBCD4TO7SEG ;DOI MA BCD SANG MA 7 DOAN
MP2:
ACALL DISP7SEGMUL4 ;HIEN THI GIA TRI LEN LED
MOV A,40H
CJNE A,#20,MP2 ;KIEM TRA DU 20 LAN NGAT = 1S
CLR TR1 ;DUNG COUNTER SAU 1S -> SO XUNG
TRONG 1S = TAN SO XUNG
SJMP MP1
;***************************************************
BIN16TOBCD: ;CTC CHUYEN DOI SO BINARY 16 BIT (<= 9999)
SANG SO BCD.
PUSH ACC
PUSH B
MOV B,#10
ACALL DIV16TO8 ;LAY R7,R6 CHIA CHO 10
PUSH B ;CAT SO HANG DON VI
MOV B,#10
136
ACALL DIV16TO8 ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG CHUC
MOV B,#10
MOV A,R6
DIV AB ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG TRAM, ACC CHUA SO HANG NGAN
SWAP A ;DUA SO HANG NGAN LEN 4 BIT CAO
POP B ;LAY SO HANG TRAM TU STACK
ORL A,B ;KET HOP SO HANG NGAN VA SO HANG TRAM
MOV R7,A ;R7 = NGAN - TRAM
POP ACC ;LAY SO HANG CHUC TU STACK
SWAP A ;DUA SO HANG CHUC LEN 4 BIT CAO
POP B ;LAY SO HANG DON VI TU STACK
ORL A,B ;KET HOP SO HANG CHUC VA SO HANG DON VI
MOV R6,A ;R6 = CHUC - DON VI
POP B
POP ACC
RET
;***************************************************
DIV16TO8: ;CTC CHIA SO BINARY 16 BIT CHO SO BINARY 8 BIT.
PUSH 02H ;CAT THANH GHI R2
PUSH ACC ;CAT THANH GHI A
MOV R2,#16 ;CHO PHEP DICH 16 LAN
CLR A
DIVIDE:
CLR C
XCH A,R6 ;DICH BIT 7 CUA R6 VAO
RLC A ;CARRY, BIT 0 CUA R6
XCH A,R6 ;BANG 0.
XCH A,R7 ;DICH BIT CARRY VAO
RLC A ;BIT 0 CUA R7
XCH A,R7
RLC A ;DICH BIT 7 CUA R7 VAO A.
CJNE A,B,NOT_EQUAL ;XEM SO BIT DA DICH >=
SJMP A_GREATER_EQ_B ;SO CHIA CHUA ?
NOT_EQUAL:
JC BELOW ;N: THUONG SO = 0 TRONG R6.
137
A_GREATER_EQ_B:
SUBB A,B ;Y: SO DU CAT TRONG A.
XCH A,R6
ORL A,#1 ;THUONG SO = 1
XCH A,R6 ;CAT TRONG R6
BELOW:
DJNZ R2,DIVIDE ;DICH TIEP DEN 16 LAN.
XCH A,B ;SAU 16 LAN DICH TA DUOC B = SO DU.
POP ACC
POP 02H
RET
;***************************************************
BCD4TO7SEG: ;CTC GIAI MA TU SO BCD NEN SANG MA 7 DOAN
(2 SO BCD NEN).
PUSH DPH ;CATTAM THOI GIA TRI CAC THANH GHI
PUSH DPL
PUSH ACC
MOV DPTR,#CODE7SEG ;DIA CHI VUNG MA 7 DOAN
MOV A,R6 ;LAY SO BCD CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 60H,A ;CAT BCD HANG DON VI VAO O NHO
MOV A,R6 ;LAY SO BCD CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 61H,A ;CAT BCD HANG CHUC VAO O NHO
MOV A,R7 ;LAY SO BCD CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 62H,A ;CAT BCD HANG TRAM VAO O NHO
MOV A,R7 ;LAY SO BCD CAN GIAI MA
138
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 63H,A ;CAT BCD HANG NGAN VAO O NHO
POP ACC ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP DPL
POP DPH
RET
CODE7SEG: ;VUNG CHUA MA 7 DOAN (0 -> 9)
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;***************************************************
DISP7SEGMUL4: ;CTC QUET HIEN THI LED 7 DOAN (4 LED 7 DOAN).
PUSH ACC ;CATTAM THOI GIA TRI CAC THANH GHI
PUSH 00H
MOV A,#0F7H ;MA QUET
MOV R0,#63H ;DIA CHI VUNG MA HIEN THI
DISP:
MOV P0,@R0 ;XUAT MA HIEN THI
MOV P1,A ;XUAT MA QUET
LCALL DELAYLED
MOV P1,#0FFH ;CHONG LEM
DEC R0 ;LAY MA HIEN THI KE TIEP
RR A ;CHUYEN SANG LED KE TIEP
CJNE R0,#5FH,DISP ;KIEM TRA DA QUET XONG CHUA
POP 00H ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP ACC
RET
;***************************************************
DELAYLED: ;CHUONG TRINH CON TAO THOI GIAN TRE 2.5MS
PUSH 00H
PUSH 01H
MOV R1,#5
DEL:
MOV R0,#250
DJNZ R0,$
DJNZ R1,DEL
139
POP 01H
POP 00H
RET
;***************************************************
T0ISR: ;ISR TIMER0 - 50MS
CLR TR0
CLR TF0
MOV TH0,#HIGH(-50000) ;NAP GIA TRI THOI GIAN TRE 50 MS
MOV TL0,#LOW(-50000)
INC 40H ;TANG BIEN DEM SO LAN NGAT - 1 LAN =
50MS
SETB TR0
RETI
END
Câu hỏi ôn tập
BÀI TẬP ỨNG DỤNG
Bài 1: Hãy viết chương trình điều khiển tạo xung 1 Hz (sử dụng Timer) tại chân
P1.0 và hiển thị mức logic tại chân này lên LED. Tự lựa chọn phương pháp kết nối
LED.
Bài 2: Hãy viết chương trình điều khiển tạo xung 3 Hz (sử dụng Timer) tại chân
P1.0 và hiển thị mức logic tại chân này lên LED. Tự lựa chọn phương pháp kết nối
LED.
Bài 3: Hãy viết chương trình điều khiển tạo xung 1 Hz hoặc 3 Hz (sử dụng
Timer) tại chân P1.0 tùy thuộc vào ta nhấn hay nhả nút nhấn KEY0 và hiển thị mức
logic tại chân này lên LED. Tự lựa chọn phương pháp kết nối LED và nút nhấn.
Bài 4: Hãy viết chương trình điều khiển đếm liên tục số lượng xung được đưa
vào chân T0 của vi điều khiển và hiển thị số lượng xung này lên các LED 7 đoạn. Tự
lựa chọn phương pháp kết nối thiết bị tạo xung và các LED 7 đoạn.
Bài 5: Hãy viết chương trình điều khiển đo tần số của xung (đơn vị tính là Hz)
được đưa vào chân T0 của vi điều khiển và hiển thị giá trị tần số lên LED 7 đoạn. Tự
lựa chọn phương pháp kết nối thiết bị tạo xung và các LED 7 đoạn.
Bài 6: Hãy viết chương trình điều khiển đo độ rộng xung (đơn vị tính là ms)
được đưa vào chân T0 của vi điều khiển và hiển thị giá trị độ rộng xung lên LED 7
đoạn. Tự lựa chọn phương pháp kết nối thiết bị tạo xung và các LED 7 đoạn.
Các file đính kèm theo tài liệu này:
- giao_trinh_ky_thuat_vi_dieu_khien_trinh_do_trung_cap_truong.pdf
- giao_trinh_ky_thuat_vi_dieu_khien_phan_2_2607 (1)_2500957.pdf