Ví dụ vừa điều khiển robot chạy vừa đọc được cảm biến, encoder; vừa hiển thị vừa đọc được dữ liệu từ thiết bị khác chuyển đến… Ngắt ngoài trên PIC18F4520: là ngắt gây ra bởi sườn âm hoặc
Trang 1Bài giảng: Ngắt ngoài
I Mục tiêu
- Khái niệm về ngắt; ngắt ngoài trên PIC18F4520
- Cách lập trình sử dụng ngắt
II Nội dung
II.1 Khái niệm về ngắt: Là tạm thời dừng công việc hiện tại và chuyển sang thực
hiện một nhiệm vụ khác sau đó lại quay lại thực hiện tiếp công việc cũ (đang thực hiện dở)
Ví dụ: Ví dụ khi bạn đang ăn cơm, có một cuộc điện thoại khẩn cấp gọi đến bất ngờ, bạn phải dừng bữa ăn và nghe xong cuộc điện thoại, sau đó quay lại ăn cơm tiếp Tham khảo thêm:
https://tapit.vn/qua-trinh-thuc-hien-ngat-cua-vi-dieu-khien-mcu-interrupt-processing/
https://en.wikibooks.org/wiki/Microprocessor_Design/Interrupts
Như vậy với khối xử lý ngắt, vi điều khiển sẽ trở nên “đa nhiệm” hơn Ví dụ vừa điều khiển robot chạy vừa đọc được cảm biến, encoder; vừa hiển thị vừa đọc được dữ liệu
từ thiết bị khác chuyển đến…
Ngắt ngoài trên PIC18F4520: là ngắt gây ra bởi sườn âm hoặc sườn dương đưa đến chân INT0(RB0) hoặc INT1(RB1) hoặc INT2(RB2)
Sườn âm:
Sườn dương:
II.2 Cách lập trình sử dụng ngắt
Các bit liên quan:
Trang 2- Bit GIE_GIEH: Giống như van tổng Khi khóa van (GIE_GIEH=0) các van con khóa hay mở đều không có nước Khi mở van (GIE_GIEH=1) nếu van con nào mở thì van đó sẽ có nước Như vậy để sử dụng ngắt ngoài cần viết lệnh: INCONbits.GIE_GIEH=1
- Các bit INT0IE, INT1IE và INT2IE giống như các van con Khi GIE_GIEH=1, nếu muốn cho phép ngắt ngoài INT0 cần viết lệnh: INCONbits.INT0IE=1
- Các bit INTEDG0, 1 và 2: Cho phép đặt cách tác động ngắt bằng sườn âm hoặc dương Ví dụ muốn tạo ngắt bằng sườn âm trên chân INT0 sẽ viết:
INCON2bits.INTEDG0=0
- Các bit INT0IF, INT1IF và INT2IF: Để xác định ngắt đến từ chân nào Ví dụ nếu INT0IF=1 nghĩa là ngắt đến từ chân INT0 Để có thể gây ngắt ở các lần 2, 3… các bit này cần xóa ở chương trình con phục vụ ngắt
Lập trình sử dụng ngắt:
1 Copy khung chương trình sử dụng ngắt (trong tài liệu tra cứu)
2 Chèn vào chương trình chính:
- Khởi tạo các PORT (ADCON1, TRIS)
- Set (gán bằng 1) bit ngắt toàn cục INTCONbits GIE_GIEH=1;
Trang 3- Set bit cho phép nguồn ngắt tương ứng: INTCONbits.INT0IE hoặc
INTCON3bits.INT1IE hoặc INTCON3bits.INT2IE
- Chọn ngắt bằng sườn âm bằng cách xóa các bit tương ứng:
INTCON2bits.INTEDG0=0 hoặc INTCON2bits.INTEDG1 =0 hoặc
INTCON2bits.INTEDG2=0
- Các lệnh theo đề bài
3 Chèn vào CTCPVN:
- Xóa cờ ngắt tương ứng: INTCONbits.INT0IF=0 hoặc INTCON3bits.INT1IF=0 hoặc INTCON3bits.INT2IF=0
- Các lệnh theo đề bài
TIPS: Để nhớ được các bit, các thanh ghi như bảng trên là rất khó Vì vậy cần nhớ từ khóa và sử dụng “Tài liệu tra cứu” Các từ khóa cần nhớ bao gồm: GIE, INT0IE, INT1IE, INT2IE, EDG0, EDG1, EDG2, INT0IF, INT1IF, INT2IF
Ví dụ muốn tra tên đầy đủ của bit INT0IE là gì và thuộc thanh ghi nào có thể
gõ thừ khóa INT0IE: