المقاطعات : المقاطعة الخارجية عن طريق تطبيق نبضة على الطرف RB :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
المقاطعات : المقاطعة الخارجية عن طريق تطبيق نبضة على الطرف RB :
المقاطعات : المقاطعة الخارجية عن طريق تطبيق نبضة على الطرف RB :
سوف نستعرض هذا النوع من مصادر المقاطعة من خلال المثال التالى لبرنامج المقاطعة الخارجية :
الدائرة الكهربية :
فى هذا البرنامج سوف نبين الإعدادات الأساسية للمقاطعة .
• المهمة الأصلية للبرنامج هى إنشاء عداد ثنائى تصاعدى (متزايد) على خرج المنفذ Port D باستخدام العبارات output_d(x); x++; .
• يتم مقاطعة هذه المهمة عند الضغط على المفتاح الضاغط المتصل بالطرف RB0 ليصبح الطرف RB0 (الخاص بالمقاطعة الخارجية) فى الحالة المنخفضة ، وفقا للعبارة ext_int_edge(H_TO_L); ، مما يجبر البرنامج على تنفيذ روتين خدمة المقاطعة الخارجية void isrext() ، والذى يتسبب فى إضاءة جميع الليدات output_d(255); لمدة ثانية واحدة delay_ms(1000); . ثم بعد ذلك يتم استئناف المهمة الأصلية تلقائيا من عند نقطة توقف التنفيذ .
• عندما يتم كشف مقاطعة الطرف RB0 خلال الحلقة الرئيسية ، يتم حفظ السياق ( محتويات السجل الحالى) قبل تنفيذ روتين خدمة المقاطعة .
البرنامج :
سوف نستعرض هذا النوع من مصادر المقاطعة من خلال المثال التالى لبرنامج المقاطعة الخارجية :
الدائرة الكهربية :
فى هذا البرنامج سوف نبين الإعدادات الأساسية للمقاطعة .
• المهمة الأصلية للبرنامج هى إنشاء عداد ثنائى تصاعدى (متزايد) على خرج المنفذ Port D باستخدام العبارات output_d(x); x++; .
• يتم مقاطعة هذه المهمة عند الضغط على المفتاح الضاغط المتصل بالطرف RB0 ليصبح الطرف RB0 (الخاص بالمقاطعة الخارجية) فى الحالة المنخفضة ، وفقا للعبارة ext_int_edge(H_TO_L); ، مما يجبر البرنامج على تنفيذ روتين خدمة المقاطعة الخارجية void isrext() ، والذى يتسبب فى إضاءة جميع الليدات output_d(255); لمدة ثانية واحدة delay_ms(1000); . ثم بعد ذلك يتم استئناف المهمة الأصلية تلقائيا من عند نقطة توقف التنفيذ .
• عندما يتم كشف مقاطعة الطرف RB0 خلال الحلقة الرئيسية ، يتم حفظ السياق ( محتويات السجل الحالى) قبل تنفيذ روتين خدمة المقاطعة .
البرنامج :
- الكود:
// External interrupt RB0 low interrupts output count
#include <16F877A.h>
#use delay(clock = 4000000)
#int_ext // Interrupt name
void isrext() // Interrupt service routine
{
output_D(255); // ISR action
delay_ms(1000);
}
void main() //*******************
{
int x;
enable_interrupts(int_ext); // Enable named interrupt
enable_interrupts(global); // Enable all interrupts
ext_int_edge(H_TO_L); // Interrupt signal polarity
while(TRUE) // loop
{
output_D(x); x++ ;
delay_ms(100);
}
}
مواضيع مماثلة
» تطبيق على المقاطعة الخارجية : برنامج أضواء متحركة بنماذج متعددة :
» مثال بسيط الاستخدام المقاطعة الخارجية :
» مثال على المقاطعة الخارجية External interrupt : عداد تصاعدى
» طريقة استخدام الطرف RA4 كمخرج بالميكروكونترولر PIC16F84A
» برنامج مولد نبضات نبضة كل واحد ثانية :
» مثال بسيط الاستخدام المقاطعة الخارجية :
» مثال على المقاطعة الخارجية External interrupt : عداد تصاعدى
» طريقة استخدام الطرف RA4 كمخرج بالميكروكونترولر PIC16F84A
» برنامج مولد نبضات نبضة كل واحد ثانية :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى