Bài giảng Vi xử lý - Chương 3: Họ vi điều khiển 805 (Phần 3) - Hồ Trung Mỹ

Hiệu đính từ slide của thầy Hồ Trung Mỹ  
Bộ môn Điện tử - DH BK TPHCM  
CHƯƠNG 3  
HỌ VI ĐIỀU KHIỂN 8051  
1
3.4 Timer  
(Mạch định thời)  
2
Giới thiệu về timer  
• Timer là một chuỗi các flip-flop chia đôi tần số mắc nối tiếp  
với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp.  
Xung nhịp được đưa vào flip-flop thứ nhất để chia đôi tần  
số xung nhịp. Ngõ ra của flip-flop thứ nhất làm xung nhịp  
cho flip-flop thứ hai (cũng làm việc chia đôi tầnsố), và v.v...  
• Vì mỗi tầng kế tiếp chia đôi cho nên timer có n tầng sẽ cho  
xung ra có tần số là tần số xung nhịp chia cho 2n. Ngõ ra  
của tầng cuối làm xung nhịp cho flip-flop báo tràn của timer  
(còn gọi là cờ timer TF [Timer Flag]).  
• Giá trị nhị phân trong các flip-flop của timer có thể xem  
như số đếm số xung nhịp (hoặc các sự kiện) từ khi timer  
bắt đầu chạy. Thí dụ timer 16 bit sẽ đếm lên từ 0000H đến  
FFFFH. Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH  
3
đến 0000H.  
TD: Timer 3 bit  
Timer trong 8051  
• 8051/8031 có hai timer 16 bit (T0 và T1), mỗi timer có bốn chế độ  
hoạt động.  
• Người ta sử dụng các timer để:  
a) định khoảng thời gian,  
b) đếm sự kiện hoặc  
c) tạo tốc độ baud cho cổng nối tiếp có sẵn trong 8051/8031.  
• Mỗi timer 16 bit có 16 tầng hay tầng cuối cùng chia tần số xung  
nhịp cho 216=65536. Nguồn xung nhịp cho các timer là xung  
vuông có tần số bằng 1/12 tần số xung nhịp cung cấp cho 8051.  
• Trong các ứng dụng định khoảng thời gian, người ta lập trình  
cho timer tràn ở một khoảng đều đặn và đặt cờ tràn timer lên 1.  
Cờ được dùng để đồng bộ hóa hoặc đo thời gian trôi qua giữa  
hai sự kiện (ví dụ: đo độ rộng xung).  
• Đếm sự kiện được dùng để xác định số lần xảy ra của một sự  
kiện hơn là đo khoảng thời gian trôi qua giữa các sự kiện. Một  
“sự kiện” là bất cứ tác động bên ngoài nào có thể cung cấp một  
chuyển tiếp 1 sang 0 từ chân T0, T1(ở P3) của 8051/8031.  
5
• Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho  
cổng nối tiếp có sẵn trong 8051/8031.  
Các thanh ghi timer  
• Timer (T0/T1) của 8051 được tạo bởi 2 thanh  
ghi 8 bit.  
• Timer 0 (T0) được tạo bởi  
– TL0 vàTH0 (L=Low và H=High)  
– Truy cập chúng như các thanh ghi khác, TD:  
MOV TL0, #55H  
MOV R1, TH0  
• Timer 1 (T1) được tạo bởi  
– TL1 and TH1  
6
Các SFR của timer  
7
Thanh ghi điều khiển timer (TCON)  
Thanh ghi chế độ timer (TMOD)  
9
Các chế độ hoạt động của timer  
10  
Các chế độ timer và cờ báo tràn  
11  
Chế độ timer 13 bit (Chế độ 0)  
• Chế độ 0 là chế độ timer 13 bit để tương thích với bộ xử lý  
trước 8051 là 8048  
• Với các thiết kế mới người ta ít dùng chế độ hoạt động này  
• Byte cao của timer (THx) nối tiếp với 5 bit thấp của byte  
thấp của timer (TLx) để tạo thành timer 13 bit  
• Ba bit cao của TLx không được sử dụng  
12  
Chế độ timer 16 bit (chế độ 1)  
• Chế độ 1 là chế độ timer 16 bit giống như chế  
độ 0, ngoại trừ lúc này timer hoạt động như  
timer 16 bit đầy đủ.  
• Tràn xảy ra khi có chuyển tiếp từ FFFFH sang  
0000H trong số đếm và nó đặt cờ báo tràn  
timer lên 1. Timer tiếp tục đếm tiếp.  
• Cờ báo tràn là bit TFx trong TCON mà người  
13  
ta có thể đọc ra hoặc ghi vào bằng phần mềm  
Chế độ timer 8 bit tự nạp lại trị đầu (chế độ 2)  
•
•
Chế độ 2 là chế độ tự động nạp giá trị đầu. Byte thấp của timer TLx  
làm việc như timer 8 bit trong khi đó byte cao của timer THx giữ giá trị  
cần nạp lại.  
Khi bộ đếm tràn từ FFH sang 00H thì không những cờ timer được đặt  
lên 1 mà giá trị trong THx còn được nạp vào TLx, việc đếm tiếp tục từ  
giá trị này đến chuyển tiếp từ FFH sang 00H kế, và cứ tiếp tục như  
vậy.  
•
Chế độ này tiện lợi vì tràn timer xảy ra theo những khoảng thời gian  
có chu kỳ một khi TMOD và THx đã được khởi tạo trị  
14  
Chế độ tách timer (chế độ 3)  
• Chế độ 3 là chế độ tách timer thì khác nhau với  
mỗi timer. Timer 0 ở chế độ 3 được tách thành 2  
timer 8 bit.  
• TL0 và TH0 làm việc như 2 timer độc lập với các  
báo tràn đặt các cờ TF0 và TF1 tương ứng  
15  
Đặc điểm của chế độ 3  
• Timer 1 bị dừng ở chế độ 3, nhưng có thể cho nó chạy  
bằng cách chuyển sang 1 trong các chế độ khác.  
• Giới hạn duy nhất là cờ báo tràn thông thường của  
Timer 1 (TF1) không bị ảnh hưởng bởi sự báo tràn  
trong Timer1 vì TF1 đã được nối vào TH0.  
• Chế độ 3 chủ yếu cho thêm 1 timer 8 bit (8051 giống  
như có thêm timer thứ ba). Khi Timer 0 ở chế độ 3, ta  
có thể bật hay tắt Timer 1 bằng cách chuyển nó ra khỏi  
hay đi vào chính chế độ 3 của nó. Nó vẫn có thể được  
cổng nối tiếp sử dụng làm bộ tạo tốc độ baud hoặc có  
thể được sử dụng theo bất cứ cách nào mà không cần  
ngắt (vì nó không còn tác động được với TF1)  
16  
Các nguồn tạo xung nhịp  
• Có 2 nguồn xung nhịp, mà ta có thể chọn bằng  
cách ghi vào bit chọn bộ đếm/timer trong TMOD  
khi tạo các trị khởi động timer.  
• Một nguồn xung nhịp được dùng để định thì  
khoảng thời gian, còn nguồn kia để đếm sự kiện.  
17  
Định thì khoảng thời gian  
C/T  
• Nếu  
= 0, hoạt động timer liên tục được chọn và timer  
được cấp xung nhịp từ mạch dao động trên chip. Một tầng  
chia 12 được thêm vào để giảm tần số xung nhịp xuống  
giá trị thích hợp cho phần lớn các ứng dụng trong điều  
khiển.  
• Khi chọn hoạt động timer liên tục thì timer được sử dụng  
để định thì khoảng thời gian (interval timing). Các thanh  
ghi timer (TLx/THx) tăng nội dung thêm 1 cứ theo tần số là  
1/12 tần số dao động trên chip; như vậy với thạch anh 12  
MHz thì xung nhịp của timer là 1 MHz.  
• Tràn timer xảy ra cứ sau một số các xung nhịp cố định mà  
tùy theo giá trị đầu được nạp vào các thanh ghi TLx/THx  
18  
Đếm sự kiện  
C/T  
= 1, timer được cấp xung nhịp từ nguồn bên ngoài. Trong phần  
•
Nếu  
lớn các ứng dụng, nguồn bên ngoài này cung cấp timer một xung khi xảy  
ra sự kiện–timer được sử dụng để đếm sự kiện (event counting). Số sự  
kiện được xác định trong phần mềm bằng cách đọc các thanh ghi  
TLx/THx, từ đó giá trị 16 bit trong các thanh ghi này tặng thêm 1 cho mỗi  
sự kiện.  
•
•
Nguồn xung nhịp bên ngoài được cung cấp bằng cách đưa vào các chân  
có chức năng thay thế ở Port 3:ngõ vào xung nhịp cho Timer 0 là T0  
(chân P3.4). hay cho timer là T1 (chân P3.5)  
Trong các ứng dụng bộ đếm, các thanh ghi timer được tăng thêm 1 khi  
có chuyển tiếp 1 sang 0 ở ngõ vào bên ngoài Tx. Ngõ vào bên ngoài này  
được lấy mẫu trong S5P2 của mọi chu kỳ máy; như vậy khi ngõ vào ở  
mức 1 trong 1 chu kỳ và mức 0 trong chu kỳ kế thì số đếm được tăng  
thêm 1. Giá trị mới xuất hiện trong các thanh ghi timer trong S3P1 của  
chu kỳ theo sau chu kỳ mà chuyển tiếp được phát hiện. Từ đó nó mất 2  
chu kỳ máy (2 μs) để ghi nhận chuyển tiếp 1 sang 0, do đó tần số bên  
ngoài tối đa là 500 KHz (giả sử hoạt động 12 MHz)  
19  
Khởi tạo trị và truy cập các  
thanh ghi timer  
Các tác vụ:  
– Đặt chế độ làm việc  
– Cho timer chạy  
– Dừng timer  
– Kiểm tra cờ tràn  
– Xóa cờ báo tràn  
– Đọc và cập nhật các thanh ghi timer  
20  
Đặt chế độ làm việc – Cho timer chạy –  
Dừng timer  
TD:  
– Đặt chế độ làm việc  
MOV TMOD, #00010000B  
timer 1: Gate=0, C/T=0, M1M0=01 (mode 1)  
timer 0: Gate=0, C/T=0, M1M0=00 (mode 0)  
– Cho timer chạy  
SETB TR1  
– Dừng timer  
CLR TR1  
Chú ý khi có xài ngắt ngoài (TD: chế độ 1)  
22  
Kiểm tra cờ và truy cập các  
thanh ghi timer  
TD:  
• Kiểm tra cờ và xóa cờ  
WAIT: JNB TF1, WAIT  
CLR TR1 ; dừng timer T1  
CLR TF1 ; xóa cờ báo tràn  
• Cập nhật các thanh ghi timer  
MOV  
MOV  
TL1, #9CH  
TH1, #0FFH  
23  
Đọc giá trị đếm của timer đang chạy  
• R7 Å TH1, R6 Å TL1  
• Trước hết đọc byte cao  
• Vấn đề có thể xảy ra:  
khi tràn byte thấp Æ đọc lại lần nữa  
AGAIN: MOV A, TH1  
MOV R6, TL1  
CJNE A, TH1, AGAIN  
MOV R7, A  
24  
Các bước để lập trình Timer mode 0 hay 1  
1. Nạp trị cho TMOD  
2. Nạp trị số cho các thanh ghi TL và TH  
3. Cho timer chạy (SETB TR0 hay SETB TR1)  
4. Kiểm tra/theo dõi cờ báo tràn timer (TF) Æ  
đợi đến khi cờ TF = 1  
5. Dừng timer (CLR TR0 hay CLR TR1)  
6. Xóa cờ TF  
7. Quay về bước 2  
25  
Các bước để lập trình Timer mode 2  
1. Nạp trị cho TMOD  
2. Nạp trị số cho các thanh ghi TH  
3. Cho timer chạy (SETB TR0 hay SETB TR1)  
4. Kiểm tra/theo dõi cờ báo tràn timer (TF) Æ đợi  
đến khi cờ TF = 1  
5. Dừng timer (CLR TR0 hay CLR TR1)  
6. Xóa cờ TF  
7. Quay về bước 3  
26  
Định thì khoảng thời gian ngắn  
và khoảng thời gian dài  
27  
Thí dụ: Tạo dạng xung trên chân P1.0  
Viết một chương trình tạo ra dạng sóng có chu kỳ trên P1.0 với tần số cao nhất  
có thể được. Tần số và chu kỳ nhiệm vụ của dạng sóng này là bao nhiêu?  
(giả sử ta dùng XTAL = 12MHz Æ 1 MC = 1us)  
Î Với dạng sóng rất ngắn: không cần timer  
ORG  
8000H  
LOOP: SETB  
CLR  
P1.0 ; 1 MC  
P1.0 ; 1 MC  
LOOP ; 2 MC  
SJMP  
SETB  
CLR  
SJMP  
SETB  
P1.0  
1 us  
(1 MC)  
Tần số = 250 Khz (1/ 4 us)  
•
•
28  
TON = 1 us, TOFF= 3us  
Î
duty cycle = TON/(TON+TOFF)= 25% (1/4)  
Thí dụ: Tạo sóng vuông trên chân P1.0  
ORG  
LOOP: SETB  
NOP  
8000H  
P1.0 ; 1 MC  
; 1 MC  
; 1 MC  
NOP  
CLR  
P1.0 ; 1 MC  
LOOP ; 2 MC  
SJMP  
NOP  
CLR  
SETB  
NOP  
SETB  
SJMP  
P1.0  
1 us  
(One machine cycle)  
Tần số = 166.7 Khz ( 1/ 6 us )  
TON = 3 us, TOFF= 3us Î duty cycle = TON/(TON+TOFF)= 50% (3/6)  
29  
Tạo sóng vuông 10 KHz ở chân P1.0  
Tạo sóng vuông 10 KHz  
Tần số = 10KHz Æ chu kỳ T =1/10000 = 100 us  
T
ON = 50 us, TOFF= 50us  
Dùng mode 2 ( 8 bit mode ), vì khoảng thời gian < 256 us.  
ORG 8000H  
MOV TMOD, #02H ; chế độ tự nạp lại 8 bit  
MOV TH0, #-50  
; 256 – 50 = 206  
SETB TR0  
; cho timer T0 chạy  
LOOP:  
JNB  
CLR  
CPL  
TF0, LOOP  
TF0  
P1.0  
; đợi timer T0 tràn  
; xóa cờ báo tràn  
; đảo bit cổng  
; lặp lại  
SJMP LOOP  
END  
30  
Tạo sóng vuông 1 KHz trên chân P1.0  
Tạo sóng vuông 1 KHz  
Tần số = 1KHz Æ chu kỳ T =1/1000 = 1000 us  
TON = 500 us, TOFF= 500us  
Dùng mode 1 ( 16 bit mode ), vì khoảng thời gian > 256 us.  
ORG  
MOV  
MOV  
MOV  
8000H  
TMOD, #01H  
TH0, #0FEH  
TL0, #0CH  
; chế độ 1 (16 bit)  
LOOP:  
WAIT:  
; -500 (-01F4H)  
; cho timer T0 chạy  
; đợi timer tràn  
SETB TR0  
JNB  
TF0, WAIT  
CLR  
CLR  
CPL  
TR0  
TF0  
P1.0  
; dừng timer 0  
; xóa cờ báo tràn  
; đảo bit cổng  
; lặp lại  
SJMP LOOP  
END  
Chú ý: MOV TH0, #0FEH ≡ MOV TH0, #HIGH(-500)  
MOV TL0, #0CH ≡ MOV TL0, #LOW(-500)  
31  
TD: Giao tiếp buzzer (1/2)  
Một buzzer được nối vào chân P1.7 và một công tắc  
không nảy (debounce switch) được nối vào chân  
P1.6 (xem hình 3.28). Viết chương trình đọc mức  
logic do công tắc cấp và tạo ra âm thanh ở buzzer  
trong 1 giây sau mỗi lần phát hiện chuyển trạng thái  
từ 1 xuống 0.  
32  
TD: Giao tiếp buzzer (2/2)  
Lập trình counter  
• Ở chế độ counter: TMOD, TH, TL giống như với timer  
• Các chế độ timer cũng giống  
• Tuy nhiên thay vì dùng tần số thạch anh, counter đếm  
xung từ bên ngoài đưa vào 8051.  
• Bit C/T trong TMOD quyết định nguồn xung nhịp.  
• Khi C/T = 1, counter đếm lên khi có xung đưa vào các  
chân T1 và T0 (ở P3)  
34  
TD: lập trình counter ở chế độ 2  
• Giả sử có xung nhịp đưa vào chân T1, viết chương trình dùng  
counter 1 ở chế độ 2 và xuất số xung đếm được ra P2.  
• Bài giải  
MOV  
MOV  
MOV  
TMOD, #01100000B ; counter 1 chế độ 2  
TH1, #0  
TL1, #0  
SETB  
AGAIN: SETB  
P3.5  
TR1  
A, TL1  
P2, A  
TF1, BACK  
TR1  
; làm cho T1 là chân nhập  
; cho counter 1 chạy  
; lấy số xung đếm được  
; xuất ra P2  
BACK:  
MOV  
MOV  
JNB  
CLR  
CLR  
SJMP  
35  
TF1  
AGAIN  
pdf 18 trang myanh 16000 Free
Bạn đang xem tài liệu "Bài giảng Vi xử lý - Chương 3: Họ vi điều khiển 805 (Phần 3) - Hồ Trung Mỹ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_vi_xu_ly_chuong_3_ho_vi_dieu_khien_805_phan_3_ho_t.pdf