آموزش میکروکنترلر AVR قسمت چهارم : برنامه‌ای ساده برای کدویژن و بسکام

0
37
میکروکنترلر AVR
میکروکنترلر AVR

آموزش میکروکنترلر AVR

در قسمت سوم مجموعه آموزش میکروکنترلر AVR ورودی، خروجی پورت‌های میکروکنترلر را معرفی‌کرد. در این قسمت می‌خواهیم برنامه LED که در قسمت‌قبل راجب آن بحث‌شد را به زبان C و BASIC بنویسیم، بدین‌منظور که PINB.0 اول خروجی تعریف‌شود و در مرحله‌ی بعد مقدارHIGH روی آن قرار بگیرد.

برنامه‌نویسی برای نرم‌افزار کدویژن:

نرم‌افزار کدویژن
نرم‌افزار کدویژن

 

در خط اول <include<mega32.h# فراخوانی می‌­­شود. درواقع mega32.h فایلی در کامپایلر است و تعاریف رجیسترهای mega32 در آن وجود دارد. ازطریق includeکردن فایل mega32، کامپایلر متوجه می‌­شود برنامه با atmega32 نوشته‌شده است. در خط‌بعدی تابع main از نوع void تعریف‌شده‌است، که به‌صورت‌زیر شامل تابع و بدنه تابع می­‌باشد:

Void main()
{
بدنه تابع
};

 

در بدنه تابع رجیسترها و برنامه موردنظر نوشته می­‌شود. در ابتدا باید به‌صورت‌زیر، پین موردنظر را خروجی تعریف‌کنیم:

DDRB=0X01;

 

که منظور از جمله‌بالا این است که PINB.0 برابر با یک و جهت آن خروجی باشد. به‌جای عبارت‌بالا می­‌توان از عبارت‌زیر نیز استفاده‌کرد:

DDRB=(1<<DDB0);

 

علامت “<< ” در برنامه‌نویسی به‌معنای شیفت‌به چپ محسوب می‌شود. DDB0 در تعاریف کامپایلر CODEVISION معادل صفر می‌­باشد. پس معنی عبارت‌بالا این است که ۱ به اندازه ۰ بیت به سمت‌چپ شیفت داده‌شده‌است،که برابر با یک می‌باشد، در خط‌بعد مقدار PINB.0 را مشخص می­‌کنیم، در این برنامه منظورما ۱ کردن این پین می­‌باشد، بنابراین داریم:

PORTB =0X01;

 

هم‌چنین به‌جای عبارت‌بالا می‌­توان مانند خط قبل‌از عبارت‌زیر استفاده‌کرد:

 PORTB=(1<<PORTB0);

 

حال اگر این خط وجود‌نداشته‌باشد باتوجه‌به اینکه پین موردنظر خروجی و مقدار پیش‌فرض آن صفر است، درنتیجه در خروجی وضعیت low را خواهیم‌داشت. خط‌بعدی حلقه (while(1 است، از آنجاکه CPU به‌صورت‌مداوم درحال اجرای برنامه است و قرار‌نیست برنامه دیگری انجام‌دهد پس باید این برنامه در یک حلقه قراربگیرد. درنهایت برنامه ما به‌صورت‌زیر جمع‌بندی می­‌شود:

#include<mega32.h>
Void main()
{
DDRB=0X01;
PORTB=0X01;
While(1);
}

 

برنامه‌نویسی برای نرم‌افزار بسکام:

نرم‌افزار بسکام
نرم‌افزار بسکام

 

حال می‌­خواهیم با زبان بسکام برنامه را بنویسیم. همانند برنامه‌قبل در مرحله‌اول و خط اول باید کتابخانه میکروکنترلر موردنظر فراخوانی شود. به‌صورت‌زیر:

$regfile=”m32defdat”

 

در دستور‌بعدی مقدار فرکانس نوسان برای نرم‌افزار مشخص می‌شود، البته باید بدانیم که مقدار فرکانس نوسان را نمی‌شود ازطریق برنامه تغییر‌داد بلکه باید ازطریق فیوزبیت‌ها و دستگاه پروگرامر این کار را انجام‌داد، ولی حسن آوردن این خط در برنامه این است که اگر تاخیر و عملیاتی در برنامه باشد با اطلاع‌از فرکانس اسیلاتور سیستم می­‌باشد.

$criystal=1000000

 

حال اگر به‌جای عدد ۱۰۰۰۰۰۰ مقدار ۸۰۰۰۰۰۰ نوشته‌شود این خط تغییری در وضعیت فرکانس اسیلاتور ایجاد نمی‌­کند، ولی فرق آن این است که اگر قرار‌باشد ازطریق بسکام تاخیری ایجاد شود بالحاظ مقدار این فرکانس نوسان می­‌باشد. پس اگر این عدد اشتباه نوشته‌شود آن قسمتی از عملیات که مربوط‌به بسکام است با اختلال مواجه‌خواهدشود. پس همیشه این عدد باید برابربا فرکانس نوسان واقعی میکروکنترلر باشد که به‌وسیله پروگرامر و با تنظیم فیوزبیت‌ها تنظیم می‌­­شود. اگر در بسکام بخواهیم پین موردنظر را تغییردهیم و خروجی‌کنیم از دستور config pinB.0=output استفاده می­‌کنیم. دستور‌بعدی پین موردنظر، که به‌عنوان خروجی لحاظ‌شده SET می‌کند. یعنی برابر با یک قرار می­دهد.

SET PORTB.0

 

در بسکام دستورات دیگری مثلRESET نیز وجود دارد که پین موردنظر را ۰ قرار می‌­دهد. همچنین دستور toggle برای not کردن استفاده می‌­شود که اگر پین موردنظر ۱ بود آنرا صفر و بالعکس می‌کند. درنهایت این برنامه از دستور Do Loop که همانند دستور while است و در آخر از کلمه end به‌معنی پایان برنامه استفاده می­‌شود. پس بنابراین برنامه به‌صورت‌زیر می‌­باشد:

$regfile=”m32def.dat”
$crystal=1000000
configPinB.0=output
SetPORTB.0
DO
LOOP
END

 

در قسمت پنجم آموزش میکروکنترلر AVR خلاصه‌ای از کلیه امکانات‌موجود در AVR بیان می‌شود. با ما همراه باشید.

 

 

منبع: سیسوگ

برای این مقاله نظر بگذارید:

لطفا دیدگاه خود را بنویسید
لطفا نام خود را وارد کنید