وقتی از timer0 برای ایجاد تاخیر 10 ثانیه ای استفاده می کنم بجای 10 ثانیه فقط 2 ثانیه ایجاد میشود . سورس برنامه این است :

T0TCR=(1<<1); //Reset Timer0
T0MR0=30000000; //Loading match register value
T0PR=0; //Loading Prescalar register value
T0PC=T0TC=0;
T0MCR=(1<<0)|(1<<2); //Generates interrupt and reset on match
T0TCR=(1<<0); //Starting Timer
while(!(T0IR&(1<<0))); //Waiting for interrupt
T0IR=(1<<0); //Clearing interrupt
کریستال من 12 مگا هرتز هست و در کد فوق prescale را روی 0 گذاشته ام یعنی خود کلاک PCLK بدون پیش تقسیم برای تایمر استفاده میشود . پس بحساب من فرکانس تایمر 1/4 کل میشود 3 مگا هرتز. پس تعداد 30 میلیون کلاک با فرکانس 3مگا میشود 10 ثانیه :
30000000* (1/3000000) = 10
ولی چه در عمل و چه در شبیه ساز فقط 2 ثانیه میشود !! کدهای مشابه را از سایت های مختلف گرفتم باز به نظر میرسد سرعت تایمر چند برابر چیزی است که باید باشد . چرا ؟