سلام عليكم
اعتقد يتم استخدام timer0
في هذه حاله عندما يتم ارسال الاشاره تضع عداد يعد الى حين استقبالها
وعندها يمكنك حساب الزمن
========================
هذه معلومه بسيطه عن timer0
موديول المؤقت وسجل المؤقت TMR0 :
المؤقت هو سجل بعرض 8 خانات 8-bit (يسمى TMR0) والذى يمكن استخدامه كمؤقت timer أو كعداد counter . عند استخدامه كعداد يتزايد السجل عند وصول كل نبضة إلى طرف الميكرومونترولر TOCK1 . وعندما يستخدم كمؤقت يتزايد السجل بمعدل يتحدد بتردد ساعة النظام clock وبمعامل القسمة prescaler الذى يتم اختياره عن طريق سجل الخيارات OPTION_REG .معدلات معامل القسمة تتغير من 1:2 إلى 1:256.
مثال :
عند استخدام ساعة النظام بتردد 4MHz تكون دورة التعليمة الأساسية 1 ميكروثانية (يتم قسمة تردد الساعة داخليا على 4 ) . إذا اخترنا معدل معامل القسمة بالقيمة 1:16 فإن العداد سوف يتزايد كل 16 ميكروثانية .
تتولد المقاطعة بالمؤقت عند حدوث طفحان overflow من 255 إلى 0 . هذه المقاطعة يمكن تمكينها أو عدم تمكينها عن طريق الخانة 5 من السجل INTCON .وهكذا إذا كان المطلوب توليد مقاطعة عند فترات 200 ميكروثانية وباستخدام تردد ساعة 4MHz يمكننا اختيار معامل القسمة بالقيمة 1:4 وتمكين المقاطعات بالمؤقت .عندئذ تكون ساعة المؤقت بمعدل 4 ميكروثانية . من أجل إنقضاء 200 ميكروثانية يجب علينا إرسال 50 نبضة من نبضات ساعة المؤقت . وهكذا يجب تحميل السجل TMR0 بالقيمة 256 – 50 = 206 أى أنه يتم عد 50نبضة قبل حدوث الطفحان .
=========================================