Académique Documents
Professionnel Documents
Culture Documents
BAS COM
4
1
معرفي منوهاي محیط
BASCOM
ميكروكنترلرهايِ AVR
2
منوي FILE
با این گزینه شما می توانيد فایل موجود در برنامه را پرینت نمایيد .
بستن فایل ) ) CLOSE FILE
با این گزینه شما قادر خواهيد بود از محيط BASCOMخارج شوید ولی در صورتی که
شما در برنامه تان تغييری داده اید و آن را ذخيره نکرده اید ,پيش از خروج هشدار ميدهد.
4
منوی EDIT
5
منوی ... EDIT
6
منوی ... EDIT
7
منوی PROGRAM
با این گزینه (یا کليد )F7شما قادر به ترجمه برنامه به زبان ماشين () COMPILE
خواهيد بود .برنامه شما با انتخاب این گزینه پيش از COMPILEذخيره خواهد شد و
فایلهای زیر به انتخاب شما در OPTION COPILER SETTINGایجاد خواهند شد :
– XX.BINفایل باینری که می تواند در ميکروکنترلر PROGRAMشود .
– XX.DBGفایل DEBUGکه برای نرم افزار شبيه ساز BASCOMمورد نياز
است .
– XX.OBJفایل OBJECTکه برای نرم افزار AVR STUDIOمورد نياز است
.
– XX.RPTفایل گزارشی
– XX.HEXفایل هگزادسيمال اینتل که برای بعضی از انواع PROGRAMMERها
مورد نياز است .
– XX.ERRفایل خطا که فقط در هنگام بروز خطا ایجاد می شود.
– XX.EPPداده های که باید در EPROMبرنامه ریزی شود در این فایل نگهداری
8 ميگردند .
منوی ... PROGRAM
اگر خطایی در برنامه موجود باشد شما پيغام خطا را در یک کادر محاوره ای دریافت
خواهيد کرد و COMPILEمتوقف ميشود .با کليک بر روی هر کدام از انها به خطی که
خطا در آن رخ داده پرش خواهيد کرد .
PROGRAM SYNTAX CHECK
بوسيله این گزینه برنامه شما برای نداشتن خطای املیی چک می شود .اگر خطایی وجود داشته باشد
هيچ فایلی ایجاد نخواهد شد .
PROGRAM SHOW RESULT
از این گزینه برای دیدن نتيجه COMPILEميتوان استفاده کرد .
گزینه OPTION COMPILE OUTPUTرا برای تعيين اینکه کدام فایلها باید ایجاد شوند را ببينيد
.فایلهایی که محتوای آنها قابل مشاهده اند REPORT ERRORمی باشند .
9
منوی ... PROGRAM
با فشردن کليد F2یا این گزینه از منو PROGRAMشبيه ساز داخلی فعال خواهد شد
.شما در برنامه با نوشتن کلمه کليدی SIM$قادر به شبيه سازی سریعتر برنامه ميباشيد .در
صورت تمایل شما می توانيد از شبيه سازی های دیگر مانند AVR STUDIOنيز استفاده
کنيد .برای شبيه سازی فایلهای DBJو OBJباید ایجاد شده باشند .فایل OBJدر برنامه
شبيه سازی AVR STUDIOو فایل DBJبرای شبيه ساز داخلی مورد استفاده قرار می
گيرد .
SEND TO CHIP
توسط این گزینه یا کليد F4پنجره محيط برنامه ریزی ظاهر خواهد شد .شما می توانيد توسط
این گزینه ميکرو مورد نظر خود را PROGRAMکنيد .
10
منوی TOOLS
توسط این گزینه یا کليدهای CTR + Tبا بال آوردن TERMINAL EMULATOR
می توانيد از این محيط برای نمایش داده ارسالی و دریافتی در ارتباط سریال RS-232بين
ميکرو و کامپيوتر استفاده نمایيد .
LCD DESIGNER
توسط این گزینه می توانيد کاراکترهای دلخواه خود را طراحی نمایيد و بر روی LCD
نمایش دهيد.
11
منوی ... TOOLS
با کليک بر روی این منو پنجره محيط GRAPHIC CONVERTORبرای تبدیل
تصویر با پسوند * BMP.به تصویری با پسوند * BGF.که قابل نمایش بر روی
GRAPHIC LCDاست ظاهر می شود .
فایل دلخواه خود را با پسوند * BMP.توسط دکمه LOADوارد کرده و سپس با دکمه
SAVEآنرا در کنار برنامه خود با پسوند *) ) BASCOM GRAPHIC FILEBGF.
ذخيره کنيد .فایل تبدیل شده بصورت سياه و سفيد دوباره نمایش داده می شود و با کليک بر
روی دکمه OKمی توان از محيط خارج شد .فایل ذخيره شده با فراخوانی در برنامه قابل
نمایش بر روی LCDگرافيکی است .انتخاب نوع LCDتوسط قسمت LCD TYPEانجام
می گيرد .فونت نوشتاری نيز می تواند 8*6یا 8*8پيکسل باشد .
12
منوی OPTION
با این منو شما می توانيد گزینه های مختلف کامپایلر را طبق زیر اصلح نمایيد :
•OPTION COMPILER CHIP
انتخاب ميکرو برای برنامه ریزی توسط این گزینه انجام می شود .در صورتی که از دستور
REGFILE$در برنامه استفاده کرده اید به انتخاب ميکرو توسط این گزینه نيازی نيست .
• OPTION COMPILER OUTPUT
با این گزینه می توان فایل هایی که مایل به ایجاد آنها پس از کامپایل هستيم را انتخاب کرد .
با انتخاب گزینه SIZE WARNINGزمانی که حجم CODEاز مقدار حافظه
FLASH ROMتجاوز کرد کامپایلر توليد WARNINGمی کند .
• OPTION COMPILER 12C,SPI,1WIRE
توسط این گزینه می توان پایه های مربوط به ارتباطات 12C SPIو WIRE 1را تعيين
کرد .
13
منوی ... OPTION
ميكروكنترلرهايِ AVR
15
نوار ابزار در اين محيط
RUN
باعث توقف موقت شبيه سازی می شود و با فشردن دکمه RUNشبيه سازی ادامه پيدا می
کند .
STOP
با استفاده از این دکمه می توان برنامه را خط به خط اجرا نمود و هنگام فراخوانی توابع به
داخل آنها رفته و مراحل اجرای آنها را بررسی کرد .این کار را با فشردن کليد F8نيز می
توانيد انجام دهيد .بعد از هر بار اجرای این دستور شبيه سازی به حالت PAUSEمی رود
.
16
نوار ابزار در اين محيط ...
این دکمه شبيه دکمه قبلی است با این تفاوت که در هنگام فراخوانی توابع به داخل SUB
ROUTINEنخواهيد رفت .این کار را می توانيد با فشردن کليد SHIFT F8نيز انجام
دهيد .
RUN TO
دکمه RUN TOشبيه سازی را تا خط انتخاب شده انجام ميدهد و سپس به حالت PAUSE
ميرود ( خط جاری باید شامل کدهای قابل اجرا باشد ) .
17
نوار ابزار در اين محيط ...
برای نمایش ثباتهای I\Oاستفاده می شود .که مانند Rقابل مقدار دهی است .
18
نوار ابزار در اين محيط ...
VARIABLES
شما قادر به انتخاب متغير با دو بار کليک کردن در ستون VARIABLESميباشيد .با
فشار دکمه ENTERدر هنگام اجرای برنامه قادر به مشاهده مقدار جدید متغير در برنامه
خواهيد بود .همچنين ميتوانيد مقدار هر متغير را توسط VALUEتغيير دهيد .
برای تماشای یک متغير آرایه ای می توانيد نام متغير همراه با اندیس آنرا تایپ کنيد و برای
حذف هر سطر می توانيد دکمه CTRL+DELرا فشار دهيد .
WATCH
این گزینه برای وارد کردن وضعيتی که قرار است در خلل شبيه سازی ارزیابی شود مورد
استفاده قرار می گيرد و هنگامی که وضعيت مورد نظر صحيح شد شبيه سازی در حالت
PAUSEقرار خواهد گرفت .حالت مورد نظر را در مکان مورد نظر تایپ نموده و دکمه
ADD-BUTTONرا فشار دهيد .هنگاميکه دکمه MODIFY-BUTTONفشار داده
شود ,وضعيت مورد نظر را مورد بازنگری قرار ميدهد و ميتوان ارزش آنرا تغيير داد .
برای حذف هر وضعيت شما باید آنرا انتخاب کرده و دکمه REMOVEرا فشار دهيد .
19
نوار ابزار در اين محيط ...
LOCAL
متغيرهای محلی موجود در SUBیا FUNCTIONرا نشان ميدهد .البته نميتوان متغيری
را به آن اضافه نمود .
UP
وضعيت ثبات وضعيت ( ) STATUS REGرا نشان ميدهد FLAG .ها را ميتوان توسط کليک بر
روی CHECK BOXها تغيير وضعيت داد .
INTERRUPTS
این گزینه منابع وقفه را نشان ميدهد .هنگاميکه هيچ ISRبرنامه نویسی نشده باشد ,همه دکمه ها غير
فعال خواهند بود و اگر ISRنوشته شود ,دکمه مربوط به آن فعال می شود و با کليک بر روی هر
کدام از دکمه ها ,وقفه مربوطه اجرا می شود .در ضمن ميتوان روی یک پایه خاص پالس نيز ایجاد
نمود .
20
معرفی محیط برنامه ریزی
ميكروكنترلرهايِ AVR
21
ISP STK PROGRAMMER
پنجره ارسال برنامه به ميکرو هنگاميکه RUN PROGRAMMERانتخاب می شود ظاهر
ميگردد .
منوی FILE
22
…ISP STK PROGRAMMER
: VERIFYاین گزینه محتوای بافر و آنچه که در ميکرو برنامه ریزی شده است را مقایسه •
می کند و در صورت تساوی پيغام VERIFY OKنمایش داده می شود .
: AUTO PROGRAMحافظه ميکرو را پاک کرده و برنامه مورد نظر را در حافظه •
FLASHبرنامه ریزی می کند و سپس عمل VERIFYرا به صورت خودکار انجام می
دهد.
: RESETميکرو متصل به PROGRAMMERرا ریست می کند . •
23
معرفی محیط
TE RMIN AL E MULA TOR
ميكروكنترلرهايِ AVR
24
TERMINAL EMULATOR
از این محيط می توان برای نمایش داده ارسالی و دریافتی در ارتباط سریال RS-232بين ميکرو
و کامپيوتر استفاده نمود .
اطلعاتی که در این محيط تایپ می شود به ميکرو ارسال و اطلعاتی که از پورت کامپيوتر
دریافت می شود دراین پنجره نمایش داده می شود .هنگاميکه در برنامه از SERIAL INو یا
SERIAL OUTاستفاده می شود ,پس از PROGRAMکردن برنامه درون ميکرو و
اتصال آن به پورت سریال , PCمی توان داده های ارسالی توسط UARTميکرو به بيرون را
دریافت کرده و نمایش داد و از صحت و سقم آنها اطلع یافت .همچنين اگر از دستوری مانند
INKEYدر برنامه استفاده شود ,ميتوان داده خود را از طریق پنجره TERMINAL
EMULATORبه ميکرو ارسال نمود .توجه داشته باشيد که از BOUD RATEمشابه در
ميکرو و کامپيوتر استفاده نمایيد .
25
منوهای محيط
TERMINAL EMULATOR
: SETTINGتنظيمات پورت COMو دیگر OPTIONها توسط این منو صورت می گيرد .
: TERMINAL OPEN LOGفایل LOGرا باز یا بسته می کند .هنگاميکه فایل LOG
وجود نداشته باشد درخواست نامی برای فایل گزارش می کند .تمام اطلعاتی که در پنجره
TERMINALپرینت می شود داخل فایل LOGثبت می شود .
26
دستورات و توابع محیط برنامه نویسی
BAS COM
5
27
بدنه یک برنامه درمحیط
BASCOM
ميكروكنترلرهايِ AVR
28
... BA SC OM بدنه یک برنامه درمحیط
معرفی میکرو
REGFILE = VAR$
نامVAR . ابتدا باید ميکرو مورد نظر تعریف گرددBASCOM برای شروع یک برنامه در محيط
. چيپ مورد استفاده است که می تواند یکی از موارد زیر باشد
regfile = “ At12def.dat “ ‘ATtiny12 MCU$
regfile = “ At15def.dat “ ‘ATtiny15 MCU$
regfile = “ At22def.dat “ ‘ATtiny22 MCU$
regfile = “ At26def.dat “ ‘ATtiny26 MCU$
برای مشخص کردن فرکانس کریستال استفاده شده برحسب هرتز از دستور زیر استفاده می نمایيم .
CRYSTAL = X$
Xفرکانس کریستال استفاده شده بر حسب هرتز است .
نکته
این دستور را حتی برای زمانی که با اسيلتور داخلی ميکرو کار ميکنيد بنویسيد .
مثال
در صورت نياز برای نوشتن برنامه اسمبلی در بين برنامه بيسيک از دستور زیر استفاده می
نمایيم
ASM$
ASSEMBLY PROGRAMME
ENDASM$
با دستور ASM$می توان در برنامه شروع به نوشتن برنامه موردنظر اسمبلی کرده و پس از
اتمام برنامه اسمبلی با دستور ENDASM$برنامه اسمبلی را به پایان رساند و به نوشتن ادامه
برنامه پرداخت .
مثال
Dim c As Byte
Loadadr c,x ‘load address of variable c into register x
Asm ‘start assembly program$
Ldi r24,1 ‘load register R24 with the constant 1
St x,R24 ‘store 1 into var c
End Asm ‘end of assembly program$
32 Print c
End
‘send c to serial port
بدنه یک برنامه درمحیط ... BA SC OM
یادداشت ( اختیاری )
گاهی نياز است یادداشتهایی برای اطلعات بيشتر در برنامه اضافه شود .
’ یا REM
یاددلشتها و نوشته های بعد از این دستور غير فعال بوده و در برنامه برای یادداشت به کار می
رود و کامپایل نخواهد شد و همچنين به رنگ سبز در می آیند .
همچنين می توان از دو علمت برای شروع ’( و از ’) برای اتمام متن یادداشتی استفاده نمایيد .
مثال
REM this sentence will not be compiled
Or
’ this sentence will not be compiled
مثال
’( start block comment
This will not be compiled
’) end block comment
33
بدنه یک برنامه درمحیط ... BA SC OM
آدرس شروع برنامه ریزی حافظه ( FLA SHاختیاری )
گاهی نياز است که برنامه خود را از آدرسی دلخواه در حافظه FLASHROMقرار دهيد .
ROMSTART = ADDRESS$
ADDRESSمکانی از حافظه است که برنامه HEXاز این آدرس در حافظه ميکرو کنترلر ,
شروع به نوشته شدن می شود .در صورتی که ازاین دستور استفاده نشود کامپایلر به طور
خودکار آدرس & H0000را در نظر می گيرد .
مثال
ROMSTART = &H4000$
34
بدنه یک برنامه درمحیط ... BA SC OM
تعیین کلک ( اختیاری )
با این دستور در بعضی از ميکروهای سری MEGA AVRاز جمله MEGA103یا
MEGA603به صورت نرم افزاری می توان کلک سيستم را تغيير داد .تقسيم کلک بطور
مثال برای کاهش مصرف تغذیه استفاده می شود .
CLOCKDIVISION = var
Varمقادیر معتبر بين اعداد 2تا 128می تواند باشد .
اگر از این دستور استفاده نمایيد ,دستوراتی که مستقيما با کلک سيستم کار می کنند
ممکن است درست کار نکنند . نکته
مثال
boud = 2400$
Clockdivision = 2
“Print “Hello
35 End
بدنه یک برنامه درمحیط ... BA SC OM
پایان برنامه
END
این دستور در انتهای برنامه قرار می گيرد و اجرای برنامه را متوقف می کند .با این دستور تمام وقفه
ها غير فعال شده و یک حلقه بی نهایت توليد و برنامه خاتمه می یابد .
مثال
36
اعداد و متغیر ها و جداول
LOOKUP
ميكروكنترلرهايِ AVR
37
اعداد و متغیر ها و جداول .. . LOOKUP
دیمانسیون متغیرها
این دستور بعد یک متغير را نشان ميدهد .با این دستور می توانيد متغيرهایی که در برنامه به کار
برده می شوند تعریف کنيد .
] DIM var AS [ XRAM/SRAM/ERAM ] data type [AT location
[[OVERLAY
VARنام متغيری که در برنامه بکار برده ميشود .در صورت استفاده از حافظه جانبی آنرا با
XRAMمشخص کنيد و SRAMرا زمانی اختيار کنيد که می خواهيد متغيرها را در حافظه
SRAMقرار دهيد و ERAMمتغير مورد نظر را در EEROMداخلی جای ميدهد .
Data typeنوع داده است که می تواند طبق جدول زیر STRING ,WORD ,LONG
,INTEGER ,BYTE, BITیا SINGLEباشد .
در صورت استفاده از متغير , STRINGبيشترین طول آن نيز باید نوشته شود .گزینه اختياری
OVERLYمتغير تعریف شده را بصورت POINTERدر نظر ميگيرد و فضایی را برای
متغير در نظر نمی گيرد .
AT LOCATIONبه شما اجازه ميدهد که متغيرتان را در آدرسی که ميخواهيد در حافظه
ذخيره کنيد زمانی که محل آدرسدهی اشغال باشد ,اولين جای خالی در حافظه استفاده می شود .
38
.. . LOOKUP اعداد و متغیر ها و جداول
... دیمانسیون متغیرها
39
.. . LOOKUP اعداد و متغیر ها و جداول
... دیمانسیون متغیرها
مثال
مثال
40
.. . LOOKUP اعداد و متغیر ها و جداول
CONS T دستور
مثال
“CONST S = “TEST
CONST A = 5
CONST B1 =&B1001
CONST X = )B1 * 3 ( + 2
41
اعداد و متغیر ها و جداول .. . LOOKUP
دستور ALI AS
از این دستور برای تغير نام متغير استفاده می شود .
مثال
42
اعداد و متغیر ها و جداول .. . LOOKUP
دستور CH R
از این دستور برای تبدیل متغير عددی یا یک ثابت به کاراکتر استفاده می شود .زمانی که قصد
دارید یک کاراکتر بر روی LCDنمایش دهيد از این دستور می توانيد استفاده نماتيد .
در صورتيکه از این دستور به این صورت استفاده نمایيد ) PRINT CHR ) VARکاراکتر
اسکی VARبه پورت سریال فرستاده خواهد شد .
مثال
این دستورمحل و موقعيت یک زیر رشته را در رشته دیگر مشخص می کند .
) Var =Instr )start , String ,Subset
) Var =Instr )String ,Subset
Varعددی است که مشخص کننده محل SUBSTRدر رشته اصلی STRINGمی باشد و زمانيکه زیر
رشته مشخص شده در رشته اصلی نباشد صفر برگردانده می شود START.نيز عددی دلخواه است که
مکان شروع جستجو زیر رشته در رشته اصلی را مشخص می کند .در صورتيکه STARTقيد نشود تمام
رشته از ابتدا جستجو می شود .رشته اصلی تنها باید از نوع رشته باشد ولی زیر رشته ( ) SUBSTRمی
تواند رشته و عدد ثابت هم باشد .
مثال
DO ‘ start loop
Incr A ‘ increment A by 1 A=A+1
Print A ‘ print A
Loop Until A>10 ‘ repeat until A is greater than 10
45
.. . LOOKUP اعداد و متغیر ها و جداول
DEC R دستور
Dim A As Byte
A=5 ‘ assign value to a
Decr A ‘ decrement by one A= A-1
Print A ‘ print A =4
End
46
.. . LOOKUP اعداد و متغیر ها و جداول
CHEC KS UM دستور
را برمی گرداند که البته اگر مجموع کد اسکی رشته ازVAR این دستور مجموع کد دسيمال اسکی رشته
. از مجموع کم می شود256 بيشتر شود مقدار255 عدد
مثال
Dim S As String*10 ‘ Dim Variable
S = “test” ‘ assign Variable
) Print Checksum )S( ‘ print value )192
S = ‘test next “ ‘ assign variable
) Print Cecksum)S( ‘ Print value 127 )127=383 – 256
47
.. . LOOKUP اعداد و متغیر ها و جداول
LO W دستور
مثال
Dim I As Integer , Z As Byte
I = &h1001
Z = LOW )I ( ‘ is 1
End
48
.. . LOOKUP اعداد و متغیر ها و جداول
HIGH دستور
مثال
Dim I As Integer , Z As Byte
I = &H1001
Z = HIGH )I ( ‘ Z is 16 z = &H10
I = &H1101
Z = HIGH )I ( ‘Z is 17 z = &H11
I = 1012
Z = HIGH )I ( ‘I = &H3F4 z is 3
End
49
اعداد و متغیر ها و جداول .. . LOOKUP
دستور LC ASE
این دستور تمام حروف رشته مورد نظر را تبدیل به حروف کوچک می کند .
)Target = Lcase )source
تمام حروف رشته sourceکوچک شده و در رشته targetجای داده می شود .
مثال
Dim S As String * 12 , Z As String * 12
” S = “Hello World
( Z = Lcase )S ‘Z = hello world
Print Z
End
50
اعداد و متغیر ها و جداول .. . LOOKUP
دستور UCASE
این دستور تمام حروف رشته مورد نظر را تبدیل به حروف بزرگ می کند .
)Target = Ucase )source
تمام حروف رشته sourceبزرگ شده و در رشته targetجای داده می شود .
مثال
Dim S As String * 12 , Z As String * 12
” S = “Hello World
( Z = Ucase ) s ‘Z = HELLO WORLD
Print Z
End
51
اعداد و متغیر ها و جداول .. . LOOKUP
دستور RIGHT
مثال
Dim S As String * 15 , Z As String * 15
” S = “ABCDEFG
(Z = Right) s , 2 ‘Z = FG
Print Z
End
52
اعداد و متغیر ها و جداول .. . LOOKUP
دستور LE FT
با این دستور کاراکترهای سمت چپ یک رشته را به تعداد تعيين شده جدا می کند .
) Var = LEFT)var1 , n
از سمت چپ رشته var1به تعداد کاراکتر , nرشته ای جدا شده و در رشته varقرار می گيرد .
مثال
Dim S As String * 15 , Z As String * 15
” S = “abcdefg
(Z = Left) s , 5 ‘Z = abcde
Print Z
(Z = Left) s , 1 ‘Z = a
Print Z
End
53
اعداد و متغیر ها و جداول .. . LOOKUP
دستور LEN
مثال
Dim S As String * 10
“=”S AB
( Print LTRIM) s ‘AB
“=”S A B
( Print LTRIM) s ‘A B
End
55
.. . LOOKUP اعداد و متغیر ها و جداول
SWA P دستور
مثال
Dim A As Integer , B1 As Integer
A = 1 :B1 = 2 ‘assign two integer
SWAP A , B1 ‘swap them
Print A ‘ prints 2
Print B1 ‘ prints 1
End
56
اعداد و متغیر ها و جداول .. . LOOKUP
دستور MI D
با این دستور می توان قسمتی از یک رشته را برداشت و یا قسمتی از یک رشته را با قسمتی از
یک رشته دیگر عوض کرد .
[Var = Mid)var1,St[,L -1
Mid)var , St[,L] = Var -2
-1قسمتی از رشته var1با شروع از کاراکتر stام و طول Lبرداشته شده و در متغير var
قرار می گيرد.
-2رشته var1در رشته varبا شروع از کاراکتر Stام و طول Lقرار می گيرد .
در صورت قيد نکردن گزینه اختياری , Lبيشترین طول در نظر گرفته می شود .
مثال
Dim A As XRAM String *15 , Z As XRAM String *15
“S = ‘ABCDEFG
)Z = Mid)S,2,3
Print Z ‘BCD
End
57
اعداد و متغیر ها و جداول .. . LOOKUP
دستور ROTAT E
دستور زیر تمام بيتها را به چپ یا راست منتقل می کند ولی تمام بيتها محفوظ هستند و هيچ بيتی
بيرون فرستاده نمی شود .
[ROTATE var ,LEFT/RIGHT [,shifts
Varمی تواند داده ای از نوع LONG,WORD ,INTEGER , BYTEباشد .
LEFT/RIGHTجهت چرخش بيتها و shiftکه اختياری می باشد تعداد چرخش بيتها را
مشخص می کند .در صورت قيد نشدن مقدار یک در نظر گرفته می شود .
مثال
Dim A As Byte
A = 128
Rotate A, Left ,2
Print A ‘a=2
58
اعداد و متغیر ها و جداول .. . LOOKUP
دستور SPA CE
مثال
Dim S As String *15
)S = Space )5
”}”; Print “{“ ;S {‘ } 5space
”}“ ; (Print “{“ ; Space)6 {‘ } 6 space
End
59
.. . LOOKUP اعداد و متغیر ها و جداول
FO RM AT تابع
مثال
Dim S As String *10, I As Integer
” S = “ 123
S= Format )s, “ “( ‘5 space
Print S ‘s=“ 123” two space first ,then 123
“S =“12345
)“S = Format)s , “000.000
Print S ‘s =“012.345
)“ + ” , S = Format)s
Print S ‘s =“+12345
60 End
اعداد و متغیر ها و جداول .. . LOOKUP
تابع FU SI NG
از این دستور برای روند کردن رشته های عددی استفاده می شود .
)“target = Fusing )source , “mask
sourceرشته موردنظر برای شکل دهی و نتایج در targetقرار می گيرد mask.نوع
شکل دهی است .عمل maskحتما باید با علمت #شروع شود و حداقل باید یکی از علمات #
یا & را بعد از مميز داشته باشد .با استفاده از #عدد روند می شود و در صورت استفاده از &
روندی صورت نمی گيرد .
مثال
Dim S As Single,Z As String*10
S = 123.45678
(”Print Fusing)S , .”#.# # ‘Print 123.46
(”Print Fusing)S , .”#.& # ‘Print 123.45
End
61
اعداد و متغیر ها و جداول .. . LOOKUP
جدول LO OKUP
مثال
Dim B1 As Byte, I As Integer
)B1= lookup)2 , Dta
) Print B1 ‘Print 2 )zero based
) I = lookupstr) 0, Dta2
Print I ‘Print 1000
:Dta
Data 1 , 2 , 3, 4 , 5
62 :Dta2
اعداد و متغیر ها و جداول .. . LOOKUP
جدول LO OKUPSTR
مثال
Dim S As String*4 , Idx As Byte
) Idx = 0 : S = lookupstr) idx , Sdata
Print S ‘ This
End
:Sdata
“Data “This” , “is” , “a test
63
توابع ریاضی و محاسباتی
ميكروكنترلرهايِ AVR
64
نماد علمت
> علمت کوچکتر از از عملگرهای ریاضی روبرو می توانيد در
محيط BASCOMاستفاده نمایيدو عمليات
= علمت تساوی
ریاضی خود را انجام دهيد .
> علمت بزرگتر از
نماد معرفی
AND CONJUNCTION
OR DISJUNCTION
XOR EXCLUSIVE OR
NOT COMPLIMENT
مثال
A = 63 and 19
Print A ‘’19 print
66
توابع ریاضی و محاسباتی ...
تابع ABS
مثال
67
... توابع ریاضی و محاسباتی
EXP تابع
مثال
Dim X As Single
)X= Exp) 1.1
Print X ‘Print 3.004166124
X = 1.1
)X= Exp) X
Print X ‘Print 3.004166124
End
68
... توابع ریاضی و محاسباتی
LO G10 تابع
این دستور لگاریتم طبيعی یک داده از نوع SINGLEرا برمی گرداند .
مثال
Dim X As Single
(X = Log)100 ‘4.605170
Print X
End
70
توابع ریاضی و محاسباتی ...
تابع RN D
مثال
Dim X As Integer
Do
(I = Rnd )100 ‘get random number
Print I
Wait 1
Loop
End
71
توابع ریاضی و محاسباتی ...
تابع SI N
این دستور سينوس ثابت یا متغير sourceرا در متغير varاز نوع SINGLEقرار می دهد .تمام
دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد .
مثال
Dim X As Single
Dim Vsin As Single
Const Pi= 3.14159265
X= Pi/2
()Vsin = Sin )X ‘Vsin = sin)p/2
Print Vsin ‘0.9999332
End
72
توابع ریاضی و محاسباتی ...
تابع CO S
این دستور کسينوس ثابت یا متغير sourceرا در متغير varاز نوع SINGLEقرار می دهد .
تمام دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد .
مثال
Dim X As Single
Dim Vcos As Single
Const Pi= 3.14159265
X= Pi/2
()Vcos = Cos )X ‘Vcos = cos)p/2
Print Vcos ‘0.0000066
End
73
توابع ریاضی و محاسباتی ...
تابع TAN
مثال
Dim X As Single
Dim Vtan As tangle
Const Pi= 3.14159265
X= Pi*2
()Vtan = tan )X ‘Vtan = tan)p*2
Print Vtan ‘ -0.00000357
End
74
توابع ریاضی و محاسباتی ...
تابع SIN H
مثال
Dim X As Single
Dim Y As Single
X= 0.512
)Y = Sinh )X
Print X ; “ ; “ ;Y
End
75
توابع ریاضی و محاسباتی ...
تابع CO SH
مثال
Dim X As Single
Dim Y As Single
X= 0.512
)Y = Cosh )X
Print X ; “ ; “ ;Y
End
76
توابع ریاضی و محاسباتی ...
تابع TAN H
)Var = TANH) source
این دستور تانژانت هایپربوليک ثابت یا متغير sourceرا در متغير varاز نوع SINGLEقرار
می دهد .تمام دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد .
مثال
Dim X As Single
Dim Y As Single
X= 0.512
)Y = Tanh )X
Print X ; “ ; “ ;Y
End
77
توابع ریاضی و محاسباتی ...
تابع ASI N
)Var = ASIN) source
این دستور آرکسينوس ثابت یا متغير sourceرا در متغير varاز نوع SINGLEقرار می دهد .
ورودی تابع عددی بين 1-و 1+می باشد .
مثال
Dim X As Single
Dim Y As Single
X= 0.5
)Y = Asin )X
Print X ; “ ; “ ;Y
End
78
توابع ریاضی و محاسباتی ...
تابع ACO S
مثال
Dim X As Single
Dim Y As Single
X= 0.5
)Y = ACOS )X
Print X ; “ ; “ ;Y
End
79
توابع ریاضی و محاسباتی ...
تابع ATN
)Var = ATN) source
این دستور آرک تانژانت ثابت یا متغير sourceرا در متغير varاز نوع SINGLEقرار می دهد
.تمام دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد .
مثال
Dim X As Single
Dim Y As Single
X= 1
Y = atn )X( * 4
Print X ; “ ; “ ;Y
End
80
توابع ریاضی و محاسباتی ...
تابع DEG 2RAD
81
توابع ریاضی و محاسباتی ...
تابع RAD2 DEG
82
توابع ریاضی و محاسباتی ...
تابع RO UND
)Var =ROUND) x
متغير یا داده Xاز نوع SINGLEروند شده و در متغير VARاز نوع داده SINGLEقرار می
گيرد .
مثال
83
تبدیل کدها و متغیرها به یکدیگر
ميكروكنترلرهايِ AVR
84
تبدیل کدها و متغیرها به یکدیگر ...
دستور ASC
مثال
85
تبدیل کدها و متغیرها به یکدیگر ...
دستور HE X
)Var = Hex )x
این دستور یک داده از نوع BYTE,INTEGER , WORD , LONGرا به مقدار هگزادسيمال
تبدیل می کند .
مقدار HEXمتغير یا ثابت Xدر متغير VARجای می گيرد .
مثال
مثال
Dim A As Integer , S As string*15
“S= “0A
)A = Hexval )S
Print A ‘10 will be print
End
87
تبدیل کدها و متغیرها به یکدیگر ...
دستور MA KE BCD
)Var1 = MAKEBCD )Var2
این دستور متغير یا ثابت var2را تبدیل به مقدار BCDاش می کند و در متغير var1جای می
دهد .
مثال
Dim A As Byte
A = 65
)A = Makebcd )A
Lcd A ‘101 will show
End
88
تبدیل کدها و متغیرها به یکدیگر ...
دستور MA KE DEC
)Var1 = MAKEDEC )Var2
برای تبدیل یک داده BCDنوع INTEGER , WORD , BYTEبه مقدار DECIMALاز
این دستوراستفاده می شود .مقدار دسيمال متغير یا ثابت var2در متغير var1جای می گيرد .
مثال
Dim A As Byte
A = 65
Lcd A
Lowerline
)Lcd Bcd )A
(A = Makedec )A ‘ A = 101
“ Lcd “;A
End
89
تبدیل کدها و متغیرها به یکدیگر ...
دستور MA KE INT
)Varn = MAKEINT )LSB , MSB
این دستور دو بایت را به هم متصل می کند و یک داده نوع WORDیا INTEGERمی سازد
که LSBبایت کم ارزش و MSBبایت پر ارزش متغير دو بایتی Varnرا تشکيل می دهد .
Varn = )256*MSB (+LSB
مثال
Dim A As Integer, I As Integer
A=2
(I = Makeint )A , 1 ‘)1*256(+2 =258
End
90
تبدیل کدها و متغیرها به یکدیگر ...
دستور ST R
) Var = STR )X
با این دستور می توان یک متغير عددی ( )Xرا به رشته ( )VARتبدیل کرد .
مثال
Dim A As Byte , S As String*10
A = 123 ‘ A is a num
( S= Str )A ‘now A is a string
Print S
End
91
... تبدیل کدها و متغیرها به یکدیگر
VA L دستور
) Var = VAL )S
. ) تبدیل کردVAR( ) را به متغير عددیS( با این دستور می توان یک رشته
مثال
Dim A As Byte , S As String*10
S= “123” ‘now S is a string
A = Val)S( ‘convert string to num
Print A
A = A*2 ‘now you can use it as a num
Print A ‘ 246 Prints
End
92
تبدیل کدها و متغیرها به یکدیگر ...
دستور STRING
) Var = STRING )m , n
این دستور کد اسکی mرا با تعداد تکرار nتبدیل به رشته کرده و در متغير varقرار می
دهد .در صورت قرار دادن m =0یک رشته بطول 255کاراکتر توليد می شود و.قرار دادن
n = 0قابل قبول نيست .
مثال
Dim S As String*15
) S= String )5 , 65
Print S ‘AAAAA
End
93
تبدیل کدها و متغیرها به یکدیگر ...
دستور B IN2GR EY
) Var1 = BIN2GREY )Var2
متغير var2که می تواند داده ای از نوع WORD , INTEGER , BYTE , LONGباشد
به کد گری تبدیل شده و در متغير VAR1قرار می گيرد .
مثال
Dim B As Byte
For B = 0 To 15
( … Print Bin2grey )B ‘0 1 3 2 6 7 5 4 12 13 15
Next
End
94
تبدیل کدها و متغیرها به یکدیگر ...
دستور GR EY2BIN
) Var1 = grey2bin )Var2
کد گری var2به مقدار باینری تبدیل شده و در متغير var1که می تواند داده ای از نوع
WORD , INTEGER , BYTE , LONGباشد قرار می گيرد .
مثال
Dim B As Byte
For B = 0 To 15
( … Print Grey2bin )B ‘0 1 3 2 7 6 4 5 15 14
Next
End
95
رجیسترها و آدرس های حافظه
ميكروكنترلرهايِ AVR
96
رجیسترها و آدرس های حافظه .. .
97
... رجیسترها و آدرس های حافظه
SE T دستور
Set Bit/Pin
Set Var.x
. توسط این دستور می توان یک بيت را یک کرد
متغيری از نوع دادهVar باشدوPORTB.1 مانندSFR می تواند یک بيت و یا یکBit
0 , 7 تا0 می تواندBYTE برایX . باشدBYTE , INTEGER , WORD , LONG
. باشد31 تا0 می تواندLONG و برایWORD برای15 تا
مثال
Dim B1 As Bit , B2 As Byte , C As Word , L As Long
Set Portb.1 ‘set bit 1 of port B
Set B1 ‘bit variable
Set B2.1 ‘set bit 1 of var b2
Set C.15 ‘set highest bit of word
Set L.31 ‘set MS bit of LONG
98
... رجیسترها و آدرس های حافظه
TOGGLE دستور
. این دستور مقدار منطقی یک پایه یا یک بيت را معکوس می کند
TOGGLE pin/bit
. و یا یک بيت باشدPORTB.1 مانندSFR می تواند یکPIN
مثال
Dim VAR As Byte
Config Pinb.0 = output ‘portb.0 is an output now
Toggle portb.0 ‘toggle state
Waitms 1000 ‘wait for 1 second
Toggle Portb.0 ‘toggle state again
99
... رجیسترها و آدرس های حافظه
RES ET دستور
. توسط این دستور می توان یک بيت را صفر کرد
RESET pin/bit
RESET Var.x
متغيری از نوع دادهVar باشدوPORTB.1 مانندSFR می تواند یک بيت و یا یکBit
0 , 7 تا0 می تواندBYTE برایX . باشدBYTE , INTEGER , WORD , LONG
. باشد31 تا0 می تواندLONG و برایWORD برای15 تا
مثال
Dim B1 As Bit , B2 As Byte , I As Integer
reset Portb.3 ‘reset bit 3 of port B
reset B1 ‘bit variableres
reset B2.0 ‘reset bit 0 of var b2
reset I.15 ‘reset highest bit of I
100
رجیسترها و آدرس های حافظه ...
دستور BIT WAIT
BITWAIT X, SET/RESET
توسط این دستور اجرای برنامه تا زمانی که بيت SET) = 1( ,Xیا ) RESET )= 0شود در
خط جاری متوقف می ماند .در صورت TRUEشدن شرایط ,اجرای برنامه از خط بعد ادامه
می یابد X .می تواند یک بيت رجيستر داخلی مانند PORTB.Yباشد که Yمی تواند بين اعداد
صفر تا 7تغيير کند .
مثال
Dim A As Bit
Bitwait A , .Set ‘ wait until Bit A is Set
Bitwait PortB.7 , reset ‘ wait until Bit 7 of Port B is 0
101
رجیسترها و آدرس های حافظه ...
دستور C PEEK
)Var = CPEEK)address
از این دستور برای برگرداندن بایتی که در ادرسی از حافظه کدی ذخيره شده است استفاده می
کنيم .با این دستور می توانيد به رجيسترهای داخلی نيز دسترسی پيدا کنيد .البته با این دستور نمی
توان در حافظه داخلی چيزی نوشت .
مثال
102
رجیسترها و آدرس های حافظه ...
دستور C PEE KH
)Var = CPEEKH)address
با این دستور می توان بایت ذخيره شده در صفحه بالی حافظه کدی ( ) FLASH MEMميکرو
MEGA103یا دیگر ميکروها که دارای K 128حافظه است را خواند .
ADDRESSآدرس حافظه و محتوای آدرس در متغير یک بایت VARقرار می گيرد .
)Cpeek) 0محتوای اولين بایت حافظه بالی K 64را برمی گرداند.
103
رجیسترها و آدرس های حافظه ...
دستور LOADA DR
LOADADR var ,reg
با این دستور می توانيد آدرس یک متغير را در یک جفت رجيستر ذخيره کنيد Var .متغيری است که آدرس
آن در متغيرهای دوبایتی X,Y,Zذخيره می شود و REGرجيسترهای X,Y, Zهستند .
این دستور جز دستورات اسمبلی است و برای کمک به برنامه نویسان اضافه شده است .
مثال
104
رجیسترها و آدرس های حافظه ...
دستور OUT
OUT address , value
توسط این دستور می توان یک بایت به یک پورت سخت افزاری یا آدرس حافظه داخلی /خارجی
ارسال کرد .
Valueبه آدرس addressکه می تواند بين 0H – FFFF Hباشد فرستاده می شود .دستور
OUTمی تواند در تمام مکانهای حافظه AVRبنویسد .توجه کنيد که برای addressیک
WORDتعریف می شود .
مثال
Dim A As Byte
Out &H8000 , 1 ‘send 1 to the databus )d0 – d7( at address 8000
End
105
رجیسترها و آدرس های حافظه ...
دستور INP
)Var = INP )address
توسط این دستور می توان یک بایت از پورت سخت افزاری یا آدرس حافظه داخلی /خارجی
خواند .
محتوای آدرس addressکه می تواند بين 0H – FFFF Hباشد خوانده شده و در متغير var
قرار می گيرد .دستور INPمی تواند از تمام مکانهای حافظه AVRبخواند .
مثال
Dim A As Byte
( A = INP )&H8000 ‘read value is placed on databus)d0 – d7( at
َ‘address 8000
Print A
End
106
رجیسترها و آدرس های حافظه ...
دستور PE EK
)Var = PEEK )address
این دستور محتوای یک رجيستر را برمی گرداند .
Addressآدرس رجيسترهای R0 – R7است که بين 31 - 0می باشد .محتوای رجيستر
در متغير varجای می گيرد .دستور ) ( PEEKفقط می تواند محتوای رجيسترها را بخواند
ولی ) (INPمی تواند از تمام مکانهای حافظه بخواند .
مثال
Dim A As Byte
( A = PEEK )0 ‘return the first byte of the internal memory )R0( End
107
رجیسترها و آدرس های حافظه ...
دستور POKE
POKE address , value
با این دستور می توانيم یک بایت داده را در یکی از رجيسترها بنویسيم .
مقدار متغير یا ثابت یک بایتی معث در آدرس addressکه بين 31 - 0برای رجيسترهای
R0 – R7است نوشته می شود .
مثال
108
رجیسترها و آدرس های حافظه ...
دستور VA RPT R
) Var = VARPTR )var2
این دستور آدرس یک متغير را در مکان حافظه بر می گرداند .
آدرس متغير var2در مکان حافظه بدست آمده و در متغير varقرار می گيرد .
مثال
109
دستورالعملهای حلقه و پرش
ميكروكنترلرهايِ AVR
110
دستورالعملهای حلقه و پرش ...
دستورالعمل JM Pو GOTO
GOTO label
JMP label
با این دستورات می توان به برچسب labelپرش کرد .برچسب labelباید با علمت :
( )colonپایان یابد و می تواند تا 32کارکتر طول داشته باشد .به خاطر داشته باشيد زمانيکه از
دو labelهم نام استفاده شود کامپایلر به شما warningمی دهد .دستور returnبرای برگشت
از برچسب وجود ندارد .
مثال
Start : ‘A label must end with a colon
A = A +1 ‘Increment A
If A >10
Goto start ‘Or Jmp start
End If ‘Close If
End
111
دستورالعملهای حلقه و پرش ...
دستورالعمل DO- LOOP
فرم کلی دستورات DO … LOOPبصورت زیر می باشد .
DO
statements
[ LOOP [ UNTIL expression
دستورالعمل statementتا زمانی که expressionدارای ارزش TRUEیا غير صفر باشد
تکرار خواهد شد .بنابراین این نوع حلقه حداقل یکبار تکرار می شود DO –LOOP.بتنهایی
یک حلقه بينهایت است که با EXIT DOمی توان از درون حلقه خارج شد و اجرای برنامه در
خط بعد از حلقه ادامه یابد .
مثال
Dim A As Byte
Do ‘start the loop
A=A+1 ‘Increment A
Print A ‘Print It
Loop Until A = 10 ‘repeat until A = 10
112 Print A
دستورالعملهای حلقه و پرش ...
دستورالعمل FOR-NEXT
فرم کلی دستورات FOR .. NEXTبصورت زیر می باشد .
[ FOR var = start TO end [STEP VALUE
statements
NEXT var
Varبعنوان یک کانتر عمل می کند که startمقداراوليه آن و endمقدار پایانی است و هر دو
می توانند یک ثابت عددی یا متغير عددی باشند Value .مقدار عددی stepرا نشان می دهد که
می تواند مثبت یا منفی باشد .وجود نام varبعد از NEXTالزامی نيست .
مثال
Dim A As Byte , B1 As Byte , C As Integer
For A = 1 To 10 Step 2
Print “this is a A “ ; A
Next A
For C = 10 To -5 Step -1
Print “this is a C “ ; C
Next
For B1 = 1 To 10
113 Print “this is a B1 “ ; B1
دستورالعملهای حلقه و پرش ...
دستورالعمل WHIL E-WEND
WHILE condition
statements
WEND
دستورالعمل While-Wendتشکيل یک حلقه تکرار می دهد که تکرار این حلقه تا زمانی ادامه
می یابد که عبارت بکاربرده شده نتيجه را FALSEکند و یا مقدار صفر بگيرد .دستورالعمل
whileبصورت ورود به حلقه به شرط می باشد ,بنابراین Whileممکن است در حالتهایی اصل
اجرا نشود .
بخش statementتا وقتی که حاصل conditionصفر یا FALSEنشده است تکرار خواهد
شد .
مثال
Dim A As Byte
A=1
While A >10
Print A
Incr A
114 Wend
دستورالعملهای حلقه و پرش ...
دستورالعمل IF
در کليه حالتهای زیر عبارت statementمی تواند یک دستورالعمل ساده یا چند دستورالعمل
مرکب باشد .
حالت :0
If Expression THEN statement
دستورالعمل statementزمانی اجرا می شود که عبارت expressionدارای ارزش
TRUEباشد .
حالت :1
If Expression Then
statement1
Else
statement2
End If
درصورتی که عبارت expressionدارای ارزش TRUEباشد دستورالعمل statement1
اجرا خواهد شد ,در غير این صورت دستورالعمل statement2اجرا می شود .
115
دستورالعملهای حلقه و پرش ...
دستورالعمل ... I F
حالت :2
If Expression1 Then
statement1
[Elseif [Expression2 Then
statement2
Else
statement3
End If
درصورتی که عبارت expression1دارای ارزش TRUEباشد دستورالعمل statement1
اجرا خواهد شد ,در صورتی که عبارت expression1دارای ارزش FALSEولی عبارت
اختياری expressionدارای ارزش TRUEباشد دستورالعمل statement2اجرا می شود و
در غير این صورت دستورالعمل statement3اجرا خواهد شد .
همچنين با دستور IFمی توان صفر یا یک بودن یک بيت از یک متغير را امتحان کرد .
IF bit =1 THEN OR IF bit =0 THEN
116
... دستورالعملهای حلقه و پرش
... IF دستورالعمل
مثال
Dim Var As Byte , Idx As Byte
Idx = 1
If Var.Idx = 1 then
Set portb.0
.... Else
Dim A As Integer
A = 10
If A = 10 then
” Print “this part is executed
Else
“Print “ this will never be executed
End if
117
دستورالعملهای حلقه و پرش ...
دستورالعمل CA SE
اگر متغير VARبا مقدار test1برابر باشد statement1اجرا می شود و سپس اجرای
برنامه بعد از end selectادامه می یابد .
در غير اینصورت اگر متغير varبا مقدار test1برابر نباشد ولی با مقدار test2برابر باشد
statement2اجرا می شود و سپس اجرای برنامه بعد از end selectادامه می یابد.
و نهایتا اگر متغير varبا هيچکدام از مقادیر test1و test2برابر نباشد statement3,
اجرا می شود و سپس اجرای برنامه بعد از end selectادامه می یابد .
118
... دستورالعملهای حلقه و پرش
CASE . … دستورالعمل
مثال
Dim X As Byte
Do
Input “ X?” , X
Select Case X ‘test X
“Case 1 To 3 :Print “ 1 or 2 or 3
“Case 4 :Print “4
“Case Is >10 :Print “> 10
” Case Else :Print “no
End Select
Loop
End
119
دستورالعملهای حلقه و پرش ...
دستور EXIT
با این دستور می توانيد فقط از یک ساختار یا حلقه خارج شوید و ادامه برنامه را بعد از ساختار یا
حلقه ادامه دهيد .
EXIT FOR
EXIT DO
EXIT WHILE
EXIT SUB
EXIT FUNCTION
مثال
Do
A = A +1
If A = 100 Then
Exit Do
End If
Loop
120 End
دستورالعملهای حلقه و پرش ...
دستورالعمل ON VAL UE
با این دستور با توجه به مقدار متغير می توان به توابع یا برچسب های مختلفی پرش کرد .
[ON var [GOTO] [GOSUB] label1 [,label2
Varمتغير مورد نظر برای امتحان شدن که می تواند یک SFRمانند PORTDباشد و
LABEL1و LABEL2و ..برچسب هایی هستند که با توجه به مقدار VARبه آنها پرش می
شود .
مثال
Dim X As Byte
X=1
ON X Gosub Lbl2,Lbl3 ‘jump to sub lbl3
X=0
ON X Goto Lbl1, Lbl4 ‘jump to label lbl1
:Lbl1
Incr X
Print X
:Lbl2
121 End
Print X
ایجاد تاخیر در برنامه
ميكروكنترلرهايِ AVR
122
ایجاد تاخیر در برنامه …
دستور DELAY
این دستور برای مدت کوتاهی به مقدار 1000ميکرو ثانيه در اجرای برنامه تاخير ایجاد می کند
.
مثال
DELAY ‘Wait for hardware to be ready
123
ایجاد تاخیر در برنامه …
دستور WAIT us
برای ایجاد تاخير در برنامه از این دستور می شود .
WAITus microsecond
اجرای برنامه به مدت microsecondميکرو ثانيه متوقف می شود .پس از سپری شدن زمان
مشخص شده اجرای برنامه از خط بعد ادامه می یابد Microsecond .می تواند عددی بين (1
نکته ) 255باشد .
–
دستورات تاخيری زمان دقيق را به شما نمی دهد .برای بدست آوردن زمان دقيق از
تایمرها استفاده کنيد .
مثال
Waitus 10
“Print “BASCOM
End
124
ایجاد تاخیر در برنامه …
دستور WAIT ms
برای ایجاد تاخير در برنامه از این دستور می شود .
WAITms milisecond
اجرای برنامه به مدت milisecondميلی ثانيه متوقف می شود .پس از سپری شدن زمان
مشخص شده اجرای برنامه از خط بعد ادامه می یابد Milisecond .می تواند عددی بين (1
– ) 65535باشد .
مثال
Waitms 10
“Print “BASCOM
End
125
ایجاد تاخیر در برنامه …
دستور WAIT us
برای ایجاد تاخير در برنامه از این دستور می شود .
WAIT second
اجرای برنامه به مدت secondثانيه متوقف می شود .پس از سپری شدن زمان مشخص شده
اجرای برنامه از خط بعد ادامه می یابد.
مثال
Wait 3
“Print “BASCOM
End
126
زیر برنامه و تابع
ميكروكنترلرهايِ AVR
127
زیر برنامه و تابع …
معرفی تابع DECLARE F UNCTI ON
از این دستور برای معرفی تابع در ابتدای برنامه استفاده می شود .زمانی که بخواهيم تابعی را معرفی
کنيم بایستی تابع معرفی شده باشد .در صورت استفاده از تابع می بایستی یک داده برگردانده شود .
DECLARE FUNCTION TEST[) [BYREF/BYVAL]var as type1(] As type2
TESTنام تابع موردنظر است .انتقال داده بصورت BYVALباعث می شود که یک کپی از متغير به تابع فرستاده
شود و در محتوای آن هيچ تغيری ایجاد نشود .ولی در حالت BYREFآدرس متغير ارسال و تغيرات در آن اثر می
گذارد و داده برگشتی در صورت انجام عمليات بر روی آن با مقدار اوليه خود برابر نخواهد بود .در صورت عدم
استفاده از گزینه ] [BYREF/BYVALبصورت پيش فرض داده بصورت BYREFفرستاده می شود Type1 .نوع
داده ارسال شده و type2نوع داده برگشتی است .که هر دو می توانند داده نوع BYTE , INTEGER, WORD
, LONG ,STRINGباشند .
128
زیر برنامه و تابع …
معرفی تابع ... DECLARE F UNCTI ON
مثال
در مثال زیر Iبصورت BYVALفرستاده شده است بنابراین یک کپی از مقدار Iبه زیر تابع فرستاده
می شود و هيچ تغيری در محتوای آن ایجاد نمی شود S .بصورت BYREFفرستاده می شود و تغير در
آن صورت می گيرد .فراخوانی تابع MYFUNCTIONبا Kو Zاز نوع داده INTEGERو
STRINGاست و مقدار برگشتی از نوع INTEGERاست که در متغير Tقرار می گيرد .شما می
توانيد در محدوده تابع یک متغير محلی تعریف کنيد .
129
… زیر برنامه و تابع
... D ECL ARE FU NCTI ON معرفی تابع
مثال
Declare Function Myfunction )Byval I As Integer , S As String (As Integer
Dim K As Integer ,Z As String*10, T As Integer
) K =5 :Z = “123 “ : T = Myfunction)K , Z
Lcd T ‘25
Lcd Z ‘Bascom
Lcd K ‘5
End
Function Myfunction )Byval I As Integer , S As String (As Integer
local P As Integer
Functions
P=I*5
I=5
” S = “Bascom
T=P
Myfunction = T
End Function
130
زیر برنامه و تابع …
معرفی زیر برنامه DECLARE SU B
از این دستور برای معرفی زیر برنامه استفاده می شود .زیر برنامه ای که قصد فراخوانی آن را داریم
بایستی در ابتدای برنامه یا حداقل قبل از فراخوانی آن معرفی شده باشد .
[)DECLARE SUB TEST[) [BYREF/BYVAL] var as type
زیر برنامه برخلف تابع مقداری برنمی گرداند .در زمان ارسال داده بصورت BYREFآدرس داده به زیر برنامه
فرستاده می شود و در محتوای آن تغير ایجاد می شود .ولی در حالت BYVALیک کپی از داده فرستاده می شود و به
هيچ وجه در محتوای آن تغيری ایجاد نمی شود TEST.نام زیربرنامه و VARنام متغير ارسالی به زیر برنامه و
TYPEنوع آن است که می تواند داده نوع BYTE , INTEGER, WORD ,STRINGباشند .
برای نوشتن زیر برنامه ابتدا نام آنرا توسط دستور زیر تعریف کرده و سپس شروع به نوشتن زیربرنامه می کنيم .
[ ) SUB Name [ ) var1
NAMEنام زیربرنامه که باید توسط دستور Declareمعرفی شده باشد و با دستور End Subپایان می یابد .
131
… زیر برنامه و تابع
... DECLARE SU B معرفی زیربرنامه
مثال
Dim A As Byte , B1 As Byte , C As Byte
) Declare Sub Test ) A As Byte
A =1 : B1 = 2 : C = 3
Print A ; B1;C ,123 will print
)Call Test )B1
Print A ; B1;C ‘ 223 will print
End
132
زیر برنامه و تابع …
فراخوانی CALL
توسط این دستور زیر برنامه یا تابعی را فراخوانی می کنيم .
)… , CALL TEST) VAR1 , VAR2
VAR1 , VAR2متغيرهایی که به زیر برنامه انتقال می یابند ,هستند .می توان زیر برنامه را بصورت زیر نيز
فراخوانی کرد .
TEST VAR1 , VAR2
لزم بتذکر است که نام زیر برنامه قبل از فراخوانی آن ,باید توسط دستور Declareفراخوانی شود .اگر بخواهيم
عدد ثابت را به زیر برنامه انتقال دهيم بایستی حتما با آرگومان BYVALآن را انتقال دهيم .
133
… زیر برنامه و تابع
.. . CALL فراخوانی
مثال
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
Print A ‘ will print A = 10
End
نکته
135
… زیر برنامه و تابع
... LOC AL بکارگیری متغیر محلی یا
مثال
Declare Sub Test2
Do
Call test2
Loop
End
Sub Test2
Local A As Byte
Incr A
Lcd A
End Sub
136
زیر برنامه و تابع …
بکارگیری متغیر محلی یا LOC AL
این دستور به زیربرنامه پرش می کند و اجرای برنامه را از آدرس برچسب ادامه می دهد .
GOSUB label
LABELنام برچسبی زیر برنامه است که به آن پرش می شود .توسط دستور RETURNمی توان از SUB
برگشت کرد و اجرای برنامه بعد از دستور GO SUBادامه می یابد .
مثال
Dim X As Byte
Gosub Routine ‘Jump to routine
”“Print “ Hello ‘After come back from routine Print “Hello
End
Routine
X=X+2
Print X
Return
137
پیکره بندی و کار با امکانات AVRدر
BAS COM
6
138
پیکره بندی پورت ها
ميكروكنترلرهايِ AVR
139
پیکره بندی پورت ها ...
برای تعيين جهت پایه پورتها از این پيکره بندی استفاده می نمایيم .جهت یک پایه می تواند
ورودی یا خروجی باشد .
Config Portx = State
Config Pinx.y = State
X , Yبسته به ميکرو می توانند به ترتيب پایه های 7- 0پورت های A ,B ,C ,D ,E ,F
باشند State .می تواند یکی از گزینه های زیر باشد :
INPUTیا : 0در این حالت رجيستر جهت داده پایه یا پورت انتخاب شده صفر می شود و پایه
یا پورت بعنوان ورودی استفاده می شود .
OUTPUTیا :1در این حالت رجيستر جهت داده پایه یا پورت انتخاب شده یک مشود و پایه یا
پورت بعنوان خروجی استفاده می شود .
زمانيکه بخواهيد از پورتی بخوانيد بایستی از رجيستر PINپورت مربوطه استفاده کنيد و در
هنگام نوشتن در پورت بایستی در رجيستر PORTبنویسيد .
140
... پیکره بندی پورت ها
مثال
Dim A As Byte , Count As Byte
Config Portd = input ‘configure PORT D for input
mode
A = Pind ‘Read data on Portd
A = A And Portd ‘A = A & PORTD
Print A
Bitwait Pind.7 , reset ‘wait until bit is low
Config portb = output
Portb = 10 ‘set portb to 10
Portb = Portb And 2
Set Portb.0 ‘set bit 0 of portb to 1
Incr Portb
141
پیکره بندی پورت ها ...
بررسی پورتهای میکرو ATMEG A32
پورت Aیک I/Oدو طرفه 8بيتی است .سه آدرس از مکان حافظه I/Oاختصاص به پورت
Aدارد .یک آدرس برای رجيستر داده , PORTAدومی رجيستر جهت داده DDRAو
سومی پایه ورودی پورت A ,PINAاست .آدرس پایه های ورودی پورت Aفقط قابل خواندن
است در صورتی که رجيستر داده و رجيستر جهت داده هم خواندنی و هم نوشتنی هستند .تمام
پایه های پورت دارای مقاومت Pull upمجزا هستند .
PINAیک رجيستر نيست .این آدرس دسترسی به مقدار فيزیکی بر روی هر یک از پایه های
پورت Aرا ممکن می سازد .زمانيکه PORTAخوانده می شود ,داده لچ پورت Aخوانده می
شود و زمانيکه از PINAخوانده می شود مقدار منطقی که بر روی پایه ها موجود است خوانده
می شود .
142
... پیکره بندی پورت ها
ATMEG A32 بررسی پورتهای میکرو
A رجیسترهای پورت
A - PORTA [ [PORT A DATA REGISTER رجيستر داده پورت
A PINA- [ [PORT A INPUT PINS ADDRESS بایت آدرس پایه های ورودی پورت
0 1 Input Yes PAn will source current if ext. pull up low
پورت Bیک I/Oدو طرفه 8بيتی است .سه آدرس از مکان حافظه I/Oاختصاص به پورت
Bدارد .یک آدرس برای رجيستر داده , PORTBدومی رجيستر جهت داده DDRBو
سومی پایه ورودی پورت B ,PINBاست .آدرس پایه های ورودی پورت Bفقط قابل خواندن
است در صورتی که رجيستر داده و رجيستر جهت داده هم خواندنی و هم نوشتنی هستند .تمام
پایه های پورت دارای مقاومت Pull upمجزا هستند .
PINBیک رجيستر نيست .این آدرس دسترسی به مقدار فيزیکی بر روی هر یک از پایه های
پورت Bرا ممکن می سازد .زمانيکه PORTBخوانده می شود ,داده لچ پورت Bخوانده می
شود و زمانيکه از PINBخوانده می شود مقدار منطقی که بر روی پایه ها موجود است خوانده
می شود .
145
... پیکره بندی پورت ها
ATMEG A32 بررسی پورتهای میکرو
B رجیسترهای پورت
B - PORTB [ [PORT B DATA REGISTER رجيستر داده پورت
B PINB- [ [PORT B INPUT PINS ADDRESS بایت آدرس پایه های ورودی پورت
0 1 Input Yes PBn will source current if ext. pull up low
پورت Cیک I/Oدو طرفه 8بيتی است .سه آدرس از مکان حافظه I/Oاختصاص به پورت
Cدارد .یک آدرس برای رجيستر داده , PORTCدومی رجيستر جهت داده DDRBو
سومی پایه ورودی پورت C ,PINCاست .آدرس پایه های ورودی پورت Cفقط قابل خواندن
است در صورتی که رجيستر داده و رجيستر جهت داده هم خواندنی و هم نوشتنی هستند .تمام
پایه های پورت دارای مقاومت Pull upمجزا هستند .
PINCیک رجيستر نيست .این آدرس دسترسی به مقدار فيزیکی بر روی هر یک از پایه های
پورت Cرا ممکن می سازد .زمانيکه PORTCخوانده می شود ,داده لچ پورت Cخوانده می
شود و زمانيکه از PINCخوانده می شود مقدار منطقی که بر روی پایه ها موجود است خوانده
می شود .
148
... پیکره بندی پورت ها
ATMEG A32 بررسی پورتهای میکرو
C رجیسترهای پورت
C - PORTC [ [PORT C DATA REGISTER رجيستر داده پورت
C PINC- [ [PORT C INPUT PINS ADDRESS بایت آدرس پایه های ورودی پورت
0 1 Input Yes PCn will source current if ext. pull up low
پورت Dیک I/Oدو طرفه 8بيتی است .سه آدرس از مکان حافظه I/Oاختصاص به پورت
Dدارد .یک آدرس برای رجيستر داده , PORTDدومی رجيستر جهت داده DDRBو
سومی پایه ورودی پورت D ,PINDاست .آدرس پایه های ورودی پورت Dفقط قابل خواندن
است در صورتی که رجيستر داده و رجيستر جهت داده هم خواندنی و هم نوشتنی هستند .تمام
پایه های پورت دارای مقاومت Pull upمجزا هستند .
PINDیک رجيستر نيست .این آدرس دسترسی به مقدار فيزیکی بر روی هر یک از پایه های
پورت Dرا ممکن می سازد .زمانيکه PORTDخوانده می شود ,داده لچ پورت Dخوانده می
شود و زمانيکه از PINDخوانده می شود مقدار منطقی که بر روی پایه ها موجود است خوانده
می شود .
151
... پیکره بندی پورت ها
ATMEG A32 بررسی پورتهای میکرو
D رجیسترهای پورت
D - PORTD [ [PORT D DATA REGISTER رجيستر داده پورت
D PIND- [ [PORT D INPUT PINS ADDRESS بایت آدرس پایه های ورودی پورت
0 1 Input Yes PDn will source current if ext. pull up low