السلام عليكم
أخي ابوزكوور :
في انتظار التكملة من الاخوة المهتمين ببرمجة الميكروسي ..تفضل هذه بداية أتمنى ان تساعدك ..
بالعودة إلى البرنامج الأصلي المعمول ب PIC16F84A (هنا)
يتضح إن الخاصية المطلوبة (أن يتوقف العد عند أعلى قيمة تصاعديا وأدنى قيمة تنازليا) مشروطة بإعداد المنفذ A كخرج
وإسناد قيم توقف العد له في كل حالة (الصعود و النزول) ..
من هنا كان لابد من إضافة التعليمات المشابهة الخاصة بالمنفذ "أ" إلى برنامجك ب PIC16F630 ..
هذه الإضافة كانت ضرورية لكنها لم تعط نتيجة فكان لابد من الرجوع الى الداتا شيت ..
في الداتا شيت نقرأ ان أطراف المنفذ A متعددة الوظائف:
1- المنفذ A ذو وظيفة مزدوجة: ادخال رقمي digital أو تناظري analog فهو يتوفر على مقارن مثل PIC16F62x
ينبغي تحييده بالأمر المعروف :
Cmcon = 0x07
2- بعض الأطراف تتحول إلى نهايات للمذبذب إذا تم اختياره كمذبذب خارجي للتمكين من اضافة اعناصر الضرورية ..
اخترت المذبذب الداخلي فزالت هذه المشكلة : كل الأطراف A ( تقريبا) اصبحت I/O ..
كل هذه التعديلات لم تعط نتيجة كاملة ك
فقط العد التنازلي كان يقف عند الصفر ويحقق المطلوب ..أما العد التصاعدي فكان لا يريد التوقف ..
ما هي المشكلة؟
نلاحظ أولا في بروتوس ان RA3 لا يفعل ابدأ (يبقة بلون رمادي )
من أجل ذلك لابد من عودة للداتا شيت للتعرف أكثر على طبيعة هذا الطرف في المنفذ "أ"
حينها سنقرأ معلومة مهمة :
3.2.3.4 RA3/MCLR/VPP
Figure 3-3 shows the diagram for this pin. The RA3 pin is configurable to function as one of the following
a general purpose input
as Master Clear Reset
معنى هذا ان A3 لا يمكن أن تكون مخرجا فقط مدخل..
لذلك فإن العدد 15 (1111) لا يمكن ان يظهر على المنفذ" أ" وبتوسع أكبر كل الأعداد التي تحتاج القيمة الثنائية "1" في البيت 3bit من المنفذ" أ" لن تنفع..
الحل اما حصر العد الاعلى في رقم لا يحتاج "1" في البيت 3bit من المنفذ" أ"
او البحث عن طريقة أخرى نبتعد بها عن شرط عمل البرامج بدون الحاجة الى المنفذ "أ" إعداد متغير داخلي بدل المنفذ أ مثلا ..
والى هنا انتهى دور الاسمبلي وفلوكود وسيبدا دور المهتمين بالميكروسي ..
ملف التجارب:
http://filaty.com/f/905/34356/new.rar.html