Tải bản đầy đủ (.ppt) (18 trang)

Tài liệu môn kỹ thuật vi điều khiển 4

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.18 MB, 18 trang )

BỘ ĐỊNH THỜI/ BỘ ĐẾM
(TIMER/COUNTER)


1. Giới thiệu
• Tạo ra những khoảng thời gian chính xác đến
cấp chu kỳ máy, có thể thay đổi khoảng thời
gian đó linh hoạt
• Dùng đếm sự kiện – thường ứng dụng để đọc
encoder.

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Vị trí của các bộ định thời trong sơ đồ khối của chip 89X51/52

Các bộ định thời

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




VỊ TRÍ CÁC THANH GHI CỦA BỘ ĐỊNH THỜI TRONG
VÙNG NHỚ ĐẶC BIỆT- SFR

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng





2. Hoạt động

XTAL
oscillator

TH

÷12
C/T = 0

TF bật lên 1
khi FFFF → 0

TR

TH0
D15

D14

D13

D12

D11

D14


D13

D12

D11

Cờ tràn
(Overflow Flag)

TL0
D10

D9

D8

D7

D6

D5

TH1
D15

TF

TL

D4


D3

D2

D1

D0

D2

D1

D0

TL1
D10

D9

D8

D7

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

D6

D5


D4

D3




Minh họa hoạt động của timer

FFF2
TF=0

FFF3

FFF4

FFFF

0000

TF=0

TF=0

TF=0

TF=1

Timer là bộ đếm lên, khi xảy ra trạng thái FFFF  0000 thì cờ TF bật 1


Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




3. Các thanh ghi
1. Các thanh ghi của bộ định thời
- Timer 0: TH0, TL0
- Timer 1: TH1, TL1
2. Các thanh ghi trạng thái và cài đặt chế độ
hoạt động cho các bộ định thời:
+ TCON: Điều khiển
+ TMOD: Chọn chế độ

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Thanh ghi TCON – Timer/Counter Control Register
TCON

D7

D6

TF1

D5


D3

TF0
TR1

Cờ ngắt
của
Timer1

D4

IE1
TR0

Cờ ngắt
của
Timer0

D2

D1

IE0
IT1

Cờ ngắt
ngoài 1

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng


D0

IT0
Cờ ngắt
ngoài 0




Thanh ghi TMOD: Timer Mode
Chọn chế độ hoạt động

TMOD
D7 D6

D5

GATE

M1
C/T

D4

D3

D2

GATE
M0


Chọn chế độ hoạt động
cho TIMER1
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

D1

D0

M1
C/T

M0

Chọn chế độ hoạt động
cho TIMER0



4. Chế độ hoạt động của Timer
Mỗi bộ định thời có thể hoạt động ở 4 chế độ:
- Chế độ 0: Chế độ định thời 13 bit
- Chế độ 1: Chế độ định thời 16 bit
- THx, TLx chứa giá trị đếm hiện tại của bộ định thời

- Chế độ 2: Chế độ tự nạp lại 8-bit
- Byte thấp giữ giá trị đếm hiện tại
- Byte cao giữ giá trị nạp lại

- Chế độ 3: Chế độ định thời chia xẻ

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Thanh ghi TMOD: Timer Mode
Chọn chế độ hoạt động

TMOD
D7 D6

D5

GATE

M1
C/T

D4

D3

D2

GATE
M0

Chọn chế độ hoạt động
cho TIMER1
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng


D1

D0

M1
C/T

M0

Chọn chế độ hoạt động
cho TIMER0



Bit M0, M1 – của thanh ghi TMOD
TMOD
GATE

C/T M1

M0

M1

M0

Chế độ

0

0
1
1

0
1
0
1

0
1
2
3

GATE C/T

M1

M0

Mô tả
Chế độ định thời 13 bit
Chế độ định thời 16 bit
Chế độ tự động nạp lại 8-bit
Chế độ định thời chia xẻ
To slide 10

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng





Ví dụ:
Ví dụ 1:
Xác định xem các timer làm việc ở chế độ nào sau đây. (a) MOV TMOD, #01H (b)
MOV TMOD, #20H (c) MOV TMOD, #12H
Giải:
Đổi từ hexa sang nhị phân, dựa vào bảng chế động hoạt động của timer ta có.
(a) TMOD = 00000001, mode 1 of timer 0 is selected.
(b) TMOD = 00100000, mode 2 of timer 1 is selected.
(c) TMOD = 00010010, mode 2 of timer 0, and mode 1 of timer 1 are selected.
Ví dụ 2:
Tính tần số và chy kỳ của chip 8051 khi sử dụng thạch anh 11.0592Mhz khi bit C/T
của thanh ghi TMOD bằng 0.
Giải:
XTAL
÷12
oscillator
1/12 × 11.0529 MHz = 921.6 MHz; T = 1/921.6 kHz = 1.085 us

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Lập trình cho bộ định thời Timer 0


Ví dụ 3: lập trình cho bộ định thời 0 hoạt động ở chế độ 1, 16 bit, có
thời gian tràn là 500us (sử dụng thạch 12Mhz).

• Bước 1: Chọn chế độ hoạt động cho Timer 0
TMOD = 00000001B (0x01)

• Bước 2: Nạp giá trị tràn cho các thanh ghi TH0, TL0
Vì bộ định thời đếm lên 1 đơn vị sau mỗi chu kỳ máy nên bộ định thời
sẽ tràn sau 500 chu kỳ máy khi nạp vào TH0, TL0 giá trị bằng 65536 –
500 = 65036 tương đương 0FE0Ch
TH0 = 0xFE; //
MOV TH0, #0FEh
TL0 = 0X0C; //
MOV TL0, #0Ch

- Bước 3: Khởi động bộ định thời T0

TF0 = 0; // (CLR TF0) Xóa cờ tràn
TR0 = 1; // (SETB TR0) Khởi động bộ định thời

- Bước 4: Chờ bộ định thời tràn

while(!TF0) continue; // JNB TF0, $

- Bước 5: Nếu tiếp tục muốn sử dụng bộ định thời: Dừng bộ định
thời (TR0 = 0), nạp lại giá trị cho TH0, TL0, khởi động lại (TR0 = 1).
TMOD

GATE

C/T

M1


M0

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

GATE

C/T

M1

M0



Chương trình hoàn chỉnh ví dụ 3
ASM
MOV
TMOD, #00000001B
MOV
TH0, #0FEh
MOV
TL0, #0Ch
CLR
TF0; Xóa cờ tràn
;Khởi động bộ định thời
SETB
TR1
; Chờ cờ tràn bật 1
JNB TF0, $

; Dừng bộ định thời
CLR
TR0
; Nạp lại giá trị
MOV
TH0, #0FEh;
MOV
TL0, #0Ch;
...
// Khởi động bộ định thời
SETB
TR0
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

C
TMOD = 00000001B
TH0 = 0xFE;
TL0 = 0x0C;
TF0 = 0; // Xóa cờ tràn
// Khởi động bộ định thời
TR0 = 1;
// Chờ cờ tràn bật 1
while(!TF0) continue;
// Dừng bộ định thời
TR0 = 0;
// Nạp lại giá trị
TH0 = 0xFE;
TL0 = 0x0C;
...
// Khởi động bộ định thời

TR0 = 1;



Lập trình cho bộ định thời Timer 0 – (tiếp)


Ví dụ 4: lập trình cho bộ định thời 0 hoạt động ở chế độ 2, 8-bit tự
nạp lại,
lại có thời gian tràn là 200us (sử dụng thạch 12Mhz).
• Bước 1: Chọn chế độ hoạt động cho Timer 0
TMOD = 00000010B (0x02)

• Bước 2: Nạp giá trị tràn cho các thanh ghi TH0, TL0
Ở chế độ 2, thanh ghi TH0 sẽ giữ giá trị nạp lại, vậy
TH0 = 256 - 200;
//
MOV TH0, #56
TL0 = 256 - 200;
//
MOV TL0, #56

- Bước 3: Khởi động bộ định thời T0
+ TF0 = 0; // (CLR TF0) Xóa cờ tràn
+ TR0 = 1; // (SETB TR0) Khởi động bộ định thời

- Bước 4: Chờ bộ định thời tràn
- while(!TF0) continue; // JNB TF0, $

- Bước 5: Xóa cờ tràn (TF0 = 0), tiếp tục đợi cờ tràn bật 1 do thanh

ghi TL0 tự động được nạp lại.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Chương trình hoàn chỉnh ví dụ 4
ASM
MOV
TMOD, #00000010B
MOV
TH0, #56
MOV
TL0, #56
CLR
TF0; Xóa cờ tràn
;Khởi động bộ định thời
SETB
TR1
; Chờ cờ tràn bật 1
JNB TF0, $
; Dừng bộ định thời
CLR
TR0
...
// Khởi động bộ định thời
SETB
TR0

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng


C
TMOD = 0x02;
TH0 = 56;
TL0 = 56;
TF0 = 0; // Xóa cờ tràn
// Khởi động bộ định thời
TR0 = 1;
// Chờ cờ tràn bật 1
while(!TF0);
// Dừng bộ định thời
TR0 = 0;
...
// Khởi động bộ định thời
TR0 = 1;




Tạo trễ sử dụng Timer
MAIN:
MOV
MOV
MOV
AGAIN:
CPL
CALL
JMP

TMOD, #00000010B

TH0, #56
TL0, #56
P1.0
DELAY
AGAIN

DELAY:
CLR
TF0; Xóa cờ tràn
;Khởi động bộ định thời
SETB
TR1
; Chờ cờ tràn bật 1
JNB
TF0, $
; Dừng bộ định thời
CLR
TR0
RET

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

void main() {
TMOD = 0x02;
while(1) {
P1_0 = !P1_0;
delay(56);
}
void delay(unsigned char us){
TH0 = us;

TL0 = us;
TF0 = 0 ; Xóa cờ tràn
;Khởi động bộ định thời
TR1 = 1;
; Chờ cờ tràn bật 1
while(!TF0);
; Dừng bộ định thời
TR0 = 0;
}




×