سلام دوست عزیز
شما نگفتید با چه میکروکنترلری ، اما به طور کلی دو روش وجود داره، روش اول اینه که پالس خارجی رو وصل میکنن به وقفه خارجی و وقفه رو حساس به لبه بالا رونده میکنن، وقتی پالس یک شد، میکرو میره تو ساب روتین وقفه و وقفه رو حساس به لبه پایین رونده میکنه و پرچم وقفه خارجی رو پاک میکنه و یه تایمر رو روشن میکنه، میکرو منتظر میمونه که لبه پایین رونده بیاد، بار دوم میکرو وقفه میخوره و میره مقدار تایمر رو تو رم ذخیره میکنه و وقفه رو دوباره به لبه بالا رونده حساس میکنه و پرچمش رو صفر میکنه و تایمر به کارش ادامه میده، بار سوم که وقفه خورد میکرو تایمر رو متوقف میکنه و مقدارش رو ذخیره میکنه، نسبت یک بودن رو که بار اول در وقفه دوم ذخیره کرده بود رو به نسبت کل پالس که تو وقفه سوم ذخیره کرده بود تقسیم میکنه و دیوتی سایکل بدست میاد(انقدر بدم میاد دیوتی سایکل رو ترجمه میکنن زمان وظیفه) ، بعضی ها هم میان تو وقفه دوم مقدار تایمر رو ذخیره میکنن و تایمر رو صفر میکنن، به این ترتیب مقدار اول تقسیم بر مجموع مقدار اول و دوم میشه دیوتی سایکل
روش دوم هم استفاده از مد کپچر هست که تو پی ای سی ها ماژول CCP و تو ای وی ار ها تایمر یک مد ICP این کارو انجام میدن، با کپچر هم مشابه وقفه هست ولی قطعا دقیق تر از وقفه، وقفه ی کپچر به لبه بالا رونده حساس میشه و بار اول تایمر رو صفر میکنن، بار دوم کافیه رجیستر های مربوط به کپچر رو ذخیره کرد و وقفه ی کپچر رو به بالارونده حساس کرد و بار سوم هم رجیستر های کپچر رو ذخیره کرد، تو روش اول چند ماشین سایکل هدر میره که مقادیر تایمر ها ذخیره بشه و ممکنه تایمر چند تا بشماره ولی تو کپچر به محض اینکه لبه بالارونده یا پایین رونده میاد سخت افزار داخلی میکرو مقدار تایمر رو ذخیره میکنه(تو پرانتز که تو 8051 ها نمیشه این کارو کرد چون کپچر تایمر دو 8051 وقفه نداره و اینکه لبه بالارونده و پایین رونده حالیش نیست اگه اشتباه نکنم فقط پایین رونده)
تنها نکتش اینه که همه اینا وقتی درسته که تایمرت سرریز نکنه ، برای همین تایمر های کپچر 16 بیتی ان، اما اگه فرکانس خیلی کم باشه و سرریز کنه باید تدابیری اندیشید که مثلا نرم افزاری تایمر رو 17 یا 18 بیتی اش بکنی که محاسباتت درست از اب در بیاد، اگر هم فرکانسش خیلی خیلی زیاد باشه ممکنه تو وقفه دوم تا میکرو بخواد حساس به لبه پایین رونده کنه پالس خارجی وقفه بالاوندشو انجام بده و وقفه ی بالارونده میس بشه، مشکلی داشتی بازم بگو دوستان کمکت میکنن، منم یه برنامه مال ایام شباب دارم میتونم برات اپ کنم
Good Luck