این مقاله به آموزش برنامه نویسی میکروکنترلر هاي AVR به زبان C توسط نرم افزار CodeVision می پردازد. اگر علاقند به یادگیری برنامه نویسی میکروکنترلرهای AVR به زبان #سی در محیط کدویژن هستید این نوشته را در میکرو دیزاینر الکترونیک از دست ندهید.
معرفی زبان 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کاراکتر است
- هر دستور میتواند در یک یا چند سطر ادامه داشته باشد.
- در هر سطر میتوان چند دستور تایپ کرد.
توضیحات :
در یک برنامه نوشته شده با اضافه کردن توضیحات خوانائی و درك برنامه بالا میرود . توضیحات توسط مترجم (کامپایلر) نادیده گرفته میشود. در زبان 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برنامه نویس میتواند ، فایهاي سرآیند تولید کند. حال براي ضمیمه کردن فایل تولید کرده و بصورت زیر عمل میکند :
#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استفاده میشود:
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 اول را از لینک زیر دانلود کنید و بعد از مطالعه فایل لینک دوم را دانلود و بترتیب مطالعه کنید و اگر سوالی داشتید در قسمت نظرات مطرح کنید.
لینک های دانلود فایل های ضمیمه و ادامه آموزش ها:
#موفق_باشید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
عالی بود توزیحات کامل وشفاف
سلام یسوال راجب برنامه نویسی دارم
بفرمائید اگر بلد باشیم در خدمتون هستیم.
سلام یه سوال ومشکلی دارم میتونید راهنمایی کنید
سلام، بله بفرمائید اگر بلد باشم جواب میدم.
سلام
می خواستم بدونم میشه با زبان C مدار RGB طراحی کرد ؟
سلام بله صد در صد. لینک های زیر را ببینید:
پروژه کنترلر RGB LED با بلوتوث موبایل
مدارات RGB
ببخشد وقتتونو میگیرم .سلام
میخواستم بدونم توی فایل هایی که توی این صفحه گذاشتید اموزش پخش صدا با استفاده از میکرو کنترلر رو هم داره؟؟؟(با استفاده از بلند گو)
درود بر شما، در مورد آموزش پخش صدا با میکروکنترلرهای AVR لینک های زیر را مطالعه کنید.
پروژه پخش کننده موسیقی(WAV PLAYER)
پروژه MP3 player
سلام اقا میلاد عزیز…خیلی خوشحالم از اینکه در این جایگاه شمارو میبینم…..هادی نامورم از بچه های خابگاه دانشگاه انقلاب که با شما بودم
سلام آقا هادی
خیلی ممنون.امیدوارم هر جا هستی همیشه موفق و سلامت باشی.
اگه شد یک ذره قیمت هارا بیارید پایین
سلام، فعل حاضر که هیچ محصول فروشی روی سایت نداریم 🙂 ولی بازم سعی میکنیم.
سلام خوبین میشه یک سوال در مورد برنامه نویسی بپرسم؟
سلام، بله بفرمائید اگر بلد باشم جواب میدم.
سلام وقتتون بخیر
ممنون بابت مطالب مفیدی که گذاشتین
من یه سوال دارم
بنظرتون میشه با نرم افزار کد بلاکز روی میکرو کنترلر برنامه رو پروگرام کرد؟
و این که یه پروگرامر مناسب برای atmega 128معرفی کنین
ممنون
سلام بله میشود نوشت فقط احتمالا باید مقدار کوچولو کامپایلر را کانفیگ کنید. اگر اشتباه نکنم از AVR-GCC را پشتیبانی میکن.
پروگرامر جدید و بروز نمیدونم چی هست من با همین USBasp و stk500 و مشابهاتی که در ایران هم زیاد هست کار میکردم چندسال پیش.
با سلام.میخاستم بدونم کدوم پروگرامر برای pic16fمناسب هست؟
سلام، فک کنم PICKIT 3 مناسب باشه ولی من با PIC ها کار نکردم. لینک زیر هم میتونه برات مفید باشه:
https://melec.ir/category/microcontrollers/pic
سلام وقت بخیر … من میتونم تلفنی باهاتون صحبت کنم؟ یا ایدی اینستایی چیزی ؟ ممنون میشم
سلام، محسن جان پشتیبانی VIP نداریم 🙂 ولی هر سوالی داشتی همینجا یا قسمت پرسش و پاسخ بپرسی من در خدمتم.
سلام
در میکرو کنترلر avr و arm میشه داده ها رو با روش socket به سرور ارسال کرد؟؟؟ امکان استفاده از socket در میکرو کنترلرها وجود داره؟؟
سلام، نه متاسفانه. البته شاید در آینده و یا الان یکسری افراد براش لایبری بنویسن ولی اون مفهوم سوکت سیستم عامل های امروزی را من حداقل ندیدم داشته باشه.
ادمین این پیج دقت کنید ، این مطالب نوشته شده صحیح است اما نرم افزاری که با آن کار میشود کد ویژن نیست. زبان کدویژن با زبان سی تفاوت دارد ، شما داری زبان سی که با نرم افزار keil نوشته میشه و مربوط به میکرو arm هست رو داخل سایت تشریح کردید
مهندس بزرگوار تشکر از مطالب عالی شما . امیدوارم همیشه سلامت باشین و مراحل رشد و شکوفایی رو به سرعت طی کنید
خیلی عالی بود خدا خیرتون بده
سلام ببخشید سوالی داشتم اگه بخوام مقادیر یه ارایه کاراکتری رو جدا کنم و به اینتیجر تبدیل کنم چه کار باید بکنم مثلا char stat[3]={‘1′,”3,’8′,’9’}من میخوام برای درست کردن ماشین حساب ای مقادیر رو جوا و کنار هم بزارم و مثلا یه عدد دو رقمی یا سه رقمی از توش دربیارم میشه کمکم کنید