آیا میدانید بلندترین موی سر دنیا 6 متر است
کدام نگهبان، مواظب نگهبانان خواهد بود. از « از کتاب هجويات اثر جوونال »
Logo

حل تمرینات و پروژه های درس میکروکنترلر
آموزش ميكرو كنترلر AVR به زبان بيسيك (قسمت دوم)

دستورات حلقه
دستور Do-Loop
اين دستور يه حلقه بينهايت ايجاد مي كند كه شما مي توانيد دستورات خودتان را دراين حلقه بنويسيد تا مدام توسط CPU تكرار شود. به عنوان مثال شما مي خواهيد كه يكي از بيت هاي پورت D به صورت يك چشكا زن عمل كنه و تا بي نهايت اين كار رو انجام بده كه برنامه رو به اين صورت مي نويسيم:
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
 شروع حلقه    DO      "
Set portd.0 "portd.0 = 1
يك ثانيه تاخيرWait 1 "
Reset portd.0   "portd.0= 0
Wait 1
 پايان حلقه    Loop        "
 
End
در مثال بالا ميكرو تا ابد اين چند تا دستور رو انجام ميده و ديگه از اين حلقه هم بيرون نمياد!
البته در همين مثال شما مي توانستيد يك شرط بين دستورات بنويسيد تا ميكرو بتونه از اين حلقه بيرون بياد. مثلا يك ليد به ميكرو وصل كرده باشد و حالا اين كليد رو به صورت شرط درون اين حلقه مي نويسد. كه دستورات شرطي را در ادامه خواهيم گفت.


نوعي ديگري از حلقه loop هم هست كه تنها يك بار حلقه را اجرا مي كند (ولي دستورات داخل اون تا زماني كه شرط برقرار نشه اجرا ميشه) و بعد از اينكه شرط حلقه محقق شد از حلقه بيرون مياد.
Do
دستورات
.
.
.
شرط Loop until
 
از اين نوع حلقه loop در ميكرو براي خواند از صفحه كليد زياد استفاده مي شود. به عنوان مثال شما يه صفحه كليد 12 تايي يا 16 تايي به ميكرو وصل كرده ايد و فرض مي كنيم شما عدد 5 را فشار مي دهيد با توجه سرعت اجرايي ميكرو شما قادر نخواهيد بود كه فورا دستون رو از روي صفحه كليد برداريد (لرزش دست) به همين علت مي بينيد كه يه هو 1000 بار عدد 5 رو از زير دست شما مي خونه و تمام برنامه به هم مي خوره. براي همين ما بعد از اينكه از صفحه كليد عدد 5 را خونديم ميكرو رو مي فرستيم درون اين حلقه و بهش ميگيم تا زماني در ون اين حقله بمون كه كاربر دستش رو از روي كليد ها بر داره. بنابراين ميكرو فقط يك عدد را از زير دستمان مي خونه. كه در ادامه به بحث صفحه كليد هم خواهيم پرداخت.
دستور FOR-NEXT
عملكرد اين دستور هم مانند همون حلقه LOOP مي باشد با اين تفاوت كه ما در اينجا يك شمارنده داريم و تا زماني كه عدد شمارنده به مقداري كه براش تعريف كرده اين نرسه دستورات داخل اين حلقه تكرار ميشه. به مثال زير توجه كنيد! ما مي خواهيم كه همون برنامه چشمك زن رو در اينجا دوباره اجرا كنيم اما با اين تفاوت كه مثلا 20 بار فقط اجرا بشن و بعدش ديگه اجرا نشن:
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
Dim m as byte
For m=1 to 20 step 1
Set portd.0 "portd.0 = 1
يك ثانيه تاخيرWait 1 " 
Reset portd.0   "portd.0= 0
Wait 1
Next m
End
خوب ما اميدم و درخط 4 يك متغيير از نوع بايت تعريف كرديم و در خط بعدي نوشتيم { براي m برابر با 1 باشد تا 20 و گام 1 } ما مقدار اوليه متغير m را برابر با 1 كرديم و بعد هم گفتيم STEP=1 يعني اينكه بعد از اجراي تمام دستورات داخل حلقه و رسيدن به دستور NEXT m يك واحد به m اضافه كن. كه در نهايت بعد از 20 بار اجرا شدن اين دستورات ميكرو از حلقه بيرون مياد. STEP گام حلقه مي باشد و شما مي توانيد هر عددي براي اون در نظر بگيريد كه بستگي به شما برنامه تان دارد مثلا اگر STEP 3 قرار داديد بعد از اجراي دستورات و رسيدن به NEXT m 3 واحد به مقدار m اضافه ميشه.
نكته: اگر گام شما در حلقه for برابر با عدد 1 هست ديگه نيازي نيست كه بنويسد STEP 1 و همچنين نوشتن نام متغيير بعد از NEXT هم الزامي نيست.
 
دستور while-wend
عملكرد اين دستور مانند حلقه for مي باشد با اين تفاوت كه براي رسيدن به مقدار شرط اون مي تونيد خودتون در برنامه اين شراط رو محقق كنيد. يعني اينكه با دستورات افزايشي يا كاهشي اين شرط رو ايجاد كنيد. مثال بالا رو براي اين نوع حلقه اينطور مي نويسيم:
 
 
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
Dim m as byte
M=20
While m=0
Set portd.0 "portd.0 = 1
يك ثانيه تاخيرWait 1" 
Reset portd.0   "portd.0= 0
Wait 1
Decr m
wend
End
در اين برنامه ما در خط 5 مقدار پيش فرض m را برابر با 20 قرار داديم و در خط بعدي ابتداي حلقه و شرط حلقه رو ايجاد كرديم. يعني گفتيم كه تا دستورات داخل را مدام تكرار كن و زماني مي توني ديگه تكرار نكني و از حله بري بيرون كه m=0 شده باشد. و در خط 11 هم با هر بار اجراي دساورات بالايي يك واحد از 20 كم ميشه و خط بعدي هم يعني انتهاي حلقه. Wend . و خط آخر هم END مي باشد كه در هر برنامه اي كه ميكرو به اين دستور رسيد ديگه متوقف ميشه.!
و اما دستور IF
دستوري كه زياد كاربرد داره و در كل مي تونيد ميكرو رو باهاش كاملا تو چنگ بگيريد.( من كه زياد به اين دستور علاقه دارم)
اين دستور چندين حالت داره كه يكي يكي اونها رو توضيح ميديم:
1)         دستور   Then شرط IF
اين دستور اينو ميگه: اگر اين شرط برقرار هست سپس دستور را جرا كن. و اگر هم شرط برقرار نيست دستور بعد از Then  را اجرا نكن و خط بعدي برنامه رو بخون.
نمونه كاربرد اين دستور براي مقايسه دو عد هست كه اگر دو عدد با هم برابر بود دستور رو اجرا ميكنه و اگر هم نبود دستور اجرا نيشه و خط بعدي برنامه اجرا ميشه.   به اين مثال توجه كنيد؟!
فرض مي كنيم كه ما از صفحه كليد يه عدد خونديم (به عنوان مثال يك رمز تك رقمي) حالا مي خواهيم كه اگر اين عدد با عدد رمز ما برابر بود LED روشن بشه و در غير اين صورت LED خاموش بشه.
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
 فرض مي كنيم كه عدد از صفحه كليد خونده ميشه و تو K ريخته ميشه   Dim k as byte
Reset portd.0
If k=8 then set portd.0
End
قبل از اينكه ميكرو به شرط برسه ما LED رو خاموش ميكنيم حالا اگر ما عدد 8 را از صفحه كليد وارد كرده باشيم خوب شرط برقرار ميشه و LED رو روشن ميكنه و اگر هم عددي غير از عدد 8 خونده باشه در نتيجه دستور
Set portd.0 اجرا نميشه و LED‌ همچنان خاموش مي ماند
2)
Then شرط IF
مجموعه دستورات مربوط به اين شرط صحيح
Else
 مجموعه دستورات مربوط به اين شرط غلط
End if
اگر شرط ما برقرار بود يعني صحيح بود خوب فقط مجموعه دستورات مربوط به اين شرط صحيح اجرا END IF ميشه. و ميكرو ميره به
در خط بعد يعني Else ما گفتيم در غير اين صورت مجموعه دستورات مربوط به اين شرط غلط رو انجام بده.
و خط آخر هم نوشيم end if يعني پايان اين دو اگر. مثلا ما مي تونيم مثال بالا رو هم اينطوري بنويسيم:
 
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
 فرض مي كنيم كه عدد از صفحه كليد خونده ميشه و تو K ريخته ميشه   Dim k as byte
If k=8 then
Set portd.0
Wait 1
Reset portd.0
Wait 1
Else
Set portd.0
waitms 100
Reset portd.0
waitms 100
end if
end
اگر عدد ما برابر با 8 بود LED به مدت يك ثانيه روشن مي شود و بعد خاموش ميشود و ميكر به مدت يك ثانيه كاري انجام نمي دهد. اما اگر شرط برقرار نبود يعني عدد 8 از صفحه كليد خوانده نشده بود سپس ميكرو به مدت 100 ميلي ثانيه LED رو روشن مي كنه و بعد هم 100 ميلي ثانيه كاري انجام نميده و در آخر به END IF و بعد هم به END ميرسد.
3)
Then شرط1 IF
مجموعه دستورات مربوط به اين شرط 1
Then شرط2 Elseif
 مجموعه دستورات مربوط به اين شرط 2
Else
مجموعه دستورات مربوط به اين شرط 3
End if
اگر شرط 1 برقرار بود دستورات مربوط به اين شرط اجرا خواهد شد و اگر شرط 1 برقرار نبود ولي شرط 2 برقرار بود دستورات مربوط به شرط2 اجرا خواهد شد و اگر هم شرط 2 برقرار نبود (شرط1 هم كه برقرار نبوده) دستورات بعد از Else اجرا مي شوند.
$regfile "m16def.dat"
$crystal=8000000
Config portd=output
If a=5 then
Set portd.0
Wait 1
Reset portd.0
Wait 1
Elseif a=6 then
Set portd.1
Wait 1
Reset portd.1
Wait 1
Else
Set portd.2
Wait 1
Reset portd.2
Wait 1
برنامه به اين صورت عمل ميكنه اگر عددي كه در متغيير A قرار دارد برابر باشد با 5 سپس LED متصل به پورت D.0 به مدت يك ثانيه خاموش و روشن ميشه.
اگر هم برابر با 5 نبود ولي برابر با 6 بود بنابراين LED متصل به پورت D.1 به مدت يك ثانيه روشن و خاموش ميشه .
و اگر هم برابر با 6 نبود يعني هر مقدار ديگري داشت LED متصل به پورت D.2 به مدت يك ثانيه خاموش و روشن ميشه.

خوب در اينجا به پايان قسمت دوم ميرسيم. منظر قسمت هاي بعدي باشيد.!

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.


لینک ثابت این صفحه:   


© کپی برداری از مطالب این سایت تنها با ذکر منبع مجاز می باشد

در صورت داشتن هر گونه سوال، نظر و پیشنهاد راجب این مطلب می‌توانید در قسمت نظرات همین صفحه مطرح نمائید. همچنین با شرکت در نظر سنجی های سایت، ما را در بهبود بخشیدن به مطالب یاری کنید.


آموزش ميكرو كنترلر AVR زبان بيسيك دستور FOR-NEXT دستور while-wend دستور IF Then شرط IF دستور Do-Loop

ارسال شده در مورخه : چهارشنبه، 21 بهمن ماه، 1388 توسط مدیریت بازدید [3074]   پرینت

مرتبط باموضوع :

 كار با EEPROM خارجي و داخلي (قسمت پنجم)  [ چهارشنبه، 21 بهمن ماه، 1388 ] 4528 مشاهده
 آموزش ميكرو كنترلر AVR به زبان بيسيك (قسمت سوم)  [ چهارشنبه، 21 بهمن ماه، 1388 ] 2612 مشاهده
 تبدیل تاریخ میلادی به شمسی  [ چهارشنبه، 6 مرداد ماه، 1389 ] 2492 مشاهده
 دانلود کتاب آموزش مقدماتی میکروکنترلرهای AVR  [ يكشنبه، 18 دي ماه، 1390 ] 1602 مشاهده
 آموزش ميكرو كنترلر AVR به زبان بيسيك (قسمت چهارم)  [ چهارشنبه، 21 بهمن ماه، 1388 ] 2996 مشاهده
 
نام شما: [ کاربر جدید ]

نام شما (ضروری): 
ایمیل شما : 
نظر:
کد امنیتی
کد امنیتی

  [ بازگشت ]
  • امتیاز بدهید
  • انتخاب ها
  • اشترک گذاری
آیا این مطالب مورد رضایت شما واقع گردید؟ لطفا با رای دادن به این مطلب ما را در بهبود بخشیدن به مطالب کمک کنید. با اینکار به سایر دوستان‌تان نیز کمک خواهید کرد.


 فایل پی دی اف فایل پی دی اف

 گرفتن پرينت از اين مطلب گرفتن پرينت از اين مطلب

 ارسال به دوستان ارسال به دوستان

 گزارش این پست به مدیر سایت گزارش این پست به مدیر سایت

پروژه های آماده
پروژه کنترل سروو موتور از 0 تا 180 درجه

کنترل زاویه ای 0 تا 180 درجه؛ قابلیت تعریف بیش 100 برنامه مجزا توسط کاربر؛ تعیین زاویه برای هر پله حرکت سروو موتور؛ تعیین سرعت حرکت سروو موتور؛ تعیین مدت زمان کارکرد در هر برنامه از 1 تا 255 دقیقه. منوی کاربری بسیار آسان برای تعریف برنامه ها. جزئیات...


عناوین مطالب
عناوین مطالب را در موضوعات مربوطه جستجو کنید!
یک موضوع انتخاب کنید:



لینک باکس مهم‌ترین‌ ها
  • پروژه‌ها
  • برترین‌ها
  • پر بازدید
  • بیشترین نظرات
cash10-H8

سالنامه فارسی
ش ی د س چ پ ج
  12345
6789101112
13141516171819
20212223242526
2728293031

دوشنبه

1

1 خرداد ماه، 1391
21/05/2012


رویداد ها:
روز بزرگداشت ملاصدرا - روز بهره وری و بهینه سازی مصرف

جستجو در تقویم ...
cash40-D1

آمار کاربران

نظرسنجی
نظر شما در مورد کیفیت سایت چیست؟

خیلی عالیه
میتونه بهتر باشه
جای کار داره
خوب نیست
نظری ندارم!



شما میتوانید در این مورد نظر مکتوب خود را بنویسید: مشاهد نتایج و ثبت نظر

نظرسنجی ها

تعداد آراء: 679    نظرات: 42

تبادل لینک
PicPars با تمامی وب سایتها و وبلاگها تبادل لینک میکند. ابتدا لینک ما در وب خود ثبت کنید و سپس لینک خود را از اینجا برای ما ارسال کنید. در اولین فرصت لینک شما در سایت ثبت می شود.

پیشنهاد ما

سفارش طراحی پروژه
مرورگر پیشنهادی ما
نرم افزار دانلود فایلها
برنامه فشرده سازی







امتیاز به سایت
امتیاز به این صفحه
با یک امتیاز مثبت از طریق Gmail تان از سایت حمایت کنید