در اين قسمت آموزشي به تشريح دستور CASE و زير برنامه ها و نحوي فراخواني آنها مي پردازيم.

دستور العمل CASE :

به كمك اين دستور شما مي تواند محتواي يك متغيير را نسبت به يك بازه عددي انتخاب كنيد و سپس براي اين بازه ها زير برنامه بنويسيد تا ميكرو اين برنامه ها را نسبت به محدوده بازه و متغيير انجام بده.

ساده تر ميگيم: به عنوان مثال شما يك برنامه دماسنج مي خواهيد بنويسيد. بعد از اندازه گيري دما شما مي خواهيد به ميكرو بگيد كه اگر دما از 0 تا 20 درجه بود فلان كار رو انجام بده و اگر دما از 21 تا 30 بود فلان كار رو انجام بده و اگر دما از 31 تا 40 بود فلان كار رو انجام بده. به همين سادگي شما مي توانيد به ميكرو فرمان بدهيد كه اگر دما در اين بازه بود اين كار رو انجام بده.

همين توضيحات رو به كمك اين دستور به صورت برنامه مي نويسيم:

Regfile="m8def.dat"

Crystal=8000000

Dim t as byte

.

برنامه اندازه گيري دما و ريختن عدد دما در متغيير T .  

.

Select case  t

Case 0 to 20 :

                 

Case 21 to 30:

                 

Case 31 to 40:

                 

End select

قالب اين دستور به اين صورت مي باشد   متغيير    select   case

     شما مي توانيد تعداد زيادي CASE تعريف كنيد بستگي به برنامه تون داره. و در نهايت با دستور END SELECT به دستور SELCET CASE خاتمه مي دهيد.

همچين شما مي توانيد CASE را به اين صورت هم انتخاب كنيد:

مثلا اگر دما بزرگتر از 35 درجه بود فلان كار رو انجام بده:

Select  case t

Case is >35

End select

و يا كوچكتر باشد:

Select  case t

Case is <35

End select

و يا CASE ما يه عدد خاص باشد مثلا 20 درجه:

Select  case t

Case 20:

End select

خوب انواع حالت هاي مختلف اين دستور را همرا با يك مثلا گفتيم. اميدورام كه متوجه شده باشيد.

معرفي زير برنامه ها :

براي اجراي يك زير برنامه ابيتدا بايد در اوايل برنامه نام ريز برنامه را تعريف كنيم و بعد هم بقيه كار ها مانند فراخواني در 8051 مي باشد.

قالب آن به اين صورت مي باشد:

نام متغيير      Declare sub

.

.

.

: نام متغيير

دستورات زير برنامه

End sub

با يك مثال اين دستور را بيشتر توضيح مي دهيم:

Regfil = "m8def.dat"

Crystal = 8000000

Config portb= output

Declare sub  wait_d

Dim s as byte

Do

Portb= 20

Call  wait_d

Portb= 50

Call  wait_d

Portb= 55

Call  wait_d

Loop

End

 

wait_d:

for  s =1 to 10

waitms  1000

next s

end sub

خوب ما در اين برنامه مي خواستيم سه عدد 20 و 50 و 55 را با فواصل زماني 10 ثانيه به خروجي پورت B بفرستيم. براي اينكه طول برنامه زياد نشود ما برنامه تاخير 10 ثانيه اي رو به صورت يك زير برنامه نوشتيم و هز ر جا كه لازم شود به كمك دستور Call آن را فراخواني مي كنيم.

ابتدا در اول برنامه ما نام زير برنامه يعني wait_d  را تعريف كرديم و در آخر برنامه اين اسم رو نوشتيم و بعد اون هم : گذاشتيم كه در اينجا شروع زير برنامه مي باشد و بعد هم برنامه رو نوشتيم و در نهايت دستور END SUB رو مي نويسيم.

حالا هر جا كه لازم باشه از تاخير 10 ثانيه اي استفاده كنيم كافي بنويسيم Call  wait_d

 

دستور Gosub:

عملكرد اين دستور هم شبيه به دستور بالايي مي باشد با اين تفاوت كه لازم نيست نام زير برنامه رو تعريف كنيم. و همچنين آخر زير برنامه ديگه با END SUB تمام نميشه بلكه بايد RETURN بنويسيم.

مثال بالا رو با اين دستور مي نويسم:

Regfil = "m8def.dat"

Crystal = 8000000

Config portb= output

Dim s as byte

Do

Portb= 20

gosub  wait_d

Portb= 50

gosub  wait_d

Portb= 55

gosub  wait_d

Loop

End

 

wait_d:

for  s =1 to 10

waitms  1000

next s

Return

 

در قسمت بعدي به آموزش پيكره بندي و امكانات AVR مي پردازيم.

آموزش ميكرو كنترلر AVR به زبان بيسيك || قسمت دوم

آموزش ميكرو كنترلر AVR به زبان بيسيك || قسمت اول