دعنا نفعل ذلك بالمترجم mikroC : - فى هذا البرنامج يتم إعداد المؤقت TMR0 كمؤقت ويتم تخصيص prescaler له .
- إعلان عن متغير نوع unsigned باسم cnt
unsigned cnt; // Define variable cnt
- روتين المقاطعة : يتعرف علية المترجم من صيغته void interrupt() { ومحتواه يقوم به المبرمج وينص على :
عند حدوث مقاطعة (طفحان فى المؤقت) يتم تزايد المتغير بواحد cnt++; . ثم يسترجع سجل المؤقت TMR0 قيمته الابتدائية TMR0 = 155; . إعادة التهيئة بجعل الخانة T0IE (تمكين المقاطعة ) فى الحالة set والخانة T0IF (علم المقاطعة) فى الحالة clear بالصيغة INTCON = 0x20; البرنامج : - البرنامج كالعادة يبدأ بالدالة الرئيسية void main() {
- الإعدادات :
# تخصيص prescaler بالقيمة(1:32) ( أى القسمة على 32) للموقت TMR0 : OPTION_REG = 0x04;
# وضع قيمة ابتدائية 155 فى سجل المؤقت TMR0 لكى يقوم بالعد من 155 إلى 255 : TMR0 = 155;
# تمكين المقاطعة بالمؤقت TMR0 : INTCON = 0xA0;
فى حالة إعداد المؤقت كعداد يكون البرنامج كما يلى : باختصار : لكي نتمكن من استخدام TMR0 بشكل صحيح فمن الضروري : الخطوة رقم 1 : اختيار النظام select mode :- يتم اختيار نظام المؤقت بواسطة الخانة T0CS للسجل OPTION_REGحيث :
T0CS: 0=timer و T0CS: 1=counter- عند استخدامه ينبغي تخصيص prescaler للمؤقت / العداد بمسح الخانة PSA للسجل OPTION_REG. ويتم تحديد معدل prescaler باستخدام الخانات PS2 - PS0 للسجل نفسه.
- عند استخدام المقاطعة، ينبغي تحديد set الخانات GIE وTMR0IE للسجل INTCON.
الخطوة رقم 2 : القياس والعد Measuring and Counting لقياس الزمن :- يتم عمل تصفير reset للسجل TMR0 أو وضع قيمة معروفة به .
- يتم قياس الزمن المنقضى (بالميكروثانية عند استخدام كريستال 4MHz) بقراءة السجل TMR0
- تتحول خانة علم المقاطعة للمؤقت TMR0IFبالسجل INTCON تلقائيا إلى حالة set عند كل طفحان overflow يحدث بالسجل TMR0 إذا كان ممكن لحدوث مقاطعة .
ولقياس عدد النبضات :- يتم اختيار قطبية النبضات المراد قياسها على الطرف RA4 من الخانة TOSE بالسجل OPTION_REG :
T0SE: 0=positive pulses T0SE: 1=negative pulses- يمكن قياس عدد النبضات من السجل TMR0 . يستخدم كل من prescaler والمقاطعة كما فى حالة نظام المؤقت .