دستورات تایمر کانتر 0
حال که با مقدمات برنامه نویسی یک میکروکنترلر avr توسط نرم افزار Bascom آشنا شده اید نوبت به آن رسیده تا با برنامه نویسی و پیکر بندی امکاناتی دیگر از این مجموعه آشنا شوید. در این قسمت برنامه نویسی پیچیده تر خواهد شد و شما باید با تکیه بر آموزه های قبلی خود شروع کنید.
در این بخش کار و پیکر بندی انواع تایمر – کانترهای موجود در میکروکنترلرها و همچنین پیکر بندی انواع لوازم جانبی و اتصال آنها به این تراشه مورد بررسی قرار خواهد گرفت. مثال ها بسیار ساده هستند و تنها برای آشنایی شما با نحوه کارکرد آنهاست اما همین مثال ها شما را برای رسیدن به هدف یاری می کنند.
پیکر بندی تایمر کانتر 0 به عنوان تایمر در زبان بیسیک BASIC
1 |
Config timer0 = timer , prescale = 1/8/64/256/1024 |
این تایمر 8 بیتی بوده, پس حداکثر مقدار شمارش آن تا 255 خواهد بود.
1/8/64/256/1024 : مقادیری که می توان برای تقسیم فرکانس میکرو استفاده کرد.
با دستور بالا تایمر – کانتر 0 به عنوان یک تایمر به میکرو معرفی می شود. میزان فرکانس کار این تایمر از رابطه زیر به دست می آید:
1 |
prescale/فرکانس تایمر = فرکانس کار میکرو |
فعال و روشن کردن تایمر کانتر 0 در زبان بیسیک BASIC
1 2 3 |
Enable timer0 Start timer0 |
این دو دستور را حتما با هم به کار ببرید تا میکرو تایمر را روشن کند.
نکته : برای روشن کردن تایمر در جاهای مختلف برنامه از Start Timer0 و برای خاموش کردن تایمر از دستور Stop Timer0 استفاده نمایید.
غیر فعال کردن تایمر کانتر 0 در زبان بیسیک BASIC
1 |
Stop timer0 |
از این دستور می توان در جاهای مختلف برنامه برای خاموش کردن تایمر استفاده نمود.
نکته : با خاموش کردن timer0 مقدار شماش شده صفر نخواهد شد و با روشن کردن دوباره آن ادامه شمارش انجام خواهد شد.
نوشتن و خواندن تایمر در زبان بیسیک BASIC
1 2 3 |
Timer0 = var Var = timer0 |
نکته : مقدار تایمر در رجیستری به نام timer0 قرار گرفته است که می توان به این رجیستر مقدار داد تا تایمر از آن مقدار شروع به شمارش کند و یا مقدار آن را در متغیری که برای انجام عملیاتی لازم دارید بریزید.
وقفه تایمر 0 در زبان بیسیک BASIC
1 2 3 |
ENABLE OVF0 ON OVF0 lable |
پرچم سریزی تایمر 0 به نام ovfo بوده و همانطور که گفته شد با رسیدن مقدار تایمر به عدد 255 (مقدار timer0 برابر صفر می شود) این پرچم 1 شده و می توان از آن به عنوان پرش به یک زیر برنامه استفاده کرد و در زیر برنامه با return بازگشت. در این دستور باید اول پرچم را فعال سازی و بعد با دستور ovfo on در صورت یک شدن ovf0 به برچسب زیر برنامه پرش کرد.
نکته : فراموش نشود برای کار با هر وقفه ای اول باید وقفه کلی enable interrupts را فعال کرد.
مثال اول :
1 2 3 4 5 6 7 8 9 10 11 12 |
$regfile = “m32def.dat” $crystal = 16000000 Config timer0 = timer , prescale = 64 , f.timer = 64 / 16000000 s Enable timer 0 Start timer 0 Dim a as byte Timer0 =0 Do A = timer0 , ever 4us —- A incr timer0 Loop End |
مثال دوم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$regfile = “m32 def.dat” $crystal = 16000000 Config timer0 = timer , prescale = 64 , f.timer = 64 / 16000000 s Enable interrupts On ovf0 ali Enable timer0 Start timer0 Timer0= 55 Do A= timer0 , ever 4us ——- A incr timer0 Loop End Ali: Timer0 = 55 Return |
نکته : در مثال بالا تایمر هر بار تا مقدار 200 شمرده و با هر بار سریز شدن به زیر برنامه رفته و مقدار اولیه 55 را می گیرد تا دوباره تا 200 بشمارد.
پیکر بندی تایمر – کانتر 0 به عنوان کانتر در زبان بیسیک BASIC
1 |
Config timer0= counter , EDGE , = RISING / FALLING |
با این دستور کانتر 0 پیکر بندی شده و با اعمال پالس به پایه T0 میکرو یک واحد به رجیستر COUNTER0 اضافه می شود. این کانتر 8 بیتی بوده, پس حداکثر مقدار شمارش آن تا 255 خواهد بود (پالس ورودی بعدی کانتر را صفر می کند).
Edge : گزینه rising برای حساس بودن پایه به لبه بالارونده و گزینه falling برای حساس بودن پایه به لبه پایین رونده است.
فعال و روشن کردن کانتر 0 در زبان بیسیک BASIC
1 2 3 |
Config timer0= counter , EDGE , = RISING / FALLING START COUNTER0 |
دو دستور بالا را حتما با هم به کار برید تا میکرو کانتر را روشن کند.
نکته : برای روشن کردن کانتر در جاهای مختلف برنامه از start coutner0 استفاده نمایید.
غیر فعال کردن کانتر 0 در زبان بیسیک BASIC
1 |
Stop counter0 |
از این دستور می توان در جاهای مختلف برنامه برای خاموش کردن کانتر استفاده نمود.
نکته : با خاموش کردن counter0 مقدار شمارش شده صفر نخواهد شد و با روشن کردن دوباره آن ادامه شمارش انجام خواهد شد.
نوشتن و خواندن کانتر 0 در زبان بیسیک BASIC
1 2 3 |
Counter0 = var Var = counter0 |
نکته: مقدار کانتر در رجیستری به نام counter0 قرار گرفته است, که می توان به این رجیستر مقدار داد تا کانتر از آن مقدار شروع به شمارش کند و یا مقدار آن را در متغیری که برای انجام عملیاتی لازم دارید بریزید.
وقفه کانتر 0 در زبان بیسیک BASIC
1 2 3 |
Enable ovf0 On ovf0 lable |
پرچم سریزی کانتر 0 به نام ovf0 بوده و همان طور که گفته شد با رسیدن مقدار کانتر به عدد 255 و با ورود یک پالس دیگر ( مقدار counter0 برابر صفر می شود ) این پرچم 1 شده و می توان از آن به عنوان پرش به یک زیر برنامه استفاده کرد و در زیر برنامه با returnبازگشت. در این دستور باید اول پرچم را فعال سازی و بعد با دستور on ovf0 در صورت یک شدن ovf0 به برچسب زیر برنامه پرش کرد.
نکته : فراموش نشود برای کار با هر وقفه ای اول باید وقفه کلی enable interrupts را فعال کرد.
مثال اول :
1 2 3 4 5 6 7 8 9 10 11 |
$regfile = “m32def.dat” $crystal = 16000000 Config timer0=counter,edge, = rising Start counter0 Dim a as byte Counter0=0 D0 A=counter0 Loop End |
مثال دوم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$regfile = “m32def.dat” $crystal= 16000000 Config timer0 = counter , edge = rising Enable interrupts On ovf0 ali2 Enable ovf0 Start counter0 Dim a as byte Do Loop End Ali2: Incr a Return |