3. HOẠT ĐỘNG NGẮT
3.3. Khung chương trình sử dụng ngắt
- Chương trình không sử dụng ưu tiên ngắt:
//khai báo thư viện #include<p18f4520.h> #include<stdio.h> #include<delays.h> //cấu hình
#pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF
//khai báo tên chương trình con phục vụ ngắt (CTCPVN) void ngat_ngoai(void);
//Điểm đặt chương trình phục vụ ngắt có mức ưu tiên cao (vector 0008H) #pragma code uu_tien_cao = 0x08
// Nếu là chương trình phục vụ ngắt có mức ưu tiên thấp (vector 0018H): // #pragma code uu_tien_thap = 0x18
//Viết 1 chương trình con (có tên tùy chọn) để gọi tới CTCPVN void ngat_cao(void) { ngat_ngoai(); //gọi đến CTCPVN } //Điểm viết CTCPVN #pragma code
#pragma interrupt ngat_ngoai void ngat_ngoai(void)
//Noi dung cua CTCPVN {
//Kiểm tra bit cờ của nguồn ngắt thứ nhất, nếu = 1: //Xóa cờ của nguồn ngắt thứ nhất
//Các lệnh xử lý khi có ngắt từ nguồn thứ nhất //Kiểm tra bit cờ của nguồn ngắt thứ hai, nếu = 1: //Xóa cờ của nguồn ngắt thứ hai
//Các lệnh xử lý khi có ngắt từ nguồn thứ hai //Kiểm tra bit cờ của nguồn ngắt thứ n, nếu = 1: //Xóa cờ của nguồn ngắt thứ n
//Các lệnh xử lý khi có ngắt từ nguồn thứ n }
//Chương trình chính void main()
{
//Khởi tạo các thanh ghi liên quan //Các lệnh khác
}
- Chương trình có sử dụng ưu tiên ngắt:
//khai báo thư viện //cấu hình
//khai báo tên CTCPVN void ngat_uu_tien_cao(void); void ngat_uu_tien_thap(void);
//Điểm đặt CTCPVN có mức ưu tiên cao UTC, vector 0008H #pragma code uu_tien_cao=0x08
void ngat_cao(void) {
ngat_uu_tien_cao(); }
#pragma code
#pragma interrupt ngat_uu_tien_cao void ngat_uu_tien_cao(void)
{
//Kiểm tra bit cờ của nguồn ngắt UTC thứ nhất, nếu = 1. {
//Xóa cờ của nguồn ngắt UTC thứ nhất
//Các lệnh xử lý khi có ngắt từ nguồn thứ nhất }
{
//Xóa cờ của nguồn ngắt UTC thứ hai
//Các lệnh xử lý khi có ngắt từ nguồn thứ hai }
…
//Kiểm tra bit cờ của nguồn ngắt UTC thứ n, nếu = 1. {
//Xóa cờ của nguồn ngắt UTC thứ n
//Các lệnh xử lý khi có ngắt từ nguồn thứ n }
}
//Điểm đặt CTCPVN có mức ưu tiên thấp (UTT), vector 0018H #pragma code uu_tien_thap = 0x18
void ngat_thap(void) {
ngat_uu_tien_thap(); }
#pragma code
#pragma interrupt ngat_uu_tien_thap void ngat_uu_tien_thap(void)
{
//Kiểm tra bit cờ của nguồn ngắt UTT thứ nhất, nếu = 1. {
//Xóa cờ của nguồn ngắt UTT thứ nhất
//Các lệnh xử lý khi có ngắt từ nguồn thứ nhất }
//Kiểm tra bit cờ của nguồn ngắt UTT thứ hai, nếu = 1. {
//Xóa cờ của nguồn ngắt UTT thứ hai
//Các lệnh xử lý khi có ngắt từ nguồn thứ hai }
…
//Kiểm tra bit cờ của nguồn ngắt UTT thứ n, nếu = 1. {
//Xóa cờ của nguồn ngắt UTT thứ n
//Các lệnh xử lý khi có ngắt từ nguồn thứ n }
}
void main() {
… }