استخدام المقاطعة عند تغيير حالة الطرف PORTB.0 :
أفضل طريقة لفهم للمقاطعة عن تغيير حالة الطرف PORTB.0 هى دراسة مثال عملى لوميض ليد أحمر كل 200 ملى ثانية ، وعند تواجد مقاطعة خارجية ( مفتاح ضاغط) يتوقف البرنامج عن العمل ويقوم بتنفيذ البرنامج الفرعى للمقاطعة والذى يحتوى على إضاء ليد أخضر لمدة ثانية ، وبمجرد أن تعيد المقاطعة البرنامج إلى البرنامج الرئيسى إلى المكان الذى حدثت عنده المقاطعة .
الدائرة الكهربية :
البرنامج :
كود:
;Pin PORTB.0 interrupt program
Device = 16F628A
Xtal = 4
All_Digital True
Dim redLED As PORTB.1
Dim greenLED As PORTB.2
On Interrupt GoTo green ; in case there is an interruption to go green
INTCON = %10010000 ;Interrupt enable B0
PROG: ;main program
High redLED ;turn on the red LED
DelayMS 200
Low redLED
DelayMS 200
GoTo PROG ;keep this bond
Disable ;disables interrupts in the handler
green: ;the interrupt handler
High greenLED
DelayMS 2000
Low greenLED
INTCON = %10010000 ;Interrupt enable B0
Resume ;returns to the main program where integrated occurred.
Enable ;Enable interrupts handler after
End
كما ترى ، عند لحظة الضغط على المفتاح الضاغط ، يتم تلقائيا الخروج من مسار البرنامج الرئيسى والقيام بتنفيذ روتين خدمة المقاطعة المسمى green ، ينتهى هذا الروتين بعبارة RESUME والتى تعود مسار تنفيذ البرنامج إلى المكان الذى حدث عنده المقاطعة ، ومع ذلك يمكنك وضع RESUME PROG3 ، فى هذه الحالة يتم الرجوع إلى PROG3 وإهمال مكان المقاطعة .
يجب ملاحظة أن المقاطعة تحدث فقط عند تغيير حالة الطرف PORTB.0 من "0" إلى "1" ، لذلك يجب أن ندرك أنه عند الضغط على المفتاح الضاغط لا يتم توليد مقاطعة ، ولكن عند تحريره تتولد المقاطعة عند الحافة الصاعدة . لتغيير المقاطعة عند الحافة الهابطة أى عند التغيير من "1" إلى "0" ، نضيف بعد
INTCON =% 10010000 السطر التالى ، لتغيير البت INTEDG(bit6) بالسجل PTION_REG من الحالة الافتراضية (1) إلى الصفر (0) :
كود:
OPTION_REG.6=0 ; change bit 6 of the OPTION register, falling edge active to B.0