مقدمه

در فصل های گذشته به این نکته اشاره کردیم که قدرتمندترین زبان برنامه نویسی میکروکنترلرها زبان c و c++ می‌باشد. همچنین اشاره کردیم که برنامه نویسی برای یک ماشین بر مبنای پردازنده های RISC  با برنامه‌نویسی برای یک ماشین بر مبنای پردازنده های CISC تفاوت اساسی دارد و آن هم حساسیت بیشتر RISC  نسبت به CISC می باشد که برنامه نویس را مجبور می کند تا با دقت بیشتر و درک بیشتر سخت افزار برنامه نویسی کند. با این دید از میکروکنترلر ها در این فصل گذری بر برنامه نویسی به زبان C  ویژه  میکروکنترلر ها خواهیم داشت و نکات و مفاهیمی که یک برنامه نویس میکرو باید آنها را رعایت کند به همراه انجام مثال ها و پروژه های عملی مربوطه شبیه سازی خواهیم کرد .

C Programming Tutorial

معرفی کوتاه زبان C

زبان برنامه نویسی سی ، زبانی همه منظوره، ساخت یافته و روندگرا می باشد که در سال 1972 توسط دنیس ریچی در آزمایشگاه های بل ساخته شد . به طور کلی زبان های برنامه نویسی را  می توان در سه سطح دسته بندی کرد: زبان های سطح بالا، زبان های سطح میانی و زبان های سطح پایین. زبان سی یک زبان سطح میانی است که در آن هم می توان به سطح بیت و بایت و آدرس دسترسی داشت و هم از مفاهیم سطح بالا که به زبان محاوره ای انسان نزدیکتر است ( مانند حلقه های شرطی if … else و حلقه های تکرار for و while  و…)، بهره گرفت.  در زبان سی هیچ محدودیتی برای  برنامه نویس وجود ندارد و هر آنچه را که فکر می کنید ، می توانید پیاده سازی کنید . ارتباط تنگاتنگی بین زبان c  و اسمبلی وجود دارد ، به این صورت که می توان از برنامه نویسی اسمبلی در هر کجای برنامه زبان سی استفاده کرد .

کلمات کلیدی در زبان C

زبان سی زبان کوچکی است چرا که در آن تعداد کلمات کلیدی 32  کلمه است . کم بودن کلمات کلیدی در  یک زبان مبنی بر ضعف آن نیست . زبان بیسیک حاوی 1.0  کلمه کلیدی است اما قدرت زبان سی به مراتب بالاتر است . زبان سی به حروف کوچک و بزرگ حساس است ( Case Sensitive ) . در این زبان بین حروف  کوچک و بزرگ تفاوت است و تمام کلمات کلیدی باید با حروف کوچک نوشته شوند . در شکل زیر تمام کلمات کلیدی زبان سی را مشاهده می کنید.

C Programming Keywords

نکته :
کلمه کلیدی auto از کامپایلر Codevision حذف شده است.
نکته :
کلمات کلیدی زیر به کامپایلر کدویژن اضافه شده است :

ویژگی های یک برنامه به زبان C

–  هر دستور در زبان سی با ;  ( سمی کالن ) به پایان می رسد .

–  حداکثر طول هر دستور 255 کاراکتر است .

– هر دستور می تواند در یک یا چند سطر نوشته شود .

–  برای توضیحات تک  خطی از // در ابتدای خط استفاده می شود و یا توضیحات چند خطی در بین */ و /* قرار می گیرد .

ساختار یک برنامه به زبان C در کامپیوتر

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

#include < HeaderFiles.h >
محل معرفی متغیرهای عمومی ، ثوابت و توابع 
void main (void)
{
محل مربوط به کدهای برنامه 
}

 

بنابراین همانطور که مشاهده می شود :

  • خطوط ابتدایی برنامه ، دستور فراخوانی فایل های سرآمد ( Header Files ) می باشد .  فایل های سرآمد فایل هایی با پسوند h هستند که حاوی پیش تعریف ها و الگو های توابع می باشند .
  • قالب اصلی برنامه ب مبنای تابعی به نام main بنا شده است . تابعی که اصولا ورودی و خروجی ندارد و کدهای اصلی برنامه را در خود دارد .

تفاوت برنامه نویسی برای کامپیوتر و میکروکنترلر

ساختار فوق یک قالب کلی در برنامه نویسی زبان C در کامپیوتر ( ماشین CISC )  با هدف اجرا در کامپیوتر را نشان می دهد. برنامه نویسی میکروکنترلر ها ( ماشین RISC )  با هدف اجرا در میکروکنترلر ، با برنامه نویسی در کامپیوتر کمی متفاوت است . تفاوت اصلی در کامپیوتر این است که عامل اجرای برنامه ، در زمان ن یاز به عملکرد آن ، یک کاربر است . هر زمان که کاربر نیاز به عملکرد برنامه داشته باشد آن را اجرا می کند و نتیجه را بررسی می کند . اما در میکروکنترلر رفتار یک آی سی است که عامل اجرای برنامه منبع تغذیه است.  با  وصل منبع تغذیه برنامه شروع به کار می کند و تا زمانی که منبع تغذیه وصل است باید کارهای مورد نیاز را دائما اجرا نماید.

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

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

#include < HeaderFiles.h >
محل معرفی متغیرهای عمومی ، ثوابت و توابع
void main (void)
{
کدهایی که در این محل قرار میگیرند فقط یکبار اجرا می شوند
معمولا مقدار دهی اولیه به رجیستر ها در این ناحیه انجام می شود
while(1)
{
کدهایی که باید مدام در میکروکنترلر اجرا شوند
}
}