|
آموزش رباتیک برای دانش آموزان و همه علاقمندان علوم رباتیک و الکترونیک آموزشگاه رباتیک در تهران تلفن : 77422883
قبل از شروع درس کدویژن لازم است به اطلاع دوستان برسانم برای برنامه نویسی آی سی های میکرو کنترلر AVR شما می توانید هم از برنامه بیسیک استفاده کنید و یا از برنامه سی .
یادگیری برنامه بیسیک برای دانش آموزان آسانتر است و درآن صورت لازم است برنامه بسکام را فرابگیرند.
در اینجا آموزش سی و برنامه کدویژن شرح داده شده است ، درس بیست و پنج : آشنایی با برنامه نویسی به زبان C و کدویژن
در اين جلسه نيز در ادامهي مطالب جلسه
پيش، سعي ميکنيم کمي بيشتر با نحوهي برنامهنويسي در زبان
C
آشنا شويم.
متغير قسمتي از حافظه است که ما براي آن يک نام دلخواه انتخاب مي کنيم و از آن براي نگه داري اطلاعات مورد نياز خود در روند اجراي برنامه استفاده مي کنيم. 1- متغيرها با خاموش شدن مدار پاک مي شوند و حافظه ي دائمي نيستند.
2- بايد نوع
اطلاعاتي که قرار است در متغير نگه داري شود، معلوم گردد، مثلاً قرار است
در آن عدد ذخيره شود يا حروف، يا عدد اعشاري يا .... .
براي تعريف يک متغير ابتدا بايد نوع يا تايپ (Type) اطلاعاتي که قرار است در آن ذخيره شود، نوشته شود، و بعد از يک فاصله (Space) نام متغير نوشته شود. به مثال زير دقت کنيد: int a; در اينجا متغيري با نام "a" و از نوع integer يا همان عددي تعريف شده است، يعني در اين متغير فقط مي توان يک عدد صحيح (غير اعشاري) را ذخيره کرد. نکته: اگر يک عدد اعشاري در آن ريخته شود، بخش اعشاري آن حذف مي شود. هر متغير از جنس int، دو بايت حافظه را به خود اختصاص مي دهد و مي توان در آن اعداد در گستره ي32767 تا 32768- را ذخيره کرد. براي ذخيره سازي حروف(Character) بايد متغير از نوع Char تعريف شود. متغيرهاي Char يک بايت حافظه را به خود اختصاص مي دهند و در آن ها مي توان تنها يک حرف را ذخيره سازي کرد. براي ذخيره سازي حروف در حافظه، کد اسکي (ASCII code) حروف در آن ذخيره مي شود. در جدول زير چند نوع داده(Data Type) ي ديگر نيز معرفي شده است.
براي ذخيره سازي اطلاعات در داخل متغيرها نيز از همان عملگر "=" استفاده مي کنيم. مثلاً: sum1=75; مي توانيم متغيرها در همان موقع تعريف مقدار دهي کنيم. به اين کار مقدار دهي اوليه يا "Initialize" کردن ميگويند. مثلاً: int sum1=75; اطلاعاتي که در داخل متغيرها ذخيره مي شود ثابت نيست و مي توان در هر جاي برنامه که لازم بود، مقدار ديگري در متغير ذخيره کرد. مثلاً:
int Cross1=34; اگر بخواهيم مقدار متغير ثابت و غير قابل تغيير باشد بايد قبل از تعيين نوع متغير، کلمه ي "const" را بنويسيم. مثلاً Const float pi=3.14; مي توان چند متغير را با هم تعريف کرد و انها را مقدار دهي کرد. مثلاً: char a1='a', a2, a3, a4='B';
توجه:برای مقدار دهی متغیرهایی که از
جنس "char"
تعریف میشوند، باید مقدار در داخل ' ' قرار بگیرد، به مثال بالا دقت
کنید.
شناسه ها همان نام هايي هستند که براي متغيرها، توابع و ... انتخاب مي شوند. براي انتخاب يک شناسه فقط مي توانيم از حروف زير استفاده کنيم: 1- اعداد 9 تا 0 2- حروف z تا a (حروف کوچک) 3- حروفZ تا A (حروف بزرگ) 4- خط فاصله "_" (Under Line) 5- علامت $ به غير از اين کاراکترها مجاز به استفاده از هيچ کاراکتر ديگري (حتي فاصله(Space) ) نيستيم. همچنين در ابتدا شناسه ها نمي توانيم از اعداد استفاده کنيم. مثلاً شناسه ي 1loop غلط است، ولي Loop1 درست است. طول شناسه ها نيز نميتواند بيش از 32 کاراکتر باشد. بعضي کلمات در اين زبان جزو کلمات رزرو شده (Reserved word) هستند و نمي توانند به عنوان شناسه استفاده شوند مانند:int, float, void, char, while, if ، و ...
1- در پايان هر دستور بايد يک ";" گذاشته شود. 2- جملات و عبارات غير عددي را بايد در داخل " " قرار دهيم. مثلاً اگر مي خواهيم کارکتر B را در داخل متغيري با نام Temp که از جنس char تعريف شده است ذخيره کنيم، بايد بنويسيم: Temp='B'; 3- زبان C در اصطلاح يک زبان Case sensitive است، يعني در اين زبان بين حروف بزرگ و کوچک تفاوت وجود دارد. مثلاً در يک برنامه ما مي توانيم دو متغير با نام هاي "temp" و "Temp" داشته باشيم که ارتباطي هم با يکديگر ندارند. 4- اگر بخواهيم در هر قسمت از برنامه توضيحاتي رو بنويسيم، بايد يک "//" در ابتداي جمله بنويسيم. مثلاً: int a; // etelaate porte C dar in moteghayer rikhte mishavad همچنين اگر بخواهيم چند خط پشت سر هم را موقتاً از روند اجراي برنامه حذف کنيم، بايد علامت"*/" را در ابتدا، و "/*" را در انتهاي ان خطوط قرار دهيم. هرگاه اين 2 علامت را پاک کنيم، دوباره آن قسمت، به روند اجراي برنامه اضافه مي شود. 5- در ساختار زير، هردستور يا دستوراتي که در داخل{} نوشته شود، بي نهايت بار انجام مي شود. در حقيقت while(1)، يک حلقه ي بي پايان است که دستورات داخل آن تا وقتي که مدار فعال باشد، تکرار مي شوند. در جلسات آيند شما با ساختار حلقه ها بيشتر آشنا خواهيد شد. while(1) { PORTD.3=PINA.2; PORTD.4=PINA.3; } اين 2 دستور مکرراً تا زمانيکه ميکروکنترلر فعال باشد، اجرا مي شوند. در بخش برنامه نويسي مطالب بسيار گسترده اي براي آموزش هست، ولي جلسه ي آينده سعي مي کنيم کمي هم از ساير بخش هاي نرم افزاري ميکروکنترلر يعني همان Code vision صحبت کنيم تا تنوعي هم در مطالب ارائه شده داشته باشيم.
درس بیست و ششم : آشنایی با کدویژن این جلسه همانطور که قول داده بودیم، قراره کمی در مورد Codevision توضیحاتی بدیم. در ابتدا دوستان عزیز برای اینکه بتونن مطلب رو با ما دنبال کنند، لازمه که این نرم افزار تهیه کرده و روی کامپیوتر شخصی خود نصب کنند. در زیر این نرم افزار را، برای دانلود دوستان قرار دادیم.(حجم 16مگابایت) دانلود نرم افزار کدویژن به همراه راهنمای نصب :
برای نوشتن یک پروژه ی جدید، باید ایتدا از منوی File، گزینه ی New را انتخاب کنید. یک پنجره ی کوچک در وسط صفحه باز می شود که در آن باید گزینه ی Project را انتخاب کرده و تایید کنید. بلافاصله پنجره ی دیگری باز می شود که از شما سوال می کند آیا تمایل دارید برای انجام پروژه ی خود از CodeWizard استفاده کنید؟ همانطور که گفته شد، CodeWizard یکی از نرم افزارهای جانبی CodeVision است که به وسیله ی یک واسط گرافیکی، در نوشتن برنامه ی اصلی و انجام تنظیمات اولیه پورت ها و ....، کمک بسیار زیادی به ما می کند. پس گزینه ی Yes را انتخاب می کنیم و CodeWizard باز می شود.
اولین لبه ای که ما با آن کار داریم لبه ی Chip است. در این قسمت ما باید نوع میکروکنترلر خودمان را انتخاب کنیم. همانطور که در شکل بالا می بینید، میکرو کنترلر ATmega16L را انتخاب کرده ایم. قسمت Clock مربوط به تنظیم فرکانس کاری آی سی است که ما فعلاً وارد اين مبحث نميشويم و آنرا با همان مقدار پیش فرض می پذیریم. با قسمت های دیگر این لبه هم ما کاری نداریم و آن ها را به همان صورت پیش فرض می پذیریم.
این لبه مربوط به تنظیمات ورودی خروجی پایه هاست.
وقتی پایه ای را به صورت خروجی تنظیم می کنیم، می توان با تنظیم رجیستری PORTx تعیین کرد که سطح ولتاژ خروجی این پایه به صورت پیش فرض 0 باشد یا 1. یعنی در زمانیکه هنوز برنامهي ما برای پایه ها تعیین وضعیت نکرده است، می توان به این طریق سطح ولتاژ اولیه ی پایه را تعیین نمود. CodeWizard در این جا هم کار ما را راحت تر کرده است، در ستون مقابل یعنی ستون "Pullup/Output value" برای پایه هایی که به صورت خروجی تعریف شده اند، می توان با یک کلیک وضعیت خروجی پایه را مشخص کرد. مثلاً الآن پایه ی شماره ی 2 از پورت A به صورت خروجی تعریف شده و در ستون مقابل نیز مقدار پیش فرض خروجی 0 تعیین شده است.
این قابلیت سخت افزاریست و در خانواده ی AVR نیز وجود دارد. Pullup کردن به این معناست که پایه ای را با یک مقاومت بالا(مثلاً 10 کیلو اهم) به + وصل کنیم. اگر هم پایه را با این مقاومت به GND وصل کنیم، می گوییم پایه را Pulldown کرده ایم. مقاومت بزرگ باعث می شود که جریان عبوری به حداقل کاهش یابد، ولی به وسیله ی ولتاژی که بر روی پایه قرار می گیرد، میتوان ورودی مورد نظر را در هنگامیکه هنوز ورودی از خارج دریافت نکرده به صورت پیش فرض 0 یا 1 کرد. وقتی پایه ای را به صورت ورودی تعریف می کنیم، با تنظیم رجیستری PORTx می توان تعیین کرد که پایه ی ورودی به صورت پیش فرض Pullup باشد یا نباشد. دقت کنید که در اینجا نمی توان تنظیم کرد که مقدار ورودی پیش فرض 0 باشد، چون خانواده ی AVR قابلیت Pulldown ندارند وفقط می توان آنرا به صورت Pullup تنظیم نمود، و در نتیجه پایه ای که Pullup شده است در هنگامیکه هنوز از خارج مقداری را دریافت نکرده است، به صورت پیش فرض 1 منطقی شود. حالا بعد از انجام تنظیمات اولیه پورت ها و خود آی سی ، باید از Codewizard بخواهیم تا یک برنامه ی نیمه آماده با توجه به تنظیماتی که تنجان داده ایم در اختیار ما بذاره. برای این کار از منوی File گزینه ی "Generate, Save and Exit" را انتخاب کنید. حالا باید جایی که می خواهید برنامه ی شما Save شود را مشخص کنید. Codevision در اینجا 3 فایل برای برنامه ی شما می سازد که باید آن ها را نام گداری کنید. بهتر است نام این 3 فایل و محل ذخیره سازی آن ها یکی باشد. بعد از ساخته شدن این 3 فایل توسط Codevision برنامه آماده است، حالا شما باید دستورات خود را در محل تعیین شده بنویسید.
|
|