دستورات و توابع محیط برنامه نویسی 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 نیست.