قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 20-09-2012, 08:14 PM المشاركة 1   
افتراضي الدورة الجديدة :الفصل الحادى عشر المقاطعات interrupts Twitter FaceBook Google+



الدورة الجديدة :الفصل الحادى عشر المقاطعات interrupts

المقاطعات هى أحداث مجدولة والتى تجعل الميكروكونترولر PIC "يعلق" برنامجه القائم على تنفيذه ويقوم بتشغيل جزء من برنامج (برنامج فرعى يسمى روتين المقاطعةinterrupt routine) مقترن بحدث .
عند اكتمال روتين المقاطعة يستمر PIC فى تنفيذ سريان البرنامج من عند نفس النقطة حيث التى كان قد علق عندها التنفيذ.



مصادر المقاطعة تختلف تبعا لنوع الميكروكونترولر . على سبيل المثال الميكروكونترولر PIC 16F877A له 15 مصدر للمقاطعة مثل :
  • المقاطعة بالمؤقت Timer0 عند حدوث طفحان بالمؤقت .
  • المقاطعة عند تغيير حافة النبضة الخارجية على الطرف RB0(تعرف بالمقاطعة الخارجية) .
  • المقاطعة عند وصول البيانات التسلسلية خلال الوحدة USART .
  • المقاطعة بالمحول من تناظرى لرقمى ADC عند انتهاء التحويل
وغيرها من المقاطعات .
مترجم الميكروسى برو يتضمن دالة سابقة التعريف من أجل تنفيذ المقاطعة , هذه الدالة هى "دالة أو روتين المقاطعة" وهى بالصيغة التالية :


كود:
void interrupt (void

يجب إعلان هذه الدالة قبل الدالة الرئيسية .
عند حدوث مقاطعة يتم استدعاء "دالة المقاطعة" تلقائيا عن طريق البرنامج , داخل هذه الدالة يجب تحديد ما هى المقاطعات التى يتم بدؤها وأعلام (معلمات - علامات) flags كل مقاطعة .
لإعداد المقاطعات يجب تفعيل البتات المناظرة بسجلات المقاطعة . فى الميكروكونترولر , على سبيل المثال , سجلات المقاطعة هى : INTCON, PIR1, PIR2, PIE1 , PIE2 . الشكل التالى يبين هذه السجلات يالميكروكونترولر PIC 16F877A :










لتنفيذ المقاطعات يجب اتباع الخطوات المناسبة للإعداد مع مرعاة ما يلى :
  • أولا يتم تفعيل المقاطعات المطلوب استخدامها عن طريق بت التمكينIEالمناسب مثل :
TMR0IE, INTE, RCIE وغيرها .
  • يجب عدم تمكين أعلام المقاطعات مثل :
TMR0IF, INTF, RCIF وغيرها .
· يجب تمكين مقاطعات الطرفيات عندما يتطلب ذلك , على سبيل المثال المقاطعات التابعة للسجلات :
PIE1 و PIE2.
· وأخيرا يتم تحديد set بت تمكين عموم المقاطعات : GIE .

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 20-09-2012, 08:20 PM المشاركة 2   
افتراضي


المثال التالى سوف يستخدم فى : المقاطعة باستقبال الاتصال التسلسلى , والمقاطعة بالمؤقت Timer 0والمقاطعة الخارجية . لهذا الهدف يمكنك مراقبة وتحليل كود المصدر للبرنامج التالى :


كود:
//1-declaration interrupt function. void interrupt ( void ) { //A-Declaration of variables used in interrupt function. char Data; //B-Evaluates whether the interrupt is triggered by Timer 0, TMR0IF if( INTCON.F2==1 ) { //It complements the bit value RB1. if(PORTB.F1==1) PORTB.F1=0; else PORTB.F1=1; // Turned off Timer 0 Flag. INTCON.F2=0; } //C-Evaluates whether the external interrupt is triggered. // INTF if( INTCON.F1==1 ) { //It complements the bit value RB2. if(PORTB.F2==1) PORTB.F2=0; else PORTB.F2=1; //It turns off the external interrupt flag. INTCON.F1=0; } //D-Evaluates whether the interruption triggered by serial reception. if( PIR1.F5 ) { //It reads the input data. Data = UART1_Read(); //Confirmation information is sent. UART1_Write_Text("Input data: "); //It sends the data received. UART1_Write(Data); UART1_Write(13); //ASCII code is sent enter. UART1_Write(10); //Sand sends carriage return code. //It reception apparatus for serial flag. PIR1.F5 = 0; } }
void main( void ) { //Ports are configured. TRISB = 0b00000001; PORTB = 0; //Activates the serial receive interrupt. PIE1 = 0b00100000; //Other interrupt sources are disabled . PIE2 = 0; //Turn off interrupt flags. . PIR2 = 0; PIR1 = 0; //Setting the Timer 0 to 65.535 m Sec OPTION_REG=0b11000111; //Configuring the serial port at 9600 bps. UART1_Init(9600); //Global interrupts are enabled, //for Timer 0, and external. INTCON = 0b11110000; while(1) //Infinite Loop. { } }















اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 20-09-2012, 08:22 PM المشاركة 3   
افتراضي


لمحاكاة هذا البرنامج ببرنامج إيزيس يتم جلب الأجهزة التالية :
16F877A, RES, BUTTON, LED-RED والوحدة الطرفية التخيلية والأوسليسكوب .
بعد تشغيل المحاكاة يجب التفاعل مع الوحدة الطرفية لإرسال بيانات , بالمفتاح الضاغط يجب أن تشاهد حالة الليد وخرج الأوسليسكوب وعرض شكل الموجة المربعة يتغير كل 65.535 msec , تبعا للمؤقت Timer 0 .
الدائرة الكهربية :


إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 11:41 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2024