السلام عليكم ورحمة الله وبركاته.
لقد كتبت هذا الكود على البك PIC16F887 وكان التردد 20ميجا:
لاحظ الأمر الذي بالمربع الأحمر.. لا فائدة منه لكن لا يعمل الكود على المحاكاه إلا به... حيث لا بد أن أكتب portb.f0 تساوي صفر أو port.f1 أو port.f2 حتى port.f7 بينما لو كتبت portb فقط يفشل الكود.. إذا جعلته بورت c أو d تفشل.
إذا مسحته تفشل المهمة على المحاكاة وعلى الواقع أيضا.. لكني جربته على الواقع مرة واحدة وليس عدة مرات مما يجعلني غير متأكد.
هذه صورة المحاكاة:
نسيت أضع في الصورة مقاومة رفع.
الكود سهل ويمكنك فهم وظيفته من نفسك لكني سأذكر بسرعة ما يحدث.
عند نجاح الكود فإنه عند الضغط على الزر تحدث مقاطعة ويتم تسجيل قيمة التايمر زيرو على بورت c بينما عند رفع الضغط تحدث مقاطعة ويتم تسجيل قيمة التايمر زيرو على بورتd
أما الفشل هو أن تحدث المقاطعة بالرغم أني لم أضغط على الزر.. فترى بورت c تتغير قيمته بسرعة فائقة مع أني لم أضغط على الزر.. جرب بنفسك وانظر العجب الذي ستراه وأخبرني بتفسير اللغز إن كنت تستطيع.
المشكلة أن كل شيء يمشي كما تقول الخطة بشرط وجود هذا الأمر الذي في المربع الأحمر الذي لا فائدة منه!!!