بخشی از پاورپوینت
--- پاورپوینت شامل تصاویر میباشد ----
اسلاید 1 :
- AVR ها نهایتا دارای سه تایمر / کانتر هستند (به جز MEGA128 که 4 تایمر دارد).
- به علت وجود این سه تایمر /کانتر در میکرو نمونه AT90S8535 در این بخش قصد داریم به معرفی تمام تایمر کانتر ها و رجیستر های مربوطه و سپس پیکره بندی آنها در محیط BASCOME بپردازیم
اسلاید 2 :
- تایمر/کانترصفرهشت بیتی و قابلیت انتخاب کلاک از کلاک سیستم ، تقسیمی از کلاک سیستمی از پایه های خروجی را دارا است.
- تایمر / کانتر صفر با توجه به تنظیمات رجیستر کنترلی TCCR0می تواند متوقف شود
- پرچم سر ریز و مد مقایسه ای در رجیستر TIFR موجود است.
- فعال و غیر فعال کردن وقفه های تایمر/کانتر صفر در رجیستر TIMSK قابل تنظیم است.
اسلاید 3 :
بیت های کنترلی تایمر / کانتر صفر
- بیت های 3...7:بیت های رزو شده
- بیت های 2،1،0 : CS02 ,CS01 , CS00 : انتخاب کلاک تایمر / کانتر صفر
این بیت ها طبق جدول زیر مشخص کننده کلاک تایمر /کانتر صفر هستند.
اسلاید 4 :
رجیستر تایمر/کانتر صفر
[TIMER/COUNTER0 ] –TCNT0
üاین رجیستر 8 بیتی محتوای تایمر/کانتر را در خود جای می دهد .تایمر/کانتر به عنوان UP- COUNTER با قابلیت خواندن /نوشتن استفاده می شود.
اسلاید 5 :
پیکر بندی در مد تایمر
CONFIG TIMER0 = TIMER ,PREACALE =1|8|64|256|1024
- تایمر می تواند فرکانس خود را از فرکانس اوسیلاتور بخش بر یک ، 8، 64 ، 256 ، 1024 تامین کند.
- تایمر با دستورSTART TIMER شروع به شمارش و با دستور STOP TIMER متوقف می شود.
- تایمر پس از شمردن تا مقدار $FF پرچم سرریز خود را (OVF0 ) یک می کند.
اسلاید 6 :
- در صورتی که وقفه سر ریز با دستور ENABLE OVF0 و وقفه سراسری با دستور ENABLE INTRRUPTS فعال باشد می توان در لحظه سرریزی کانتر با دستور ON OVF0 LABLE و یا ON TIMER0 LABLE به لیبل پرش کرد و روتین وقفه مربوط به ان را اجرا کرد.
- محتوای تایمر /کانتر یک را می توان با دستور VAR = TIMER0 خواند که VAR باید متغیری از جنس BYTE باشد.
- با دستور TIMER0 = INITIALVALUE مقدار اولیه ای را می توان در تایمر صفر قرار داد.
اسلاید 7 :
CONFIG TIMER0 = COUNTER , EDGE = RISING / FALLING
- با انتخاب EDGE = RISING با هر لبه بالا رونده به پایه T0 شمارش صورت می گیرد
- با انتخاب EDGE = FALLING با هر لبه پایین رونده به پایه T0 شمارش صورت می گیرد
- کانتر پس از شمردن تا مقدار $FF و به تعداد $FF+1 پالس پرچم OVF0 یک می شود .
- محتوای تایمر /کانتر صفر را می توان با دستور VAR = COUNTER0 خواند که VAR باید متغیری از جنس BYTE باشد.
- در صورتی که وقفه سر ریز با دستور ENABLE OVF0 و وقفه سراسری با دستور ENABLE INTRRUPTS فعال باشد می توان در لحظه سرریزی کانتر با دستور ONOVF0 LABLE و یا ON COUNTER LABLE به لیبل پرش کرد و روتین وقفه مربوط به ان را اجرا کرد.
اسلاید 8 :
مثال کانتر
Config timer0 = counter , edge = falling
رجیستر Tcnt0 و یا متغیر counter0 تعداد پالس شمارش شده را نشان می دهد
Tcnt0= 0
Do
‘or Print couter0 Print Tcnt0
Loop Until Tcnt0>=10 ‘When 10 pulses are counter loop is exited
End
اسلاید 9 :
مثال تایمر
- کلاک تایمر صفر را می توان از کلاک خود سیستم و یا تقسیمی از ان تهیه کرد . این تقسیمات 8 ، 16 ، 256 ، 1024 می باشند به طور مثال با کریستال 8MHZ و prescaler = 1024 ، تایمر با فرکانس 8MHZ/1024=7.8125KHZ کار خواهد بود.
$crystal = 8000000
Config Timer0 = Timer , Prescale = 1 ‘Timer0 osc = 8MHZ
Stop Timer0
Start Timer0
Do
‘evry 125ns tcnt0 increase one Print Tcnt0
Loop
End
اسلاید 10 :
مثال تایمر با وقفه
Config Timer0= Timer , Prescale =1024
Enable Interrupts ‘Global interrupt should Enable ,when using any interrupt
Enable Timer0 ‘enable timer0 interrupt
On Ovf0 Timer0_isr ‘or one timer0 tim0_isr
Do
‘your program goes here
Loop
End
‘the fllowing code is executed when the timer overflows
Tim0_isr:
Print “ in interrupt routin “
return