سهولة استخدام المقاطعات مع المترجم CCS-PIC-C :
المقاطعة هى مجرد , استثناء أو تغيير فى سريان أو "المقاطعة" فى عمل البرنامج نتيجة لمصدر أجهزة hardware خارجى أو داخلى .
المقاطعة , فى حقيقة الأمر هى "استدعاء دالة" يتولد بالأجهزة . والنتيجة هى أن المقاطعة سوف تتسبب بتوقف pause سريان تنفيذ البرنامج بينما يتم تنفيذ دالة المقاطعة , والتى تسمى روتين خدمة المقاطعة ISR . بعد انتهاء روتين خدمة المقاطعة مباشرة , سوف يتم أستأناف resume سريان البرنامج , ليستمر من حيث تمت مقاطعته .
تتوفر مصادر كثيرة للمقاطعة فى الميكروكونترولر PIC . كلما كبر الميكروكونترولر PIC , كلما كثرت المصادر المتاحة .
لإنشاء روتين خدمة مقاطعة ISR , الدالة التى تستدعى عن طريق نظام المقاطعة , يتم إعلانها عن طريق استخدام التوجيه #int_xxx. التوجيه #int_xxx يحدد أن الدالة التى تليه يجب أن تستدعى حينما يتم إطلاق المقاطعة "xxx" .
إسلوب برمجة المقاطعة مع المترجم CCS-PICC :
العناصر اللازمة :
علينا أولا النظر فى العناصر اللازمة للتعامل مع المقاطعات .
سوف تحتاج إلى :
· تمكين المقاطعات فى البرنامج بالدالة ‘enable_interrupts(level)’ . يتم ذلك على مستويين .
· المستوى الأول هو المستوى "العمومى" 'globale' , فكر فى هذا المستوى مثل مفتاح القدرة العمومى (الرئيسى) لمقاطعاتك بدون النظر لأى مقاطعات مفردة يمكن أن تعمل .
· المستوى الثانى هو المقاطعة الفردية وهى التى تلى التوجيه ‘int_xxxx’ . مع استمرار التفكير فى تمثيل مفتاح القدرة , يمكنك التفكير فى كل من المقاطعات المفردة مثل مفتاح التحويل والذى يحدد حالة البرنامج .
· لاحظ أنه يمكنك أيضا تعطيل المقاطعات فى البرنامج إذا كنت بحاجة إلى تنفيذ كود بدون المقاطعة , يمكن عمل ذلك بالدالة ‘disable_interrupts(level)’, تعطيل المستوى العمومى ‘global’ يترك المقاطعات الفردية فعالة .
الآن نحن بحاجة لمعرفة كيفية إعلان (تعريف) روتين خدمة المقاطعة ISR .
مع المترجم CCS-PICC يكون الأمر بسيط حقا , يمكنك استخدام توجيه قبل المعالج ‘ #int_xxxx’ حيث ‘ int_xxxx’ المقاطعة الفردية التى تستخدمها , تليها دالة معالجة المقاطعة . وهذه هى بساطة تعامل المترجم , فأنت لا تحتاج إلى حفظ واستعادة البتات, ومسح الأعلام , أو أى من الأشياء الأخرى التى قد تفعلها فى لغة الأسمبلى .
بعد هذه الجولة حول جميع العناصر المطلوبة من أجل المقاطعات , لنلقى نظرة على أمثلة لإشارة مقاطعة خارجية .
المقاطعة نتيجة تغير حالة أطراف الميكروكونترولر PIC16F877A RB (RB4-RB7)