پاسخ : سوال در مورد کدوژن
تایمر2:
ببخشید بیکار بودم گفتم جای حسام جان جواب بدم.
در این حالت تایمر به عنوان یک شمارنده 8 بیتی بکار می رود. تایمر با یک عدد اولیه در ریجیستر TCNT2 بارگذاری می شود و با هر کلاک یک واحد به مقدار آن اضافه می شود تا اینکه به مقدار نهایی خود یعنی 255 برسد و با یک کلاک دیگر تایمر سرریز می کند. پس از سرریز شدن، پرچمTOVO یک می شود. با فعال کردن گزینه Overflow interrupt یک روال سرویس وقفه به نام timer0_ovf_isr به برنامه اضافه می شود که با هر بار سرریز شدن تایمر صفر کدهای داخل این قسمت اجرا خواهند شد.
مثال) برنامه ای بنویسید که با استفاده از تایمر صفر در هر ثانیه یک واحدبه متغیر a افزوده شود.
کریستال 16M
در برنامه بالا در هر 12.5us یکبار کدهای داخل وقفه تایمر صفر اجرا می شود. در هر 12.5 میکروثانیه یک واحد به متغیر b افزوده می شود و به عبارتی یک ثانیه زمان لازم است تا متغیر b به عدد 80000 برسد و اگر این متغیر به عدد 80000 رسید با دستورif(b==80000) یک واحد به متغیر a اضافه می شود. دقت داشته باشید که زمان 12.5 میکروثانیه از رابطه زیر بدست آمده است.
تایمر2:
ببخشید بیکار بودم گفتم جای حسام جان جواب بدم.
در این حالت تایمر به عنوان یک شمارنده 8 بیتی بکار می رود. تایمر با یک عدد اولیه در ریجیستر TCNT2 بارگذاری می شود و با هر کلاک یک واحد به مقدار آن اضافه می شود تا اینکه به مقدار نهایی خود یعنی 255 برسد و با یک کلاک دیگر تایمر سرریز می کند. پس از سرریز شدن، پرچمTOVO یک می شود. با فعال کردن گزینه Overflow interrupt یک روال سرویس وقفه به نام timer0_ovf_isr به برنامه اضافه می شود که با هر بار سرریز شدن تایمر صفر کدهای داخل این قسمت اجرا خواهند شد.
مثال) برنامه ای بنویسید که با استفاده از تایمر صفر در هر ثانیه یک واحدبه متغیر a افزوده شود.
کریستال 16M
#include <mega16.h>
long int a,b;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
}
//Reinitialize Timer 0 value
TCNT0=0x37;
b++;
if(b==80000){
a++;
b=0;
}
}
void main(void)
{
//Timer/Counter 0 initialization
//Clock source: System Clock
//Clock value: 16000.000 kHz
//Mode: Normal top=FFh
TCCR0=0x01;
TCNT0=0x37;
OCR0=0x00;
//Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
#asm("sei"
while (1);
}
// end
long int a,b;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
}
//Reinitialize Timer 0 value
TCNT0=0x37;
b++;
if(b==80000){
a++;
b=0;
}
}
void main(void)
{
//Timer/Counter 0 initialization
//Clock source: System Clock
//Clock value: 16000.000 kHz
//Mode: Normal top=FFh
TCCR0=0x01;
TCNT0=0x37;
OCR0=0x00;
//Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
#asm("sei"

while (1);
}
// end
در برنامه بالا در هر 12.5us یکبار کدهای داخل وقفه تایمر صفر اجرا می شود. در هر 12.5 میکروثانیه یک واحد به متغیر b افزوده می شود و به عبارتی یک ثانیه زمان لازم است تا متغیر b به عدد 80000 برسد و اگر این متغیر به عدد 80000 رسید با دستورif(b==80000) یک واحد به متغیر a اضافه می شود. دقت داشته باشید که زمان 12.5 میکروثانیه از رابطه زیر بدست آمده است.

دیدگاه