Trong Vi điều khiển PIC có nhiều nguồn ngắt. Để biết cụ thể ta có thể vào mục View >> Valid Interrupts . Khi đó một của sổ sẽ hiện ra liệt kê đầy đủ các nguồn ngắt của từng con PIC.
ngắt, khi có ngắt tương ứng xảy ra thì nó sẽ nhảy đến vị trí đó . Lấy ví dụ khi ta muốn xử lý ngắt ngoài, hàm sẽ được viết như sau:
#INT_EXT
EXT_ISR() {
mode++;
if (mode==9) mode = 0;
}
// End of INT
void program1();
void program2();
void program3();
void program4();
void program5();
void program6();
void program7();
void program8();
void main() {
trisd = 0x00;
trisb = 0xFF;
portd=0xff;
enable_interrupts(int_EXT);
ext_int_edge(H_TO_L); // Chọn ngắt theo sườn âm
enable_interrupts(GLOBAL);
mode = 0;
while (1) {
switch(mode) {
case 1: program1(); break;
case 2: program2(); break;
case 3: program3(); break;
case 4: program4(); break;
case 5: program5(); break;
case 6: program6(); break;
case 7: program7(); break;
case 8: program8(); break;
}
}
}
void program1() {
PortD = 0x00;
delay_ms(250);
Portd = 0xFF;
delay_ms(250);
}
void program2() { // LED sáng chạy từ trái qua phải
temp = 0xFF;
for (i=0;i<=8;i++) {
portd = temp;
delay_ms(250);
temp >>= 1;
}
}
void program3() { // LED sáng chạy từ phải qua trái
temp = 0xFF;
for (i=0;i<=8;i++) {
portd = temp;
delay_ms(250);
temp <<= 1;
}
}
void program4() {
portd = 0xAA;
delay_ms(500);
portd = 0x55;
delay_ms(500);
}
void program5() {
Portd = 0x7E; delay_ms(150);
Portd = 0xBD; delay_ms(250);
Portd = 0xDB; delay_ms(150);
Portd = 0xE7; delay_ms(150);
Portd = 0xDB; delay_ms(150);
Portd = 0xBD; delay_ms(150);
Portd = 0x7E; delay_ms(150);
}
void program6() {
temp = 0xFF;
for (i=0;i<=8;i++) {
portd = temp;
delay_ms(250);
temp = temp >> 1;
}
}
void program7() {
Portd = 0xFE; delay_ms(150);
Portd = 0xFD; delay_ms(150);
Portd = 0xFB; delay_ms(150);
Portd = 0xF7; delay_ms(150);
Portd = 0xEF; delay_ms(150);
PortD = 0xDF; delay_ms(150);
Portd = 0xBF; delay_ms(150);
Portd = 0x7F; delay_ms(150);
}
void program8() {
Portd = 0x7F; delay_ms(150);
Portd = 0xBF; delay_ms(150);
PortD = 0xDF; delay_ms(150);
Portd = 0xEF; delay_ms(150);
Portd = 0xF7; delay_ms(150);
Portd = 0xFB; delay_ms(150);
Portd = 0xFD; delay_ms(150);
Portd = 0xFE; delay_ms(150);
}