یه راه پیشنهادی و البته ساده شما میتونی به محض فعال شدن کلیدی متغییری را در وقفه یکی از تایمرها فعال کرده و شروع کنید به شمارش بعد زمانی که دستتون را از کلید برداشتید مقدار زمان را بخونید
مثلا نمونه کدی را براتون مثال میزنم
کد:
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if(t_flg)
s_time++
}
void main(void)
{while (1)
{
if(PINB.0==1){
t_flag=1;
s_time=0;
,....
}
else
t_flag=0;
,.....
مقدار شمارش در متغییر s_time قرار میگیره و بعدا میتونی تغییرات و ... روی اون انجام بدی شما مثلا تایمرتو طوری فعال کن که هر 10 میلی ثانیه سرریز بشه
این روش هرجند دارای خطا هست و مقداری تاخیر داره ولی ساده هست .
موفق باشی