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

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

asrock
:: مهندس ::
تاريخ التسجيل: Jul 2010
الدولة: jordan
المشاركات: 28
نشاط [ asrock ]
قوة السمعة:0
قديم 20-04-2012, 12:09 AM المشاركة 1   
افتراضي استفسار .. برنامج مقاطعة داخلية mikroc Twitter FaceBook Google+



السلام عليكم


اود ان استفسر عن كيفية انشاء برنامج مقاطعة داخلية في برنامجي..مقاطعة داخلية اي عند تحقق شرط معين و ليكن اختبار قيمة متحول عندها يوقف البرنامج و ينفذ برنامج المقاطعة ...و عندما ينتهي يعود الى البرنامج الرئيسي
بحثت في منتداكم القدير و وجدت درس عن كيفية التعامل مع المقاطعات .. و استخلصت التالي باستخدام TMR0 :و لكن لا ادري ان كان يوجد فيه خلل ما و خاصة كيفية استدعاء المقاطعة هنا او متى ستنفذ ؟!!
علما اني استخدم 16f877 و xtal:8MHz

كود:
void interrupt() {
           num ++;
	// here my instructions to be exectuted
    if(num >= 100) {
       num = 0;
           TMR0 = 0;
        INTCON = 0x20;   
      INTCON.f5=0;        
    }     
}

void main() {
OPTION_REG = 0x83;
INTCON = 0b10000000;
 ---
---
    if (my condition) {   // just condition such as variable variaty ...
       INTCON.f5=1;	// calling interrut .
    }
---


}
فـ ياريت اي احد لديه حلول لهذا الكود افادتي و جزاكم الله خيرا


التعديل الأخير تم بواسطة : asrock بتاريخ 20-04-2012 الساعة 12:15 AM
اعلانات

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 20-04-2012, 07:54 AM المشاركة 2   
افتراضي


استخدم مقاطعة B0 اسهل .. اليك الكود

كود:
void interrupt()
{
portc++;
intcon.f1=0;
}
void main()
{
trisc=0;portc=0;
loop:
intcon=0b10010000;

delay_ms(1000);
intcon=0;portc=0;
goto loop;
}

في هذا الكود عندما يتم ادخال اشارة الى B0 تحصل مقاطعة للبرنامج و يذهب الى البرنامج الفرعي void interrupt لينفذ ما بداخله ..
واي شرح اضافي برسم الخدمة

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

asrock
:: مهندس ::
تاريخ التسجيل: Jul 2010
الدولة: jordan
المشاركات: 28
نشاط [ asrock ]
قوة السمعة:0
قديم 20-04-2012, 11:01 PM المشاركة 3   
افتراضي


مشكور اخي حيدر

اود ملاحظتك ان مشروعي عبارة عن نظام ارسال و استقبال باستخدام RF modules هنا اقوم بالارسال اشارة من المرسل الى المستقبل كي تقوم دارة المستقبل و التي تحوي على مرسل ايضا بارسال بيانات اخرى الى دارة المرسل و التي تحوي على مستقبل ايضا

الاشارة تصل و هنا اريد برنامج مقاطعة لينفذ مقطع الارسال عند ورود هذه الاشارة (هذا ما اعرفه بالمقاطعة الداخلية) .. اي :
if (signal_received) {
call interrupt to send data
}

---------------
كذلك اخي لو تكرمت بسؤال اخر عن كيفية استخدام watchdog timer ..اعلم انه مسجل مؤقت يقوم بعمل ريست للمايكرو بزمن محدد .. اي كيف يمكنني ان استخدمه في mikroc

و لك جزيل الشكر اخي مرة ثانية


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 20-04-2012, 11:07 PM المشاركة 4   
افتراضي


اجعل المستلم على المنفذ b0 ...
و عند ورود اشارة من المرسل سوف تتم المقاطعة و يبدأ البرنامج بتنفيذ الكود الفرعي الذي يكون عادة قبل الكود الرئيسي ...

إضافة رد

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

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

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


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

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