Xem mẫu
- Bài 5: NGẮT NGOÀI (INT)
I>Khái niệm:
Ngắt là sự đáp ứng các sự kiện bên trong
hoặc bên ngoài nhằm thông báo cho bộ vi
điều khiển biết thiết bị đang cần được phục
vụ
- Bài 5: NGẮT NGOÀI (INT)
II>. Trình tự thực hiện ngắt của vi điều
khiển t thúc lệnh hiện tại trong chương trình chính của vi
B1: Kế
điều khiển và lưu địa chỉ của lệnh kế tiếp vào ngăn xếp.
B2: Lưu lại trạng thái hiện hành của tất cả các ngắt vào bên
trong.
B3: Nhảy tới một vị trí cố định trong bộ nhớ gọi là bảng vecto
ngắt, nơi lưu địa chỉ của trình phục vụ ngắt
B4: Nhận địa chỉ từ bảng vecto ngắt rồi nhảy tới địa chỉ đó và
bắt đầu thực hiện trình phục vụ ngắt cho tới lệnh cuối cùng.
B5: kết thúc trình phục vụ ngắt và vđk trở về đúng vị trí mà
nó bị ngắt lúc trước sau nạp địa chỉ lệnh cần làm kế tiếp từ
ngăn xếp và thực hiện lệnh này.
- Bài 5: NGẮT NGOÀI (INT)
III>Các Ngắt Của 8051 :
Ng¾t Cê đÞa chØ Thứ tự
vector ngắt
Ng¾t ngoµi 0 IE0 0003H 0
Bé ®Þnh thêi 0 TF0 000BH 1
Ng¾t ngoµi 1 IE1 0013H 2
Bé ®Þnh thêi 1 TF1 001BH 3
Port nèi tiÕp RI hoÆc TI 0023H 4
Bé ®Þnh thêi 2 TF2 hoÆc 002BH 5
EXF2
- Bài 5: NGẮT NGOÀI (INT)
IV>Các Thanh Ghi Sử Dụng Cho Ngắt
Ngoài
1.Thanh Ghi Cho Phép Ngắt IE (interrupt enable)
EA -- ET2 ES ET1 EX1 ET0 EX0
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.
- Bài 5: NGẮT NGOÀI (INT)
ET2 ( 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 5: NGẮT NGOÀI (INT)
2.Thanh Ghi Thiết Lập Chế Độ Ngắt(TCON):
TF1 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 5: NGẮT NGOÀI (INT)
IE1 ( 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ý
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
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ý
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 5: NGẮT NGOÀI (INT)
Như vậy từ 2 thanh ghi trên , để sử dụng ngắt INT0
(ngắt theo mức ta sẽ phải khởi tạo như sau):
void khoi_tao()
{
P3_2=1; // khai báo chân lấy tín hiệu
EA=1; // cho phép ngắt toàn cục
EX0=1; // cho phép ngắt ngoài 0
}
- Bài 5: NGẮT NGOÀI (INT)
V>Chương Trình Phục Vụ Ngắt:
Void Name (void) interrupt x ( x là số thứ thực của ngắt )
{
// chuong trinh phuc vu ngat
}
- Bài 5: NGẮT NGOÀI (INT)
Như Vậy Các Bước Để Sư Dụng Ngă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
- Bài 5: NGẮT NGOÀI (INT)
VI>Bài Tầp Thực Hành:
B1 :Dùng ngắt ngoài INT0 để nháy Led1( P1_0) 5 lần
khi công tắc tại chân P3_2 được nhấn ; chương trình
chính nháy liên tục Led2 (P1_1) (Viết cho cả ngắt theo
mức và theo sườn sau đó so sánh kết quả)
- Bài 5: NGẮT NGOÀI (INT)
#include
void delay(long time)
{
long n;
for(n=0;n
- Bài 5: NGẮT NGOÀI (INT)
void ngat() interrupt 0
{
int i;
for(i=0;i
- Bài 5: NGẮT NGOÀI (INT)
B2 :Dùng ngắt ngoài INT0 :khi nhấn công tắc P3_2 sẽ
nháy Led1 và nháy cho đến khi nhấn công tắc P3_2 lần
2 ; lặp lại quá trình trên . Trong hàm main sẽ liên tục
nháy một con Led khác
- Bài 5: NGẮT NGOÀI (INT)
B3 :Dùng ngắt ngoài INT0 và 4 công tắc ở các chân P3_0, P3_1
,P3_2 , P3_3 :khi nhấn công tắc P3_2 sẽ nhảy vào ngắt và liên tục
kiểm tra các công tắc P3_1 và P3_0 và P3_3 . Khi nhấn P3_4 sẽ
chọn 2 Led đầu của Led 7_Seg để hiển thì dữ liệu , nhấn P3_4
lần 2 sẽ chọn 2 Led sau (lặp lại quá trình trên) .Khi chọn 2 Led
đầu :nếu P3_0 được nhấn sẽ tăng một biến từ 0 đến 59 (quay
vòng giá trị) còn nếu P3_1 được nhấn sẽ giảm giá trị từ 59 xuốn
0 (quay vòng giá trị) hiển thì ra 2 Led được chọn ; Khi chọn 2
Led sau :nếu P3_0 được nhấn sẽ tăng một biến từ 0 đến 23
(quay vòng giá trị) còn nếu P3_1 được nhấn sẽ giảm giá trị từ 23
xuống 0 (quay vòng giá trị) hiển thì ra 2 Led được chọn (chỉ
thoát khỏi ngắt khi nhấn công tắc P3_2 lần nữa) sau đó sẽ cho gi
trị tự tăng như thực tế (chưa quan trọng thời gian chính xac)
nguon tai.lieu . vn