خانه / آموزش میکروکنترلرهای AVR / آموزش برنامه نویسی پیشرفته BASIC-تایمر کانتر 0

آموزش برنامه نویسی پیشرفته BASIC-تایمر کانتر 0

آموزش برنامه نویسی پیشرفته BASIC-تایمر کانتر 0

حال که با مقدمات برنامه نویسی یک میکروکنترلر avr توسط نرم افزار Bascom آشنا شده اید نوبت به آن رسیده تا با برنامه نویسی و پیکر بندی امکاناتی دیگر از این مجموعه آشنا شوید. در این قسمت برنامه نویسی پیچیده تر خواهد شد و شما باید با تکیه بر آموزه های قبلی خود شروع کنید.

در این بخش کار و پیکر بندی انواع تایمر – کانترهای موجود در میکروکنترلرها و همچنین پیکر بندی انواع لوازم جانبی و اتصال آنها به این تراشه مورد بررسی قرار خواهد گرفت. مثال ها بسیار ساده هستند و تنها برای آشنایی شما با نحوه کارکرد آنهاست اما همین مثال ها شما را برای رسیدن به هدف یاری می کنند.

آموزش برنامه نویسی پیشرفته BASIC-تایمر کانتر 0

تایمر – کانتر 0

:: پیکر بندی تایمر – کانتر 0 به عنوان تایمر

Config timer0 = timer , prescale = 1/8/64/256/1024

این تایمر 8 بیتی بوده, پس حداکثر مقدار شمارش آن تا 255 خواهد بود.

1/8/64/256/1024 : مقادیری که می توان برای تقسیم فرکانس میکرو استفاده کرد.

با دستور بالا تایمر – کانتر 0 به عنوان یک تایمر به میکرو معرفی می شود. میزان فرکانس کار این تایمر از رابطه زیر به دست می آید:

فرکانس تایمر = فرکانس کار میکرو / prescale

:: فعال و روشن کردن تایمر 0

Enable timer0

Start timer0

این دو دستور را حتما با هم به کار ببرید تا میکرو تایمر را روشن کند.

نکته : برای روشن کردن تایمر در جاهای مختلف برنامه از Start Timer0 و برای خاموش کردن تایمر از دستور Stop Timer0 استفاده نمایید.

:: غیر فعال کردن تایمر0

Stop timer0

از این دستور می توان در جاهای مختلف برنامه برای خاموش کردن تایمر استفاده نمود.

نکته : با خاموش کردن timer0 مقدار شماش شده صفر نخواهد شد و با روشن کردن دوباره آن  ادامه شمارش انجام خواهد شد.

:: نوشتن و خواندن تایمر

Timer0 = var

Var = timer0

نکته : مقدار تایمر در رجیستری به نام timer0 قرار گرفته است که می توان به این رجیستر مقدار داد تا تایمر از آن مقدار شروع به شمارش کند و یا مقدار آن را در متغیری که برای انجام عملیاتی لازم  دارید بریزید.

:: وقفه تایمر 0

ENABLE OVF0

ON OVF0 lable

پرچم سریزی تایمر 0 به نام ovfo بوده و همانطور که گفته شد با رسیدن مقدار تایمر به عدد 255 (مقدار timer0 برابر صفر می شود) این پرچم 1 شده و می توان از آن به عنوان پرش به یک زیر برنامه استفاده کرد و در زیر برنامه با return بازگشت. در این دستور باید اول پرچم را فعال سازی و بعد با دستور ovfo on در صورت یک شدن  ovf0 به برچسب زیر برنامه پرش کرد.

نکته : فراموش نشود برای کار با هر وقفه ای اول باید وقفه کلی enable interrupts را فعال کرد.

مثال اول :

$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

مثال دوم :

$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 به عنوان کانتر

Config timer0= counter , EDGE , = RISING / FALLING

با این دستور کانتر 0 پیکر بندی شده و با اعمال  پالس به پایه T0 میکرو یک واحد به رجیستر COUNTER0 اضافه می شود. این کانتر 8 بیتی بوده, پس حداکثر مقدار شمارش آن تا 255 خواهد بود (پالس ورودی بعدی کانتر را صفر می کند).

Edge : گزینه rising برای حساس بودن پایه به لبه بالارونده و گزینه falling برای حساس بودن پایه به لبه پایین رونده است.

:: فعال و روشن کردن کانتر 0

Config timer0= counter , EDGE , = RISING / FALLING

START COUNTER0

دو دستور بالا را حتما با هم به کار برید تا میکرو کانتر را روشن کند.

نکته : برای روشن کردن کانتر در جاهای مختلف برنامه از start coutner0 استفاده نمایید.

:: غیر فعال کردن کانتر 0

Stop counter0

از این دستور می توان در جاهای مختلف برنامه برای خاموش کردن کانتر استفاده نمود.

نکته : با خاموش کردن counter0 مقدار شمارش شده صفر نخواهد شد و با روشن کردن دوباره آن ادامه شمارش انجام خواهد شد.

:: نوشتن و خواندن کانتر0

Counter0 = var

Var = counter0

نکته: مقدار کانتر در رجیستری به نام counter0 قرار گرفته است, که می توان به این رجیستر مقدار داد تا کانتر از آن مقدار شروع به شمارش کند و یا مقدار آن را در متغیری که برای انجام عملیاتی لازم دارید بریزید.

:: وقفه کانتر 0

Enable ovf0

On ovf0 lable

پرچم سریزی کانتر 0 به نام ovf0 بوده و همان طور که گفته شد با رسیدن مقدار کانتر به عدد 255 و با ورود یک پالس دیگر ( مقدار counter0 برابر صفر می شود ) این پرچم 1 شده و می توان از آن به عنوان پرش به یک زیر برنامه استفاده کرد و در زیر برنامه با  returnبازگشت. در این دستور باید اول پرچم را فعال سازی و بعد با دستور on ovf0 در صورت یک شدن ovf0 به برچسب زیر برنامه پرش کرد.

نکته : فراموش نشود برای کار با هر وقفه ای اول باید وقفه کلی enable interrupts را فعال کرد.

 مثال اول :

$regfile = “m32def.dat”

$crystal = 16000000

Config timer0=counter,edge, = rising

Start counter0

Dim a as byte

Counter0=0

D0

A=counter0

Loop

End

 مثال دوم :

$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

 موسسه خیریه حمایت از کودکان مبتلا به سرطان

 دسته اصلی : زبان برنامه نویسی BASIC

 نویسنده : electronics98

 تاریخ انتشار :

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مطلب پیشنهادی

I2C-AVR

آموزش برنامه نویسی پیشرفته BASIC – ارتباط سریال I2C

آموزش برنامه نویسی پیشرفته BASIC – ارتباط سریال I2C پایه های مورد استفاده پروتکل I2C …