Professional Documents
Culture Documents
(INTERRUPT)
GIỚI THIỆU NGẮT
GIỚI THIỆU NGẮT
Ngắt là gì?
- Một cách để dừng vi xử lý khỏi bất cứ
công việc gì mà nó đang thực hiện
- Buộc nó làm một việc khác.
Tại sao và những ứng dụng nào cần đến
ngắt?
- Phục vụ cho nhiều thiết bị giao tiếp.
- Các hệ thống đa nhiệm.
HOẠT ĐỘNG CỦA NGẮT
Ngắt: Interrupt.
- Nếu một thiết bị sẵn sàng và cần được
chú ý, nó sẽ báo cho CPU biết.
- CPU ngừng bất cứ việc gì mà nó đang
thi hành và phục vụ thiết bị và sau đó trở lại
công việc trước đó của mình.
- CPU luôn “rỗi (free)” khi nó không phục
vụ ngắt.
NGẮT CỦA HỌ VI ĐIỀU KHIỂN 8051
www.themegallery.com
KHAI BÁO NGẮT TRONG KEIL C
Trong đó:
- Những chữ in nghiêng bắt buộc phải
có.
- Using b có thể có hoặc không.
- Tên hàm tùy các bạn chọn.
www.themegallery.com
KHAI BÁO NGẮT TRONG KEIL C
www.themegallery.com
KHAI BÁO NGẮT TRONG KEIL C
www.themegallery.com
NGẮT DO CÁC BỘ TIMER
www.themegallery.com
NGẮT DO CÁC BỘ TIMER
#include <stdio.h> // các chương trình
#include<reg51.h> con phục vụ ngắt (ISR)
… Void ngatT0 (đối
số) interrupt a
// chương trình
chính {
Void main (void) // các câu lệnh
trong ISR
{
}
// khởi tạo thanh
ghi cho phép ngắt và ưu Trong đó: ngatT0 là
tiên ngắt tên của ISR (tùy chọn), a
là số hiệu ngắt tương
… ứng với vector ngắt.
} www.themegallery.com
NGẮT DO CÁC BỘ TIMER
Ví dụ1:Tạo 2 xung khác nhau trên P1.0 và P2.0
:
www.themegallery.com
NGẮT DO CÁC BỘ TIMER
#include <stdio.h> void main (void)
#include<reg51.h> {
sbit xung1=P1^0; TMOD=0x21; // Sử dụng Timer0
sbit xung2=P2^0; ở chế độ 1 và Timer1 ở chế độ 2.
Xung clock lấy từ bộ chia tần bên
void ngatT0 (void) interrupt 1 trong VĐK tạo ra.
{TR0=0; TH1 = TL1 = -100; // Cứ 100 us là
TH0=-10000/256; // Xung có chu lại tràn Timer 1.
kỳ 20000us. TR1=1; // Bắt đầu đếm
TL0=-10000%256; IE=0x8A; // Cho phép ngắt Timer
xung2=~xung2; // Nghịch đảo giá 0 và timer 1.
trị trước đó (để tạo xung) IP=0; // Không ưu tiên ngắt.
TR0=1; TF0=1; // Buộc ngắt do Timer 0.
} Để VĐK nhảy vào hàm ngắt
void ngatT1(void)interrupt 3 Timer0 và kích hoạt timer hoạt
{ động (TR0=1;)
xung1=~xung1; // Nghịch đảo giá }
trị trước đó (để tạo xung)
} www.themegallery.com
NGẮT DO CỔNG NỐI TIẾP
www.themegallery.com
NGẮT DO CỔNG NỐI TIẾP
#include <stdio.h> void main (void)
#include<reg51.h> {
char x; TMOD=0x20; // Timer 1 ở chế
độ 1.
void ngatnt(void) interrupt 4 TH1=TL1=-24; // Tốc độ baud
{ là 1200;
if(x<='Z') TR1=1;
{ SCON=0x52; // UART 8 bit,
SBUF=x; chế độ 1, TI=1;
x=0x41;
++x;
IE=0x90; // Cho phép ngắt do
TI=0; cổng nối tiếp
} while(1);
} }
www.themegallery.com
NGẮT NGOÀI
NGẮT NGOÀI
www.themegallery.com
NGẮT NGOÀI
NGẮT NGOÀI
#include<at89x51.h> //Khai void nutan(void) interrupt 2
báo thư viện cho VĐK 89x51 //Khai báo trình phục vụ ngắt
void main (void) ngoài 1
{
//Chương trình chính //(mặc định là ngắt theo
{ mức)
IE=0x84; //cho phép int a=50000; //Biến đếm trễ
ngắt ngoài 1 P1_3=0; //Cho Led sáng
while(1) //vòng lặp vô while(a--){}
hạn //Trễ cho Led sáng vài giây
{ P1_3=1; //Tắt Led
//không làm gì
} //Không cần xóa cờ ngắt
}
}
www.themegallery.com
NGẮT NGOÀI
www.themegallery.com
NGẮT NGOÀI
#include<at89x51.h> //Khai void nutan(void) interrupt 2
báo thư viện cho VĐK 89x51 //Khai báo trình phục vụ ngắt
void main (void) ngoài 1
//Chương trình chính {
{ //(mặc định là ngắt theo
mức)
IE=0x84; //cho phép
ngắt ngoài 1 int a=50000; //Biến đếm
trễ
IT1=1; //Thiết lập ngắt
ngoài 1 theo sườn âm P1_3=0; //Cho Led sáng
while(1) //vòng lặp vô while(a--){}
hạn //Trễ cho Led sáng vài giây
{ P1_3=1; //Tắt Led
//không làm gì //Không cần xóa cờ ngắt
} }
} www.themegallery.com