Bộ đếm và bộ định thời
Như bạn đã biết, bộ dao động của VĐK sử dụng thạch anh để hoạt động. Tần số của bộ dao động là xác định chính xác và rất ổn định, xung được tạo ra có độ rộng luôn luôn giống nhau, nó tạo nên một thời gian lý tưởng. 8051 có 2 bộ Timer/Counter là T0 và T1. Mục đích của chúng là đo đạc thời gian và đếm sự kiện bên ngoài. Ngoài ra chúng còn có thể được sử dụng để tạo ra xung clock sử dụng cho truyền thông nối tiếp, gọi là tốc độ Baud.
Timer 0
Timer 0 bao gồm 2 thanh ghi là TH0 và TL0 chứa byte cao và byte thấp giá trị đưa vào.
Timer 1
Timer 1 bao gồm 2 thanh ghi là TH1 và TL1 chứa byte cao và byte thấp giá trị đưa vào.
Thanh ghi TMOD ( là thanh ghi chọn chế độ cho bô định thời)
[img]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/05/clip_image002.jpg[/img]
Thanh ghi được chia ra làm 2 phần điều khiển cho Timer 0 và Timer 1 vì vậy chức năng tương đương nhau ta chỉ cần xét 1 cái chung.
Gate: =1 khởi động timer từ bên ngoài
= 0 khởi động từ bên trong ( mặc định chọn 0)
C/T: =0 hoạt động như bộ định thời tạo thời gian trễ
= 1 hoạt động như bộ đếm
Bit M1: M0:
M1 M0 Chế độ hoạt động
0 0 chế độ 0. Bộ định thời 13 ( thường không dùng tới)
0 1 chế độ 1. Bộ định thời 16 bit
1 0 chê độ 2. Bộ định thời 8 bit tự nạp lại
1 1 chê độ 3. Bộ định thời chia tách ( không dùng tới)
Tính thời gian trễ cho Timer:
Thời gian trễ của Timer là: T
T= n* Tosc ( n là số lần đếm được của Timer)
Ta có giá trị nạp vào TH và TL sẽ là:
+ Nếu chế độ 1. 16 bit:
65536 – n = A
+ Nếu chế độ 2. 8 Bit:
256 – n = A
Ta lấy A/256 phần nguyên = TH và Phần dư = TL
Ví dụ: tính giá trị nạp vào TH0,TL0 ở chế độ 1 với thời gian trễ là 10ms. Biết thạch anh là 12MHz.
Giải:
Tosc = 1uS
[blockquote]ð[font=Times New Roman][/font]n = 10000[/blockquote] [blockquote]ð[font=Times New Roman][/font]A = 65 536 – 10 000 = 55 536[/blockquote] [blockquote]ð[font=Times New Roman][/font]Vậy TH0 = 216 và TL0 = 240[/blockquote]
Thanh ghi TCON ( thanh ghi điều khiển Timer)
[img]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/05/clip_image003.gif[/img]
Bit TF1: khi timer 1 tràn thì bit này tự động set lên 1 vì vậy phải xóa bằng phần mềm nếu muốn tiếp tục đếm
Bit TR1: Cho phép Timer 1 hoạt động
=0 dừng Timer 1
=1 bắt đầu khởi động Timer 1
TF0 , TR0 tương tự TF1 TR1
Bit 3-0: điều khiển ngắt
Ví dụ: viết chương trình tạo trễ bằng timer 0 chế độ 1 với thời gian là 5ms. Thạch anh 12MHz.
Giải:
DELAY5MS:
MOV TMOD,#01
MOV TH0,#0EEH
MOV TL0,#00
SETB TR0
AGAIN: JNB TF0,AGAIN
CLR TR0
CLR TF0
RET
Thank for watching!!!
0 nhận xét:
Đăng nhận xét