RE: اموز ش میکرو کنترلر های 8051 به زبان بیسیک
- اعداد و متغییر ها در بسکام :
در زبان بیسیک منظور از متغییر یک ارایه است که میتواند حول دو عدد تغییر کند مثلا هنگامی که میگوییم dim a as byte ، ما یک م متغییر به نام a از جنس بایت تعریف کرده ایم که این متغییر میتواند بین 0 تا 255 تغییر کند(مثلا میتوانیم بگوییم a=10 یا a=226 یاa=a+6)
دستور زیر بعد یک متغیر را نشان میدهد . با این دستور می توانید متغیرهایی که در برنامه به کار برده می شوند تعریف کنید .
DIM X AS data type
X نام متغیری که در برنامه بکار برده میشود . Data type نوع داده است که می تواند طبق موارد زیرSTRING ,WORD ,LONG ,INTEGER ,BYTE, BITیا SINGLE باشد .
در صورت استفاده از متغیر STRING , بیشترین طول آن نیز باید نوشته شود .
BIT :این متغییر میتواند صفر یا یک باشد.
BYTE :این متغییر میتواند از0 تا 255 تغییر کند و فقط شامل اعداد صحیح مثبت می شود.
WORD :این متغییر میتواند از0 تا65535 تغییر کند و فقط شامل اعداد صحیح مثبت می شود .
INTEGER :این متغییر میتواند از-32767 تا +32767 تغییر کند و فقط شامل اعداد صحیح مثبت و منفی می شود.
LONG :این متغییر میتواند از-214783648 تا +214783647 تغییر کند و فقط شامل اعداد صحیح مثبت و منفی می شود.
SINGLE :این متغییر میتواند از-45^10*1.5 تا 38^10* 3.4تغییر کند و فقط شامل اعداد صحیح واعشاری مثبت و منفی می شود.
STRING :این متغییر میتواند از0 تا 245 بایت تغییر کند تغییر کند و برای حروف وعلائم استفاده می شود.
مثال
DIM B AS BIT ‘BIT can be 0 or 1
DIM A AS BYTE ‘BYTE range from 0 - 255
DIM K AS INTEGER
DIM MICRO AS WORD
DIM HASAN AS LONG
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Config Lcd = 16 * 2
Dim A As Byte
Dim Ali As Word
Dim Wqew As Byte
A = 10
Wqew = 5
Locate 1 , 1
Ali = A + Wqew 'ali=15
Lcd Ali
Locate 2 , 1
Ali = A * Wqew 'ali=50
Lcd Ali
End
نکته: در صورتی که در یک متغییر بیشتر از بعدش مقدار قرار دهید، با خطا مواجه میشوی.د
مثال
DIM A AS BYTE
A=300
مورد بالا غلط می باشد چون بایت می تواند از 0 تا 255 تغییر کند ومقدار 300 بیشتر از بعد بایت است.
دستور CONST :
برای تعریف یک ثابت از این دستور استفاده می شود :
CONST SYMBOL= NUMCONST
CONST SYMBOL= STRINGCONST
CONST SYMBOL= EXPRESSION
SYMBOL نام ثابت و NUMCONST مقدار عددی انتساب یافته به SYMBOL , STRINGCONST رشته انتساب یافته به SYMBOL و EXPRESSION میتواند عبارتی باشد که نتیجه آن به SYMBOL انتساب یابد .
مثال
CONST S = “TEST”
CONST A = 5
CONST B1 =&B1001
CONST X = (B1 * 3 ) + 2
دستور ALIAS:
از این دستور برای تغیر نام متغیر استفاده می شود .
مثال
DIM Q AS BIT
Q ALIAS P3.1
حال شما می توانید بجای P3.1از متغیر Q استفاده نمایید .
SET Q ‘is equal with SET P3.1
دستور INSTR:
این دستورمحل و موقعیت یک زیر رشته را در رشته دیگر مشخص می کند .
Var =Instr (start , String ,Subset )
Var =Instr (String ,Subset )
Var عددی است که مشخص کننده محل SUBSTR در رشته اصلی STRING می باشد و زمانیکه زیر رشته مشخص شده در رشته اصلی نباشد صفر برگردانده می شود .START نیز عددی دلخواه است که مکان شروع جستجو زیر رشته در رشته اصلی را مشخص می کند . در صورتیکه START قید نشود تمام رشته از ابتدا جستجو می شود . رشته اصلی تنها باید از نوع رشته باشد ولی زیر رشته (SUBSTR ) می تواند رشته و عدد ثابت هم باشد .
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Config Lcd = 16 * 2
Dim S As String * 15
Dim Z As String * 5
Dim Bp As Byte
Cls
S = "This is a test "
Z = "is"
Bp = Instr(s , Z )
Locate 1 , 1
Lcd Bp
Bp = Instr(4 , S , Z )
Locate 2 , 1
Lcd Bp
End
دستور INCR و دستور DECR:
INCR X
DECR X
دستور INCR یک واحد به متغییر عددی X می افزاید و دستور DECR یک واحد از ان کم میکند
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Config Lcd = 16 * 2
Dim A As Byte
Dim C As Long
Do
Incr A
Decr C
Locate 1 , 1
Lcd C
Locate 2 , 1
Lcd A
WAITMS 500
Loop
End
(از دستور do -loop برای ایجاد یک حلقه استفاده میشود که در بخش های بعد شرح داده میشود)
دستورات HIGH و LOW:
LOW این دستور (LSB (least significant byte یک متغیر را برمی گرداند .
HIGH این دستور( MSB (most significant byte یک متغیر را برمی گرداند .
Var = HIGH ( s)
MSB متغیر S در Var قرار می گیرد .
Var = LOW ( s)
LSB متغیر S در Var قرار می گیرد
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Config Lcd = 16 * 2
Dim I As Integer
Dim Z As Byte
Dim Q As Byte
Cls
I = &h1001
Z = Low(i) ' is 1
Locate 1 , 1
Lcd Z
Q = High(i) 'IS 16
Locate 2 , 1
Lcd Q
End
دستور LCASE و دستور UCASE
دستور LCASE : این دستور تمام حروف رشته مورد نظر را تبدیل به حروف کوچک می کند .
(Target = Lcase (source
تمام حروف رشته source کوچک شده و در رشته target جای داده می شود .
دستور UCASE: این دستور تمام حروف رشته مورد نظر را تبدیل به حروف بزرگ می کند .
(Target = Ucase (source
تمام حروف رشته source بزرگ شده و در رشته target جای داده می شود .
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Dim S As String * 12
Dim Z As String * 12
S = "Hello WORLD"
Z = Ucase(s ) 'Z = HELLO WORLD
Locate 1 , 1
Lcd Z
Z = Lcase(s)
Locate 2 , 1
Lcd Z
End
دستور RIGHT و دستور LEFT
دستور RIGHT:با این دستورقسمتی از یک رشته را جدا می کنیم .
(Var = RIGHT (var1 , n
از سمت راست رشته var1 به تعداد کاراکتر n , رشته ای جدا شده و در رشته var قرار می گیرد .
دستور LEFT: با این دستور کاراکترهای سمت چپ یک رشته را به تعداد تعیین شده جدا می کند .
(Var = LEFT(var1 , n
از سمت چپ رشته var1 به تعداد کاراکتر n , رشته ای جدا شده و در رشته var قرار می گیرد .
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Dim S As String * 10
Dim Z As String * 10
Cls
S = "abcdefg"
Z = Left(s , 5) 'Z = abcde
Locate 1 , 1
Lcd Z
Z = Left(s , 1) 'Z = a
Locate 1 , 8
Lcd Z
Z = Right(s , 5) 'Z = CDEFG
Locate 2 , 1
Lcd Z
Z = Right(s , 2) 'Z = FG
Locate 2 , 8
Lcd Z
End
دستور LEN :
این دستور طول یا بعبارتی تعداد کاراکترهای یک رشته را برمیگرداند .
(Var = Len(string
طول رشته string در متغیر عددی VAR قرار می گیرد . رشته string نهایتا می تواند 255 بایت طول داشته باشد . توجه داشته باشید که فضای خالی (SPACE BAR) خود یک کاراکتر به حساب می آید .
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Dim S As String * 12
Dim A As Byte
Cls
S = "test"
A = Len(s)
Locate 1 , 1 ' 4
Lcd Len(s)
S = "test "
A = Len(s)
Locate 2 , 1
Lcd A '6
End
دستور SWAP:
SWAP var1 , var2
با اجرای این دستور محتوای متغیر var1 در متغیر var2 و محتوای متغیر var2 در متغیر var1 قرار می گیرد .
دو متغیر var1 وvar2 بایستی از یک نوع باشند .
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Dim A As Byte
Dim C As Byte
Cls
A = 10
C = 20
Swap A , C 'swap them
Locate 1 , 1
Lcd A 'A=20
Locate 2 , 1
Lcd C 'B=10
End
دستور MID :
با این دستور می توان قسمتی از یک رشته را برداشت و یا قسمتی از یک رشته را با قسمتی از یک رشته دیگر عوض کرد .
VAR=MID(VAR1,ST[,L])
1- قسمتی از رشته var1 با شروع از کاراکتر stام و طول L برداشته شده و در متغیر var قرار می گیرد.
MID(VAR,ST[,L])=VAR1
2- رشته var1 در رشته var با شروع از کاراکتر St ام و طول L قرار می گیرد .
در صورت قید نکردن گزینه اختیاری L ,بیشترین طول در نظر گرفته می شود .
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Dim S As String * 10
Dim Z As String * 10
Cls
S = "adswer"
Z = Mid(s , 2 , 3)
Locate 1 , 1
Lcd Z 'lcd "dsw"
Z = "5685"
Mid(s , 2 , 3) = Z
Locate 2 , 1
Lcd S 'lcd "a568er"
End
دستور space :
برای ایجاد فضای خالی ازاین دستور استفاده می شود .
Var = SPACE (x )
X تعداد فضای خالیست که بعنوان رشته در متغیر رشته ای var جای می گیرد .
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Dim S As String * 10
Dim Z As String * 10
Cls
S = Space(5)
Z = "qwer"
Locate 1 , 1
Lcd "(" ; S ; Z ; ")" 'lcd( qwer)
End
دستور fusing:
از این دستور برای روند کردن رشته های عددی استفاده می شود .
target = Fusing (source , mask)
source رشته موردنظر برای شکل دهی و نتایج در target قرار می گیرد .mask نوع شکل دهی است . عمل mask حتما باید با علامت # شروع شود و حداقل باید یکی از علامات # یا & را بعد از ممیز داشته باشد. با استفاده از # عدد روند می شود و در صورت استفاده از & روندی صورت نمی گیرد
$regfile = "8052.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
Dim S As Single
Dim A As Byte
Dim C As String * 10
Cls
S = 10
A = 3
S = S / A
Locate 1 , 1
Lcd S 'lcd "3.33333333333333"
Locate 2 , 1
C = Fusing(s , #.##)
Lcd C 'lcd 3.33
Locate 2 , 8
C = Fusing(s , 000.####)
Lcd C 'lcd 003.3333
End
نکته :
برای نشان دادن اعداد به فرم باینری از &b و برای نشان دادن اعداد به فرم هگز از &h استفاده می شود
مانند
0110010&b
&h01ff
در اینجا تمامی دستورات مر بوط به اعداد ومتغییر ها که در زبان بیسیک برای میکرو 8051 است گفته شد
در درسهای بعدی با این دستورات به صورت کاربردی اشنا می شوید.
اگر در موارد سوالی داشتید در همین لینک بیان کنید
(آخرین ویرایش در این ارسال: ۲۷-مرداد-۱۳۸۷, ۲۲:۰۶:۴۱، توسط 1nafar.)
|