عرض مشاركة واحدة
  #2  
قديم 09-27-2011, 05:16 AM
 
دعنا نفعل ذلك بالمترجم 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 والمقاطعة كما فى حالة نظام المؤقت .
__________________
angel4angel4angel4angel4angel4
رد مع اقتباس