مهندس موفق الکترونیک

برنامه نویسی میکروکنترلر هاي AVR به زبان C توسط نرم افزار CodeVision

این مقاله به آموزش برنامه نویسی میکروکنترلر هاي AVR به زبان C توسط نرم افزار CodeVision می پردازد. اگر علاقند به یادگیری برنامه نویسی میکروکنترلرهای AVR  به زبان #سی در محیط کدویژن هستید این نوشته را در میکرو دیزاینر الکترونیک از دست ندهید.

برنامه نویسی میکروکنترلر هاي AVR به زبان C

معرفی زبان C

زبان  C یک زبان برنامه نویسی ساده و پر قدرت میباشد که در سال  1972توسط #دنیس_ریچی طراحی شده است.

مقاله مرتبط:بهترین زبان های برنامه نویسی

دسته بندی زبان هاي برنامه نویسی

  • زبانهاي سطح بالا :دستورالعملهاي این زبانهاي برنامه نویسی به زبان محاوره اي انسان نزدیک است ولی دسترسی مستقیم به حافظه ، ثباتهاي پردازشگرو… ندارند ، مانند… PASCAL ، BASIC
  • زبانهاي سطح پایین : بوسیله این زبانهاي برنامه نویسی زبان اسمبلی
  • زبانهاي سطح میانی : زبان C

برنامه‌نویسی ساخت‌یافته

زبانهاي برنامه نویسی به دو دسته ساخت یافته و غیر ساخت یافته نیز تقسیم بندي میشوند. در زبان برنامه نویسی ساخت یافته با استفاده از حلقه هاي تکرار ( do…while ، while ، for )  میتوان برنامه اي نوشت که قابلیت خوانایی بالائی داشته باشند.

خصوصیات زبان  C

  • یک زبان برنامه نویسی . میانی است
  • یک زبان برنامه نویسی ساخت یافته است.
  • یک زبان قابل انعطاف و قدرتمند است.
  • ارتباط تنگاتنگی بین زبان Cو اسمبلی وجود دارد.
  • تعداد کلمات کلیدي این برنامه کم  (30کلمه کلیدي) میباشد.
  • زبان برنامه نویسی  Cنسبت به حروف کوچک و بزرگ حساس است .
  • تمام کلمات کلیدي آن با حروف کوچک نوشته میشوند. براي مثال  int یک کلمه کلیدي است اما INT کلمه کلیدي نیس.

در جدول زیر کلمات کلیدي زبان  Cنمایش داده شده است:

Break double int struct
bit else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while

دستورالعمل هاي زبان   C  داراي خصوصیات زیر میباشد.

  • هر دستور زبان C به ; ختم میشود. مثال :
int a=1;

float pi=3.14;
  • حداکثر طول یک دستور . 255کاراکتر است
  • هر دستور میتواند در یک یا چند سطر ادامه داشته باشد.
  • در هر سطر میتوان چند دستور تایپ کرد.
مطلب پیشنهادی:  آموزش گام به گام كدنويسي XMEGA

توضیحات :

در یک برنامه نوشته شده با اضافه کردن توضیحات خوانائی و درك برنامه بالا میرود . توضیحات توسط مترجم (کامپایلر) نادیده گرفته میشود. در زبان  Cتوضیحات میتوانند در بین  /* و /* قرار بگیرند یا بعد از //  نوشته شوند.

1  */ :مثالThis is a sample for command

for C program language. */

2 // :مثالThis lne is a sample.

ساختار برنامه C

برنامه هاي زبان  C از مجموعه اي از دستورات و تعدادي تابع تشکیل میشود. بدنه اصلی برنامه  زبان  ، Cتابع () main می باشد. هر برنامه باید داراي این تابع باشد. در شکل زیر ساختار یک برنامه  Cنمایش داده شده است که در آینده این ساختار با معرفی قسمتهاي دیگر زبان Cتکمیل تر میشود.

فایلهاي سرآیند

void main(void)

{

اعلان متغیر ها

دستورات اجرائی

}

فایلهاي سرآیند : در برنامه نویسی زبان  cتوابع و کتابخانه هایی وجود دارند که قبلاَ نوشته شده اند و در فایلهایی که معمولا در پوشه  include یا  inc محل نصب کامپایلر میباشند ذخیره شده اند و قبل از نوشتن تابع اصلی برنامه cاین فایل ها باید به تابع اصلی استفاده کننده از توابع این فایلها ضمیمه شوند . به این فایلها فایلهاي سرآیند گفته میشود. براي ضمیمه کردن یک فایل بصورت زیر عمل میشود.

#include  < نام فایل سرآیند >

مثال : توابع ورودي خروجی در فایل  stdio.hذخیره شده اند . در صورت استفاده از توابع ورودي خروجی در برنامه اصلی باید این فایل بصورت زیر به برنامه اصلی ضمیمه شود.

#include <stdio.h>

در زبان  cبرنامه نویس میتواند ، فایهاي سرآیند تولید کند. حال براي ضمیمه کردن فایل تولید کرده و بصورت زیر عمل میکند :

مطلب پیشنهادی:  AVR یا PIC؟ کدام میکروکنترلر را برای پروژه‌ها انتخاب کنیم؟

#include    ”نام فایل سرآیند“

با روش تولید فایل سرآیند بعداَ آشنا میشوید.

انواع داده در زبان C

در زبان  Cپنج نوع داده وجود دارد که این انواع داده با پیشوند هاي  short )کوتاه)  ، long (بلند ) ،  signed (علامتدار) و   unsigned(بدون علامت) همراه میشود .

  •  charکاراکتر : این نوع داده براي ذخیره کاراکترهائی مانند ’ ’x’، ‘2’ ، ‘aو… استفادهمیشود.
  •  intا  عداد صحیح : براي ذخیره اعداد صحیح مانند 34-،12و… بکار میرود.
  •   float  اعداد اعشاري : براي ذخیره اعداد اعشاري مانند 3.1415 ، 12,5استفاده میشود.
  •  double  اعداد اعشاري بزرگ: براي ذخیره اعداد اعشاري بزرگ تر از floatبکارمیرود.

داده نوع بیت در کدویژن

داده نوع بیت : براي تعریف متغیر هاي بیتی استفاده میشود. محل ذخیره مغیر هاي بیتی به ترتیب از بیت صفر ثبات

GPIOR1و سپس  GPIOR2و سپس ثباتهاي  R2تا  R14میباشد.

مثال :

bit alfa=1; /* bit0 of GPIOR0 */

bit beta; /* bit1 of GPIOR0 */

تعریف  متغیر در زبان C

متغیر ها نامی براي محل ذخیره داده ها میباشند. تعریف متغیر در  Cبصورت زیر است :

<نام متغیر >    <نوع داده>;

  مثال :

int A;

unsigned long int S;

اگر تعدادزیادی از یک متغیر یک نوع نیاز داشته باشیم:

float pi,E,i,j;

نکته : نام متغیر میتواند با حروف بزرگ نوشته شود . فقط کلمات کلیدي زبان   C که در قبل گفته شد باید با حروف کوچک نوشته شود.

در CodeVision

تعریف متغر در حافظه  : eeprom براي تعریف متغیر سراسريدر آینده شرح داده میشوند بصورت زیر انجام میشود:

eeprom   <نام متغیر>   <نوع داده>

مثال:

eeprom char beta;

eeprom long array1[5];

 تعیین محل ذخیره متغیر هاي سراسريدر آینده شرح داده می شوند در حافظه  : SRAM این کار بصورت زیر انجام میشود.

متغیر عددی a  در آدرس 80 حافظه SRAM ذخیره شده»

int a @0x80;

براي ذخیره متغیر در ثبات از دستور  registerاستفاده میشود:

مطلب پیشنهادی:  راه اندازی ماژول TM1637 به وسیله میکروکنترلر AVR با کامپایلر بسکام

register <نام متغیر> <نوع داده>;

براي دستور دادن به کامپایلر که متغیري را درثبات ذخیره نکند از دستور  volatile بصورت زیر استفاده میشود:

volatile  <نام متغیر>  <نوع داده> ;

مقدار دهی متغیر  در سی

مقداردهی به متغیر به دو صورت زیر انجام میشود:

1-  هنگام تعریف متغیر یا مقدار دهی اولیه:

int j=0, a=24;

<har ch1=’a’;

float Pi=3.1415,e=2.71;

2-  بعد از تعریف متغیر با علامت انتساب = .

int a,b;

a=23;

b=10;

مقاله مرتبط: ساختمان یا استراکچر (struct) در زبان برنامه نویسی C

تعریف ثوابت زبان  C (مقدار ثابت) :

ثوابت مقادیري هستند که در برنامه از آن ها استفاده میشود و قابل تغییر نمیباشند. براي تعریف ثوابت در زبان  C به روش هاي زیر عمل میشود:

1-  استفاده از دستور  define

#define  <مقدار> <نام ثابت>

مثال :

#define PI 3.14

نکته : دستور  define  از دستورات پیش پردازنده است و نیازي به ;  ندارد.

2- استفاده از دستور const

const <مقدار> =  <نام ثابت> <نوع داده>;

مثال :

const int a = 25;

ثوابت در کدویژن

ثوابتی که با  const و  flashتعریف میشوند در در حافظه  flashذخیره میشوند.

مثال :

flash int integer_constant=1234+5;

flash char char_constant=’a’;

flash long long_int_constant1=99L;

flash long long_int_constant2=0x10000000;

flash int integer_array1[]={1,2,3};

flash int integer_array2[10]={1,2};

flash int multidim_array[2][3]={{1,2,3},{4,5,6}};

flash char string_constant1[]=”This is a string constant”;

const char string_constant2[]=”This is also a string constant”;

خب تا اینجای کار با مقدمات زبان C  آشنا شدید برای اطلاعات کامل اول فایل PDF اول را از لینک زیر دانلود کنید و بعد از مطالعه فایل لینک دوم را دانلود و بترتیب مطالعه کنید و اگر سوالی داشتید در قسمت نظرات مطرح کنید.

لینک های دانلود فایل های ضمیمه و ادامه آموزش ها:

دانلود فایل اول

دانلود فایل دوم

#موفق_باشید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

دیدگاهتان را بنویسید

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

27 دیدگاه

  1. عالی بود توزیحات کامل وشفاف

  2. سلام یسوال راجب برنامه نویسی دارم

  3. سلام
    می خواستم بدونم میشه با زبان C مدار RGB طراحی کرد ؟

  4. ببخشد وقتتونو میگیرم .سلام
    میخواستم بدونم توی فایل هایی که توی این صفحه گذاشتید اموزش پخش صدا با استفاده از میکرو کنترلر رو هم داره؟؟؟(با استفاده از بلند گو)

  5. اگه شد یک ذره قیمت هارا بیارید پایین

  6. سلام خوبین میشه یک سوال در مورد برنامه نویسی بپرسم؟

  7. سلام وقتتون بخیر
    ممنون بابت مطالب مفیدی که گذاشتین
    من یه سوال دارم
    بنظرتون میشه با نرم افزار کد بلاکز روی میکرو کنترلر برنامه رو پروگرام کرد؟
    و این که یه پروگرامر مناسب برای atmega 128معرفی کنین
    ممنون

    • میلاد جهاندیده

      سلام بله میشود نوشت فقط احتمالا باید مقدار کوچولو کامپایلر را کانفیگ کنید. اگر اشتباه نکنم از AVR-GCC را پشتیبانی میکن.
      پروگرامر جدید و بروز نمیدونم چی هست من با همین USBasp و stk500 و مشابهاتی که در ایران هم زیاد هست کار میکردم چندسال پیش.

  8. با سلام.میخاستم بدونم کدوم پروگرامر برای pic16fمناسب هست؟

  9. سلام وقت بخیر … من میتونم تلفنی باهاتون صحبت کنم؟ یا ایدی اینستایی چیزی ؟ ممنون میشم

  10. سلام
    در میکرو کنترلر avr و arm میشه داده ها رو با روش socket به سرور ارسال کرد؟؟؟ امکان استفاده از socket در میکرو کنترلرها وجود داره؟؟

  11. ادمین این پیج دقت کنید ، این مطالب نوشته شده صحیح است اما نرم افزاری که با آن کار میشود کد ویژن نیست. زبان کدویژن با زبان سی تفاوت دارد ، شما داری زبان سی که با نرم افزار keil نوشته میشه و مربوط به میکرو arm هست رو داخل سایت تشریح کردید

  12. مهندس بزرگوار تشکر از مطالب عالی شما . امیدوارم همیشه سلامت باشین و مراحل رشد و شکوفایی رو به سرعت طی کنید

  13. خیلی عالی بود خدا خیرتون بده

  14. علیرضا حججی

    سلام ببخشید سوالی داشتم اگه بخوام مقادیر یه ارایه کاراکتری رو جدا کنم و به اینتیجر تبدیل کنم چه کار باید بکنم مثلا char stat[3]={‘1′,”3,’8′,’9’}من میخوام برای درست کردن ماشین حساب ای مقادیر رو جوا و کنار هم بزارم و مثلا یه عدد دو رقمی یا سه رقمی از توش دربیارم میشه کمکم کنید