Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
257,07 KB
Nội dung
L
L
ậ
ậ
p
p
tr
tr
ì
ì
nh
nh
b
b
ộ
ộ
đ
đ
ị
ị
nh
nh
th
th
ờ
ờ
i
i
(TIMER)
(TIMER)
Gi
Gi
ớ
ớ
i
i
thi
thi
ệ
ệ
u
u
b
b
ộ
ộ
đ
đ
ị
ị
nh
nh
th
th
ờ
ờ
i
i
1. Các thanh ghi của bộđịnh thời
- Timer 0: TH0, TL0
- Timer 1: TH1, TL1
- 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ế độ
V
V
ị
ị
tr
tr
í
í
c
c
ủ
ủ
a
a
c
c
á
á
c
c
b
b
ộ
ộ
đ
đ
ị
ị
nh
nh
th
th
ờ
ờ
i
i
trong
trong
sơ
sơ
đ
đ
ồ
ồ
kh
kh
ố
ố
i
i
c
c
ủ
ủ
a
a
chip 89X51/52
chip 89X51/52
Các bộđịnh thời
V
V
Ị
Ị
TR
TR
Í
Í
C
C
Á
Á
C THANH GHI C
C THANH GHI C
Ủ
Ủ
A B
A B
Ộ
Ộ
Đ
Đ
Ị
Ị
NH TH
NH TH
Ờ
Ờ
I
I
TRONG V
TRONG V
Ù
Ù
NG NH
NG NH
Ớ
Ớ
Đ
Đ
Ặ
Ặ
C BI
C BI
Ệ
Ệ
T
T
-
-
SFR
SFR
Thanh
Thanh
ghi
ghi
TMOD
TMOD
: Timer Mode
: Timer Mode
Ch
Ch
ọ
ọ
n
n
ch
ch
ế
ế
đ
đ
ộ
ộ
ho
ho
ạ
ạ
t
t
đ
đ
ộ
ộ
ng
ng
TMOD
TMOD
D0
D0
D1
D1
D2
D2
D3
D3
D4
D4
D5
D5
D6
D6
D7
D7
GATE
C/T
M1
M0
GATE
C/T
M1
M0
Chọn chế độ hoạt động
cho TIMER1
Chọn chế độ hoạt động
cho TIMER0
Bit M0, M1
Bit M0, M1
–
–
c
c
ủ
ủ
a
a
thanh
thanh
ghi
ghi
TMOD
TMOD
Ch
ế độ đị
nh th
ờ
i chia x
ẻ
311
Ch
ế độ
t
ự độ
ng n
ạ
p l
ạ
i 8-bit
201
Ch
ế độ đị
nh th
ờ
i 16 bit
110
Ch
ế độ đị
nh th
ờ
i 13 bit
000
Mô t
ả
Ch
ế độ
M0M1
M0
M0
M1
M1
C/T
C/T
GATE
GATE
M0
M0
M1
M1
C/T
C/T
GATE
GATE
TMOD
TMOD
Thanh
Thanh
ghi
ghi
TCON
TCON
–
–
Timer/Counter
Timer/Counter
Control Register
Control Register
TCON
TCON
D0
D0
D1
D1
D2
D2
D3
D3
D4
D4
D5
D5
D6
D6
D7
D7
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Cờ ngắt
ngoài 1
Cờ ngắt
của
Timer0
Cờ ngắt
của
Timer1
Cờ ngắt
ngoài 0
Ch
Ch
ế
ế
đ
đ
ộ
ộ
ho
ho
ạ
ạ
t
t
đ
đ
ộ
ộ
ng
ng
c
c
ủ
ủ
a
a
Timer
Timer
-
-
Ch
Ch
ế
ế
đ
đ
ộ
ộ
0:
0: Chế độ địnhthời 13 bit
-
-
Ch
Ch
ế
ế
đ
đ
ộ
ộ
1:
1: Chế độ địnhthời 16 bit
- THx, TLx ch
ứ
a giá tr
ị đế
m hi
ệ
n t
ạ
i c
ủ
a b
ộ đị
nh th
ờ
i
-
-
Ch
Ch
ế
ế
đ
đ
ộ
ộ
2:
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
Ch
ế
ế
đ
đ
ộ
ộ
3:
3: Chế độ địnhthời chia xẻ
L
L
ậ
ậ
p
p
tr
tr
ì
ì
nh
nh
cho
cho
b
b
ộ
ộ
đ
đ
ị
ị
nh
nh
th
th
ờ
ờ
i
i
Timer 0
Timer 0
• Ví dụ 1: lậptrình cho bộđịnhthờ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ộđịnhthờ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ộđịnhthờ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ộđịnhthờ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).
M0
M0
M1
M1
C/T
C/T
GATE
GATE
M0
M0
M1
M1
C/T
C/T
GATE
GATE
TMOD
TMOD
Chương
Chương
tr
tr
ì
ì
nh
nh
ho
ho
à
à
n
n
ch
ch
ỉ
ỉ
nh
nh
v
v
í
í
d
d
ụ
ụ
1
1
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;
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
[...]... động bộđịnhthời TR0 = 1; // Chờ cờ tràn bật 1 while(!TF0) continue; // Dừng bộđịnhthời TR0 = 0; // Khởi động bộđịnhthời TR0 = 1; ASM MOV TMOD, #00000010B MOV TH0, #55 MOV TL0, #55 CLR TF0; Xóa cờ tràn ;Khởi động bộđịnhthời SETB TR1 ; Chờ cờ tràn bật 1 JNB TF0, $ ; Dừng bộđịnhthời CLR TR0 // Khởi động bộđịnhthời SETB TR0 Tạo trễ sử dụng Timer MAIN: MOV MOV MOV AGAIN: CPL CALL JMP TMOD,... Khởi động bộđịnhthời T0 + TF0 = 0; // (CLR TF0) Xóa cờ tràn + TR0 = 1; // (SETB TR0) Khởi động bộđịnhthời - Bước 4: Chờ bộđịnhthờ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 Chương trình hoàn chỉnh ví dụ 2 C TMOD = 0x02; TH0 = 55; TL0 = 55; TF0 = 0; // Xóa cờ tràn // Khởi động bộđịnhthời TR0 =... continue; } void T1_ISR() interrupt 3 { TR1 = 0; // Dừng bộđịnhthời TH1 = 0xFC; TL1 = 0x17; // Nạp lại P1_0 = !P1_0; TR1 = 1; // Khởi động bộđịnhthời } 2 Lậptrình ngắt ngoài IE – Interrupt Enable Register EA - ET2 ES ET1 + Lậptrình cho ngắt ngoài 0 Cho phép ngắt ngoài 0 EX0 = 1; Cho phép ngắt toàn cục EA = 1; Viết chương trình phục vụ ngắt ngoài 0 + Lậptrình cho ngắt ngoài 1 Cho phép ngắt ngoài 0 EX1... ngoài 0 LẬPTRÌNH NGẮT 1 Lậptrình với ngắt timer – Timer 0 – Timer 1 2 Lậptrình với ngắt ngoài – Ngắt ngoài 0 – Ngắt ngoài 1 – Ngắt ngoài theo sườn xuống và theo mức 0 3 Ưu tiên ngắt – Thứ tự ưu tiên thực hiện các ngắt – Lậptrình theo đổi ưu tiên các ngắt 1 Lập trình ngắt timer IE – Interrupt Enable Register EA - ET2 ES ET1 EX1 ET0 EX0 • Bước 1: Chọn chế độ hoạt động của timer như ở phần lập trình. .. AGAIN DELAY: CLR TF0; Xóa cờ tràn ;Khởi động bộđịnhthời SETB TR1 ; Chờ cờ tràn bật 1 JNB TF0, $ ; Dừng bộđịnhthời CLR TR0 RET void main() { TMOD = 0x02; while(1) { P1_0 = !P1_0; delay(55); } void delay(unsigned char us){ TH0 = us; TL0 = us; TF0 = 0 ; Xóa cờ tràn ;Khởi động bộđịnhthời TR1 = 1; ; Chờ cờ tràn bật 1 while(!TF0) continue; ; Dừng bộđịnhthời TR0 = 0; } NGẮT • Giới thiệu ngắt • Các.. .Lập trình cho bộđịnhthời Timer 0 – (ti p) • Ví dụ 2: lập trình cho bộđịnhthời 0 hoạt động ở chế độ 2, 8-bit tự nạp 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... cấu hình ngắt • Lập trình ngắt 0000H 0003H 000BH 0013H 001BH 0023H 002BH Xử lý của CPU đối với 1 ngắt Khi một ngắt xuất hiện và được CPU chấp nhận, chương trình chính bị ngắt Các thao tác sau đây xảy ra: - Hoàn tất việc thực thi lệnh hiện hành - Cất bộ đếm chương trình (PC) vào stack - Trạng thái của ngắt hiện hành được lưu giữ lại - Bộ đếm chương trình PC sẽ nạp địa chỉ của chương trình con phục vụ... khi sử dụng bất cứ ngắt nào • Bước 3: Viết chương trình phục vụ ngắt Timer Chương trình phục vụ ngắt do timer được đặt ở các vector ngắt 000Bh (Timer 0) 001Bh (Timer 1) Các chương trình con phục vụ ngắt cũng giống như các chương trình con khác, tuy nhiên nó được kết thúc bằng lệnh RETI (Return from Interrupt) thay vì lệnh RET Ví dụ 1: Viết chương trình nháy LED nối ở chân P1.0 với chu kỳ 500us sử... P1_0 = !P1_0; } Ví dụ 2: Viết chương trình tạo xung vuông ở chân P1.0 với tần số 500Hz sử dụng ngắt timer 1 Thạch anh 12Mhz ASM ORG 0000H LJMP MAIN ORG 000BH LJMP T1_ISR ORG 0030H MAIN: MOV TMOD, #00010000B;Timer 1 chế độ 1 MOV TH1, #HIGH(-1000) MOV TL1, #LOW(-1000) CLR TF1; Xóa cờ tràn SETB ET1 SETB EA SETB TR1; Khởi động Timer 0 JMP $ T1_ISR: CLR TR1; Dừng bộđịnhthời MOV TH1, #HIGH(-1000); Nạp lại... Trạng thái của ngắt hiện hành được lưu giữ lại - Bộ đếm chương trình PC sẽ nạp địa chỉ của chương trình con phục vụ ngắt và đi thực hiện - Thực hiện xong sẽ quay về chương trình chính tại vị trí nó bị ngắt và thực hiện tiếp chương trình chính Thanh ghi cho phép ngắt IE (Interrupt Enable Register) IE D7 D6 D5 EA D4 ET2 ES Cho phép ngắt do Timer 2 Không sử dụng D2 ET1 Cho phép ngắt toàn cục D3 D1 ET0 . 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). 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)