09-26-2014، 04:18 PM
نقل قول: $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 باعث مي شود تا ريجستر ها ذخيره شود . ( در حالت عادي بعد از ريست شدن ميکرو کليه ريجستر ها به حالت پيش فرض برمي گردند.) براي استفاده از اين دستورات آن ها را در برنامه خود تايپ کنيد.
زير برنامه ها و فراخواني توابع :
: Declare Function
از اين دستور براي معرفي تابع در ابتداي برنامه استفاده مي شود . زماني که بخواهيم تابعي را معرفي کنيم بايستي تابع معرفي شده باشد . در صورت استفاده از تابع مي بايستي يک داده برگردانده شود .
Declare Function Test [([Byref / Byval] Var As Type1)] As Type2
Test نام تابع موردنظر است . انتقال داده بصورت Byval باعث مي شود که يک کپي از متغير به تابع فرستاده شود و در محتواي آن هيچ تغيري ايجاد نشود .ولي در حالت Byref آدرس متغير ارسال و تغيرات در آن اثر مي گذارد و داده برگشتي در صورت انجام عمليات بر روي آن با مقدار اوليه خود برابر نخواهد بود . در صورت عدم استفاده از گزينه [Byref/Byval] بصورت پيش فرض داده بصورت Byref فرستاده مي شود. Type1 نوع داده ارسال شده وType2 نوع داده برگشتي است . که هر دو مي توانند داده نوع Byte , Integer, word , Long ,String باشند .
مثال :
در مثال زير I بصورت Byval فرستاده شده است بنابراين يک کپي از مقدار I به زير تابع فرستاده مي شود و هيچ تغييري در محتواي آن ايجاد نمي شود. S بصورت Byref فرستاده مي شود و تغير در آن صورت مي گيرد . فراخواني تابع Myfunction با K و Z از نوع داده Integer و String است و مقدار برگشتي از نوع Integer است که در متغير T قرار مي گيرد . شما مي توانيد در محدوده تابع يک متغير محلي تعريف کنيد .
مثال :
$regfile = "m16def.dat" : $crystal = 1000000
Config Lcd = 16 * 2 : Cls
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 _
, Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
Declare Function Myfunction(byref I As Word , S As String )as Word
Dim K As Word , Z As String * 10 , T As Word
K = 5 : Z = "123 " : T = Myfunction(k , Z)
Locate 1 , 1
Lcd T '10
Locate 1 , 9
Lcd Z 'Bascom
Locate 2 , 1
Lcd K '24
End
Function Myfunction(byref I As Word , S As String )as Integer
I = 4 * 6
S = "Bascom"
Myfunction = 10
End Function
از اين دستور براي معرفي زير برنامه استفاده مي شود . زير برنامه اي که قصد فراخواني آن را داريم بايستي در ابتداي برنامه يا حداقل قبل از فراخواني آن معرفي شده باشد .
Declare Sub Test [([Byref / Byval] Var As Type)]
زير برنامه برخلاف تابع مقداري برنمي گرداند .در زمان ارسال داده بصورت Byref آدرس داده به زير برنامه فرستاده مي شود و در محتواي آن تغير ايجاد مي شود .ولي در حالت Byval يک کپي از داده فرستاده مي شود و به هيچ وجه در محتواي آن تغيري ايجاد نمي شود . Test نام زيربرنامه و Var نام متغير ارسالي به زير برنامه و Type نوع آن است که مي تواند داده نوع Byte , Integer , Word , String باشند .
براي نوشتن زير برنامه ابتدا نام آنرا توسط دستور زير تعريف کرده و سپس شروع به نوشتن زيربرنامه مي کنيم .
Sub Name [(Var1)]
Name نام زيربرنامه که بايد توسط دستور Declare معرفي شده باشد و با دستور End Subپايان مي يابد .
مثال :
$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
Cls
Dim A As Byte , B1 As Byte , C As Byte
Declare Sub Test(a As Byte)
A = 1 : B1 = 2 : C = 3
Lcd A ; B1 ; C '123
Call Test(b1)
End
Sub Test(a As Byte)
Locate 2 , 1
Lcd A ; B1 ; C '223
End Sub
Call :
توسط اين دستور زير برنامه يا تابعي را فراخ واني مي کنيم .
Call Test (Var1 , Var2 , ....)
Var1 , Var2 متغيرهايي که به زير برنامه انتقال مي يابند , هستند . مي توان زير برنامه را بصورت زير نيز فراخواني کرد .
TEST VAR1 , VAR2
لازم بتذکر است که نام زير برنامه قبل از فراخواني آن , بايد توسط دستور Declare فراخواني شود. اگر بخواهيم عدد ثابت را به زير برنامه انتقال دهيم بايستي حتما با آرگومان BYVAL آن را انتقال دهيم .
مثال :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2 : Cls
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 , B As Byte
Declare Sub Test(b1 As Byte , Byval B2 As Byte)
A = 65
Call Test(a , 5)
Test A , 5
Locate 2 , 1
Lcd A
End
Sub Test(b1 As Byte , Byval B2 As Byte)
B1 = 10
B2 = 15
Locate 1 , 1
Lcd B1
Locate 1 , 9
Lcd B2
End Sub
Local :
از اين دستور براي تعريف و بکارگیری متغير محلي در زيربرنامه استفاده مي کنيم .
Local Var As Type
Var نام متغير و Type نوع داده است که مي توانند String , Word , Integer , Byte , Single , Long باشند .
نوع داده هاي Eram , Sram , Xram و آرايه ها نمي توانند محلي تعريف شوند .
يک متغير محلي يک متغير موقت است که فقط در هنگام فراخواني زير برنامه مربوطه براي آن فضا در نظر گرفته مي شود و با برگشت از زير برنامه عمر متغير (Life Time) به اتمام مي رسد .
تذکر متغيرهاي بيتي نمي توانند بصورت محلي تعريف شوند .
مانند :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2 : Cls
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 , _
Db7 = PORTD.3 , E =PORTD.4 , Rs = PORTD.5
Declare Sub Test2
Do
Call Test2
Loop
Sub Test2
Local A As Byte
Incr A
Home : Lcd A
Waitms 200
End Sub
دستورات رياضي و محاسباتي و تبديل متغير هاي رياضي
از عملگرهاي رياضي زير مي توان در محيط BASCOM استفاده کرد و عمليات رياضي را انجام داد.
* علامت ضرب *
/ علامت تقسيم /
+ علامت جمع +
- علامت تفريق -
. علامت مميز .
> علامت بزرگتر از >
< علامت کوچکتر از <
= علامت مساوي =
^ علامت توان ^
<= علامت کچکتر يا مساوي <=
=> علامت بزرگتر يا مساوي =>
<> علامت مخالف <>
مثال :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2 : Cls
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 _
, Db7 = PO RTD.3 , E = PORTD.4 , Rs = PORTD.5
Dim Q As Word
Dim W As Word
Dim E As Word
Dim R As Word
Dim T As Word
Q = 2
W = Q + 3
Home : Lcd W '5
E = W * Q
Locate 1 , 8 : Lcd E '10
R = E ^ Q
Locate 2 , 1 : Lcd R '100
T = R - E
Locate 2 , 8 : Lcd T '90
End
Sqr:
اين دستور جدر (ريشه دوم) متغير يا عدد ثابت Source را محاسبه کرده و نتيجه را در متغير Var قرار مي دهد .
Var = Sqr (Source)
مانند :
$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 X As Single , A As Byte
Cls
X = Sqr(9)
Locate 1 , 1 'X = 3
Lcd X
X = X * 27
A = Sqr(x)
Locate 2 , 1
Lcd A ' A = 9
End
Sgn :
اين دستور علامت يک متغير شناور را نشان مي دهد ، در صورتي که متغير منفي باشد (X<0) مقدار Var برابر با 1- و در صورت مثبت بودن متغير (X>1) مقدار Var برابر با 1 مي شود .
Var = sgn (X)
مانند :
$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 X As single , A As Single
Cls
X = -9
X = Sgn(x)
Locate 1 , 1
Lcd X 'X =0
A = Sgn(x)
Locate 2 , 1
Lcd A 'A =1
End
Power:
اين دستور فرم ديگر دستور ^ (توان) است و حاصل Source به توان Raise را محاسبه کرده و حاصل را در متغير Var قرار ميدهد .
Var = Power (Source , Raise)
مانند :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2 : Cls
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 , _
Db7 = PORTD.3 , E =PORTD.4 , Rs = PORTD.5
Dim X As Single , A As Single , B As Single
Cls
A = 2.3
X = 10
B = A ^ X
Locate 1 , 1
Lcd B
B = Power(a , X)
Locate 2 , 1
Lcd B
End
Abs :
اين دستور به معناي رياضي |Var = |Var2 (قدرمطلق) است (اعداد منفي را به مثبت تبديل مي کند).
Var = Abs (Var2)
مانند :
$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 Integer , C As Integer
A = -100
C = Abs(a) 'C = |a|
Lcd C 'C = 100
End
Exp :
Target برابر با e بتوان Source است . Target متغيري از نوع داده Single است .
Target = Exp (Source)
مانند :
$regfile = "m16def.dat"
$crystal = 12000000
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 X As Single
X = Exp(1.1)
Locate 1 , 1
Lcd X 'X = 3.004166124
X = 5
X = Exp(x)
Locate 2 , 1
Lcd X 'X = 148.413085937
End
Log :
اين دستور لگاريتم طبيعي يک داده از نوع Single را برمي گرداند .
Target = Log (source)
لگاريتم متغير يا ثابت Source از نوع داده Single گرفته مي شود و در متغير Target قرار مي گيرد . مانند :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2 : Cls
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2_
, Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
Dim X As Single
X = Log(100)
Locate 1 , 1
Lcd X 'X = 4.6051
X = Log(1000)
Locate 2 , 1
Lcd X 'X = 6.9077
End