Khi bit này = 1 thì ngắt định thời 2 sẽ được cho phép và ngược lại.. Khi các bit này =1 thì ngắt của hai bộ định thời này được cho phép và ngược lại.. IE1 TCON.3 Cờ ngắt ngoài kích theo
Trang 1Bài 6: NGẮT BĐT (TIMER)
I>Khái niệm:
Vi điều khiển 8051 có 2 BĐT (Timer 0+1) để tạo thời gian cũng như làm bộ đếm (đếm sp)
II>Thanh ghi chứa giá trị của BĐT :
-Thanh ghi của bộ TIMER0
D15 D14 D13 D12 D11 D10 D9 D8
TH0
D7 D6 D5 D4 D3 D2 D1 D0
TL0
Trang 2Bài 6: NGẮT BĐT (TIMER)
-Thanh ghi của bộ TIMER1:
D15 D14 D13 D12 D11 D10 D9 D8
TH1
D7 D6 D5 D4 D3 D2 D1 D0
TL1
Trang 3Bài 6: NGẮT BĐT (TIMER)
- Thanh ghi chế độ của bộ định thời TMOD:
(MSB)
GATE C/T M1 M0
Timer1
GATE C/T M1 M0
Timer0
(MSB)
Trang 4Bài 6: NGẮT BĐT (TIMER)
M1 M0 Chế
0 0 0 Chế độ bộ định thời 13 bit Bộ định thời/bộ đếm
8 bit, định tỷ lệ trước 5 bit.
0 1 1 Chế độ bộ định thời 16 bit, không định tỷ lệ trước.
1 0 2 Chế độ 8 bit tự nạp lại THx lưu giá trị sẽ tự nạp
vào TLx mỗi khi tràn.
1 1 3 Chế độ bộ định thời chia tách
Ví dụ : để sử dụng Timer0 ở chế độ 16bit và Timer1 ở
chế độ 8 bit ta khởi tạo TMOD = 0x21
Trang 5Bài 6: NGẮT BĐT (TIMER)
II>Thanh ghi cho phép và Điều khiển BĐT:
1.Thanh Ghi Cho Phép Ngắt IE (interrupt enable)
EA (IE.7 bit) là bit cho phép ngắt toàn bộ Tức là nếu bạn sử
dụng một trong 5 ngắt kể trên của vđk thì bạn phải set bit này lên với giá trị 1 Ngược lại khi bit EA =0 thì toàn bộ các ngắt của vđk sẽ bị cấm
Trang 6ET2 ( IE.5 bit) là bit cho phép ngắt của timer 2 ( chỉ ở họ 52 )
Khi bit này = 1 thì ngắt định thời 2 sẽ được cho phép và ngược lại
ET1, ET0 ( IE.3, IE.1 bit ) là bit cho phép ngắt định thời 1, 0
của vđk 8051 Khi các bit này =1 thì ngắt của hai bộ định thời này được cho phép và ngược lại
ES ( IE.4 bit ) là bit cho phép ngắt truyền thông nối tiếp.
EX1, EX0 (IE.0 và IE.2 bit) là hai bit cho phép của hai ngắt
ngoài của vđk
Bài 6: NGẮT BĐT (TIMER)
Trang 7TF1 TR1 TF1 TR0 IE1 IT1 IE0 IT0
TF1 ( TCON.7) cờ tràn của Timer1
TR1 ( TCON.6) bit Đk hoạt động của Timer1
TF0 ( TCON.5) cờ tràn của Timer0
TR0 ( TCON.4) bit Đk hoạt động của Timer0
Bài 6: NGẮT BĐT (TIMER)
Trang 8IE1 ( TCON.3) Cờ ngắt ngoài kích theo sườn ; được CPU thiết
lập khi phát hiền có sườn xuống ngắt ngoài và đựơc CPU xoá khi ngắt được xư lý
IE0 ( TCON.1) Cờ ngắt ngoài kích theo sườn ; được CPU thiết
lập khi phát hiền có sườn xuống ngắt ngoài và đựơc CPU xoá khi ngắt được xư lý
IT1 ( TCON.2) bit Đk kiểu ngắt INT1 được thiết lập và xoá bởi
phần mềm để xác định kiểu ngắt theo sườn hay mức thấp
IT0 ( TCON.0) bit Đk kiểu ngắt INT0 được thiết lập và xoá bởi
phần mềm để xác định kiểu ngắt theo sườn hay mức thấp
Bài 6: NGẮT BĐT (TIMER)
Trang 9Bài 6: NGẮT BĐT (TIMER)
Các Bước Để Sư Dụng BĐT Như Sau
Start
Các Lệnh tiền xử lý
Hàm khởi tạo ngát
Hàm phục vụ ngát
Hàm main
Trang 10Bài 6: NGẮT BĐT (TIMER)
Nhiệm vụ của hàm Khởi tạo :
• Cho phép BĐT hoạt động bằng việc tác động vào thanh ghi
IE.
• Chọn chế độ cho BĐT cần dùng , từ đó xác định giá trị nạp
cho thanh ghi TMOD.
• Tính toán giá trị ban đầu nạp cho TH và TL từ thời gian
mong muốn.
• Khởi động BĐT.
Trang 11Bài 6: NGẮT BĐT (TIMER)
Nhiệm vụ của hàm Ngắt BĐT :
• Dừng BĐT , xóa cờ ngắt TF tương ứng
• Nạp lại giá trị cho TH và TL (nếu cần ) để tạo thời gian cho
lần định thời sau
• Sử lý những công việc định trước
• Khởi động lại BĐT
Trang 12Bài 6: NGẮT BĐT (TIMER)
Như vậy để khởi tạo dùng BĐT Timer0 ở chế độ 8 bit ta cần làm như sau :
void Khoi_tao(void)
{
EA = 1; //cho phép ngắt toàn cục ET0 = 1; //cho phép ngắt Timer0 TMOD = 0x02 ; //Timer0 chế độ 8 bit TH0 = ?x?? ; // giá trị cần đưa vào TL0 = ?x??;
TR0 = 1 ; //khởi động Timer0
Trang 13Bài 6: NGẮT BĐT (TIMER)
Void Name (void) interrupt x ( x là số thứ thực của ngắt )
{
TRx = 0; //tắt BĐT x
TFx = 0 ; // xóa cờ ngắt
THx = 0x??;
TL0 = 0x?? ;
{
//chương trình cần sử lý
}
TRx = 1 //khởi động lại BĐT
Chương trình ngắt BĐT :
Trang 14Bài 6: NGẮT BĐT (TIMER)
B1 :Dùng BĐT 0 ở chế độ 8 bit để nháy Led ,với giá trị TH0 = 0x00 và TL0 = 0x00, vì hàm ngắt định thời sẽ được gọi sau 256 chu kỳ nên tần số nháy Led sẽ rất lớn ta ko thể quan sát được , vì vậy trong hàm ngắt ta se gọi ham
delay(20000) để quan tạo trễ cho quá trình nháy Led
Trang 15B2 :Vẫn yêu cầu như bài 1 nhưng ta sẽ ko dùng hàm delay() nữa mà tạo thời gian trễ hoàn toàn bằng BĐT
Bài 6: NGẮT BĐT (TIMER)
Trang 16B3 :Dùng 2 BĐT 0 và 1 để nháy so le 2 Led (mỗi BĐT đk một con )
Bài 6: NGẮT BĐT (TIMER)
Trang 17B4 :Dùng BĐT 0 or 1 để nháy Led :cứ sau đúng 1s sẽ đảo trạng thái Led (bài toán này sẽ chỉ cho các bạn tạo thời gian một cách chính xác)
Bài 6: NGẮT BĐT (TIMER)
Trang 18Bài 6: NGẮT BĐT (TIMER)
B5 :Dùng BĐT 0 và 1 viết chương trình điều khiển đèn giao thông (phần cứng các bạn tự thiết kế theo đúng các modul trong thực tế , bao gồm : 4 hàng Led theo 4 hướng đường , mỗi hàng là 3 Led xanh , đỏ , vàng ; các Led 7 thanh để hiển thị thời gian chờ , nếu có thể thì thêm cả phần nút bấm để thiết lập thời gian chờ)
Trang 19B6 :Kết hợp kiến thức bài 4 và bài 3 của bài Ngắt ngoài để viết chương trình cho đồng hồ điện tử ( phần cứng có thể dùng ngay Kit tại trung tâm)
Bài 6: NGẮT BĐT (TIMER)