• ¡Welcome to Square Theme!
  • This news are in header template.
  • Please ignore this message.
مهمان عزیز خوش‌آمدید. ورود عضــویت


امتیاز موضوع:
  • 17 رای - 2.12 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Title: آموزش کامل بسکام به همراه مثال
حالت خطی
#7
نقل قول: For - Next :
فرم کلي دستورات FOR .. NEXT بصورت زير مي باشد .
For Var = Start To End [Step Value]
برنامه
Next Var
Var بعنوان يک کانتر عمل مي کند که Start مقداراوليه آن و End مقدار پاياني است و هر دو مي توانند يک ثابت عددي يا متغير عددي باشند . Value مقدار عددي Step را نشان مي دهد که مي تواند مثبت يا منفي باشد . وجود نام Var بعد از Next الزامي نيست .
مثال :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 , _
Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
Dim A As Byte
Dim B As Byte
Dim C As Integer
For A = 1 To 10 Step 2
Locate 1 , 1
Lcd A
Next A
For C = 9 To -5 Step -1
Locate 1 , 6
Lcd C
Next
For B = 1 To 10
Locate 2 , 1
Lcd B
Next
End

While - Wend :
فرم کلي اين دستور به شکل زير است:
While Condition
برنامه
Wend
دستورالعمل While - Wend تشکيل يک حلقه تکرار مي دهد که تکرار اين حلقه تا زماني ادامه مي يابد که عبارت بکاربرده شده نتيجه را FALSE کند و يا مقدار صفر بگيرد . دستورالعمل While بصورت ورود به حلقه به شرط مي باشد , بنابراين While ممکن است در حالتهايي اصلا اجرا نشود .
برنامه تا وقتي که حاصل Condition صفر يا False نشده است تکرار خواهد شد .
مثال :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 , _
Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
Dim A As Byte
A = 1
While A < 10
Locate 1 , 1
Lcd A
Incr A
Waitms 600
Wend
End
if :
فرم کلي اين دستور به شکل زير است:
If A = 1 Then :
...
Elseif A = 2 Then :
..
Elseif B1 > A Then :
...
Else :
...
End If
در صورتي که شرط اول برقرار باشد (A=1) دستورات زير If A = 1 Then تا Elseif A = 2 Then اجرا مي شود ، در صورتي که شرط اول برقرار نباشد و شرط دوم برقرار باشد (A=2) دستورات بين Elseif A = 2 Then تا Elseif B1 > A Then اجرا مي شود ،در صورتي که .... و اگر هيچ کدام از شرط ها برقرار نباشد ؛ دستورات بين Else تا End If اجرا مي شود. اين دستور ميتواند هر پيزي را چک کند ( متغير ها ، واحد هاي حافظه ، پين ها ، پورت ها و...) .
مانند :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PORTD.2 , Db5 = PORTD.3 , Db6 = PORTD.4 _
, Db7 = PORTD.5 , E = PORTD.1 , Rs = PORTD.0
Dim A As Byte
Do
Incr A
Wait 1
If A = 1 Then :
Locate 1 , 1
Lcd "CLAUSE1 true"
Locate 2 , 1
Lcd "a=1"
Elseif A = 2 Then :
Locate 1 , 1
Lcd "CLAUSE2 true"
Locate 2 , 1
Lcd "a=2"
Elseif A = 3 Then :
Locate 1 , 1
Lcd "CLAUSE3 true"
Locate 2 , 1
Lcd "a=3"
Elseif A = 4 Then :
Locate 1 , 1
Lcd "CLAUSE4 true"
Locate 2 , 1
Lcd "a=4"
Elseif A = 5 Then :
Locate 1 , 1
Lcd "CLAUSE5 true"
Locate 2 , 1
Lcd "a=5"
Elseif A = 6 Then :
Locate 1 , 1
Lcd "CLAUSE6 true"
Locate 2 , 1
Lcd "a=6"
Else :
Locate 1 , 1
Lcd "CLAUSE4 false"
Locate 2 , 1
Lcd "a>6"
End If
Loop
End
در مثال بالا ، هر يک ثانيه يک واحد به متغير A افزوده مي شود ، هنگاميکه مقدار آن 1 است روي سطر اول LCD عبارت "CLAUSE1 true" و روي سطر دوم LCD مقدار A نوشته مي شود ، هنگامي که مقدار آن 2 است روي سطر اول LCD عبارت "CLAUSE2 true" و روي سطر دوم LCD مقدار A نوشته مي شود ،.... هنگامي مقدار آن بزرگتر از 6 شد ، چون مقدار Aدر هيچ کدام از شرط ها صدق نمي کند ، دستور بين Else وEnd If اجرا مي شود . شما ميتوانيد از اين دستور به فرم هاي مختلف ، يک شرطي يا چند شرطي استفاده کنيد با اين دستوردر ادامه بيشتر آشنا مي شويم .

#if :
اين دستور مانند دستورIf است با اين تفاوت که در با اين دستور ميتوان شروط مربوط به کارکترها را اجرا کرد ، اين دستور به فرم کلي زير است:
#if Condition
Case 1
#else
Case 2
#Endif
در صورتي که شرط درست باشد Case 1 اجرا مي شود و در صورت نا درست بودن Case 2 اجرا مي شود .
مانند :
$regfile = "m16def.dat"
$crystal = 1000000
#if Varexist( "S")
Dim A As Byte
#else
Dim S As Byte
#endif
End

Select Case :
اين دستور تقريبا مانند دستور if است و به فرم زير ميباشد :
Select Case Var
Case Test1 : Statements1
[Case Test2 : Statements2 ]
.
.
.
Case Else : Statements3
End Select
در اين دستور يک متغيير چک مي شود ، در صورتي که مقدار آن با شرط Test1 برابر باشد Statements1 اجرا مي شود، در صورتيکه مقدار آن با Test2 برابر باشد Statements2 اجرا مي شود و در صورتي که مقدار آن با هيچ يک از شروط برابر نباشد Statements3 اجرا مي شود .
نکته : برعکس دستور If که در صورتی برقراری شرط اول بقیه شرطها چک نمی شد در Select Case تمام مقادیر چک می شوند .
مثال :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , _
Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0
Dim A As Byte
Do
Incr A
Wait 1
Select Case A
Case 1:
Locate 1 , 1
Lcd "CLAUSE true"
Locate 2 , 1
Lcd "a=1"
Case 2:
Locate 1 , 1
Lcd "CLAUSE true"
Locate 2 , 1
Lcd "a=2"
Case 3 To 5:
Locate 1 , 1
Lcd "CLAUSE true"
Locate 2 , 1
Lcd "a=3-5"
Case Else:
Locate 1 , 1
Lcd "CLAUSE false"
Locate 2 , 1
Lcd "a>6"
End Select
Loop
End
در مثال بالا هر يک ثانيه يک واحد به متغير A افزوده مي شود ،در صورتي که مقدار آن يک باشد شرط اول اجرا شده و بر روي lcd عبارات "CLAUSE true" و "A=1" نمايش داده مي شود ، در صورتي که مقدار آن دو باشد عبارت هاي "CLAUSE true" و "A=2" بر روي LCD نمايش داده مي شود ، در صورتي که مقدار آن بين 3 تا 5 (3 و 4 و 5) باشد عبارت هاي "CLAUSE true" و "A=3-5" بر روي LCD نمايش داده مي شود ،... در صورتي که هيچ کدام از شرط ها بر قرار نباشد دستورات بين Case Else و End Select اجرا مي شود.

Exit :
با دستور Exit ميتوان از تمام حلقه هاي بالا خارج شد ، فرم دستور براي هر حلقه در زير آورده شده است:
Exit For
Exit Do
Exit While
Exit Sub
Exit Function
مورد اول براي خروج از حلقه ي For - Next و مورد دوم براي خروج از حلقه ي Do - Loop و مورد سوم براي خروج از حلقه ي While- Wend و مورد چهارم براي خروج از زير برنامه و مورد آخر براي خروج از تابع است ( دو مورد آخر در بخش هاي بعدي مورد بررسي قرار مي گيرند)
مانند :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , _
Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0
Dim A As Byte
For A = 1 To 100
Locate 1 , 1
Lcd "Exit FOR-NEXT"
Locate 2 , 1
Lcd "when A=4 a is "
Lcd A
If A = 4 Then :
Exit For
End If
Wait 1
Next
A = 1
Do
Locate 1 , 1
Lcd "Exit do-loop"
Locate 2 , 1
Lcd "when A=5 a is "
Lcd A
Wait 1
If A = 5 Then :
Exit Do
End If
Incr A
Loop
A = 1
While A < 6
Locate 1 , 1
Lcd "Exit While-Wend"
Locate 2 , 1
Lcd "when A=6 a is "
Lcd A
Incr A
Wait 1
If A = 6 Then :
Exit While
End If
Wend
End
دستورات اجرايي :
براي اينکه بتوانيد با کامپايلر بسکام راحت تر کار کنيد تعدادي دستور به دستورات بيسيک براي AVR اضافه شده است ، اين دستورات کدي را براي ريختن روي ميکرو توليد نمي کند و فقط جايگزين يک دستور مي شود يا آن را خلاصه ميکند ، استفاده از اين دستورات کاملا اختياري است ، مثلا شما مي توانيد با دستور $prog که در زير توضيح داده مي شود ، فيوز بيت دلخواه خود را پروگرام کنيد ، ميتوانيد اين کار را از طريق پروگرامر انجام دهيد و.... اين دستورات با علامت $ شروع مي شوند در زير آنها را توضيح ميدهيم : ( بعضي از دستورات مانند دستور baud$ يا .. در بخش مربوطه گفته مي شود)
دستورات : (دونقطه) (شيفت + ک) , (کما) (شيفت +و) ; (ويرگول)(حرف ک) _ (خط فاصله) (شيفت + منفي) ’ ( نقل قول تکي)

:
(شيفت +گ) (البته در حالت کيبرد انگيسي) : (دونقطه) (شيفت + ک) : با استفاده از اين دستور شما ميتوانيد چندين دستور را پشت سر هم بنويسيد .
مانند :
Incr A : Wait 1 : Lcd A : Locate 2 , 1 : Lcd B : Wait 2 : Cls : Incr B
,
(کما) (شيفت + و) : با اين دستور ميتوانيد چندين متغير را در يک خط معرفي کنيد ( Dim فقط براي متغير اول آورده مي شود)
مانند :
Dim A As Byte , B As Integer , C As Word , Q As Bit
;
(ويرگول) (حرف ک) : با اين دستور ميتوانيد چندين متغير يا کارکتر را در يک خط بنويسيد ، کارکتري بعدي از اولين فضاي خالي بعد از کارکتر قبلي نمايش داده مي شود مانند:
Lcd "a" ; A ; "b" ; B
_
(خط فاصله) (شيفت + منفي) با اين دستور ميتوان يک خط طولاني را نصف کرد .
مانند:
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2_
, Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5

( نقل قول تکي) (شيفت +گ) : با گذاشتن اين دستور در برنامه ، کليه حروف واعدادي که بعد از اين دستور ميايند ،کامپايل نمي شوند ، شما ميتوانيد بعد از اين دستور توضيحاتي را به برنامه اضافه کنيد ، (يادشتها به رنگ سبز در مي آيد.) شما همچنين ميتوانيد به جاي اين علامت کلمه Rem را به کار ببريد
مانند :
Start Adc 'roshan shodan adc
براي درک مطالب مثال زير را شبيه سازي کنيد :
$regfile = "m16def.dat" : $crystal = 1000000 : Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2_
, Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5 ' rah andazi lcd
Dim A As Byte , B As Integer , C As Word , D As Byte
A = 1 : B = 2 : C = 5 : D = 7
Locate 1 , 1 : Lcd A ; " " ; B ; " " ; C ; " " ; D
Locate 2 , 1 : Lcd "a" ; A ; "b" ; B
End rem payan brname




$asm :
با اين دستور شما ميتوانيد دربين دستورات بيسيک ،دستورات اسمبلي به کار ببريد دستورات اسمبلي بين $asm و $end Asm قرار ميگيرند . ( براي ديدن دستورات اسمبلي که براي AVR مورد استفاده قرار ميگيرد در HELP بسکام گزينه Assembler mnemonics را جستجو کنيد).
مانند:
$regfile = "m16def.dat"
$crystal = 1000000
$asm
Ldi R24,1 ; load register R24 with the constant 1
St X,R24 ; store 1 into variable c
$end Asm
End

$dbg :
با نوشتن اين دستور و کامپايل و پروگرام کردن آن در ميکرو ، شما ميتوانيد توسط پروگرامر سريال برنامه داخل ميکرو را اشکال زدايي کنيد . تنها کافي است اين دستور را در برنامه خود به کار ببريد.
$dbg
Debug :
اين دستور به فرم کلي زير است:
Debug On|Off|Var
با اين دستور ميتوان تغييرات متغير Var را مشاهده کرد ، هنگامي که از اين دستور استفاده مي کنيد ، متغير var توسط پروگرامر سريال به پورت کام فرستاده مي شود و شما مي توانيد آن را در محيط شبيه ساز مشاهده کنيد ، On و Off براي شروع و پايان ارسال متغير هستند .
مانند:
$regfile = "m16def.dat" : $crystal = 1000000 : Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 , _
Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
Dim A As Byte
Do
Incr A : Wait 1 : Locate 1 , 1 : Lcd A
Debug On A
Loop
End
در مثال بالا متغيرA بهد از هر باز افزوده شدن به پورت کام فرستاده مي شود .

$default:
با اين دستور ميتوانيد متغير هاي تعريف شده را در حافظه هاي مختلف به صورت خود کار ذخيره کنيد (ذخيره سازي از اولين خانه خالي حافظه شروع مي شود) ، اين دستور به فرم کلي زير است:
$default = Var
Var : ميتواند يکي از گزينه هاي Sram , Xram , Eram باشد .
مانند :
$regfile = "m16def.dat"
$crystal = 1000000
$default Eram
Dim A As Byte , B As Byte
$default Sram
Dim D As Byte
A = 1 : B = 1
D = A * B
End
در مثال بالا متغيير هاي A و B در حافظه ي Eeprom و متغيير D در حافظه Sram ذخيره مي شود . (توجه داشته باشيد که ميکرو شما بايد داراي حافظه هاي انتخاب شده باشد)

$external :
با اين دستور شما ميتوانيد از کتابخانه های اسمبلي در بسکام استفاده کنيد ، با دستور $asm شما به تعدادي از دستورات دسترسي داريد ، با اين دستور ميتوانيد لايبري هاي زبان اسمبلي را در پوشه lib موجود در محل نصب بسکام کپي کرده و در برنامه فراخواني کنيد .
مانند:
$regfile = "m16def.dat"
$crystal = 1000000
$external Test
Declare Sub Test(byval X As Byte , Y As Byte)
Dim Z As Byte
Call Test(1 , Z)
End

$map :
با نوشتن اين دستور در برنامه ، گزارشي به نام Map به انتهاي فايل Report افزوده مي شود ، اين متن شماره خط هاي که در آنها کد توليد شده است را نمايش مي دهد (براي ديدن فايل گزارش به آدرس : Program > Show Result برويد)

$include:
با اين دستور شما ميتوانيد برنامه ديگري را وارد برنامه خود کنيد ، برنامه ديگر بايد در محل ذخيره برنامه اصلي موجود باشد ، اين دستور به فرم کلي زير است:
$include "file"
File: نام برنامه اي است که ميخواهيد آن را وارد کنيد ، نام بايد کامل و با پسوند باشد مانند:
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 , _
Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
$include "123.bas"
End
برنامه اي که به نام 123 ذخيره شده در زير آورده شده است :
Locate 1 , 1
Lcd "12365"
Locate 2 , 1
Lcd "qwert"


$programmer :
با اين دستور شما ميتوانيد نوع پروگرامر مورد استفاده را ، در برنامه تعيين کنيد ، اين دستور به فرم کلي زيراست:
$programmer = Number
Number : يکي از اعداد جدول صفحه بعد است :
همچنين ميتوانيد از مسير زير در برنامه بسکام نوع پروگرامر را تغيير دهيد :
Options > Programmer
براي اطلاعات بيشتر در مورد پروگرامر ها به قسمت ضميمه ها مراجعه کنيد .

$sim:
هنگامي که اين دستور را در برنامه به کار ببريد،کليه دستورات تاخير غير فعال ميشوند ، اين دستور هنگامي که از شبيه ساز داخلي بسکام استفاده مي کنيد کاربرد دارد ، هنگامي که مي خواهيد برنامه را روي ميکرو بريزيد يا آن را با پروتوس شبيه سازي کنيد اين دستور را پاک کنيد.

$lib :
با اين دستور شما ميتوانيداز ديگر لايبري هاي که براي بسکام نوشته شده است استفاده کنيد (مثلا لايبري lcd گرافيکي) اين دستور به فرم کلي زير است :
$LIB "Libname"
Libname1: نام لايبري ميباشد که در محل ذخيره برنامه وجود دارد ، شما همچنين ميتوانيد آن را در پوشه lib موجود در محل نصب بسکام کپي کنيد ، در اين صورت ديگر به اين دستور نيازي نيست ، مانند :
$lib "glcdSED1520.lbx"
nocompile$ :
با نوشتن اين دستور در برنامه ، برنامه کامپايل نشده و کد هگزي توليد نمي شود همچنین برنامه چک نشده و اتوماتيک ذخيره نمي شود :
$nocompile
Pushall و Popall :
دستور Popall باعث مي شود که بعد از ريست شدن ميکرو همه ريجستر هاي حافظه به حالت پيشفرض برگردند و استفاده از دستور Pushall باعث مي شود تا ريجستر ها ذخيره شود . ( در حالت عادي بعد از ريست شدن ميکرو کليه ريجستر ها به حالت پيش فرض برمي گردند.) براي استفاده از اين دستورات آن ها را در برنامه خود تايپ کنيد.
[عکس: bnk.png]

برای ورود بر روی تصویر کلیک کنید.
www.avrprj.ir
 
پاسخ
  


پیام‌های این موضوع
RE: آموزش کامل بسکام به همراه مثال - توسط a.mehran - 09-26-2014، 04:17 PM

موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش اصطلاحات میکرو AVR a.mehran 1 5,297 09-26-2014، 04:45 PM
آخرین ارسال: a.mehran
  مدار فاصله سنج اولتراسونیک با بسکام a.mehran 2 4,917 09-02-2014، 07:56 AM
آخرین ارسال: a.mehran
  pwm با بسکام a.mehran 0 2,997 09-01-2014، 10:02 PM
آخرین ارسال: a.mehran
  راه اندازی سون سگمنت با بسکام a.mehran 0 3,078 09-01-2014، 09:56 PM
آخرین ارسال: a.mehran

پرش به انجمن:


Browsing: 7 مهمان