Tìm trên dientuvietnam.net thấy có bài nói về cái này của bác CHIBANG nhưng đọc mà vẫn chưa hiểu:
http://dientuvietnam.net/forums/show...p?t=831&page=3
Cho 3 ngắt 1,2,3; làm thế nào để nếu đang thực hiện ngắt i mà có ngắt j <i xẩy ra thì phải phục vụ ngắt j ngay, CHIBANG cho đáp án là:
Trong hàm ngắt, viết như sau:
Ngắt_1()
{
//Chèn mã lệnh: disable ngắt 1,2,3 tại đây
GIE=1;
//Chèn mã lệnh trình phục vụ ngắt 1
}
Ngắt_2()
{
//Chèn mã lệnh: disable ngắt 2,3 tại đây
GIE=1;
//Chèn mã lệnh trình phục vụ ngắt 2
}
Ngắt_3()
{
//Chèn mã lệnh: disable ngắt 3 tại đây
GIE=1;
//Chèn mã lệnh trình phục vụ ngắt 3
}
Như ở trong ngắt 1, đầu tiên cấm ngắt 1,2,3; sau đó cho phép tất cả các ngắt (GIE = 1), rồi thực hiện ngắt 1. Nếu đang thực hiện ngắt 1 mà có ngắt 2 hoặc 3 nhảy vào thì điều j sẽ xảy ra???
Mong các cao thủ chỉ cho con đường sáng!
Lưu ý là áp dụng cho Pic16 mọi người nhé!