كيف تم استخدام التايمر0 لتوليد زمن قدره 1 ثانية؟
اول شي اختيار زمن معين ليكن كما في المشروع تم اختيار زمن قدره 10ms باستخدام العلاقة التالية:
قيمة الشحن = (الزمن المطلوب * تردد المذبذب) / (4 * المقسم)
قيمة الشحن: هي القيمة التي سيتم شحن المؤقت ليتم العد منها حتى الطفحان وهكذا اي قيمة مبدأية للعد.
الزمن المطلوب: كم اخترنا هو 10ms اي 0.010
تردد المذبذب: هو قيمة المذبذب الموصول بالمتحكم مثلا هنا تم استخدام 16Mhz اي 16000000
4 : رقم ثابت لأن كل نبضة داخلة من المذبذب في البيك تقسم على 4
المقسم الترددي: هو المقسم الترددي للتايمر تم اختيار 256 في المثال
اذا للحصول على قيمة الشحن:
قيمة الشحن = (0.010 * 16000000) / (4 * 256) = 156
اخيرا نطرح الناتج بطول المسجل للتايمر0 اذا ,, 256 - 156 = 99
اذا يجب شحن التايمر0 بـالقيمة 98 لكي يبدأ العد منها وفي كل طفحان ايضا يجب اعادة شحن التايمر0 بهذه القيمة.
ولكن ليس مهم استخدام هذه المعادلة فهناك برنامج يقوم بكل الحسابات بدقة اكثر من المحسوب اسمه TimerCalculator
فقط يجب عليك اختيار المتحكم والكريستال المتستخدم والتايمر واختيار الوقت المطلول توليده.
وابعدها اضغط Calculate لكي يتم توليد الكود كاملا حتى برنامج خدمة المقاطعة والتعاريف كلها بدون كتابة اي شي !!
انصح باستخدامه لمن لايفهم طريقة التعامل مع المؤقتات في البيك.
رابط البرنامج:
http://www.4shared.com/rar/9jEyLe1v/...alculator.html
فقط اردت التوضيح بدون استخدام البرنامج.
المهم بعد اختار الزمن والحصول على قيمة الشحن, سوف تحدث المقاطعة كل 10ms ولكن 10ms ليس الزمن المطلوب الذي نريده اي ثانية ولكنه يعني انه كل 10ms سوف تحدث مقاطعة !!
طيب لو ضربنا عدد المقاطعة في 100 كم سيكون الوقت ؟؟؟
لنرى >> 10ms * 100 = 1000ms
وكما نعلم 1000ms تساوي ثانية واحدة
هذا يعني انه يجب علينا حساب عدد المقاطعات حتى تصل 100 مقاطعة وبعدها تحدث ثانية.