شرح البرنامج
كما نرى فى البرنامج أننا استخدمنا المقاطعة لحساب الزمن حيث أن المقاطعة تعتبر برنامجا فرعيا يتم تشغيله بناء على الغرض المخصص له ،
وهنا المقاطعة هى للتايمر زيرو ومادمنا ذكرنا التايمر زيرو فنحن سنستخدم هذه المقاطعة لحساب الزمن وسنضبط الإعدادات لواحد ثانية وسنقوم بعد ذلك بالنظر إلى بت العلم ( خانة الإعلام عن اكتمال التايمر زيرو) وعندها سنقوم باتخاذ اجراء مرور ثانية والإجراء هنا هو زيادة خانة الثوانى بمقدار واحد وعند الإكتمال 59 يصبح الرقم 00 ثم يزيد الدقائق بمقدار واحد بنفس النظام حتى 59 تصبح 00 وعندها تزيد الساعات بمقدار واحد صحيح حتى 23 وبعدها تكون 00 وبذلك نتلافى استخدام الأمر تأخير ( (delay_ms(1000 ) ثم زمن اجراء تعليمة البحث عن فعل شرط ( IF ) وزمن اجراء كل تعليمة مهما كان زمن قصير فهو سيأخذ من الزمن الحقيقى للساعة ولن تكون دقيقة لذلك فنحن بحاجة لبرنامج المقاطعة ،
كود:
unsigned long sec, cnt, show;
هذه الكلمات هى كلمات عشوائية اخترناها لتكون متغيرات من المدى الكبير
كود:
void interrupt(){
if(intcon.f2==1){intcon.f2=0;cnt++ ;tmr0 = 132;}
}
هذا هو برنامج المقاطعة
فيه يتم البحث هل البت 2 والمسئول الإعلام بامتلاء التايمر زيرو ومعناها مرور واحد ثانية وعندها سيقوم الجواب لهذا الشرط بمسح هذا البت وذلك عن طريق وضع صفر فيه ثم نجد بعد ذلك المتغير
cnt
سيزيد بمقدار واحد صحيح
ويجب أن نعلم أننا الآن دخلنا لبرنامج المقاطعة هذا بسبب أن التايمر زيرو صفرا أو امتلئ وأصبح صفر ولذلك دخلنا لبرنامج المقاطعة وقمنا بإجراء الخطوات أو التعليمات السابقة والآن جاء دور التعليمة التالية
وهذه التعليمة نطلب فيها وضع القيمة 132 داخل سجل التايمر زيرو
ثم ينتهى بذلك برنامج المقاطعة
يجب أن نعلم أن التايمر زيرو يزداد طالما المذبذب الذى يمد المتحكم بالنبضات يعمل أو بمعنى آخر أن التايمر زيرو لم ولن يتوقف عن العمل لأنه مرتبط بالمذبذب وليس بطرف خارجى لأننا يمكننا أن نربطه مع طرف خارجى خاص بذلك ولكن هنا هو مرتبط مع المذبذب ويجب أن نعلم أيضا أنه كلما اكتمل بالعدد 255 سيعود للصفر مثله مثل أى سجل يتكون من ثمانى بتات وعندها سيعود للصفر كما قلنا محدثا المقاطعة وكما رأينا أننا بنضع رقم 132 وذلك ليبدأ سجل التايمر زيرو من عند الرقم 132 وهذا يعنى أننا سنبدأ العد من الرقم 132 إلى الرقم 255 أى أننا سنعد 123 مرة حتى يكتمل التايمر زيرو
كود:
trisb=0xc0; portb=0;trisa=0xE0;porta=0xff;
اعداد المداخل والمخارج وإطفاء قطع السيفن سيجمنت عن طريق اغلاق ترانزستورات الإشعال
اعدادات الأوبشن ريجستر أو مسجل الوظائف بالقيمة التالية
10000100
وهذا يعنى أننا سنستخدم المقسم
1:32
وبقسمة ربع تردد الكريستالة ال
4MHz
وهو 1000000
سنقسمه على 32 على سبيل المثال واخترت الرقم هذا لأن الناتج رقم صحيح وهو
1000`000 / 32 = 31250
والآن سنقسم الناتج على رقم مناسب من بين 256 و 1
بحيث أن الناتج يكون صحيحا واخترت على سبيل المثال الرقم
125
والآن
الناتج من آخر عملية وهو 31250
31250 / 125 = 250
إذن الناتج رقم صحيح 250
والآن نفهم الآتى
أن التايمر زيرو سيحمل بالقيمة 132 ليقوم بالعد حتى 255 أى سيتحرك بعدد 124 نبضة حتى يعوود للصفر ونكرر الموضوع هذا 32 مرة وهذا هو الرقم المختار من الجدول الخاص بتقسيم التايمر زيرو وكل هذا سيظل يتكرر كام مرة ؟؟؟
250
وهذه النتائج كما سبق فى العمليات الحسابية المذكورة
والآن عندنا خلال البرنامج يمكننا ببساطة عمل تكرار لعرض القيم على شاشة العرض أو وحدات العرض بقيم المتغيرات للثوانى والدقائق والساعات حتى يتم وصول
cnt
إلى الرقم 249 وهذا يعنى 250 خطوة تكرار للمقاطعة وهى بذلك تعنى مرور زمن واحد ثانية
أرجو أن نكون قد استوعبنا هذه الجزئية الهامة جدا وهى درس عملى لحساب الزمن بدقة بالغة جدا وغير تقريبية وكيفية التحكم فى إختيار زمن واحد ثانية وبنفس الطريقة ربما نحتاج لأزمنة أخرى فى برامج مختلفة الأغراض ،