المقاطعات في المتحكمات الدقيقة (Interrupts)

المقاطعات هي أحداث داخلية أو خارجية تجعل المتحكم الدقيق يقطع تنفيذ تسلسل البرنامج الحالي و تنفيذ تعليمات برنامج آخر يسمى برنامج خدمة المقاطعة أو

(Interrupt Service Routine (ISR.إذن مهمة المقاطعة هي التأكد من أن المعالج يستجيب بسرعة للأحداث الهامة. عند الانتهاء من البرنامج المقاطع، فإن المتحكم الدقيق يعود حيث كان في البرنامج الأصلي ليتم تنفيذه كأن شيئا لم يحدث.

أنواع المقاطعات :

المقاطعات نوعان :

  1. مقاطعات برمجية Software Interrupt و من أمثلتها استثناء حسابي كالقسمة على صفر، انقطاع التيار الكهربائي أو إنتهاء زمن مِؤقتة
  2. مقاطعات خارجية  Hardware Interrupt و من أمثلتها التغير في حالة المداخل للمتحكم أو وروود معلومة عبر قناة الاتصال التسلسلي.

أهداف المقاطعات

  • السماح للبرنامج بالرد على الأحداث عند حدوثها
  • السماح للبرنامج بتجاهل الأحداث حتى تحدث

المقاطعات في أردوينو

توفر المتحكمات الدقيقة  ATmega168 / 328 (أي في اردوينو أونو / نانو / دوميلانوف)، منفذين INT0 و INT1، و هي موصولة بالمخرجين  2 و 3 في لوحة أردوينو. يمكن أن تضبط هذه المقاطعات عند ارتفاع أو إنخفاض في حافة الإشارة أو على المستوى المنخفض للإشارة.

استعمال المقاطعات في أردوينو

يتم استخدام متغيرات شاملة  لتمرير البيانات بين برنامج خدمة المقاطعة والبرنامج الرئيسي.

للتأكد من أن المتغيرات المشتركة بين إسر والبرنامج الرئيسي يتم تحديثها بشكل صحيح، تُعرف على أنها (volatile).

“volatile” هي تعليمة من برنامج “C”  هذا يخبر مُصرف أو مترجم أردوينو أن هذه المتغيرات قد تتغير في أي وقت، وبالتالي يجب على المُصرف أو مترجم أردوينو إعادة تحميل المتغير كلما قمت بالإشارة إليه، بدلا من الاعتماد على نسخة قد تكون موجودة في سجل المتحكم الدقيق.

كيف تستخدم المقاطعات؟

  1. تكتب تعليمات خدمة المقاطعة (دالة خدمة المقاطعة). و الذي ينادى عند حدوث مقاطعة.
  2. تخبر المعالج متى تريد أن تنطلق المقاطعة.

التعليمة attachInterrupt

عمل هذه التعليمة هو الاخبار عن الرغبة في استعمال المقاطعة على منفذ معيّن.

(attachInterrupt(digitalPinToInterrupt(pin), ISR, mode

أين:

Pin : رقم المنفذ (2 أو 3 في حالة لوحة أردوينو أونو)

ISR : دالة خدمة المقاطعة

Mode : الوضع أو صيغة المقاطعة، و التي تحدد كيفية عمل المنفذ لتأدية المقاطعة. يدعم اردوينو أونو أربعة أوضاع المقاطعة:

 

  •   “RISING”  الذي ينشط المقاطعة على حافة ارتفاع إشارة المنفذ
  •   “FALLING”  الذي ينشط على حافة النزول لإشارة المنفذ،
  •   “CHANGE”  الذي يستجيب إلى أي تغيير في قيمة إشارة المنفذ
  •   “LOW”  الذي يحفز أي وقت تكون فيه إشارة المنفذ في الحالة الدنيا.

مثال

فيما يلي برنامج بسيط لإظهار كيفية برمجة المقاطعات في أردوينو.

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}

1 تعليق

اترك لنا تعليق

لن يتم نشر بريدك الالكتروني في العلن.


*


أثبت أنك لست آلة *