سلام
لوازم مورد نیاز
ورژن های مختلف پروتوس
بسکام 8051
یه دونه کامپیوتر
.....
نحوه كار به اين صورت است كه :
-هر شب يه قسمت گفته ميشه و شما هر سوالي رو كه داشتيد در صفحه جدا گانه كه بعدا ايجاد ميشود قرار ميدهيد.
-مطالب گفته شده همراه مثال با فايل پروتوس ميباشد(7.2)
سلام
اگر چه با وجود میکر های قدرمند AVR و pic جای بحثی برای 8051 باقی نمی ماند اما هنوز در مدارات الکترونیکی از این ای سی استفاده می شود
گاهی اوقات برای تعمیر یک دستگاه که در ان این نمونه از میکر به کار رفته است
نیاز به نوشتن برنامه است (برای ای سی جدید)و....
درس اول اشنايي مختصر با محيط بسكام 8051 است
---------اولين منو منوي فايل مي باشد
كه داراي گزينه هاي زير است:
1-New با زدن اين گزينه يك صفحه جديد براي نوشتن برنامه جديد باز ميشود ؛ اين صفحه مجهز به ويرايشگر دستورات مي باشد ؛ يعني در صورتي كه دستوري درست وارد شود به رنگ ابي در ميايد ولي اگر دستور اشتباه باشد به رنگ معمولي (مشكي )است (اين مورد براي تعداد كمي از دستورات اجرا نمي شود) .
2-open با زدن اين گزينه مي توانيد برنامه اي را كه از قبل ذخيره كرده ايد باز كنيد.
3-Close با انتخاب اين گزينه صفحه اي كه براي نوشتن برنامه باز شده ؛ بسته ميشود.
4-Save و Save as اين دو گزينه براي ذخيره كردن پروژه به كار ميروند.
5-Print Preview وPrint اين دو گزينه براي چاپ كردن برنامه استفاده ميشوند با زدن گزينه Print Preview مي توانيد نسخه قابل چاپ را قبل از چاپ مشاهده كنيد.
6-Exit با زدن اين گزينه برنامه بسكام به طور كامل بسته مي شود ؛ اما اگر برنامه شما ذخيره نشده باشد ؛در مورد ذخيره برنامه از شما پرسيده ميشود.
7- در زير گزينه Exit چند گزينه ديگر وجود دارد كه اين گزينه ها براي دسترسي سريع به اخرين فايل هاي كه باز بوده اند مي باشد.
---------منوي بعدي منوي Edit مي باشد
كه داراي گزينه هاي زير است:
1-UndoوRedo اين دو گزينه براي دست يابي به اخرين تغييرات انجام شده مي باشد .
2-CopyوCutوPaste اين سه گزينه براي برداشتن يا كپي كردن قسمتي از متن به جاي ديگر ميباشد.
3- Findnext وFind اين دو گزينه براي پيدا كردن قسمتي از متن در برنامه مي باشد. نحوه كار به اين صورت است كه بعد از انتخاب گزينه Find پن جره جديدي باز مي شود كه بايد در قسمتText to find متن مورد نظر را تايپ كنيد بعد رويok كليك كنيد تا متن مورد نظر در برنامه انتخاب شود .Findnext متن هاي كه در خط هاي بعدي برنامه وجود دارد پيدا ميكند.
4-دو گزينه بعدي براي گذاشتن علامت در خطوط مختلف و پرش به انها مي باشد كه اهميت چنداني در برنامه نويسي ندارد.
5-IndentBlock وUnindentBlock اين دو گزينه متن انتخاب شده را به اندازه يك tab به چپ يا راست منتقل ميكند.
----------منوي بعدي منوي Program مي باشد
كه داراي گزينه هاي زير است:
1-Compile با انتخاب اين گزينه فايل هاي از قبيل هگز و گزارش و...ساخته ميشود .اگر در اين مرحله برنامه داراي خطا باشد پنجره اي باز ميشود كه در ان خطاها نمايش داده مي شوند ؛ با كليك كردن روي هر خطا خط مربوط كه داراي خطا است قرمز ميشود .
2-Syntax check با انتخاب اين گزينه برنامه از نظر غلط املايي چك ميشود (با زدن گزينه Compile ديگر نيازي به زدن اين گزينه نمي باشد).
3-Show result با انتخاب اين گزينه پنجرهاي باز ميشود كه در ان گزارش كلي از برنامه وجود دارد.
4-Simulate با انتخاب اين گزينه پنجره شبيه سازي باز ميشود و شما در اين پنجره كه داراي lcd و كيبرد و مبدل انالوگ به ديجتال و...ميباشدمي توانيد برنامه خود را شبيه سازي كنيد (به علت استفاده از پروتوس نيازي به اين محيط نمي باشد).
5-send to chip با انتخاب اين گزينه وارد محيط پروگرام كردن ميكرو مي شويد كه در قسمت هاي بعدي مفصلا توضيح داده مي شوند.
------------منوي بعدي منوي tools وoptions است كه داراي امكانات پر كار بردي مي باشد كه در مكان مورد نياز توضيح داده ميشود
سلام
در زیر به بیان برخی از عباراتی که از این به بعد به کار میرود می پردازیم
1-vcc و:gnd منظور از این دو کلمه پایه های تغذیه می باشد که معمولا vcc ، 5ولت می باشد و gnd 0ولت است که برای میکرو های 8051 پایه 40 vcc و پایه 20 gnd می باشد
شما می توانید این تغذیه را از پورت usb کامپیوتر خود بگیرید
2-پورت : هرمیکرو دارای چندین پورت می باشد و هر پورت دارای چندین پایه است (معمولا 8 پایه)برای مثال میکرو 89c51 دارای 4 پورت 0,1,2,3 می باشد که هر پورت 8 پایه دارد وپورت0 (port0)از پایه 32 تا 39 میکرو می باشد
3- کریستال:میکرو برای تنظیم زمان برای انجام کارها به یک نوسان ساز نیاز دارد که به این نوسان ساز کریستال گفته می شود حداکثر کریستال مورد استفاده برای 8051 ،24مگاهرتز می باشد همچنین میکرو های 8051 دارای نوسان ساز داخلی نمی باشد ،و در صورتی که از کریستال استفاده نکنید میکرو کار نمیکند . کریستال به دو پایه xtal 1 و xtal2 متصل می شود >این پایه ها برای میکرو 8051 پایه های18 و 19 می باشد
با دیگر کلمات در بخش هی بعدی اشنا میشویم.
در ایران از دو خانودا از میکرو های 8051 استفاده میشد
سری s و سری c
که سری s دارای مزیت های بیشتتری نسبت به سری c است که در ادامه با انها اشنا می شویم
مراحل نوشتن یک برنامه جدید:
بعد از باز کردن برنامه بسکام گزینه new را از منوی file انتخاب کنید صفحه جدیدی که باز می شود محل نوشتن برنامه می باشد
در زبان بیسیک همیشه اولین خط برنامه مر بوط به معرفی میکرو می باشد
$regfile="micro name"
که گزینه micro neme یکی از گزینه های زیر است
89c1051.dat
89c2051.dat
89c4051.dat
8052.dat
...
خط بعدی معرفی کریستال می باشد
$crystal=x
که x کریستال مورد استفاده بر حسب هرتز است مانند
$crystal=8000000 (در اینجا کریستال 8مگا هرتز است)
بعد از معرفی کریستال نوبت به معرفی امکانات می باشد (امکانات شامل تایمر و ورودی یا خرو جی قرار دادن پورت ها و....می باشد)
معرفی امکانات با دستور زیر می باشد
Config
بعد از معرفی یا پیکر بندی امکانات جانبی نوبت به استفاده از انها می باشد معمولا برای استفاده از امکانات باید ان را درون یک حلقه قرار میدهند
ودر نهایت برنامه با end به پایان می رسد
سلام
از انجا که یاد گیری با مثال بهتر است در زیر ابتدا به معرفی lcd میپردازیم ,مطالب را با مثالهای lcd ادامه میدهیم
Lcd کاراکتری
این نوع lcd از دارای چند سطر وستون می باشد که نام گذاری انها برمبنای سطر وستون می باشد
در زیر چند نوع lcd نام برده شده است
16*1 که دارای یک سطر و 16 ستون می باشد
16*2 که دارای 2 سطر و 16 ستون می باشد
16*4 که دارای 4 سطر و 16 ستون می باشد
20*2 که دارای 2 سطر و 20 ستون می باشد
20*4 که دارای 4 سطر و 20 ستون می باشد
40*2 که دارای 2 سطر و 40 ستون می باشد
40*4 که دارای 4 سطر و40 ستون می باشد
تمام lcd های کاراکتری دارای 16 پایه می باشد که در زیر اورده شده است
پایه شماره 1 : VSS ، این پایه ،پایه گراند lcd است و باید به زمین مدار وصل شود
پایه شماره 2 : VDDاین پایه پایه VCC LCD است که باید به 5ولت وصل شود
پایه شماره 3 : VEE این پایه روشنایی پیکسل های LCD را تعیین میکند
پایه شماره 4 : RS در lcd دو رجیستر به نام دستورالعمل وداده وجود دارد اگر rs =0 باشد lcd برای گرفتن دستورالعمل اماده می شود در غیر این صورت برای داده .مثلا دستور cls یک دستور العمل است و qwer که باید روی lcd نوشته شود یک داده است
پایه شماره 5 :RW این پایه دو وضعیت دارد ، rw =1 برای خواندن از lcd و rw=0 برای نوشتن در lcd
پایه شماره 6 : E با این پایه می توان LCD را انتخاب کرد
پایه شماره 7 : DB0 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی صفر)
پایه شماره 8 : DB1 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی یک)
پایه شماره 9 : DB2 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی دو)
پایه شماره 10 : DB3 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی سه)
پایه شماره 11 : DB4 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی چهار)
پایه شماره 12 : DB5 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی پنج)
پایه شماره 13 : DB6 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی شش)
پایه شماره 14 : DB7 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی هفت)
پایه شماره 15 : این پایه و پایه شماره 16 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود
پایه شماره 16 : این پایه و پایه شماره 15 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود
راه اندازی LCD در محیط بسکام:
Lcd میتواند ازدو طریق 8سیمه و 4سیمه به میکرو متصل شود
در مد چهار سیمه فقط میتوان روی lcd نوشت ولی در مد هشت سیمه میتوان اطلاعاتی را که قبلا روی lcd نوشته شده است را خواند و به میکرو ارسال کرد
به طور کلی از خطوط دیتای 0تا 3 برای خوانده از lcd و از خطوط4تا7 برای نوشتن در lcd نوشته میشود در حالت نوشتن در lcd باید پایه RS پایین نگه داشته شود (صفر شود) ودر حالت خواندن از LCD باید پایه RS 1 شود )5ولت وصل شود)
از انجا که با وجود حافظه میکرو و راحت شدن کار برنامه نویسی نیازی به خواندن از LCD نمی باشد ،از پایه DB 0 تا DB3 استفاده نمی شود و پایه RW نیز به GND (صفر ولت متصل میشود)
اولین مرحله برای راه اندازی LCD معرفی کردن نام ان است:
برای این کار بعد از معرفی میکرو وکریستال با استفاده از دستور زیر می توان LCD ارمعرفی کرد:
CONFIG LCD = LCDNAME
که LCDNAME یکی از نام های با لا میباشد مثلا معرفی LCD 2*16
Config lcd =16*2
مرحله بعد معرفی پایه های از میکرو است که lcd به انها وصل میشود
Config Lcdpin = Pin , Db4 = Pinx.y , Db5 = Pinx.y , Db6 = Pinx.y , Db7 = Pinx.y , Rs = Pinx.y , E = Pinx.y
X نام پورت است که یکی از پورت های a یا b یا c یا یd ... می باشد و y شماره پایه هست که از 0 تا 7 می باشد
سلام
و در نهایت با دستور زیر میتوان کاراکتری را روی lcd نمایش داد
"lcd " karakter
کارکتر میتواند یکی از کارکتر های اسکی یا اعداد باشد
مانند:
"LCD "*1NAFAr
یا
"LCD "+ qwetty
یا
"Lcd "1@#$q#$%^&*()_+1
برای پاک کردن lcd از دستور cls استفاده می شود .مانند
")(*&&^%$%$#@"Lcd
Wait 1
Cls
"Lcd "asdfgfghk
با دستور زیر می توان در سطر ها و ستون های دیگر lcd نوشت
Locate x,y
که x ادرس سطر و y ادرس ستون می باشد
Locate 1,2
"Lcd"qwert
Locate 2,1
"Lcd "123456
Locate 2,8
"Lcd "mnbv
توجه کنید برای یک lcd ، مثلا 16*2 حداکثر x ،2 و حداکثر y ، 16 است
روی lcd نمیتوان فارسی نوشت (فقط میتوان کاراکتر های اسکی ،که شامل حروف انگلیسی وعلامت های استاندارد و اعداد میشود را روی ان نشان داد).
Lcd دارای یک مکان نما می باشد که با دستور زیر میتوان ان را روش ن یا خاموش یا چشمک زن یا ثابت قرارداد
Cursor On با این دستور مکان نما روشن می شود (در حالت عادی مکان نما روشن است )
Cursor off با این دستور مکان نما خاموش می شود
Cursor blink با این دستور مکان نما چشمک می زند
Cursor noblink با این دستور مکان نما دیگر چشمک نمی زند
با دستور زیر می توانید کاراکتر های روی lcd را به چپ یا راست شیفت دهید
shiftlcd left این دستور کارکترها را به اندازه یک tab به چپ منتقل میکند
shiftlcd right این دستور کارکترها را به اندازه یک tab به راست منتقل میکند
نوشتن فارسی روی lcd :
Lcd های کاراکتری دارای یک حافظه می باشد که درون ان کدهای کارکتر های اسکی وجود دارد اما فارسی در ان وجود ندارد، اما در lcd حافظه موقتی وجود دارد که در ان می توان تا 8 کارا کتر دلخواه را قرار داد .
برای ساخت کاراکتر دلخواه مراحل زیر را دنبال کنید:
از منوی tools گزینه lcd designer را انتخاب کنید، پنجره جدیدی باز می شود که شما می توانید در ان کاراکتر دلخوا ه خود را ایجاد کنید.
بعد از ایجاد کاراکتر دلخواه روی ok کلیک کنید ،پنجره بسته می شود و یک خط به برنامه شما اضافه می شود مانند زیر :
4,31,20,4, 4, 4, 4, Deflcdchar ?,1
به جای علامت سوال باید یکی از اعداد 0تا 7 می باشد گذاشته شود .
بعد از ساخت کاراکتر جدید بادستور زیر می توانید ان را روی lcd نشان دهید
(?)Lcd chr
به جای علامت سوال باید شماره کاراکتر که یکی از اعداد 0تا 7 می باشد گذاشته شود .
"regfile =$ "80552.dat
crystal=$8000000
Config Lcd = 16*2
Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.6
4,31,20,4, 4, 4, 4, Deflcdchar 0,1
Locate 1,1
Lcd chr(0
End
شما میتوانید تا نهایتا تا 8 کاراکتر را روی lcd نمایش دهید.
سلام حالا که با کارکرد lcd وپورت ها اشنا شدید نوبت به معرفی سایر دستورات زبان بیسیک که مربوط به avr است می باشد
در اینجا دستورات به 8 قسمت تقسیم شده که در زیر ارده شده است :
1- بدنه یک برنامه در محیط بسکام
2- اعداد و متغییر ها در بسکام
3-دستور ات حلقه و پرش
4-دستورات ایجاد تاخیر
5-زیر برنامه ها و فراخوانی تواب
6-توابع ریاضی و محاسباتی
7-توابع تبدیل کده ا و متغییر هل به یکدیگر
1- بدنه یک برنامه در محیط بسکام:
REGFILE = micro name$
برای شروع یک برنامه در محیط BASCOM ابتدا باید میکرو مورد نظر تعریف گردد . microname نام میکرو مورد استفاده است که می تواند یکی از موارد زیر باشد .
89c1051.dat
89c2051.dat
89c4051.dat
8052.dat
....
خط بعد معرفی کریستال میباشد.
برای مشخص کردن فرکانس کریستال استفاده شده برحسب هرتز، از دستور زیر استفاده می نماییم .
CRYSTAL = X$
X فرکانس کریستال استفاده شده بر حسب هرتز است .
مثال
CRYSTAL = 14000000 ’14MHZ external osc $
CRYSTAL = 8000000 ’8MHZ external osc$
CRYSTAL = 1000000 ’1MHZ internal osc$
گاهی نیاز است یادداشتهایی برای اطلاعات بیشتر در برنامه اضافه شود .
‘ یا REM
یادداشتها و نوشته های بعد از این دستور غیر فعال بوده و در برنامه برای یادداشت به کار می رود و کامپایل نخواهد شد و همچنین به رنگ سبز در می آیند .
همچنین می توان از دو علامت برای شروع ‘( و از ‘) برای اتمام متن یادداشتی استفاده نمایید .
مثال
REM END PROGRAM
Or
F=14MHZ'
دستور END:
این دستور دراخرین خط برنامه قرار می گیرد و هنگامی که برنامه به این خط می رسد،تمام وقفه ها غیر فعال شده و یک حلقه بی نهایت تولید و برنامه خاتمه می یابد .
در محیط بسکام همیشه اولین کار معرفی میکرو و کریستال است در مرحله بعد امکانات (lcd و kbd ... ) معرفی میشوند و در مرحله اخر از امکانات استفاده میشود و در نهایت برنامه با دستور end پایان میابد
مانند مثال زیر:
$regfile = "89c51rd.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
Deflcdchar 1 , 4 , 31 , 17 , 21 , 21 , 21 , 17 , 31 ' replace ? with number (0-7)
Deflcdchar 2 , 1 , 4 , 8 , 12 , 16 , 1 , 5 , 14 ' replace ? with number (0-7)
Deflcdchar 3 , 17 , 10 , 17 , 10 , 17 , 10 , 17 , 10 ' replace ? with number (0-7)
Cls
Lcd "Hello world."
Wait 1
Locate 2 , 1
Lcd "Shift this."
Wait 1
Locate 2 , 10
Lcd "*"
Wait 1
Shiftlcd Right
waitms 400
Shiftlcd Right
waitms 400
Shiftlcd Right
waitms 400
Shiftlcd Right
waitms 400
Shiftlcd Right
waitms 400
Shiftlcd Right
waitms 400
Shiftlcd Right
waitms 400
Shiftlcd Right
waitms 400
Locate 1 , 9
Lcd "@"
Wait 1
Cls
Lcd "Replaced."
Wait 1
Locate 2 , 1
Lcd "1nafar"
Shiftlcd left
waitms 400
Shiftlcd Left
waitms 400
Shiftlcd Left
waitms 400
Shiftlcd Left
waitms 400
Shiftlcd Left
waitms 400
Shiftlcd Left
waitms 400
Shiftlcd Left
waitms 400
Shiftlcd Left
waitms 400
Cursor Off
Wait 1
Cursor On Blink
Wait 1
Locate 1 , 1
Lcd Chr(0)
Locate 1 , 5
Lcd Chr(1)
Locate 1 , 10
Lcd Chr(2)
End
برای شبیه سازی این مثال در محیط بسکام 8051 به ترتیب زیر عمل کنید
ابتدا برنامه را باز کنید
از منوی فایل گزینه new را انتخاب کنید وبرنامه را در صفحه باز شده کپی کنید
بعد از منویProgramگزینه Compile را بزنید تا برنامه به کد هگز ترجمه شود
از منویProgramگزینهSimulate را انتخاب کنید تا محیط شبیه سازی نمایش داده شود
در محیط شبیه سازی بر روی ایکون show hard ware (که ایکون ان شبیه به یک lcd است ) کلیک کنید تا پنجره مربوط به سخت افزار نمایش داده شود
و در نهایت روی ranProgram (که ایکون ان شبیه به play است)کلیک کنید تا شبیه سازی اجرا شود
- اعداد و متغییر ها در بسکام :
در زبان بیسیک منظور از متغییر یک ارایه است که میتواند حول دو عدد تغییر کند مثلا هنگامی که میگوییم 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 است گفته شد
در درسهای بعدی با این دستورات به صورت کاربردی اشنا می شوید.
اگر در موارد سوالی داشتید در همین لینک بیان کنید
-دستور ات حلقه و پرش
گاهی نیاز است که یک قسمت از برنامه چندین بار اجرا شود یا در حین اجرای برنامه در یک خط به خط دیگری رجوع شود، برای این کار از دستورات حلقه و پرش که چندین نوع است استفاده میشود:
دستور goto:
LABLE:
برنامه
GOTO LABLE
با این دستورات می توان به برچسب label پرش کرد .برچسب label باید با علامت : (colon) پایان یابد و می تواند تا 32 کارکتر طول داشته باشد .
$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
Q:
Incr A
Decr C
Locate 1 , 1
Lcd C
Locate 2 , 1
Lcd A
Waitms 500
Goto Q
End
دستور do-loop
فرم کلی دستورات DO … LOOP بصورت زیر می باشد .
DO
برنامه
LOOP
این حلقه یک حلقه بینهایت است که با EXIT DO می توان از درون حلقه خارج شد و اجرای برنامه در خط بعد از حلقه ادامه یابد .
همچنین با دستور زیر میتوان تعداد دفعات اجرای ان را معین کرد
do
برنامه
Loop Until A = x
که A یک متغییر از جنس دلخواه و x تعداد دفعات تکرار است
در مثال زیر در هر بار تکرار حلقه یک واحد به A اضافه می گردد و هرگاه مقدار A به 10 رسید خط بعد از حلقه اجرا می گردد
$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
Do
Incr A
Wait 1
Locate 1 , 1
Lcd A
Loop Until A = 10
Lcd "END"
End
دستور FOR-NEXT
فرم کلی دستورات FOR .. NEXT بصورت زیر می باشد .
[FOR var = start TO end [STEP VALUE
برنامه
NEXT var
Var بعنوان یک کانتر عمل می کند که start مقداراولیه آن و end مقدار پایانی است و هر دو می توانند یک ثابت عددی یا متغیر عددی باشند . Value مقدار عددی step را نشان می دهد که می تواند مثبت یا منفی باشد . وجود نام var بعد از NEXT الزامی نیست .
$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 D As Byte
Dim C As Integer
For A = 1 To 10 Step 2
Locate 1 , 1
Lcd A
Waitms 500
Next A
For C = 10 To -5 Step -1
Locate 1 , 6
Lcd C
WAITMS 500
Next
For D = 1 To 10
Locate 2 , 1
Lcd D
WAITMS 500
Next
End
دستور WHILE-WEND
WHILE condition
statements
WEND
دستورالعمل While-Wend تشکیل یک حلقه تکرار می دهد که تکرار این حلقه تا زمانی ادامه می یابد که عبارت بکاربرده شده نتیجه را FALSE کند و یا مقدار صفر بگیرد . دستورالعمل while بصورت ورود به حلقه به شرط می باشد , بنابراین While ممکن است در حالتهایی اصلا اجرا نشود .
بخش statement تا وقتی که حاصل condition صفر یا FALSE نشده است تکرار خواهد شد .
مانند
$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
A = 1
While A <10
Locate 1 , 1
Lcd A
Incr A
Waitms 600
Wend
Lcd "END"
End
دستورات دیگری نیز برای ایجاد حلقه وجود دارد که خود شما باید به انها دست یابید
-دستورات ایجاد تاخیر:
گاهی نیاز است برنامه در یک قسمت متوقف شود برای اینکار از دستورات تاخیر که در زیر بیان میشود استفاده میشود، این دستورات در هر جا که استفاده شوند میکرو CPU میکرو در انجا متوقف میشود و هیچ کار دیگری انجام نمیدهد ،در صورتی که میخواهید در ان واحد یک تاخیر ایجاد کنید وکاری را نیز انجام دهید از تایمر ها استفاده کنید (تایمر ها در بخش های بعدی گفته میشود.).
دستور wait:
برای ایجاد تاخیر در برنامه، از دستور wait استفاده میشود
دستور wait به دو شکل زیر است:
Waitms x این دستور برای ایجاد تاخیر میلی ثانیه ای می باشد .x مقدار تاخیر میباشد که بین 1تا 65535 میلی ثانیه می باشد.مانند
Waitms 720 تاخیر به مدت 700 میلی ثانیه
Wait x این دستور برای ایجاد تاخیر میلی ثانیه ای می باشد .x مقدار تاخیر میباشد که عددی بیشتر از یک ثانیه می باشد.مانند
Wait 1000 تاخیر به مدت 1000 ثانیه
دستور DELAY :
این دستور در هر جا که استفاده شود یک تاخیر 1میلی ثانیه ایجاد می شود
توجه کنید که هر جا دستور wait به کار رود برنامه در انجا به اندازه زمان مورد نظر متوقف می شود
$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
Qwer:
Lcd "fjghfgf"
Waitms 400
Cls
Lcd "123678"
Wait 1
Cls
Lcd "fkjjkb"
Wait 1
Cls
DelAy
Goto Qwer
End
در صورتی که کریستال معرفی شده در برنامه با کریستال استفاده شده یکی نباشد دستورات تاخیر به درستی اجرا نمی شود مثلا ممکن است به جای1 ثانیه 3 ثانیه تاخیر ایجاد شود.
راه های دیگری نیز برای ایجاد تاخیر وجود دارد که کشف انها باشما .
-زیر برنامه ها و فراخوانی توابع
معرفی زیر برنامه DECLARE SUB
از این دستور برای معرفی زیر برنامه استفاده می شود . زیر برنامه ای که قصد فراخوانی آن را داریم بایستی در ابتدای برنامه یا حداقل قبل از فراخوانی آن معرفی شده باشد .
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 = "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 , B1 As Byte , C As Byte
Declare Sub Test ( A As Byte )
A =1 : B1 = 2 : C = 3
Lcd A ; B1 ; C '123 will print
Call Test(b1)
End
Sub Test(a As Byte )
Locate 2 , 1
Lcd A ; B1 ; C '223 will print
End Sub
تابع فراخوانی CALL
توسط این دستور زیر برنامه یا تابعی را فراخوانی می کنیم .
CALL TEST( VAR1 , VAR2 , …)
VAR1 , VAR2 متغیرهایی که به زیر برنامه انتقال می یابند , هستند . می توان زیر برنامه را بصورت زیر نیز فراخوانی کرد .
TEST VAR1 , VAR2
لازم بتذکر است که نام زیر برنامه قبل از فراخوانی آن , باید توسط دستور Declare فراخوانی شود. اگر بخواهیم عدد ثابت را به زیر برنامه انتقال دهیم بایستی حتما با آرگومان BYVAL آن را انتقال دهیم .
$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 , C As Byte
Declare Sub Test ( B1 As Byte , Byval B2 As Byte )
A =65
Call Test
Locate 1 , 1
lcd A ' will print A = 10
End
Sub Test:
C = 10
A = 15
Locate 1 , 8
Lcd C
Locate 2 , 1
Lcd A
End Sub
دستور GOSUB
این دستور به زیربرنامه پرش می کند و اجرای برنامه را از آدرس برچسب ادامه می دهد .
GOSUB label
LABEL نام برچسبی زیر برنامه است که به آن پرش می شود .توسط دستور RETURN می توان از SUB برگشت کرد و اجرای برنامه بعد از دستور GO SUB ادامه می یابد .
$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 X As Byte
Q:
Wait 1
Gosub R
Goto Q
End
R:
X = X + 2
Locate 1 , 1
Lcd X
Return
دستوراتی که در بالا گفته شد برای فراخوانی زیر برنامه بود ، شما میتوانید با دستور GOTO به مکانهای مختلف برنامه پرش کنید
$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 X As Byte
Dim C As Byte
Goto T
W:
X = C + 4
Locate 2 , 1
LCD X
Goto R
T:
Do
C = C + 1
Locate 1 , 8
Lcd C
Wait 1
Loop Until C = 10
Goto W
R:
X = X * 2
Locate 1 , 1
Lcd X
Goto T
End
توابع ریاضی و محاسباتی
از عملگرهای ریاضی زیر می توان در محیط BASCOM استفاده کرد و عملیات ریاضی خود را انجام داد.
* علامت ضرب
/ علامت تقسیم
+ علامت جمع
- علامت تفریق
. علامت ممیز
> علامت بزرگتر از
< علامت کوچکتر از
= علامت مساوی
<= علامت کچکتر یا مساوی
=> علامت بزرگتر یا مساوی
<> علامت مخالف
$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 Q As Byte
Dim W As Byte
Dim E As Byte
Dim R As Byte
Dim T As Byte
Q = 3
W = Q + 3
E = W * Q
R = E / 3
T = E - r
Locate 1 , 1
Lcd W
Locate 1 , 8
Lcd E
Locate 2 , 1
Lcd R
Locate 2 , 8
Lcd T 't=10
End
تابع ABS :
(VAR =Abs (VAR2
این دستور به معنای ریاضی|VAR = |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
Config Lcd = 16 * 2
Dim A As Integer , C As Integer
A = -100
C = Abs(a) 'c=|a|
Lcd C 'C= 100
End
تابع RND :
این دستور یک عدد را تصادفی برمی گرداند .
(VAR= RND (limit
عدد تصادفی بین 0 و limit بدست آمده و در متغیر 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 X As Byte
Do
X = Rnd(100)
Locate 1 , 1
Lcd X
Waitms 500
Loop
End