(NB) Nối tiếp phấn 1, phần 2 giáo trình trình gồm các nội dung sau: giới thiệu hoạt động của bộ định thời trong vi điều khiển 8051; giới thiệu hoạt động của port nối tiếp trong vi điều khiển 8051; giới thiệu hoạt động của ngắt trong vi điều khiển 8051. Giáo trình được biên soạn ngắn gọn, dễ hiểu, bổ sung nhiều kiến thức mới và biên soạn theo quan điểm mở, nghĩa là, đề cập những nội dung cơ bản, cốt yếu để tùy theo tính chất của các ngành nghề đào tạo.
Trang 1BÀI 4: GIỚI THIỆU HOẠT ĐỘNG CỦA BỘ ĐỊ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
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
Trang 2 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ố: 216 65536
IN f IN f OUT
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
Trang 3đượ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 (Q 0 ) chia 2 tần số xung clock, tầng thứ hai (Q 1) 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 Q 2 = 1,
Q 1 = 0, Q 0 = 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
Trang 4 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)
Trang 5 Timer 1: là bộ đếm xung 13 bit, được điều khiển bằng phần cứng
Trang 74.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:
Trang 8 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.”
Số đếm: 0000H 1FFFH nghĩa là từ 0 8191 Thời gian định
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
Trang 9Hì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
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):
Trang 10Chế độ 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 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):
Trang 11Chế độ 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
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
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:
Trang 12o 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)
Trang 13 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ó:
TIMER f
TIMER T
KHz MHz
OSC f TIMER f
MHz OSC
f
085 , 1 6
, 921
1 1
6 , 921 12
0592 , 11 12
0592 , 11
MHz s TIMER f TIMER T MHz MHz OSC f TIMER f MHz OSC f 1 1 1 1 1 12 12 12 12
MHz s TIMER f TIMER T MHz MHz OSC f TIMER f MHz OSC f 75 , 0 333 , 1 1 1 333 , 1 12 16 12 16
4.2.5.2 Trường hợp đếm sự kiện:
Trang 14Nế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
MAX T
T
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
MAX T
T f MHz OSC
2
6,9212
)(1,00592
T f MHz OSC
2
12
)(1,0
MAX T
T f MHz OSC
2
333,12
)(1,0
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)…
Trang 15 Cho Timer chạy:
(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.T TIMER đến 1.T TIMER)
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.T TIMER đến 1.T TIMER)
Ví dụ: MOV TL1, #LOW(-8000) định thời 8000.TTIMER
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
Trang 16 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:
(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
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ứ
Trang 17mỗ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)
4.4 Ứng dụng định thời gian trong lập trình điều khiển thiết bị ngoại vi Mục đích:
Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào vi điều khiển và sử dụng mô hình thí nghiệm để kiểm chứng
Viết các chương trình con tạo thời gian trễ sử dụng trong các ứng dụng điều khiển
Yêu cầu:
Nắm vững tập lệnh của vi điều khiển MCS-51
Biết cách tính toán các thông số thời gian tạo trễ trong vi điều khiển
D22 LED
D 23 LED
LED
D27 LED
J3 BARLED2
1 3 5 7
D25 LED D21
LED D19 LED
D31 LED D30 LED D12
LED D10 LED
D24 LED D7
LED
1 3 5 7 9
D 8 LED
D 26 LED D9
LED
1 3 5 7 9
D15 LED D2
LED
D 20 LED
D 14 LED
J5 BARLED4
1 3 5 7 J2
BARLED1
1 3 5 7
D5 LED
J4 BAR LED3
1 3 5 7
D 32 LED D3
LED
D 11 LED
1 3 5 7 9
D16 LED D6
LED
D18 LED
D 17 LED
D28 LED
Hình 4.4.1: Sơ đồ nguyên lý khối LED đơn (Point LED)
4.4.1.2 Sơ đồ bố trí linh kiện
Hình 4.4.2: 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
4.4.2 Lưu đồ giải thuật
Trang 18 Bước 1: Vẽ lưu đồ giải thuật của chương trình điều khiển
Hình 4.4.3: Lưu đồ giải thuật của chương trình
4.4.3 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
Trang 19MOVP0,#0FFH ;LED SANG
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
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 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
o 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
4.4.4 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
Trang 20D D D D D D D D AD7 AD7
AD0
D0 AD0 AD0
AD1 AD1 AD2 AD2 AD3 AD3 AD4 AD4 AD5 AD5 AD6 AD6
AD7 AD6 AD4 AD3 AD1
D7 D6 D4 D2 D1 D0 D2 D4 D5 D7
XTAL2 18 XTAL1 19
ALE 30 EA 31 PSEN 29
RST 9
P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 33P0.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 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15P2.7/A15 28
P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27
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 182C 173C 164C 155C 146C 137C 128C 11
1
RP2
10K +5V
Hình 4.4.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à: 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
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
4.4.5 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
Trang 21 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
o Tắt nguồn AC cấp cho mô hình thực hành
o 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)"
o 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"
o 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 4.4.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): xxx.HEX
Trang 22 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
Lưu đồ giải thuật:
Chương trình điều khiển:
Trang 23;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
Trang 24Chương trình điều khiển:
;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
Trang 25END
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:
Chương trình điều khiển:
Trang 26;TUONG DOI: TIME = (|TH0,TL0|)*[R0]*T
Trang 27 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
Điều khiển thiết bị ngoại vi bằng các port của vi điều khiển
Tìm hiểu các chế độ hoạt động của Timer và Counter
Khảo sát nguyên lý hoạt động và phương pháp lập trình điều khiển Timer và Counter
Thiết kế các ứng dụng thực tế có sử dụng các bộ định thời gian (Timer) và các bộ đếm sự kiện (Counter)
Yêu cầu:
Nắm vững tập lệnh của vi điều khiển MCS-51
Nắm vững phương pháp vận hành các Timer và Counter có trong chip vi điều khiển
Biết cách lập trình Timer và Counter ở các chế độ khác nhau, cách tính toán các khoảng thời gian định thời mong muốn
Thiết kế và điều khiển được các ứng dụng có sử dụng Timer và Counter như: đồng hồ, bộ đếm sản phẩm, …
4.5.1 Sơ đồ nguyên lý
4.5.1.1 Sơ đồ nguyên lý
Trang 28C56 220p C55 220p
Y5
32.768 KHz
VCC
C57 104
VCC
C149 104
J249 CLOCK OUT
1 3
J246
POWER
1 3 VCC
GND +5V GND
2 Hz
R94
D 5 CLK 3
S 6
R 4
CLK 11 RST 12
VCC
Hình 4.5.1: Sơ đồ nguyên lý khối phát xung vuông (Square Wave Generator)
4.5.1.2 Sơ đồ bố trí linh kiện
Hình 4.5.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)
4.5.2 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
Trang 29Hình 4.5.3: Lưu đồ giải thuật của chương trình
4.5.3 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:
MOVTMOD,#50H ;COUNTER 16 BIT (MODE 1)
MOV TH1,#0 ;XOA COUNTER 1
DONG
MP1:
Trang 30MOV R7,TH1 ;CHUYEN SO XUNG DEM DUOC (TH1, TL1) RA HIEN THI
PUSHB ;CAT SO HANG DON VI
MOVB,#10
PUSHB ;CAT SO HANG CHUC
MOVB,#10
DIV AB ;TIEP TUC CHIA CHO 10
PUSHB ;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
MOVR7,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
DIV16TO8: ;CTC CHIA SO BINARY 16 BIT CHO SO BINARY 8 BIT
PUSH 02H ;CAT THANH GHI R2
PUSHACC ;CAT THANH GHI A
MOVR2,#16 ;CHO PHEP DICH 16 LAN
DIVIDE:
Trang 31CLR 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
RLC A ;DICH BIT 7 CUA R7 VAO A
CJNEA,B,NOT_EQUAL ;XEM SO BIT DA DICH >=
SJMP A_GREATER_EQ_B ;SO CHIA CHUA ?
DJNZR2,DIVIDE ;DICH TIEP DEN 16 LAN
XCH A,B ;SAU 16 LAN DICH TA DUOC B = SO DU
MOV DPTR,#CODE7SEG ;DIA CHI VUNG MA 7 DOAN
MOVA,R6 ;LAY SO BCD CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOV 60H,A ;CAT BCD HANG DON VI VAO O NHO
MOVA,R6 ;LAY SO BCD CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOV 61H,A ;CAT BCD HANG CHUC VAO O NHO
MOVA,R7 ;LAY SO BCD CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOV 62H,A ;CAT BCD HANG TRAM VAO O NHO
MOVA,R7 ;LAY SO BCD CAN GIAI MA
Trang 32ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOV 63H,A ;CAT BCD HANG NGAN VAO O NHO
POP ACC ;PHUC HOI GIA TRI CHO CAC THANH GHI
MOVA,#0F7H ;MA QUET
MOVR0,#63H ;DIA CHI VUNG MA HIEN THI
DISP:
MOVP0,@R0 ;XUAT MA HIEN THI
MOVP1,A ;XUAT MA QUET
MOVP1,#0FFH ;CHONG LEM
DEC R0 ;LAY MA HIEN THI KE TIEP
RR A ;CHUYEN SANG LED KE TIEP
CJNER0,#5FH,DISP ;KIEM TRA DA QUET XONG CHUA
POP 00H ;PHUC HOI GIA TRI CHO CAC THANH GHI
Trang 33 Bước 6: Thực hiện biên dịch và kiểm tra lỗi chương trì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 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
o 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
4.5.4 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
AD7
AD0
AD0 AD2 AD4 AD6
AD7 AD5 AD3 AD1
A C E G
A C E G
A C E G
C2 33p
X1
12MHz
2 4 6 8
1 RP1
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
Hình 4.5.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
Trang 34 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
4.5.5 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
o Tắt nguồn AC cấp cho mô hình thực hành
o 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)
o 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ã
o 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)
o 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
Trang 35Hình 4.5.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
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
4.5.6 Bài tập thực hành
4.5.6.1 Bài tập mẫu
Bài tập số 1:
Trang 36Nộ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:
Chương trình điều khiển:
;***************************************************
Trang 37;CHUONG TRINH DIEU KHIEN TIMER/COUNTER DO TAN SO XUNG TAI CHAN T1
SETBTR0 ;CHO TIMER BAT DAU CHAY
MOVIE,#82H ;CHO PHEP NGAT TIMER0 HOAT DONG
MP2:
CLR TR1 ;DUNG COUNTER SAU 1S -> SO XUNG TRONG 1S = TAN SO XUNG
Trang 38ACALL DIV16TO8 ;LAY R7,R6 CHIA CHO 10
PUSHB ;CAT SO HANG DON VI
MOVB,#10
PUSHB ;CAT SO HANG CHUC
MOVB,#10
DIV AB ;TIEP TUC CHIA CHO 10
PUSHB ;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
MOVR7,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
DIV16TO8: ;CTC CHIA SO BINARY 16 BIT CHO SO BINARY 8 BIT
PUSH 02H ;CAT THANH GHI R2
PUSHACC ;CAT THANH GHI A
MOVR2,#16 ;CHO PHEP DICH 16 LAN
DIVIDE:
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
RLC A ;DICH BIT 7 CUA R7 VAO A
CJNEA,B,NOT_EQUAL ;XEM SO BIT DA DICH >=
SJMP A_GREATER_EQ_B ;SO CHIA CHUA ?
Trang 39XCH A,R6
ORL A,#1 ;THUONG SO = 1
XCH A,R6 ;CAT TRONG R6
BELOW:
DJNZR2,DIVIDE ;DICH TIEP DEN 16 LAN
XCH A,B ;SAU 16 LAN DICH TA DUOC B = SO DU
MOV DPTR,#CODE7SEG ;DIA CHI VUNG MA 7 DOAN
MOVA,R6 ;LAY SO BCD CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOV 60H,A ;CAT BCD HANG DON VI VAO O NHO
MOVA,R6 ;LAY SO BCD CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOV 61H,A ;CAT BCD HANG CHUC VAO O NHO
MOVA,R7 ;LAY SO BCD CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOV 62H,A ;CAT BCD HANG TRAM VAO O NHO
MOVA,R7 ;LAY SO BCD CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOV 63H,A ;CAT BCD HANG NGAN VAO O NHO
POP ACC ;PHUC HOI GIA TRI CHO CAC THANH GHI
RET
Trang 40CODE7SEG: ;VUNG CHUA MA 7 DOAN (0 -> 9)
MOVA,#0F7H ;MA QUET
MOVR0,#63H ;DIA CHI VUNG MA HIEN THI
DISP:
MOVP0,@R0 ;XUAT MA HIEN THI
MOVP1,A ;XUAT MA QUET
MOVP1,#0FFH ;CHONG LEM
DEC R0 ;LAY MA HIEN THI KE TIEP
RR A ;CHUYEN SANG LED KE TIEP
CJNER0,#5FH,DISP ;KIEM TRA DA QUET XONG CHUA
POP 00H ;PHUC HOI GIA TRI CHO CAC THANH GHI