آموزش برنامه نویسی تحت بسکام
دستورات و توابع محیط برنامه نویسی BASCOM :
بدنه یک برنامه بیسیک در محیط BASCOM شامل تعین میکرو مورد استفاده ، کریستال ، پایان و گزینه های اختیاری دیگری است که در زیر معرفی شده اند .
قابل ذکر است که فقط دستورات استفاده شده در این پروژه ، توضیح داده شده است :
- دستور معرفی میکرو :
$REGFILE = VAR
برای شروع یک برنامه در محیط BASCOM ابتدا باید میکرو مورد نظر تعریف شود . VAR نام چیپ مورد استفاده است که می تواند یکی از موارد زیر باشد :
میکرو های AVR به سه دسته زير تقسيم می شوند که قوی ترين دسته سری مگا AVR می باشد . (این سه گروه در ایران موجود می باشد ) .
-1 سری : tinyxx بزرگترين مزيت اين گروه نسبت به دو گروه ديگر کوچک بودنشان می باشد.
-2 سری : at90sxxxx اين سری به سری کلاسيک معروف است.
-3 سری:atmegaxxx اين سری از قوی ترين خانواده ميکرو های AVR می باشد که دارای امکانات زيادی می باشد.
*آی سی مورد استفاده در این پروژه از دسته سوم میباشد که بصورت ذیل می باشند :
- سری atmega :
M8535.dat - M8515.dat - M8def.dat - M103def.dat - M16def.dat - M163def.dat - M32def.dat - M128def.dat و .... می باشند .
- دستور کریستال :
برای مشخص کردن فرکانس کریستال شده بر حسب هرتز از این دستور استفاده می شود :
$CRYSTAL =X
که کریستال مورد استفاده در این پروژه 8MHZمی باشد .
- دستور پایان برنامه :
این دستور در انتهای برنامه قرار می گیرد و اجرای برنامه را متوقف می کند . با دستور END تمام وقفه ها غیر فعال شده و یک حاقه بی نهایت تولید و برنامه خاتمه می یابد .
- دیمانسیون متغییر :
این دستور بعد یک متغییر را نشان می دهد . با این دستور می توانید متغیرهایی که در برنامه بکار برده می شوند تعریف کنید .
DIM VAR AS ( XRAM/ SRAM/ERAM)
VAR نام متغییری است که در برنامه بکار برده می شود . در صورت استفاده از حافظه جانبی آن را با XRAM مشخص کنید و SRAM را زمانی اختیار کنید که میخواهید متغییرها را در حا فظه SRAM قرار دهید و ERAM متغییر مورد نظر را در EEPROM داخلی جای می دهد . data type نوع داده است که می تواند طبق جدول زیر BIT ، BYTE ، INTEGER ، LONG ، WORD ، STRING یا SINGLE باشد.
متغییرهای استفاده شده در این پروژه بصورت ذیل می باشد :
Dim S As Word , M As Word , H As Word
Dim W As Word
: BIT اين متغيير ميتواند صفر يا يک باشد .
: BYTE اين متغيير ميتواند از 0 تا 255 تغيير کند و فقط شامل اعداد صحيح مثبت می شود .
: WORD اين متغيير ميتواند از 0 تا 65535 تغيير کند و فقط شامل اعداد صحيح مثبت می شود.
: INTEGER اين متغيير ميتواند از 32767 – تا 32767 + تغيير کند و فقط شامل اعداد صحيح مثبت و منفی می شود.
: LONG اين متغيير ميتواند از 214783648- تا 214783648+ تغيير کند و فقط شامل اعداد صحيح مثبت و منفی می شود .
: SINGLE اين متغيير ميتواند از 1.5*10^45- تا 3.4*10^38تغيير کند و فقط شامل اعداد صحيح واعشاری مثبت و منفی می شود .
: Double اين متغير ميتواند از 5.0*10-324 تا 1.7*10^308 تغيير کند و فقط شامل اعداد صحيح واعشاری مثبت و منفی می شود .
- دستورINCR :
این دستور یک واحد به متغییر عددی varمی افزاید.
INCR var
- دستور DECR:
این دستور متغییر VARرا یک واحد کم می کند.
Decr var
- دستورLCASE :
این دستور تمام حروف رشته مورد نظر را تبدیل به حروف کوچک می کند.
Target= Lcase(source)
تمام حروف رشته source کوچک شده و در رشته Targetجای داده می شود.
- دستور :RIGHT
با این دستورقسمتی از یک رشته را جدا می کنیم.
Var=RIGHT(var1,n)
از سمت راست رشته var1, تعداد n کاراکتر جدا شده و در رشته varقرار می گیرد.
- دستور LEFT :
این دستور کاراکترهای سمت چپ یک رشته را به تعداد تعیین شده جدا می کند.
Var=Left(var1 ,n)
از سمت چپ رشتهvar1, تعداد n کاراکترجدا شده و در رشته var قرار می گیرد.
- دستور SWAP:
با اجرای این دستور محتوای متغییر var1 در متغییر var2و محتوای متغییر var2در متغییر var1 قرار می گیرد. Var1و var2 می توانند داده هایی از نوع BYTE, BIT LONG,WORD,INTEGER, یا STRING می باشند.
- دستورASC:
Var=ASC(string)
این دستور اولین کاراکتر یک متغییر از نوع داده STRINGرا به مقدار اسکی آن تبدیل می کند.
- دستور HEX:
این دستور یک داده از نوع WORD,INTEGER,BYTE یا LONG را به مقدار هگزادسیمال تبدیل می کند.
Var=Hex(x)
مقدار HEXمتغییر یا ثابت X در متغییر var جای می گیرد.
- دستورSET:
توسط این دستور می توان یک بیت را یک کرد. setBit/ pin
setVar.x
Bitمی تواند یک بیت و یا یکSFR مانند PORTB.1 باشد وvar متغییری از نوع داده, BYTE
WORD, INTEGERیا LONG است. X برای BYTE می تواند 0 تا 7 , 0 تا 15 برای WORDو برای LONG می تواند 0 تا 31 باشد.
- دستور RESET:
توسط این دستور می توان یک بیت را صفر کرد. Reset Bit/pin
Reset VAR
Bit می تواند یک بیت و یا یک SFR مانند PORTB.1باشد وVar متغییری از نوع داده ,BYTE WORD,INTEGERیا LONG است و X برای BYTE می تواند 0تا7 , 0تا 15برای WORD و برای LONG می تواند0 تا30 باشد.
- دستورBITWAIT :
BITWAIT X , SET/RESET
توسط این دستور اجرای برنامه تا زمانی که بیتX, SET(=1)یاRESET(=0) شود در خط جاری متوقف می ماند. در صورت TRUEشدن شرایط , اجرای برنامه از خط بعد ادامه می یابد. X می تواند یک بیت رجیستر داخلی مانند PORTB.Y باشد که Y می تواند بین اعداد 0 تا 7تغییر کند.
- دستورGOTO و JAM:
Goto label
JAM lable
با این دستورات می توان به برچسب label پرش کرد. بر چسب label باید با علامت (colon): پایان یابد و می تواند تا 32کاراکتر طول داشته باشد. به خاطر داشته باشید زمانی که از دو label هم نام استفاده شود کامپایلر به شما هشدار (warning)می دهد. دستور RETURN برای برگشت از برچسب وجود ندارد.
- دستور DO-LOOP:
فرم کلی دستور DO…LOOPبه صورت زیرمی باشدDO statements
LOOP[UNTIL expression]
دستورالعمل Statements تا زمانی که expression دارای ارزش TRUE یا غیرصفراست تکرار خواهد شد بنابراین ، این نوع حلقه , حداقل یکبار تکرار می شود. DO - LOOP به تنهایی یک حلقه بینهایت است که با EXIT DO می توان از درون حلقه خارج شد و اجرای برنامه در خط بعد از حلقه ادامه یابد.
- دستور FOR-NEXT :
فرم کلی دستور FOR…NEXT به صورت زیر می باشد.
FOR var = start TO end [STEP value] Statements
Next var
VAR بعنوان یک کانتر عمل می کند که START مقدار اولیه و END مقدار پایانی است و هر دو می توانند یک ثابت عددی یا متغییر عددی باشند. VALUE مقدار عددی STEP(قدمها) را نشان می دهد که می تواند مثبت یا منفی باشد. در صورت حذف کردن STEP VALUE کامپایلر بصورت پیش فرض مقدار یک را در نظر می گیرد.
- دستورالعمل :IF
در کلیه حالتهای زیر عبارت statement می تواند یک دستوالعمل ساده یا چند دستورالعمل مرکب باشد .
If Expression Then statement
دستورالعمل statement زمانی اجرا می شود که عبارت expression دارای ارزش TRUE باشد.
حالت 1:
If Expression Then
Statement 1
Else
Statement 2
End if
در صورتی که عبارت expression دارای ارزش TRUE باشد دستورالعمل statement1 اجرا خواهد شد, در غیر این صورت دستورالعمل statement 2 اجرا می شود.
حالت 2:
If Expression 1 Then
Statement 1
Elseif [Expression2 Then]
Statement 2
Else Statement 3
End if
در صورتی که عبارت expression 1 دارای ارزش TRUE باشد دستورالعمل statement اجرا خواهد شد. در صورتی که عبارت expression 1 دارای ارزش FALSE ولی عبارت اختیاری expression 2 دارای ارزش TRUE باشد دستورالعمل statement 2 اجرا خواهد شد و در غیر این صورت یعنی در حالتی که هر دو عبارت expression 2 و expression 1 دارای ارزش FALSE باشند دستورالعمل statement 3 اجرا خواهد شد.
همچنین با دستور IF می توان یک یا صفر بودن یک بیت از یک متغییر را امتحان کرد.
IF bit = 1 THEN or IF bit = 0 THEN
Dim Var As Byte ' Idx As Byte
Idx = 1 If Var . 1dx = 1 Then If bit 1 of var is 1 then
Set portb .0
Else
- دستورالعمل CASE:
کنترل اجرای دستورات یک برنامه دارای ترتیب بالا به پایین است ولی در صورت نیاز می توان توسط دستورالعمل های انشعاب یا پرش جهت کنترل اجرای دستورات یک برنامه را تغییر داد . یکی از این دستورات SELECT- CASE است که می توان یکی از چندین دستور را با توجه به مقدار ورودی اجرا کرد.
Select Case Var
CASE test 1 : statement 1
[ CASE tast 2 : statement 2]
CASE ELSE : statement 3
Endselect
اگر متغییر Var با مقدار tast1 برابر باشد statement1 اجرا می شود و سپس اجرا برنامه بعد ازEnd select ادامه می یابد در غیر اینصورت اگر متغییر Var با مقدار test1 برابر نباشد ولی با مقدارtest2 برابرباشد statement2 اجرا می شود و سپس اجرا برنامه بعد از End Select ادامه می یابد و نهایتاً اگر متغییر Var با هیچکدام از مقادیر test1 و test2 برابر نباشد statement3 اجرا می شود و سپس اجرای برنامه بعد از End select ادامه می یابد.
شما می توانید به صورت های زیر نیز متغییر را امتحان کنید:
اگر متغییر مورد نظر بزرگتر از دو باشد. CASE IS >2 :
ویا می توان محدوده ای را برای امتحان کردن در نظر گرفت :
اگر متغییر مورد بین 2 تا 5 باشد. CASE 2 to5 :
- دستورEXIT :
با این دستور می توانید فقط از یک ساختار یا حلقه خارج شوید و ادامه برنامه را بعد از ساختار یا حلقه ادامه دهید.
EXITAFOR…NEXT,DO..LOOP,WHILE..WEND,SUB..ENDSUBor FUNCTION..END FUNCTION
EXIT FOR
EXIT DO
EXIT WHILE
EXIT SUB
EXIT FUNCTION
- دستور DELAY:
این دستور برای مدت کوتاهی به مقدار 1000میکروثانیه در اجرای برنامه تأخیر ایجاد می کند.
- دستور WAITms:
WAITms milliseconds اجرای برنامه به مدت millisecondsمیلی ثانیه متوقف می شود , پس از سپری شدن زمان مشخص شده اجرای برنامه از خط بعد ادامه می یابد. milliseconds می تواند اعداد بین( 1-65535) باشد.
- دستور WAIT:
WAIT seconds
اجرای برنامه به مدت seconds ثانیه متوقف می شود ,پس از سپری شدن زمان مشخص شده اجرای برنامه از خط بعد ادامه می یابد.
- معرفی زیر برنامه DECLARE SUB) ):
از این دستور برای معرفی زیربرنامه استفاده می کنیم . زیربرنامه ای که قصد فراخوانی آن را داریم بایستی در ابتدای برنامه و یا حداقل قبل از فراخوانی آن معرفی شده باشد.
DECLARE SUB TEST [ ( [BYREF/BYVAL] var as type )]
زیر برنامه بر خلاف تابع, مقداری برنمی گرداند . در زمان ارسال داده به صورت BYREF ( پیش فرض کامپایلر ) آدرس داده به زیر برنامه فرستاده شده و در محتوای آن تغییر ایجاد می شود ولی در حالت BYVAL یک کپی از داده فرستاده می شود و به هیچ وجه در محتوای آن ، تغییری ایجاد نمی شود . TEST نام زیر برنامه و VAR نام متغییر ارسالی به زیر برنامه و TYPE نوع آن است که می تواند داده نوعBYTE،INTEGER،WORDیاSTRINGباشد.
- دستور CALL :
توسط این دستور زیر برنامه یا تابعی را فراخوانی میکنیم .
CALL TEST( VAR1 , VAR2,…
لازم بذکر است که نام زیر برنامه قبل از فراخوانی آن ، باید توسط دستور DECLARE فراخوانی شود . اگر بخواهیم عدد ثابت را به زیر برنامه انتقال دهیم بایستی حتما" با آرگومان BAVAL آن را انتقال دهیم .
- دستور CLS:
این دستور مخفف CLEAR SCREEN است که باعث پاک شدن تمام صفحه نمایش LCD می شود.
- دستور DISPLAY :
DISPLAY ON /OFF
توسط این دستور می توانید صفحه نمایش را روشن (ON) یا خاموش (OFF) کنید.
- دستور CURSOR:
توسط این دستور می توان مکان نمای LCD را تنظیم کرد.
CURSOR ON / OFF BLINK / NOBLINK
شما می توانید روشن (ON) یا خاموش(OFF) چشمک زدن ( BLINK) یا چشمک نزدن (NOBLINK) مکان نما را تنظیم کنید. در حالت پیش فرض مکان نما در حالت روشن و چشمک نزدن است.
- دستور HOME :
این دستور مکان نما را به ترتیب در اولین ستون سطر اول ,سطر دوم , سطر سوم یا سطر چهارم قرار می دهد.
HOME UPPER / LOWER / THIRD / FOURTH
دستورات فوق را به صورت ساده شده زیر نیز می توان نوشت :
HOME U / L /T / F
اگر دستور HOME به تنهایی نوشته شود مکان نما در سطر و ستون اول قرار می گیرد.
- دستور LOCATE:
این دستور مکان نما را به مکان دلخواه در صفحه LCD می برد.
LOCATE X , Y
X ثابت یا متغیری که مشخص کننده سطر و Y ثابت یا متغیری که مشخص کننده ستون LCD است.
- دستورSHIFT CURSOR :
این دستور مکان نمای LCD را یک واحد به چپ یا راست انتقال می دهد.
SHIFTCURSORB LEFT / RIGHT
- دستور SHIFTLCD:
این دستور کل صفحه نمایش LCD را یک واحد به چپ یا راست انتقال می دهد.
5-2 دستورات کار با LCD گرافیکی مدل T6963:
دستور CLS:
این دستور تمام صفحه نمایش LCD چه قسمت متنی و چه گرافیکی را پاک می کند.
دستور CLS GRAPH :
این دستور فقط قسمت گرافیکی را پاک می کند.
دستور CLS TEXT :
این دستور فقط قسمت متنی را پاک می کند.
دستور LCD :
این دستور برای نوشتن متن بر روی LCD استفاده می شود. این دستور همانند دستور LCD, برای LCD های ماتریسی عادی عمل می کنند.
دستور COLOR , Y , PSET X :
این دستور یک PIXEL را در مختصات (X , Y) به ازای COLOR=0 خاموش و به ازای COLOR=1 روشن می کند. X از 0-239 و Y از 0-127 می تواند تغییر کند.
دستور LOCATE ROW , COLUMN :
این دستور مکان نما را در مکان سطر (ROW) و ستون (COLUMN) مشخص شده قرار می دهد ROW
می تواند از1 تا 16 تغییر کند. تغییرات COLUMN بستگی به انتخاب MODE دارد که می تواند از 1 تا 40 تغییر کند.
دستور CURSOR ON/ OFF BLINK/ NOBLINK :
این دستور برای قسمت های متنی استفاده می شود. مکان نما می تواند در حالتهای OFF یا ONو چشمک زدن (BLINK) یا چشمک نزدن (NOBLINK) باشد.
دستور Line(X0 , Y0) – (X1 , Y1) , COLOR :
با این دستور از PIXEL اول مختصات (X0 , Y0) به PIXEL دوم با مختصات (X1 , Y1)خطی با رنگ COLOR کشیده می شود. COLOR=0 خط را پاک کرده و به ازای COLOR=255خطی با رنگ سیاه رسم خواهد شد.
دستور CIRCLE (X0 , Y0) , RADIUS,COLOR :
این دستور دایره ای به مختصات مرکزیت ( X0 , Y0) و شعاع RADIUS و رنگ COLORرسم خواهد کرد. COLOR=0 دایره را پاک کرده و به ازای COLOR=255 دایره با رنگ سیاه
رسم خواهد شد.
دستور SHOWPIC X,Y,LABLE :
برای نمایش عکسی که در منوی TOOLS و قسمت GRAPHIC CONVERTER ذخیره کرده اید استفاده می شود. X مکان قرارگیری افقی وY مکان قرارگیری عمودی عکس را نشان می دهد. LABLE نام برچسبی است که اطلاعات عکس مورد نظر در آن قرار دارد. زمانی که در پنجره GRAPHIC CONVERTER عکس خود را LOAD کرده اید, دقت کنید که نوع LCD و فونت خود را انتخاب نمایید. گزینه SED نبایستی انتخاب شود چون LCD شما از نوع SED نیست.