آی پی امداد
abtahi

مدارهای ساده با اتمل استادیو

mohammadmoha

کاربران vip(افتخاری)
کاربر
2011-02-19
85
108
برای به دست آوردن زمان یک ثانیه با تایمر صفر با کریستال 8 مگا هرتز
کریستال 8 مگا هرتز یعنی در هر ثانیه 8000000 بار نوسان میکنه
8000000 بر بزرگترین عددی که در جدول بالا بخش پذیره 256 هست پس تقسیم کلاک را بر روی 256 می گذاریم
TCCR0==0x04;
یا TCCR0 |= (1<<CS02);
که فرکانس حاصل میشه 31250
چون تایمر ما 8 بیتی هست پس هر 256 بار یک وقفه رخ میده
3250 بر 256 بخش پذیر نیست ولی بر 250 بخش پذیر هست پس ما میتونیم در ابتدای شمارش مقدار تایمر را روی عدد 6 قرار دهیم و بعد از شمارش 250 شماره مقدار تایمر 256 میشه و یک وقفه رخ میده 31250/250=125
پس با 125 وقفه ما زمان یک ثانیه را داریم
sei(); فعال کردن وقفه سراسری
TIMSK |= (1<<TOIE0); فعال کردن وقفه تایمر صفر
int i=0;
int sec=0; متغیر برای نگه داری ثانیه
TCCR0 |= (1<<CS02); کلاک/256
TCNT0=0x06; قرار دادن عدد 6 در مقدار تایمر
ISR(TIMER0_OVF_vect){} دستورات وقفه تایمر صفر
ISR(TIMER0_OVF_vect){
i++; اضافه کردن i
if (i==125){sec++; اگر i مساوی 125 شد یک واحد به ثانیه اضافه کن i را برابر صفر قرار بده
i=0;}

TCNT0 = 0x6;مقدار 6 را در تایمر قرار بده
}
 
بالا