باختصار وحدات (موديولات) المؤقت Timer Modules والمقاطعات مع الميكروكونترولر PIC18F2550 :
ملحوظة :
هذا الموضوع مقدمة لاستخدام شاشات السفن سيجمنت متعددة الأرقام عن طريق المقاطعة بالمؤقت .
يتضمن الميكروكونترولر PIC18F2550 أربع وحدات (موديولات) مؤقت :
TIMER 0, TIMER 1, TIMER 2 and TIMER 3 . سوف نتناول بناء وعمل كل مؤقت باختصار.
المؤقت TIMER 0 :
· يعمل المؤقت TIMER 0 فى كل من الوضع 8-bit والوضع 16-bit .
· يمكن توقيت المؤقت من مصادر ساعة خارجية أو داخلية .
· يتم توفير قاسم تردد سابق prescaler بحجم 8-bit لتقسيم تردد الساعة .
· يمكن إعلان المقاطعة عند حدوث تجاوز (طفحان – ملء) overflow المؤقت بحيث يتم توليد مقاطعة كلما حدث تجاوز .
وضع العمل 8-bit :
الشكل التالى يبين المخطط الصندوقى عند العمل فى وضع 8-bit :
· مدخل الساعة الخارجية هو الطرف T0CKI . يتم اشتقاق الساعة الداخلية عن طريق قسمة تردد المذبذب على (4) .
· يتم التحكم فى تشغيل المؤقت TIMER 0 عن طريق سجل الوظائف الخاصة T0CON . الشكل التالى يبين تعريف بتات السجل T0CON :
· يمكن اختيار قيمة قاسم التردد السابق prescaler بين (2) و (256) ، باستخدام البتات T0PS2:T0PS0 بالسجل T0CON .
· السجل TMR0L هو سجل المؤقت عندما يعمل فى الوضع 8-bit .
· السجل TMR0L يعد تصاعديا عند كل نبضة ساعة ويتجاوز overflow عندما يتغير العدد من (255) إلى (0) . يتم توليد مقاطعة بعد حدوث التجاوز ، إذا كان قد تم تمكين المقاطعة بالمؤقت .
· يمكن حساب الزمن لحدوث تجاوز باستخدام المعادلة التالية :
كود:
Time to overflow = 4 * Clock period * Prescaler * (256 - TMR0L)
حيث :
· الزمن لحدوث التجاوز Time to overflow بالملى ثانية ms .
· الفترة الزمنية للساعة Clock period بالملى ثانية ms .
· القيمة TMR0L هى القيمة الابتدائية المحملة ( من 0 إلى 255) على السجل TMR0L .
على سبيل المثال :
إذا افترضنا أن تردد الساعة 8MHz ، وأن قيمة قاسم التردد prescaler أختيرت لتكون (16) عن طريق تحديد البتات PS2:PS0 بالقيمة الثنائية (011) ، وأيضا على فرض أن سجل المؤقت يتم تحميله بالقيمة العشرية (100) ، عندئذ فإن الزمن لحدوث تجاوز يمكن حسابه كما يلى :
· أولا يتم حساب الفترة الزمنية (الزمن الدورى) للساعة :
كود:
Clock period is T = 1/f = 1/8 = 0.125 μs
· ثم حساب الزمن لحدوث تجاوز :
كود:
Time to overflow = 4 * 0.125 * 16 * (256 - 100) = 1248 μs
لذلك ، فإن المؤقت سوف يتجاوز بعد 1.248 ms .
· فى معظم التطبيقات نريد معرفة ما هى القيمة التى تحمل إلى السجل TMR0L من أجل زمن تجاوز مطلوب . بإعادة ترتيب المعادلة أعلاه ، نحصل على :
كود:
TMR0L = 256 –(Time to overflow) / (4 * Clock period * Prescaler)
مثال :
مطلوب توليد تجاوز بالمؤقت بعد 500 ملى ثانية باستخدام المؤقت TIMER 0 . على فرض أن تردد الساعة 8 MHz ، وأن قاسم التردد السابق prescaler بالقيمة (16) ، احسب القيمة التى يتم تحميلها إلى سجل المؤقت .
الحل :
باستخدام الصيغة أعلاه نحصل على :
كود:
TMR0L = 256 – (Time to overflow) / (4 * Clock period * Prescaler)
TMR0L = 256 – (500) / (4 * 0.125 * 16) = 193.5
أقرب عدد صحيح هو (193) . لذلك سوف يتم تحميل سجلات المؤقت كما يلى :
كود:
TMR0L = 193 // Timer value
T0CS = 0; // Select internal clock
T0PS2 = 0; // Set prescaler to 16
T0PS1 = 1; // ..
T0PS0 = 1; // ..
PSA = 0; // Select prescaler
المقاطعات Interrupts :