الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الانترابت لبوابات 4 الي 7 وعمل disable لاحداها

مغلق
بدأه فارس2005 في 24 نوفمبر 2005 · 3 رد · 711 مشاهدة · في الميكروكنترولر (المتحكم) و الدوائر الرقمية و المنطقية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

من خصائص ال pic16f84 وكما يعلم الجميع تفعيل external interrupt للبورتات 4 الي 7 ولكن السؤال المطروح هل يمكن ان أوقف استخدام

الانترابت للبوابة 4 و 5 وافعل الانترابت للبوابة 6 و 7 ؟؟؟ علي فرض اريد انترابت فقط من بوابتين والبوابتين الاخريين أستخدامها ك inputs يدخل منها بيانات لغرض معين

#2

المقاطعه تفعل للمجموعه كلها وليست لكل بيت على حدى

في كود المقاطعه يمكنك اختبار القيمه من المنفذ وتحدد لو التغيير حدث في الأطراف التي لا تقصد بها مقاطعات تخرج من المقاطعه وتكمل البرنامج , ولو كان التغير في الأطراف التي تقصدها تنفذ باقي المقاطعه حسب رغبتك

طبعا تحتاج لحفظ قيمة الأطراف التي تقصد بها المقاطعات كي تختبر اذا كان التغير فيها أم في غيرها

بمعنى أوضح , الفكره ليست امكانيه في الميكرو لكنها حل برمجي , اخترع فيه زي ما تحب

#3

اذا كان حل العملية حل برمجي .... طيب خلينا نجرب كمثال عمل فلاش للبورت RB0 والمقاطعة للبوابات ال RB4:7

عند حدوث مقاطعة ندخل في الروتين ونختبر البورت 7 ان كان clear نجتازها ونضيئ البورت RB3

ولكن في كل الاحوال لابد من الدخول الي روتين الانترابت حتي وان اردنا أهمل بورت من البورتات الاربعة يعني البورتات الاربعة

لابد من الدخول الي روتينها في كل الاحوال ؟؟؟ كان قصدي اريد ان اجعل منهم بورتين يدخلان في طور الانترابت والاخرين يعملان كما لو كانا

قبل تعريفهم في INTCON علي انهمها بورتان عاديان اذا حدث لهما trigger لا يتأثران ولا يدخلان الي روتين الانترابت

       org 00h
       goto main
       org 04h
       goto int

main   bsf 0bh,7
       bsf 0bh,3
       movlw 00h
       bsf 03h,5
       movwf 86h
       bcf 03h,5
       movwf 06h
flash  bsf 6h,0
       bcf 6h,0
       goto flash 
       

int    bcf 0bh,0
       btfsc 0bh,7
       bcf 06h,7
          
      bsf 06h,3
       retfie

        end
#4
اقتباس
ولكن في كل الاحوال لابد من الدخول الي روتين الانترابت حتي وان اردنا أهمل بورت من البورتات الاربعة يعني البورتات الاربعة

لابد من الدخول الي روتينها في كل الاحوال ؟؟؟ كان قصدي اريد ان اجعل منهم بورتين يدخلان في طور الانترابت والاخرين يعملان كما لو كانا

قبل تعريفهم في INTCON علي انهمها بورتان عاديان اذا حدث لهما trigger لا يتأثران ولا يدخلان الي روتين الانترابت

لا تسمح اعدادات المتحكم بم تقصد , لهذا تحل برمجيا , أعد قرائة الداتا شيت لترى أنه يقول ان هناك نوعين من المقاطعات الخارجيه

1 - RB0/INT - الانتقال من حاله الى اخرى حسب تحديدك أنت (من صفر الى واحد أو العكس)

2 - RB4:7 - التغير في قيمة هذه الأطراف (مجموعه واحده غير قابله للفصل)

لو كان يقصد ما تريد لكتبها بهذه الطريقه

1 - RB0/INT

2 - RB4

3 - RB5

4 - RB6

5 - RB7

وكان كتب أنه عنده خمس مصادر للمقاطعه الخارجيه , وطبعا كان وصف كيفية تفعيل كل واحده وغلق الاخرى , و كان هلل عليها في الداتاشيت للصبح

وللعلم الكود الذي أرفقته لا يصلح لتحديد المقاطعه عند تغير الطرف RB7 فقط , لأنه سيتم تنفيذه وقتما حدثت استدعاء لكود المقاطعه نتيجة التغيير في أي طرف غيره

حاول أكثر في فلترة المقاطعه على طرف معين (برمجيا)

هذا الموضوع مغلق.

مواضيع مشابهة