آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

در اين بخش مي‌توانيد آموزش و مثال‌های مرتبط با میکروکنترلرهای AVR را مشاهده بفرمایید

مدیران انجمن: SAMAN, sinaset, شوراي نظارت

مطالب برایتان مفید بود

عالی و ساده بود،ادامه دهید
26
79%
خوب و قابل فهم بود،ادامه دهید
7
21%
ساده و قابل فهم نبود.
0
بدون راي
تکراری و سخت بود.
0
بدون راي
 
مجموع رای گیری: 33

Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خداوند بخشنده و مهربان
باسلام



اما ادامه مبحث عملگرها.

همانطور که در گذشته گفتیم،عملگرها با دستورات متفاوت می باشد، و نمی توان انها را دستور مد نظر گرفت،بلکه برای ما کارهای منطقی و محاسباتی و.. انجام میدهند. عملگرها یکی از تاثیرگذارترین ها در اصول برنامه نویسی هستن،که اگر ما بتوانیم انها را خوب یاد بگیریم،می توانیم برنامه نویسی اصولی تر و منظم تری انجام دهیم .عملگرها ارتباط مستقیم به سخت افزار میکروکنترولر از جمله واحد ALU میکروکنترولر دارند.. برای همین حساسیت خاصی نیز دارند.

یک سوال ساده،از مبحث قبل.

برنامه بنویسید که، مقدار متغیر a را یک واحد افزایش دهد،سپس ان را درون متغیر b بریزد

ابتدا دو متغییر از نوع 0 تا 255 معرفی می کنیم، یعنی :

unsigned char a,b

سپس یک واحد a را افزایش میدهیم و بعد درون b قرارش میدهیم.

;++a
;b=a


به همین راحتی! ایا می توان طوری دیگر مسئله بالا را حل کرد؟! بله!

;++b=a

در برنامه بالا، مقدار a یک واحد افزایش پیدا می کند، سپس به درون b ریخته میشود. به این روش ها، تاکتیک های برنامه نویسی گفته میشود،که معمولا باعث میشود برنامه سریعتر و کوتاه تر نوشته شود.

اما معرفی باقی عملگرها
عملگرهای که در دستورات شرط زیاد استفاده میشود(عملگرهای مقایسه ای )


[HIGHLIGHT=#c0504d]عملگر < بزرگتر 

زمانی نیاز می باشد که ما دو عدد یا متغیر یا ترکیب یک عدد و متغیر، را باهم مقایسه کنیم،که ببینیم کدام یک بزرگ از دیگری می باشد، سپس اقدامات لازم انجام بشود .

برای همین این دستور عمل معمولا همیشه همراه یک شرط می اید. به عنوان مثال گفته میشود،وقتی بین دو متغیر یکی بزرگ تر از ان یکی شد. فلا دستور را انجام بده.. پس این دستور (و دستورات بعدی که گفته میشود) همگی عصایی دست،دستورات شرطی می باشند.

 مثال: 
;unsigned char a=10,b=20

درصورتی که b>a شد ، به خط دستوری که من گفته ام برو و انها را انجام بده .

[HIGHLIGHT=#76923c]عملگر > کوچکتر 

زمانی نیاز می باشد که ما دو عددیا متغیر یا ترکیب یک عدد و متغیر را باهم دیگر مقایسه کنیم،که ببینیم کدام یک کوچکتر می باشد .

برای این منظور باید از علام > استفاده کنیم،

مثال:
;unsigned char a=10,b=20

درصورتی که b<a شد ، به خط دستوری که من گفته ام برو و انها را انجام بده .

[HIGHLIGHT=#76923c]عملگر => و =< کوچکتر مساوی و بزرگتر مساوی 

این دو عملگر به مانند دو عملگر قبلی می باشند، با این تفاوت که کوچکتر مساوی و بزرگ مساوی می باشند.

یعنی اگر در برنامه همچنین چیزی داشته باشیم a>=20 و مقدار a عدد 19 باشد. تا زمانی که a . مقدارش 19 باشد اتفاقی نمی افتد، اما به محض انکه به عدد 20 و بالاتر برسید، اتفاق مد نظر می افتد!
اما اگر عدد مساوی کنار ان نبود یعنی a>20 ، زمانی که a مقدارش 20 شود،اتفاقی نمی افتد! اما به محض بیشتر شدن، اتفاق مد نظر می افتد..

*این تفاوت ها را به خاطر داشته باشید،بعدها در برنامه به شما کمک خواهد کرد.

[HIGHLIGHT=#76923c]اما عملگر == مساویی 

این عملگر، به معنی همان مساوی،ریاضی می باشد.

یعنی اگر a=20 باشد و b=20 و اینطور نوشته شوند a==b ، چون هردو باهم برابر هستن،اتقاف مد نظر ما رقم خواهد خرد.

[HIGHLIGHT=#76923c]عملگر =!  

نامساویی عکس مساویی می باشد،و عملگرش متفاوت می باشد. ما یک عدد به عنوان نامساویی معرفی می کنیم،برنامه هر عددی کمتر از ان و بیشتر از ان باشد را قبول نمی کند!

به عنوان مثال فرض کنید، ما یک حلقه داریم،که می خواهیم، دائم در حال چرخش باشد، و تا زمانی که یک عدد خاص برایش ارسال نشده،به کارش ادامه دهد!

اگر آن را اینطور بنویسیم، حلقه بدرستی کار نمی کند! و فقط زمانی که 0 شد کارش را شروع می کند:

 ;(while(a==0 
در وضعیت بالا فقط زمانی که a مساوی 0 شد، حلقه کار خودش را آغاز می کند، اما بعضی وقت ها نیاز است، که عکس این حرکت اتفاق بی افتد، یعنی حلقه کار کند،اما زمانی که عددش 0 شد فعالیت خود را متوقف کند!

;(while(a!=0

در دستور بالا وقتی برنامه به این دستور برسد وارد حلقه شده و دستورات را اجرا می کند، و تا زمانی که مقدار a به 0 نرسیده، کارش را ادامه میدهد، ولی به محض صفر شدن، فعالیت را متوقف و از حلقه خارج میشود !

پس دستور نامساوی،عملگرش،عکس دستور مساوی می باشد ..

ادامه دارد..

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
با سلام
همانطور که در گذشته گفتیم، علمگردها نقش حیاتی در برنامه نویسی دارند، بهتر است،انها را بخوبی یاد بگیرید تا در اینده بتوانید برنامه نویسی روان تر و صحیح تری داشته باشید

اما در ادامه عملگرها
عملگرها منطقی
منطق،یعنی or و not و and و...
اگر مباحث الکترونیک دیجیتال را مطالعه کرده باشید این اصطلاحات را بهتر درک خواهید کرد.

[HIGHLIGHT=#00b0f0]عملگر ! معروف به  
عملگر ! به معنی نقیض می باشد.یعنی همیشه عکس هم عمل می کنند
در الکترونیک دیجیتال وقتی یک ایسی not را 1 می کردیم، خروجی 0 میشد، و وقتی ان را 0 می کردیم،خروجی 1 می شد، در اینجا هم،می توانیم به کمک علمگرد ! آن را به صورت نرم افزاری انجام دهیم .
به عنوان مثال
X!
وقتی X نات شد .. (برای درک بهتر این مسئله بهتر است مثال، نامساوی را ببینید، تا حدودی شبیه به هم می باشند!)

[HIGHLIGHT=#00b0f0]عملگر && معروف به and 
ما در برنامه نویسی "و" داریم، که در برنامه ها می تواند خیلی مفید باشد. هرگاه بخواهیم دو متغیر را باهم مقایسه کنیم، یا بخواهیم شرطی ها خاص تعریف کنیم می توانیم از && و، استفاده کنیم
به عنوان مثال
a && b
به معنی، a و b (سخت افزار در شرط ها ، می فهمد که این دو باید و حتما، به حد مجاز که ما تایین کردیم برسند ، وگرنه شرط اجرا نمی شود!)
* در مبحث آشنایی با شرط ها، بیشتر با ان اشنا خواهید شد .
[HIGHLIGHT=#00b0f0]
 
[HIGHLIGHT=#00b0f0]عملگر || معروف به OR 
ما در برنامه نویسی "یا" داریم، که در نوشتن شرط ها برنامه نویسی می تواند خیلی مفید باشد .
مثال :
a || b
به معنی ، a یا b (سخت افزار متوجه میشود،که هرگاه یکی از این دو به حد تایین شده (که در مبحث شرط ها معرفی میشوند) رسید،وارد دستورات شرط شوند)

ادامه دارد..
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام

ادامه مبحث عملگرها..

همانطور که دیدید، علمگردها همیشه با یک علامت خاص ، یک مفهوم را می رسانند،اینطور نیازی نیست که ما خط هایی طولانی ،برنامه بنویسیم، و ما فقط با گذاشتن یک علامت،یک مفهوم مثل جمع یا منها، یا کوچیکتر و مساوی یا نامساوی و ... را برای میکروکنترولر ارسال می کنیم ، گرچه ناگفته نماند، در زبان C بدین شکل می باشد، و گرنه در زبان ASM (اسمبلی) کارهای بیشتری باید انجام شود!

اما امروز عملگر شیفت ریجستر را بررسی می کنیم.

[HIGHLIGHT=#e36c09]Shift Register که علامت ان << و >> می باشد . 

شیفت به معنی حرکت می باشد و ریجستر نیز به معنی ثبات(یا یک بایت) می باشد، همانطور که در گذشته توضیح دادیم، هر ثابت یا ریجستر از هر 8 بیت تشکیل شده است. پس شیفت ریجستر به معنی حرکت بیت هایی یک ریجستر می باشد!(*لازم به ذکر است،همیشه همه ثبات 8 بیتی نیستن! بعضی وقت ها 16 و 32 بیتی نیز هستن،که بعدا با ان اشنا خواهید شد)

در برنامه نویسی بعضا پیش می اید،که ما بخواهیم، بیت های ثباتی را به سمت راست و یا چپ حرکت دهیم، برای همین از شیفت ریجستر استفاده می کنیم

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

[HIGHLIGHT=#00b0f0]عملگر>> شیفت به چپ 

علمگرد شیفت به چپ،،محتویات یک ثبات را به سمت چپ شیفت یا حرکت می دهد

به عنوان مثال:

مقدار متغیر a به باینری (یا همان کدهای 0 و 1 خودمان) 00000001 می باشد،

a<<1

یعنی 1 واحد متغیر a را به سمت چپ حرکت یا شیفت بده ، پس a میشود 000000010

*ما می توانیم بجایی 1واحد ، هر عددی که می خواهیم متغیر شیفت پیدا کند را قرار دهیم


[HIGHLIGHT=#00b0f0]عملگر << شیفت به راست 

علمگرد شیفت به راست،،محتویات یک ثبات را به سمت راست شیفت یا حرکت می دهد

به عنوان مثال:

مقدار متغیر a به باینری 10000000 می باشد،


a>>1

یعنی 1 واحد متغیر a را به سمت راست حرکت یا شیفت بده ، پس a میشود 01000000

*ما می توانیم بجایی 1واحد ، هر عددی که می خواهیم متغیر شیفت پیدا کند را قرار دهیم

*به کمک شیفت ریجستر می توان کارها پیچیده و مفید انجام داد، انها را هیچ وقت دست کم نگیرید ..

ادامه دارد..

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام


ادامه مبحث عملگرها

[HIGHLIGHT=#e36c09]عملگر مکمل ~
 
در برنامه نویس عملگری به نام مکمل وجود دارد،که وظیفه ان برعکس کردن،بایت های یک ریجستر می باشد.

فرض کنید ما یک کد باینری بدین شکل داریم 00001111 حال می خواهیم عکس آن شود،بنابر این از مکمل استفاده می کنیم

به عنوان مثال

مقدار a را 00001111 قرار می دهیم بعد:

(a)~

حال وقتی،برنامه به خط بالا برسد،کدها را برعکس می کنید،یعنی ان را به 11110000 تبدیل می کنید

یا اگر مقدار a را 00000000 قرار داده بودیم، ان را به 11111111 تبدیل می کرد
یا اگر مقدار a را 00000001 قراره داده بودیم،آن را به 11111110 تبدیل می کرد
و...


به طور کلی مکمل وضعیت 0 و 1 یک ریجستر را عکس می کند. و در کارها می تواند به ما کمک کند.(که انشالله در اینده بیشتر با ان اشنا خواهید شد)
[HIGHLIGHT=#e36c09]
عملگر & AND
عملگر| OR
 
تصویر
تصویر
در پست های قبلی با عملگر && ، اما وقتی به تنهایی استفاده شود & تبدیل به عملگر AND بیتی می شود، (که تا حدودی زیادی شبیه با && می باشد،) وقتی به صورت && نوشته شود به معنی "و" می باشد ولی وقتی & باشد، به معنی AND (منطقی می باشد )
عملگر OR تنها | به مانند || می باشد،که به معنی منطق دیجیتال می باشد.

[HIGHLIGHT=#e36c09]عملگر XOR ^ 

عملگر منطقی xor که در مبانی دیجیتال خوانده ای اکنون می توانید در برنامه نویسی هم به کار ببریدی

منطق xor می گوید:
تصویر
می گوید وقتی دو متغیر یا عدد در هردو 0 باشد یا که هردو 1 باشد،(یا که باهم برابر باشند) خروجی 0 (یا بدون تغییر می باشد) اما وقتی یکی از دو متغیر به تنهایی ،بیشتر شود، شرط نقض شده، دستور اجرا میشود (یا که 1 میشود)

به عنوان مثال:

;unsigned char a=0,b=0

a=b^a


در وضعیت بالا، چون a و b هردو صفر هستن، در نتیجه مقدار 0 درون a ریخته میشود، اما

a=0,b=20

a=b^a

در وضعیت بالا، چون b بیشتر از a شده است و یکی از شرایط xor اجرا شده است، مقدار 20 به درون a ریخته میشود .

ادامه دارد..
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام

[HIGHLIGHT=#00b0f0]عملگر مساوی = 

عملگر = مساوی که تابحال با اشنا شدید و نیازی به توضیح زیادی ندارد، به عنوان مثال

a=b

یعنی a مساوی است با مقدار b

a=30

یعنی a مساوی است با مقدار 30

a=a+b

یعنی a مساوی است با جمع aوb

---
اما نکته جالب مورد بحث امروز ما.
ما می توانیم همه عملگرها برای جمع و ضرب و تقسیم و ...! دو متغیر را به صورت [HIGHLIGHT=#ffc000]خلاصه تر  بنویسید، تا وقت کمتری از ما گرفته شود

اکنون یاد گرفتید،وقتی می خواهید دو متغیر را جمع کنید، به روش زیر عمل کنید:

a=a+b

در روش بالا خود متغیر a را هم باید بنویسیم، اما یک روش ساده تر نیز وجود دارد،

a+=b

این روش خلاصه تر، روش بالا می باشد! در این روش نیازی نیست که خود a را بنویسیم(یعنی خود متغیری که قرار است نتیجه در ان قرار بگیرید)، با اضافه گردن عملگرقبل از = و نوشتن متغیر مورد نظر بعد از مساویی می توانیم،دقیقا همان کاری که در روش اول گفتیم را به صورت خلاصه انجام دهیم

[HIGHLIGHT=#c0504d]همه عملکردها به شکل خلاصه،بدین شکل می باشد: 

 عملگر ضرب =*
عملگر تقسیم =/
عملگر باقی مانده تقسیم =%
عملگر جمع =+
عملگر تفریق =-
عملگرAND =&
عملگرXOR =^
عملگر OR =|
عملگر شیفت به چپ=>>
عملگر شیفت به راست =<< 


همه عملگرهایی که گفته شد،بصورت خلاصه تر می باشد،که می توانید در برنامه ها از انها استفاده کنید.

پایان مبحث عملگرها.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خداوند بخشنده و مهربان
باسلام


در مطالب قبلی با عملگرها آشنا شدیم(البته چند عملگر رو معرفی نکردیم،که انشالله در اینده بصورت کوتاه به ان خواهیم پرداخت)، و دانستیم که نقشه اصلی و اساسی در نوشتن شرط ها دارن امروز می خواهیم،با خود دستور شرط آشنا شویم

شرط در برنامه نویسی

ما در برنامه نویسی،برای اینکه کارهایمان را، درست و به موقعه انجام دهیم،نیازی داریم،مجموعه از شرط ها را، برای برنامه خود بنویسیم . و عملا بدون نوشتن شرط،برنامه ما دیگر هوش و قابلیت تشخصی ندارد!!!

پس شرط ، یک اصل بنیادین(یا همان ریشه ی) در برنامه نویسی می باشد،که باید همیشه ان را مد نظر داشت

[HIGHLIGHT=#e36c09]دستور شرط IF 

مهم ترین و اصلی ترین دستورات شرطی، با if شروع میشوند،که if به فارسی به معنی اگر (دستوری) می باشد.

اصول نوشتن دستور برای دستور if:
Please Login or Register to see this code ابتدا خود دستور if را به صورت کوچک می نویسیم،(که خود سیستم ان را B یا بولد یا بزرگ می کند) سپس پرانتز را باز می کنیم"(" [HIGHLIGHT=#76923c]و بعد اقدام به نوشتن شرط می کنیم و بعد اقدام به   ") " بدین ترتیب شرط ما نوشته شده،حال می خواهیم وقتی شرط مورد نظر مورد نظر ما اجرا شد،دستورات نیز به صورت جداگانه اجرا شوند برای همین بعد از بستن پرانتز شرط، پرانتز دستورات را باز می کنیم "{" [HIGHLIGHT=#ff0000]و در اینجا دستور العمل هایی که می خواهیم بعد از اجرا شدن شرط،به صورت جداگانه انجام شوند،را می نویسیم، سپس اقدام به بستن پرانتز می   "}" اما اگر بعد از پرانتز چیزی قرار ندهیم،میکروکنترولر متوجه نمی شود که شرط بطور کل به پایان رسیده و نظم برنامه بهم می خورد!، برای همین باید از [HIGHLIGHT=#00b0f0]عملگر ;   استفاده کنیم،که همیشه بعد از اتمام شرط و تعریف متغیر ها و .. باید ان را قرار داد، تا سیستم این نکته را متوجه شود،که دستور یا تعریف یا ... به پایان رسیده.

مثال برای دستور if:
Please Login or Register to see this code
همانجور که در مثال بالا دیدید، دو متغیر تعریف شد، سپس وارد حلقه while شدیم،تا دستورات دائم بررسی شود (همانجور که قبلا نیز گفتم،اگر از حلقه while استفاده نشود،دستورات فقط یک بار بررسی میشود،لطفا مبحث حلقه while را یک بار دیگر مطالعه فرمایید)

حال شرط تعریف شده ما بررسی میشود،به محض اینکه شرط تعریف شده ما،قابلیت اجرا داشت، سیستم فورا دستورات ما را انجام میدهد. در مثال بالا،همان بار اول که وارد حلقه میشود،چون a با b برابر است، فورا دستور اجرا میشود، یعنی 10 واحد به متغیر a افزوده میشود . و دیگر هیچ وقت دستور تعریف شده اجرا نمی شود! چون دیگر مقدار a از بیشتر شده است!

* نکته مهم ، همیشه وقتی می خواهیم دو متغیر را در دستور شرطی باهم مقایسه کنیم (مقایسه که ایا باهم برابر هستن) باید دو علامت == بگذاریم وگرنه سیستم اشکال می گیرد. برای باقی دستورات عملگر مورد استفاده در دستورات شرط نیز باید همیشه سمت راست ان علامت = باشد. به عنوان مثال a>=b و ..(که البته انشالله بعدا این موارد را یاد خواهید گرفت)
ادامه دارد.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام


ادامه مبحث شرط if

همانجور که در مطلب قبلی اشاره شده،به کمک دستور if می توان، یک شرط برای برنامه خود تعریف کرد،که این شرط به نوعی هوش سخت افزار ما می باشد.

اما شرط if را می توانیم کمی تکمیل تر هم کنیم! :

[HIGHLIGHT=#76923c]دستور else به همراه if
 
گاهی وقت ها، می خواهیم، به طور کل،[HIGHLIGHT=#f79646] دو گزینه برای میکرو تعریف کنیم ،به عبارتی بگویم، یا این کار رو انجام بده! یا این کار رو انجام بده.! یعنی حتما باید بین این دو راه یکی را انتخاب کنی!

حال ابتدا می ایم، یک شرط به کمک دستور if می نویسم، اما بعد از تکمیل شدن دستور if (مثل مثال صفحه قبل) دستور else را اضافه می کنیم و مجموعه دستورالعمل ها جدید را می نویسیم.!

[HIGHLIGHT=#00b050]در واقع ما به سیستم می گویم، اگر شرط if قابل اجرا بود،که هیچ،دستور العمل های داخل شرط if را اجرا کن، اما اگر شرط if قابل اجرا نبود! به سراغ else برو و دستورالعمل ها را اجرا کن! 

*else به معنی دیگر، دیگری می باشد

به عنوان مثال:
Please Login or Register to see this code
در مثال بالا، به متغیر a مقدار 9 داده شده و به متغیرb مقدار 10 داده شده. برنامه ابتدا وارد حلقه میشود، می ببیند که مقدار aوb باهم برابر نیستن! برای همین سراغ else می رود، و مقدار a را 10 می کند. برنامه از دوباره از شرط if شروع میشود،اما اینبار دستور if قابل اجرا میشود،پس اجرا میشود(و به مقدار a با عدد 10 جمع میشود) و دستور else اجرا نمی شود! اما برنامه در چرخش بعدی،وقتی به دستور if میرسد،چون مقدار a و b مساوی نیست به سراغ else می رود و از دوباره مقدار a را 10 می کند و بازهم همان چرخه که گفته شده ادامه پیدا می کند.

بطور کلی دستور else مکمل دستور if در شرایط خاص می باشد و می توانند راهگشا مسائل باشد، و نباید ان را دستکم بگیرید..

ادامه دارد..
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام


ادامه مبحث شرط if

[HIGHLIGHT=#e36c09]دستور else if
 
اما گاهی وقت ها نیاز نیست که اجباری در انتخاب دو گزینه باشد! و قصد داریم،گزینه هایی بیشتر معرفی کنیم،برای همین از دستور else if استفاده کنیم

* دقت کنید،تفاوت دستور else تنها بعد از if ، میکرو را مجبور می کند،که بین دو راه، را انتخاب کند،اما دستور else if بدین شکل نیست و اجبار نیست..!( else if ها به مانند if نوشته میشوند، و باید شراط شان قابل اجرا باشن،تا اجرا شون)

[HIGHLIGHT=#00b050]اصول نوشتن دستور else if 

ابتدا دستور if

if ( شرط ها ) و بعد { دستورات)

و بعد

else if (شرطها) و بعد {دستورات)
else if (شرطها) و بعد {دستورات)
else if (شرطها) و بعد {دستورات)
else if (شرطها) و بعد {دستورات)
else if (شرطها) و بعد {دستورات)
و.......
* تا هر مقدار که شما نیاز داشته باشید else if

ما در دستور else ،شرط خود را نمی نویسیم،اما در دستور else if باید شرط هر دستور را بنویسیم (به نوعی شبیه به خود دستور if )

سیستم ابتدا به سراغ دستور if می رود، درصورتی که قابل اجرا نبود، به سراغ باقی دستورات else if می رود و انها را اگر قابل اجرا بودن،اجرا می کند ، در غیر صورت انها را نیز اجرا نخواهد کرد ( این در حالیست که در دستور else چنین نبود!)

به عنوان مثال:
Please Login or Register to see this code
در مثال بالا، مقدار 10 به b و مقدار 5 به a داده میشود. بعد برنامه وارد حلقه میشود، ابتدا، دستور if را بررسی می کند، چون مقدار a و b باهم برابر نیستن، به سراغ دستور else if اول می رود،چون مقدار a بزرگ تر از b می باشد، شرط اجرا میشود و مقدار a به 10 تغییر می کند،در دستور else if بعدی، چون مقدار a با b برابر شده است، شرط اجرا نمی شود، چرخه به ابتدا بر می گرد، اینبار چون مقدار aوb برابر شده، مقدار b را 20 می کنند.سپس به اولین دستور else if میرسن،چون مقدار a بزرگ تر از b نیست، دستور اجرا نمی شود،سپس شرط بعدبررسی میشود، چون مقدار a کوچکتر از b است ، شرط اجرا می شود و مقدار b را بربر 10 می کنند و ...

بطور کلی شرط های else if که در کنار if گذاشته میشود،به نوعی مکمل یا کمک کننده شرط if می باشد، و می توان به کمک ان کارها را دقیق تر و بهتر انجام داد و نباید ان را نیز دست کم گرفت.

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خداوند بخشنده و مهربان

در پست ها قبلی با نحویه نوشتن دستورات if و else if اشنا شدید. اما این دو دستورات در دل خود،[HIGHLIGHT=#f79646]قابل انعطاف می باشند.  یعنی می توان خود دستورات را بر اساس نیاز پیشرفته تر کرد.

به عنوان مثال،می خواهیم، چندین شرط فقط در یک دستور if بنویسیم !

نوشتن چند شرط در یک دستور if

مسئله چندان پیچیده نیست! بلکه بسیار ساده است .

فرض کنید،ما یک ربات 5 سنسوره داریم،که این پنج سنسور هر کدام به یک پایه از میکروکنترولر اتصال داده شده :
Please Login or Register to see this code
همانجور که می ببینید به پایه 0 تا 4 پورت B میکروکنترولر وصل شده اند.

حال می خواهیم،وقتی ربات بر روی سنسور سوم (یعنی سنسوری که وسط قرار دارد، یعنی PORTB.2)، قرار گرفت، ربات یک مسیر مستقیم را طی کند. برای چنین کاری نمی شود، از چندین else if و یا if نوشت! چون اوضاع کمی پیچیده میشود . برای همین کار زیر را انجام میدهیم:

(if (PORTB.0==0 && PORTB.1==0 && PORTB.2==1 && PORTB.3==0 && PORTB.4==0

همانجور که می ببینید پنج شرط را نوشته ایم و مابین انها از عملگر && (که به معنی حتما،باید و اجبار ) استفاده شده است. بدین معنا که، زمانی PORTB.0 و PORTB.1وPORTB.3 وPORTB.4 برابر با مقدار 0 بودن و PORTB.2 برابر با مقدار 1 بود، دستورات را انجام بده . (*لازم به ذکر است،اگر هر یک از دستورات قابل اجرا نباشن،بطور کلی شرط اجرا نمی شود، )

به غیر از مثال بالا،بطور کلی می توان برای هریک از دستورات if یا else if ، تعدادی شرط با عملگر && و || و... تعریف کرد .

شرط های تو در تو

ما می توانیم،[HIGHLIGHT=#ffc000] در دل دستورات یک شرط، یک شرط دیگر تعریف کنیم  (و بازهم به هر تعداد که می خواهیم،ان را تو در تو کنیم! )
Please Login or Register to see this code
این قابلیت جالب در برنامه ها نیاز میشود و نباید ان را نیز دست کم گرفت .

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خداوند بخشنده و مهربان
باسلام



حلقه ها.

اما مبحث حلقه ها،که جزو مسائل مهم در برنامه نویسی می باشد (که البته صفحه هات قبل نیز اشاره به ان کردیم).

شاید اصلی ترین سوال در رابطه با حلقه این است که،ما اصلا چرا باید از حلقه استفاده کنیم،مگر حلقه ها چه کار خاصی انجام میدهن!

میکروکنترولر همیشه تک تک خط ها را می خواند و بعد به سراغ خط بعدی می رود. پس از پایان برنامه نوشته شده،از دوباره به به اول بر می گردد! و این اصلا خوب نیست! و ما همیشه نیاز داریم،برنامه در یک جایی متوقف شود و روی کدهایی نوشته شده ما متمرکز شود و کدهایی که قبلا اجرا شده (مثل کتابخانه ها و وضعیت سخت افزار میکروکنترولر و ..) را یک بار دیگر اجرا نکند!.. برای همین،[HIGHLIGHT=#c0504d]ما باید و حتما در تابع اصلی خودمان از معروفترین و واجب ترین حلقه،یعنی while استفاده  . تا میکرو کنترولر دیگر فقط وضعیت حلقه را دائم بررسی کند.

[HIGHLIGHT=#4f6128]حلقه while 

حلقه while همانطور که گفته شد،همیشه باید در اخر تابع اصلی تعریف شده،حتا اگر برنامه در ان نوشته نشود!! (این نکته را همیشه مد نظر داشته باشید)

مکانیزم حلقه while ساده می باشد.این حلقه از اولین خط نوشته شده،تا اخرین خط نوشته شده ،درونش را به ترتیب می خواند و اجرا می کند، در صورتی که شرطش نقض نشده باشد،از دوباره همان کار را انجام میدهد !(تا زمانی که شرط نقض شود)

[HIGHLIGHT=#00b050]اما ما برای تابع اصلی باید حلقه بی پایان تعریف کنیم،حلقه که هیچ وقت شرطش نقض نشود، برای این منظور با گذاشتن عدد 1 در شرط حلقه while ، ان را بی نهایت می کنیم! 
Please Login or Register to see this code
*بازهم این نکته را تاکید می کنم،در تابع اصلی به مانند روش بالا،همیشه باید یک حلقه بی نهایت تعریف کرد (چه دستوری باشد ، چه نباشد)

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

به عنوان مثال، فرض کنید،به پایه PORTB.0 یک کلید وصل کرده ایم، که در صورتی که فشار داده شود، PORTB.0 در وضعیت 1 قرار بگیرید. حال می خواهیم، تا زمانی که PORTB.0 در وضعیت 1 قرار دارد،برنامه خط بعدی را نخواند و اصلا جلو نرود !

برای این منظور :

(if (PORTB.0==1
}

(while(PORTB.0==1

{

زمانی که PORTB.0 وضعیتش 1 میشود،شرط if اجرا شده و دستور while خوانده میشود، چون شرط while یک بودن PORTB.0 می باشد، تا زمانی که کلید در وضعیت یک است (یا شخصی ان کلید را نگه داشته باشد) در حلقه می می ماند. و زمانی که 0 شود،از حلقه خارج شد و باقی دستورات اجرا میشود .


محدودیت در استفاده از حلقه while نمی باشد، و می توان از انها در هرجایی برنامه استفاده کرد،و می توان حلقه while را به مانند دستور if ،تو در تو نیز به کار برد

ادامه دارد..

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام


[HIGHLIGHT=#e36c09]حلقه do  

اما یک نوع حلقه دیگر داریم،که اندکی با حلقه while تفاوت دارد. و تفاوتش این است که،ابتدا دستورات اجرا و خوانده میشوند،سپس شرط حلقه بررسی می شود

اصول نوشتن

}do

دستور العمل ها

;(شرط)while{

به عنوان مثال:
Please Login or Register to see this code
یک متغیر به نام a تعریف کرده ایم،سپس مقدارش را 0 کرده ایم، برنامه بعد از رسیدن به do وارد حلقه شده،و میزان a را یک واحد افزایش میدهد،سپس شرط حلقه بررسی میشود و ...


به همین سادگی،البته این حلقه کمتر کاربرد دارد (یا حداقل اینجانب کمتر در برنامه دیده ام،از do while استفاده شده باشد!)

اما ما دو دستور داریم که در حلقه ها کاربرد دارن(در واقع بیشتر برای این منظور ساخته شد اند.) دستور break و continue

[HIGHLIGHT=#f79646]دستور  

تصور کنید،در یک حلقه بی نهایت (یا با شرط)هستید،می خواهید در جایی از حلق بیرون بی آید، برای این منظور از دستور break استفاده می کند.

به عنوان مثال:
Please Login or Register to see this code
در برنامه بالا،میکرو بعد از وارد شدن در حلقه اول،و رسیدن به دستور break بلافاصله از حلقه خارج میشود،سپس دستورات بعد از حلقه می خواند و اجرا می کنند(که در بالا مشخص کرده ایم)

دستور break یک دستور کاربردی و خوب در حلقه while می باشد،همیشه ان را به خاطر داشته باشید.(*لازم به ذکر است،دستور بریک در جاهایی دیگر غیر از حلقه ها نیز استفاده میشود)
[HIGHLIGHT=#e36c09]
دستور continue 

اما گاهی وقت ها نیاز است، حلقه را از یک جایی به بعد ریستارت کنیم.(در واقع به خط اول حلقه ان را برگردانیم)،برای این منظور باید از دستور continue

به عنوان مثال:
Please Login or Register to see this code
برنامه وارد حلقه میشود،چون مقدار a کوچیکتر از 10 می باشد،شرط اجرا شده و دستور continue خوانده شده، و به خط اول بر می گردد،تا زمانی که مقدار a به 10 نرسد،همین روند ادامه دارد و ..

دستور continue دستور کاربردی می باشد، اما نه به اندازه دستور break اما همیشه باید ان را مد نظر داشت.

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22099 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خداوند بخشنده و مهربان
با سلام

ما به غیر از حلقه while ، حلقه دیگری نیز داریم، حلقه که می توانیم تعداد دفعات چرخشش را کنترولر کنیم!

[HIGHLIGHT=#c0504d]حلقه  

حلقه for بعد از while جزو حلقه ها معروف و مهم در برنامه نویسی می باشد .

در زمان برنامه نویسی، زیاد اتفاق می افتد،که ما بخواهیم حلقه را به تعداد دلخواه یا یک حد مشخص بچرخانیم،برای این منظور از حلقه for استفاده می کنیم .

اصول نوشتن حلقه for

(شمارنده حلقه;شرط حلقه;مقدار دهی اولیه)for
}

دستور العمل ها
...
...
{

مقدار دهی اولی: ما در اینجا باید یک متغیر قرار دهیم (متغیری که قبلا ان را تعریف کرده ایم)
شرط حلقه: حلقه تا زمانی که شرطش قابل اجرا باشد،به کار خودش ادامه میدهد،بعد از شرط نقص شود،از حلقه خارج می شود
شمارنده حلقه:هربار که حلقه به ابتدا بر می گردد،بعد از بررسی شرط،این دستور را اجرا می کنند(که معمولا یا مقداری را افزایش یا کاهش میدهد ) (*برای درک بهتر این مسئله بهتر است مثال را ببینید)

فرض کنید،می خواهیم، حلقه 5 بار تکرار شود ،سپس در هربار تکرار مقدار متغیر درونش را،با عدد 5 جمع بزنند.


;unsigned char i
;unsigned char b=0


(++for(i=0 ; i<5 ; i
}


;b=b+5

{

در مثال بالا،دو متغیر تعریف کرده ایم. متغیر i برای حلقه for و متغیر b برای اعمال تغییرات مد نظرمان!

حلقه for خوانده میشود،سپس ابتدا مقدار i مساوی با 0 میشود. چون i کوچیکتر از 5 می باشد، حلقه یک بار تکرار میشود، و مقدار i یک واحد افزایش پیدا می کند (شمارنده حلقه) سپس حلقه یک بار دیگر تکرار میشود، و بازهم یک واحد i افزایش پیدا می کند. و ... تا زمانی که مقدار i به پنج برسد،همین روند ادامه پیدا می کند،بعد از انکه مقدار i بیشتر از 5 شد،شرط حلقه نقض میشود، و برنامه از حلقه خارج میشود ...

به طور کلی حلقه،کدها بسیار خوب برای زمانیست که ما نیز با چرخش ها دقیق داریم و واقعا نبود حلقه for باعث میشد،که ما حجم زیادی از کدها را بنویسیم!

ادامه دارد..

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
ارسال پست

بازگشت به “آموزش و مثال‌ها AVR”