Vous êtes sur la page 1sur 153

‫محیط برنامه نویسی‬

‫‪BAS COM‬‬

‫‪4‬‬

‫‪1‬‬
‫معرفي منوهاي محیط‬
‫‪BASCOM‬‬

‫ميكروكنترلرهايِ ‪AVR‬‬

‫‪2‬‬
‫منوي ‪FILE‬‬

‫ایجاد فایل جدید (‪)FILE NEW‬‬ ‫‪‬‬


‫با انتخاب این گزینه یک پنجره جدید که شما قادر به نوشتن برنامه در آن هستيد ایجاد می‬
‫شود ‪.‬‬
‫باز کردن فایل (‪) OPEN FILE‬‬ ‫‪‬‬
‫با انتخاب این گزینه شما قادر به فراخوانی فایلی که در حافظه موجود است می باشيد ‪.‬‬
‫‪ BASCOM‬فایلها را بصورت استاندارد ‪ ASCII‬ذخيره می کند ‪.‬بنابراین شمکا می توانيد‬
‫از ویرایشگری مثل ‪ NOTEPAD‬برای نوشتن برنامه استفاده کنيد و سپس آنرا به محيط‬
‫انتقال دهيد‪.‬‬
‫بستن فایل ‪) ) CLOSE FILE‬‬ ‫‪‬‬
‫این گزینه پنجره برنامه فعال را می بندد ‪ .‬اگر در فایل تغييری ایجاد کرده اید ابتدا باید قبل‬
‫از بستن آن را ذخيره نمایيد ‪.‬‬
‫ذخیره فایل (‪) FILE SAVE‬‬ ‫‪‬‬
‫با این گزینه شما قادر به ذخيره فایل بصورت ‪ ASCII‬در کامپيوتر خواهيد بود ‪.‬‬
‫ذخیره کردن بعنوان (‪) FILE SAVE AS‬‬ ‫‪‬‬
‫با این گزینه قادر خواهيد بود فایل موجود را با نام دیگر ذخيره کنيد‪.‬‬
‫‪3‬‬
‫ادامه منوی ‪... FILE‬‬

‫نمایش پرینت فایل (‪) FILE PRINT PREVIEW‬‬ ‫‪‬‬


‫این گزینه نشان می دهد که فایل متنی موجود برنامه در هنگام پرینت به چه صورت خواهد‬
‫بود ‪.‬‬
‫پرینت فا یل (‪) FILE PRINT‬‬ ‫‪‬‬

‫با این گزینه شما می توانيد فایل موجود در برنامه را پرینت نمایيد ‪.‬‬
‫بستن فایل ‪) ) CLOSE FILE‬‬ ‫‪‬‬

‫با این گزینه شما قادر خواهيد بود از محيط ‪ BASCOM‬خارج شوید ولی در صورتی که‬
‫شما در برنامه تان تغييری داده اید و آن را ذخيره نکرده اید ‪ ,‬پيش از خروج هشدار ميدهد‪.‬‬

‫‪4‬‬
‫منوی ‪EDIT‬‬

‫‪EDIT UNDO‬‬ ‫‪‬‬


‫با این گزینه شما می توانيد دستکاری اخيرتان در برنامه را از بين ببرید ‪.‬‬
‫‪EDIT REDO‬‬ ‫‪‬‬
‫با این گزینه شما می توانيد دستکاری اخيرتان را که از بين برده بودید دوباره برگردانيد ‪.‬‬
‫‪EDIT CUT‬‬ ‫‪‬‬
‫با این گزینه شما می توانيد متن انتخاب شده را بریده و به محل جدیدی انتقال دهيد ‪.‬‬
‫‪EDIT COPY‬‬ ‫‪‬‬
‫با این گزینه شما می توانيدمتن انتخاب شده را کپی کرده و به محل جدیدی انتقال دهيد ‪.‬‬
‫‪EDIT PAST‬‬ ‫‪‬‬
‫با این گزینه شما می توانيد متنی را که قبل ‪ COPY‬یا ‪ CUT‬کرده بودید در محل مورد نظر بچسبانيد ‪.‬‬

‫‪5‬‬
‫منوی ‪... EDIT‬‬

‫‪EDIT FIND‬‬ ‫‪‬‬


‫با این گزینه شما می توانيد متنی را در برنامه تان جستجو کنيد ‪.‬‬
‫‪EDIT FIND NEXT‬‬ ‫‪‬‬
‫با این گزینه شما می توانيد متن مورد جستجو را دوباره جستجو نمایيد ‪.‬‬
‫‪EDIT REPLACE‬‬ ‫‪‬‬
‫با این گزینه شما می توانيد متنی را جایگزین متن موجود در برنامه نمایيد یعنی در قسمت ‪TEXT TO‬‬
‫‪ FIND‬متن مورد جستجو که باید توسط متن دیگری جایگزین شود را تایپ کنيد و در قسمت‬
‫‪ REPLACE WITH‬متنی را که باید جایگزین شود تایپ می کنيم ‪.‬‬
‫‪EDIT GOTO‬‬ ‫‪‬‬
‫با این گزینه شما می توانيدمستقيما و به سرعت به خط دلخواهی بروید ‪.‬‬

‫‪6‬‬
‫منوی ‪... EDIT‬‬

‫‪EDIT TOGGLE BOOKMARK‬‬ ‫‪‬‬


‫با این گزینه شما می توانيد شما می توانيد در جاهای خاصی از برنامه که مورد نظر شماست نشانه گذاری‬
‫کنيد و به آنها توسط دستور دستور ‪ EDIT GOTO BOOKMARK‬دسترسی پيدا کنيد ‪.‬‬
‫‪EDIT GOTO BOOKMARK‬‬ ‫‪‬‬
‫با این گزینه شما می توانيد به نشانه هایی که قبل گذاشته اید ‪.‬‬
‫‪EDIT IDENT BLOCK‬‬ ‫‪‬‬
‫با این گزینه شما می توانيد متن انتخاب شده را به اندازه یک ‪ TAB‬به سمت راست منتقل کنيد ‪.‬‬
‫‪EDIT UNIDENT BLOCK‬‬ ‫‪‬‬
‫با این گزینه شما می توانيد متن انتخاب شده را به اندازه یک ‪ TAB‬به سمت چپ منتقل کنيد ‪.‬‬

‫‪7‬‬
‫منوی ‪PROGRAM‬‬

‫‪PROGRAM COMPILE‬‬ ‫‪‬‬

‫با این گزینه (یا کليد ‪ )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‬‬

‫‪PROGRAM SIMULATOR‬‬ ‫‪‬‬

‫با فشردن کليد ‪ F2‬یا این گزینه از منو ‪ PROGRAM‬شبيه ساز داخلی فعال خواهد شد‬
‫‪.‬شما در برنامه با نوشتن کلمه کليدی ‪ SIM$‬قادر به شبيه سازی سریعتر برنامه ميباشيد ‪.‬در‬
‫صورت تمایل شما می توانيد از شبيه سازی های دیگر مانند ‪ AVR STUDIO‬نيز استفاده‬
‫کنيد ‪ .‬برای شبيه سازی فایلهای ‪ DBJ‬و ‪ OBJ‬باید ایجاد شده باشند ‪ .‬فایل ‪ OBJ‬در برنامه‬
‫شبيه سازی ‪ AVR STUDIO‬و فایل ‪ DBJ‬برای شبيه ساز داخلی مورد استفاده قرار می‬
‫گيرد ‪.‬‬
‫‪SEND TO CHIP‬‬ ‫‪‬‬

‫توسط این گزینه یا کليد ‪ F4‬پنجره محيط برنامه ریزی ظاهر خواهد شد ‪.‬شما می توانيد توسط‬
‫این گزینه ميکرو مورد نظر خود را ‪ PROGRAM‬کنيد ‪.‬‬

‫‪10‬‬
‫منوی ‪TOOLS‬‬

‫‪TERMINAL EMULATOR‬‬ ‫‪‬‬

‫توسط این گزینه یا کليدهای ‪ CTR + T‬با بال آوردن ‪TERMINAL EMULATOR‬‬
‫می توانيد از این محيط برای نمایش داده ارسالی و دریافتی در ارتباط سریال ‪ RS-232‬بين‬
‫ميکرو و کامپيوتر استفاده نمایيد ‪.‬‬
‫‪LCD DESIGNER‬‬ ‫‪‬‬

‫توسط این گزینه می توانيد کاراکترهای دلخواه خود را طراحی نمایيد و بر روی ‪LCD‬‬
‫نمایش دهيد‪.‬‬

‫‪11‬‬
‫منوی ‪... TOOLS‬‬

‫‪GRAPHIC CONVERTOR‬‬ ‫‪‬‬

‫با کليک بر روی این منو پنجره محيط ‪ 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‬‬ ‫‪‬‬

‫با این منو شما می توانيد گزینه های مختلف کامپایلر را طبق زیر اصلح نمایيد ‪:‬‬
‫•‪OPTION COMPILER CHIP‬‬
‫انتخاب ميکرو برای برنامه ریزی توسط این گزینه انجام می شود ‪ .‬در صورتی که از دستور‬
‫‪ REGFILE$‬در برنامه استفاده کرده اید به انتخاب ميکرو توسط این گزینه نيازی نيست ‪.‬‬
‫• ‪OPTION COMPILER OUTPUT‬‬
‫با این گزینه می توان فایل هایی که مایل به ایجاد آنها پس از کامپایل هستيم را انتخاب کرد ‪.‬‬
‫با انتخاب گزینه ‪ SIZE WARNING‬زمانی که حجم ‪ CODE‬از مقدار حافظه‬
‫‪ FLASH ROM‬تجاوز کرد کامپایلر توليد ‪ WARNING‬می کند ‪.‬‬
‫• ‪OPTION COMPILER 12C,SPI,1WIRE‬‬
‫توسط این گزینه می توان پایه های مربوط به ارتباطات ‪ 12C SPI‬و‪ WIRE 1‬را تعيين‬
‫کرد ‪.‬‬

‫‪13‬‬
‫منوی ‪... OPTION‬‬

‫• ‪OPTION COMPILER COMMUNICATION‬‬


‫نرخ انتقال (‪ )BOUD RATE‬ارتباط سزیال توسط این گزینه تعيين می شود که می توان‬
‫یک نرخ جدید نيز تایپ کرد ‪ .‬گزینه ‪ FREQUENCY‬انتخاب فرکانس کریستال استفاده‬
‫شده است که می تواند فرکانس اختياری نيز باشد ‪.‬‬

‫• ‪OPTION COMPILER LCD‬‬


‫این گزینه دارای قابليت های زیر می باشد ‪:‬‬
‫در قسمت ‪ LCD TYPE‬نوع ‪ LCD‬را مشخص می کنيم ‪.‬گزینه ‪BUS MODE‬‬
‫مشخص می کند ‪ LCD‬بصورت ‪ 8‬بيتی یا ‪ 4‬بيتی کار می کند ‪.‬توسط گزینه ‪DATA‬‬
‫‪ MODE‬تعيين می کنيم ‪ LCD‬بصورت ‪ PIN‬کار کند یا ‪ BUS‬و گزینه ‪LCD‬‬
‫‪ ADDRESS‬مشخص کننده آدرس ‪ LCD‬در مد ‪ BUS‬است ‪.‬‬
‫در صورت پيکره بندی هر یک از امکانات فوق در برنامه نيازی به تنظيم کردن آنها در این‬
‫منو نيست ‪.‬‬

‫‪OPTION PROGRAMMER‬‬ ‫•‬


‫•در این منو شما می توانيد ‪ PROGRAMMER‬مورد نظر خود را انتخاب نمایيد ‪.‬‬
‫‪14‬‬
‫معرفی محیط شبیه سازی ( ‪) SI MULATOR‬‬

‫ميكروكنترلرهايِ ‪AVR‬‬

‫‪15‬‬
‫نوار ابزار در اين محيط‬

‫‪RUN‬‬ ‫‪‬‬

‫با فشردن این دکمه شبيه سازی آغاز می شود ‪.‬‬


‫‪PAUSE‬‬ ‫‪‬‬

‫باعث توقف موقت شبيه سازی می شود و با فشردن دکمه ‪ RUN‬شبيه سازی ادامه پيدا می‬
‫کند ‪.‬‬
‫‪STOP‬‬ ‫‪‬‬

‫باعث توقف کامل شبيه سازی برنامه جاری می شود ‪.‬‬


‫‪STEP INTO CODE‬‬ ‫‪‬‬

‫با استفاده از این دکمه می توان برنامه را خط به خط اجرا نمود و هنگام فراخوانی توابع به‬
‫داخل آنها رفته و مراحل اجرای آنها را بررسی کرد ‪ .‬این کار را با فشردن کليد ‪ F8‬نيز می‬
‫توانيد انجام دهيد ‪.‬بعد از هر بار اجرای این دستور شبيه سازی به حالت ‪ PAUSE‬می رود‬
‫‪.‬‬

‫‪16‬‬
‫نوار ابزار در اين محيط ‪...‬‬

‫‪STEP OVER‬‬ ‫‪‬‬

‫این دکمه شبيه دکمه قبلی است با این تفاوت که در هنگام فراخوانی توابع به داخل ‪SUB‬‬
‫‪ ROUTINE‬نخواهيد رفت ‪ .‬این کار را می توانيد با فشردن کليد ‪ SHIFT F8‬نيز انجام‬
‫دهيد ‪.‬‬
‫‪RUN TO‬‬ ‫‪‬‬

‫دکمه ‪ RUN TO‬شبيه سازی را تا خط انتخاب شده انجام ميدهد و سپس به حالت ‪PAUSE‬‬
‫ميرود ( خط جاری باید شامل کدهای قابل اجرا باشد ) ‪.‬‬

‫‪17‬‬
‫نوار ابزار در اين محيط ‪...‬‬

‫شبیه سازی سخت افزاری ‪THE HARDWARE SIMULATOR‬‬ ‫‪‬‬


‫با کليک بر روی این گزینه ÷نجره ای ظاهر می شود ‪ .‬که قسمت بالیی یک ‪ LCD‬مجازی می باشد که‬
‫برای نشان دادن داده های فرستاده شده به ‪ LCD‬استفاده می شود ‪ .‬نوار ‪ LED‬های قرمز رنگ پایين‬
‫خروجی پورتها را نشان می دهد ‪ .‬با کليک بر روی هر یک از ‪ LED‬های سبز رنگ که بعنوان‬
‫ورودی هستند وضعيت آن معکوس می شود و روشن شدن ‪ LED‬بمنزله یک کردن پایه پورت است‬
‫‪.‬یک صفحه کليد نيز تعبيه شده است که با دستور ‪ ) (GETKBD‬در برنامه قابل خواندن می باشد ‪ .‬در‬
‫ضمن مقدار آنالوگ نيز هم برای مقایسه کننده آنالوگ و هم برای کانال های مختلف ‪ ADC‬قابل اعمال‬
‫است‪.‬‬
‫‪REGISTERS‬‬ ‫‪‬‬
‫این دکمه پنجره ثباتها را با مقادیر قبلی نمایش می دهد ‪ .‬مقدارهای نشان داده شده در این پنجره‬
‫هگزادسيمال می باشد که برای تغيير هر کدام از آنها روی خانه مربوطه کليک کرده و مقدار جدید را‬
‫وارد کنيد ‪.‬‬
‫‪I/O REGISTERS‬‬ ‫‪‬‬

‫برای نمایش ثباتهای ‪ 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‬‬ ‫‪‬‬

‫• ‪ : EXIT‬خروج از محيط برنامه ریزی ‪.‬‬


‫• ‪ : TEST‬یک کردن پایه های پورت ‪ .‬این گزینه تنها زمانی می تواند استفاده شود که از‬
‫‪ SAMPLR ELECTRONIC PROGRAMEEER‬استفاده شود ‪.‬‬
‫منوی ‪BUFFER‬‬ ‫‪‬‬

‫• ‪ : BUFFER CLEAR‬پاک کردن بافر‪.‬‬


‫• ‪ : LOAD FROM FILE‬پر کردن بافر با فایل و برنامه ریزی آن در حافظه ميکرو‬
‫• ‪ : SAVE TO FILE‬ذخيره بافر در فایل دلخواه ‪ .‬بافر می تواند محتوای حافظه یک‬
‫ميکرو باشد ‪.‬‬
‫منوی ‪CHIP‬‬ ‫‪‬‬

‫• ‪ : CHIP IDENTIFY‬شناسایی ميکرو متصل به ‪. PROGRAMMER‬‬

‫‪22‬‬
‫‪…ISP STK PROGRAMMER‬‬

‫‪ : WRITE BUFFER TO CHIP‬برنامه ریزی محتوای بافر در حافظه ‪ ROM‬یا‬ ‫•‬


‫‪. EEPROM‬‬
‫‪ : READ CLIPCODE INTO BUFFER‬خواندن داده حافظه کدی ميکرو ‪.‬‬ ‫•‬

‫‪ : BLACK CHECK‬خالی بودن حافظه ميکرو را مشخص می کند ‪.‬‬ ‫•‬

‫‪ : ERASE‬پاک کردن محتوای حافظه برنامه و داده ‪. EEPROM‬‬ ‫•‬

‫‪: 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‬‬

‫‪: FILE UPLOAD‬برنامه جاری در فرمت ‪ HEX‬را ‪ UPLOAD‬ميکند ‪.‬‬ ‫‪‬‬

‫‪ : FILE ESCAPE‬صرفنظر کردن از ‪ UPLOAD‬کردن فایل ‪.‬‬ ‫‪‬‬

‫‪ : FILE EXIT‬خروج از برنامه ‪. EMULATOR‬‬ ‫‪‬‬

‫‪ : TERMINAL CLEAR‬پنجره ترمينال را پاک می کند ‪.‬‬ ‫‪‬‬

‫‪ : 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$

regfile = “ 2323def.dat “ ‘AT90s2323 MCU$


regfile = “ 2333def.dat “ ‘AT90s2333 MCU$
regfile = “ 2343def.dat “ ‘AT90s2343 MCU$
regfile = “ 4414def.dat “ ‘AT90s4414 MCU$
regfile = “ 4433def.dat “ ‘AT90s4433 MCU$
regfile = “ 4434def.dat “ ‘AT90s4434 MCU$
29
... BA SC OM ‫بدنه یک برنامه درمحیط‬
.. . ‫معرفی میکرو‬

regfile = “ 8515def.dat “ ‘AT90s8515 MCU$


regfile = “ 8535def.dat “ ‘AT90s8535 MCU$

regfile = “ M8535.dat “ ‘MEGA 8535 MCU$


regfile = “ M8515.dat “ ‘MEGA 8515 MCU$
regfile = “ M8def.dat “ ‘MEGA 8 MCU$
regfile = “ M103def.dat “ ‘MEGA 103 MCU$
regfile = “ M16def.dat “ ‘MEGA 16 MCU$
regfile = “ M163def.dat “ ‘MEGA 163 MCU$
regfile = “ M161def.dat “ ‘MEGA 161 MCU$
regfile = “ M32def.dat “ ‘MEGA 32 MCU$
regfile = “ M323def.dat “ ‘MEGA 323 MCU$
regfile = “ M603def.dat “ ‘MEGA 603 MCU$
regfile = “ M64def.dat “ ‘MEGA 64 MCU$
regfile = “ M128def.dat “ ‘MEGA 128 MCU$
regfile = “ M128103.dat “ ‘MEGA 128 IN MEGA 103 MODE MCU$
30
‫بدنه یک برنامه درمحیط ‪... BA SC OM‬‬
‫کریستال‬

‫برای مشخص کردن فرکانس کریستال استفاده شده برحسب هرتز از دستور زیر استفاده می نمایيم ‪.‬‬
‫‪CRYSTAL = X$‬‬
‫‪ X‬فرکانس کریستال استفاده شده بر حسب هرتز است ‪.‬‬
‫نکته‬

‫این دستور را حتی برای زمانی که با اسيلتور داخلی ميکرو کار ميکنيد بنویسيد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪CRYSTAL = 14000000‬‬ ‫‪’14MHZ external osc$‬‬


‫‪CRYSTAL = 8000000‬‬ ‫‪’8MHZ external osc$‬‬
‫‪CRYSTAL = 1000000‬‬ ‫‪’1MHZ internal osc$‬‬
‫‪31‬‬
‫بدنه یک برنامه درمحیط ‪... BA SC OM‬‬
‫اسمبلی و بیسیک ( اختیاری )‬

‫در صورت نياز برای نوشتن برنامه اسمبلی در بين برنامه بيسيک از دستور زیر استفاده می‬
‫نمایيم‬
‫‪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‬‬
‫این دستور در انتهای برنامه قرار می گيرد و اجرای برنامه را متوقف می کند ‪ .‬با این دستور تمام وقفه‬
‫ها غير فعال شده و یک حلقه بی نهایت توليد و برنامه خاتمه می یابد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫”‪PRINT “ Hello‬‬ ‫‪‘print this‬‬


‫‪END‬‬ ‫‪‘ end program execution and disable all interrupt‬‬

‫‪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 ‫اعداد و متغیر ها و جداول‬
... ‫دیمانسیون متغیرها‬

DATA TYPE STORE AS : ‫نوع داده‬


VALUE ‫جدول انتخاب‬
RANGE
BIT A BIT OR 1 0
BYTE UNSIGNED 8 BITS TO 255 0
INTEGER SIGNED 16 BITS TO 32767 32767-
WORD UNSIGNED 16 BITS TO 65535 0
LONG SIGNED 32 BITS TO 214783647 214783648-

SINGLE SIGNED 32 BITS TO 3.4*10^38 45-^10* 1.5

STRING BYTES 0-245 -

39
.. . LOOKUP ‫اعداد و متغیر ها و جداول‬
... ‫دیمانسیون متغیرها‬

‫مثال‬ 

DIM B AS BIT ‘BIT can be 0 or 1


DIM A AS BYTE ‘BYTE range from 0 - 255
DIM K AS INTEGER AT 120 ‘you can specify the address of the
‘variable . The next dimensioned variable will be placed after ‫نکته‬
A

‫ نشان دهيد‬B& ‫ را با علمت‬BINARY ‫ و عدد‬H& ‫ را با علمت‬HEX ‫عدد‬

‫مثال‬ 

A= &H01DE ‘HEX NUM


B= &B01011011 ‘BIN NUM
‫مثال‬ 

DIM B1 AS BYTE AT $60 OVERLY

40
.. . LOOKUP ‫اعداد و متغیر ها و جداول‬
CONS T ‫دستور‬

: ‫برای تعریف یک ثابت از این دستور استفاده می شود‬


CONST SYMBOL= NUMCONST
CONST SYMBOL= STRINGCONST
CONST SYMBOL= EXPRESSION
SYMBOL , ‫ مقدار عددی انتساب یافته به‬NUMCONST ‫ نام ثابت و‬SYMBOL
‫ ميتواند‬EXPRESSION ‫ و‬SYMBOL ‫ رشته انتساب یافته به‬STRINGCONST
. ‫ انتساب یابد‬SYMBOL ‫عبارتی باشد که نتيجه آن به‬

‫ مثال‬
“CONST S = “TEST
CONST A = 5
CONST B1 =&B1001
CONST X = )B1 * 3 ( + 2

41
‫اعداد و متغیر ها و جداول ‪.. . LOOKUP‬‬
‫دستور ‪ALI AS‬‬

‫از این دستور برای تغير نام متغير استفاده می شود ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪DIRECTION ALIAS PORTB.1‬‬


‫حال شما می توانيد بجای ‪ PORTB.1‬از متغير ‪ DIRECTION‬استفاده نمایيد ‪.‬‬
‫‪SET DIRECTION‬‬ ‫‪‘is equal with‬‬ ‫‪SET PORTB.1‬‬

‫‪42‬‬
‫اعداد و متغیر ها و جداول ‪.. . LOOKUP‬‬
‫دستور ‪CH R‬‬

‫از این دستور برای تبدیل متغير عددی یا یک ثابت به کاراکتر استفاده می شود ‪ .‬زمانی که قصد‬
‫دارید یک کاراکتر بر روی ‪ LCD‬نمایش دهيد از این دستور می توانيد استفاده نماتيد ‪.‬‬
‫در صورتيکه از این دستور به این صورت استفاده نمایيد ‪ ) PRINT CHR ) VAR‬کاراکتر‬
‫اسکی ‪ VAR‬به پورت سریال فرستاده خواهد شد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪DIM a AS Byte‬‬ ‫‪‘dim variable‬‬


‫‪A = 65‬‬ ‫‪‘assign variable‬‬
‫‪) Print a‬‬ ‫‪‘print value ) 65‬‬
‫( ‪)Print HEX) a‬‬ ‫‪‘print hex value )41‬‬
‫( ‪) Print Chr ) a‬‬ ‫‪‘print ASKII character 65 )A‬‬
‫‪End‬‬
‫‪43‬‬
‫اعداد و متغیر ها و جداول ‪.. . LOOKUP‬‬
‫دستور ‪INSTR‬‬

‫این دستورمحل و موقعيت یک زیر رشته را در رشته دیگر مشخص می کند ‪.‬‬
‫‪) Var =Instr )start , String ,Subset‬‬
‫‪) Var =Instr )String ,Subset‬‬
‫‪ Var‬عددی است که مشخص کننده محل ‪ SUBSTR‬در رشته اصلی ‪ STRING‬می باشد و زمانيکه زیر‬
‫رشته مشخص شده در رشته اصلی نباشد صفر برگردانده می شود ‪ START.‬نيز عددی دلخواه است که‬
‫مکان شروع جستجو زیر رشته در رشته اصلی را مشخص می کند ‪ .‬در صورتيکه ‪ START‬قيد نشود تمام‬
‫رشته از ابتدا جستجو می شود ‪ .‬رشته اصلی تنها باید از نوع رشته باشد ولی زیر رشته (‪ ) SUBSTR‬می‬
‫تواند رشته و عدد ثابت هم باشد ‪.‬‬
‫‪ ‬مثال‬

‫‪DIM S AS String * 15, Z As String * 5‬‬


‫‪DIM Bp As Byte‬‬
‫‪” S = “This is a test‬‬
‫‪“Z= “is‬‬
‫‪Bp = Instr )S , Z ( : Print Bp‬‬ ‫‪‘should print 3‬‬
‫‪Bp = Instr )4 , S ,Z ( : Print Bp‬‬ ‫‪‘should print 6‬‬
‫‪End‬‬
‫‪44‬‬
.. . LOOKUP ‫اعداد و متغیر ها و جداول‬
INC R ‫دستور‬

. ‫ می افزاید‬VAR ‫این دستور یک واحد به متغير عددی‬


INCR VAR
‫مثال‬

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 ‫دستور‬

. ‫ را یک واحد کم می کند‬VAR ‫این دستور متغير‬


DECR VAR
‫مثال‬

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 ‫دستور‬

. ‫ یک متغير را برمی گرداند‬LSB ) )least significant byte ‫این دستور‬


)Var = LOW ) s
. ‫ قرار می گيرد‬Var ‫ در‬S ‫ متغير‬LSB

‫ مثال‬
Dim I As Integer , Z As Byte
I = &h1001
Z = LOW )I ( ‘ is 1
End

48
.. . LOOKUP ‫اعداد و متغیر ها و جداول‬
HIGH ‫دستور‬

. ‫ یک متغير را برمی گرداند‬MSB ) )most significant byte ‫این دستور‬


)Var = HIGH ) s
. ‫ قرار می گيرد‬Var ‫ در‬S ‫ متغير‬MSB

‫ مثال‬
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‬‬

‫با این دستورقسمتی از یک رشته را جدا می کنيم ‪.‬‬


‫‪) Var = RIGHT )var1 , n‬‬
‫از سمت راست رشته ‪ var1‬به تعداد کاراکتر ‪ , n‬رشته ای جدا شده و در رشته ‪ var‬قرار می گيرد ‪.‬‬

‫‪ ‬مثال‬
‫‪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‬‬

‫این دستور طول یا بعبارتی تعداد کاراکترهای یک رشته را برميگرداند ‪.‬‬


‫‪) Var = Len)string‬‬
‫طول رشته ‪ string‬در متغير عددی ‪ VAR‬قرار می گيرد ‪ .‬رشته ‪ string‬نهایتا می تواند‬
‫‪ 255‬بایت طول داشته باشد ‪ .‬توجه داشته باشيد که فضای خالی (‪ )SPACE BAR‬خود یک‬
‫کاراکتر به حساب می آید ‪.‬‬
‫‪ ‬مثال‬
‫‪Dim S As String * 12‬‬
‫‪Dim A As Byte‬‬
‫‪” S = “test‬‬
‫‪) A= Len)S‬‬
‫‪Print A‬‬ ‫‪‘Print 4‬‬
‫( ‪Print Len )S‬‬ ‫‪‘Print 4‬‬
‫‪” S=“test‬‬
‫‪54‬‬ ‫‪) A = Len ) A‬‬
‫‪Print A‬‬ ‫‪‘Print 5‬‬
‫اعداد و متغیر ها و جداول ‪.. . LOOKUP‬‬
‫دستور ‪LTR IM‬‬

‫این دستور فضای خالی یکرشته را حذف می کند ‪.‬‬


‫‪) Var = LTRIM) org‬‬
‫فضای خالی رشته ‪ org‬برداشته می شود و رشته بدون فضای خالی در متغير رشته ای ‪var‬‬
‫قرار می گيرد ‪.‬‬

‫‪ ‬مثال‬
‫‪Dim S As String * 10‬‬
‫“=‪”S‬‬ ‫‪AB‬‬
‫( ‪Print LTRIM) s‬‬ ‫‪‘AB‬‬
‫“=‪”S‬‬ ‫‪A B‬‬
‫( ‪Print LTRIM) s‬‬ ‫‪‘A B‬‬
‫‪End‬‬
‫‪55‬‬
.. . LOOKUP ‫اعداد و متغیر ها و جداول‬
SWA P ‫دستور‬

SWAP var1 , var2


‫ در متغير‬var2 ‫ و محتوای متغير‬var2 ‫ در متغير‬var1 ‫با اجرای این دستور محتوای متغير‬
‫نکته‬
. ‫ قرار می گيرد‬var1

. ‫ بایستی از یک نوع باشند‬var2‫ و‬var1 ‫دو متغير‬

‫ مثال‬
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‬‬

‫برای ایجاد فضای خالی ازاین دستور استفاده می شود ‪.‬‬


‫‪) Var = SPACE )x‬‬
‫‪ X‬تعداد فضای خاليست که بعنوان رشته در متغير رشته ای ‪ var‬جای می گيرد ‪.‬‬

‫‪ ‬مثال‬
‫‪Dim S As String *15‬‬
‫‪)S = Space )5‬‬
‫”}”; ‪Print “{“ ;S‬‬ ‫{‘‬ ‫‪} 5space‬‬
‫”}“ ; (‪Print “{“ ; Space)6‬‬ ‫{‘‬ ‫‪} 6 space‬‬
‫‪End‬‬

‫‪59‬‬
.. . LOOKUP ‫اعداد و متغیر ها و جداول‬
FO RM AT ‫تابع‬

. ‫این دستور یک رشته عددی را شکل دهی می کند‬


)“target = Format )source , “mask
‫ نوع‬mask. ‫ قرار می گيرد‬target ‫ رشته ای است که شکل دهی شود و نتایج در‬source
. ‫شکل دهی است‬

‫ مثال‬
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‬‬

‫توسط این جدول می توان مقدار دلخواهی را از جدولی برگرداند‪.‬‬


‫‪) var = LOOKUP)value , label‬‬
‫‪ Label‬برچسب جدول و ‪ value‬اندیس داده دلخواه است ‪ .‬داده برگشتنی از جدول در متغير ‪var‬‬
‫قرار می گيرد ‪ value =0.‬اولين داده در جدول را برمی گرداند ‪ .‬تعداد اندیس ها و مقدار داده‬
‫برگشتی به ترتيب نهایتا می تواند ‪255‬و ‪ 65535‬باشد ‪.‬‬
‫نکته‬

‫داده دو بایتی داخل جدول بایستی با علمت ‪ %‬پایان یابد ‪.‬‬

‫‪ ‬مثال‬
‫‪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‬‬

‫توسط این جدول می توان رشته دلخواهی را از جدولی برگرداند‪.‬‬


‫‪) var = LOOKUPSTR)value , label‬‬
‫‪ Label‬برچسب جدول و ‪ value‬اندیس رشته دلخواه است ‪ .‬رشته برگشتنی از جدول در متغير‬
‫رشته ای ‪ var‬قرار می گيرد ‪ value =0.‬اولين رشته در جدول را برمی گرداند ‪ .‬تعداد اندیس ها‬
‫نهایتا می تواند ‪ 255‬باشد ‪.‬‬

‫‪ ‬مثال‬
‫‪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‬استفاده نمایيدو عمليات‬
‫=‬ ‫علمت تساوی‬
‫ریاضی خود را انجام دهيد ‪.‬‬
‫>‬ ‫علمت بزرگتر از‬

‫^‬ ‫علمت بتوان‬

‫=>‬ ‫علمت کوچکتر یا مساوی‬

‫>=‬ ‫علمت بزرگتر یا مساوی‬

‫>>‬ ‫علمت مخالف‬


‫‪65‬‬
... ‫توابع ریاضی و محاسباتی‬
‫عملگرهای منطقی‬

: ‫ به قرار زیر است‬BASCOM ‫عملگر های منطقی‬

‫نماد‬ ‫معرفی‬
AND CONJUNCTION
OR DISJUNCTION
XOR EXCLUSIVE OR
NOT COMPLIMENT
‫مثال‬ 

A = 63 and 19
Print A ‘’19 print

66
‫توابع ریاضی و محاسباتی ‪...‬‬
‫تابع ‪ABS‬‬

‫این دستور به معنای ریاضی ‪( |VAR = |VAR2‬قدرمطلق) است ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Dim A As Integer , C As Integer‬‬


‫‪A = -1000‬‬
‫(‪|C = ABS )A‬‬ ‫‪‘c=|a‬‬
‫‪Print C‬‬ ‫‪‘C= 1000‬‬
‫‪End‬‬

‫‪67‬‬
... ‫توابع ریاضی و محاسباتی‬
EXP ‫تابع‬

)Target = Exp )source


. ‫ است‬SINGLE ‫ متغيری از نوع داده‬Target . ‫ است‬source ‫ بتوان‬e ‫ برابر با‬Target

‫مثال‬ 

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 ‫تابع‬

)Target = Log10 )source


‫ و‬Target . ‫ قرار می گيرد‬target ‫ در متغير‬source ‫ متغير یا ثابت‬10 ‫لگاریتم پایه‬
. ‫ هستند‬single ‫ هر دو داده نوع‬source
‫مثال‬
Dim S1 As Single, S2 As Single
S1 = 0.01
)S2 = Log10)S1
Print S2
For S1=1 to 100
)S2 = Log10)S1
Print S1 ;” “ ;S2
NEXT
End
69
‫توابع ریاضی و محاسباتی ‪...‬‬
‫تابع ‪L OG‬‬

‫این دستور لگاریتم طبيعی یک داده از نوع ‪ SINGLE‬را برمی گرداند ‪.‬‬

‫‪)Target = Log )source‬‬


‫لگاریتم متغير یا ثابت ‪ source‬از نوع داده ‪ single‬گرفته می شود ‪.‬ودر متغير ‪ target‬قرار می گيرد‬
‫‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Dim X As Single‬‬
‫(‪X = Log)100‬‬ ‫‪‘4.605170‬‬
‫‪Print X‬‬
‫‪End‬‬

‫‪70‬‬
‫توابع ریاضی و محاسباتی ‪...‬‬
‫تابع ‪RN D‬‬

‫این دستور یک عدد تصادفی برمی گرداند ‪.‬‬


‫‪)VAR= RND )limit‬‬
‫عدد تصادفی بين ‪ 0‬و ‪ limit‬بدست آمده و در متغير ‪ var‬قرار می گيرد ‪ .‬با هربار استفاده از این دستور عدد مثبت تصادفی دیگری‬
‫بدست خواهد آمد ‪.‬‬ ‫نکته‬
‫‪ limit‬باید یک عدد مثبت باشد ‪.‬‬

‫مثال‬ ‫‪‬‬
‫‪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‬‬

‫‪) Var = TAN )source‬‬


‫این دستور تانژانت ثابت یا متغير ‪ source‬را در متغير ‪ var‬از نوع ‪ SINGLE‬قرار می دهد ‪ .‬تمام‬
‫دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪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‬‬

‫‪)Var = SINH) source‬‬


‫این دستور سينوس هایپربوليک ثابت یا متغير ‪ source‬را در متغير ‪ var‬از نوع ‪ SINGLE‬قرار‬
‫می دهد ‪ .‬تمام دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Dim X As Single‬‬
‫‪Dim Y As Single‬‬
‫‪X= 0.512‬‬
‫‪)Y = Sinh )X‬‬
‫‪Print X ; “ ; “ ;Y‬‬
‫‪End‬‬

‫‪75‬‬
‫توابع ریاضی و محاسباتی ‪...‬‬
‫تابع ‪CO SH‬‬

‫‪)Var = COSH) source‬‬


‫این دستور کسينوس هایپربوليک ثابت یا متغير ‪ source‬را در متغير ‪ var‬از نوع ‪ SINGLE‬قرار‬
‫می دهد ‪ .‬تمام دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪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‬‬

‫‪)Var = ACOS) source‬‬


‫این دستور آرککسينوس ثابت یا متغير ‪ source‬را در متغير ‪ var‬از نوع ‪ SINGLE‬قرار می دهد ‪.‬‬
‫تمام دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪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‬‬

‫‪)Var =DEG2RAD) single‬‬


‫برای تبدیل درجه به رادیان از این دستوراستفاده می شود ‪.‬‬
‫زاویه ‪ single‬به رادیان تبدیل می شود و در متغير ‪ VAR‬از نوع داده ‪ SINGLE‬قرار می گيرد ‪.‬‬
‫‪ ‬مثال‬
‫‪Dim X As Single‬‬
‫‪Dim Y As Single‬‬
‫‪X= 180‬‬
‫‪)Y = Deg2rad )X‬‬
‫‪Print Y‬‬ ‫‪‘3.141592‬‬
‫‪End‬‬

‫‪81‬‬
‫توابع ریاضی و محاسباتی ‪...‬‬
‫تابع ‪RAD2 DEG‬‬

‫‪)Var =RAD2DEG) single‬‬


‫برای تبدیل رادیان به درجه از این دستوراستفاده می شود ‪.‬‬
‫رادیان ‪ single‬به درجه تبدیل می شود و در متغير ‪ VAR‬از نوع داده ‪ SINGLE‬قرار می گيرد ‪.‬‬
‫‪ ‬مثال‬
‫‪Dim X As Single‬‬
‫‪Dim Y As Single‬‬
‫‪X= 3.141592‬‬
‫‪)Y = Rad2Deg )X‬‬
‫‪Print Y‬‬ ‫‪‘179.9999‬‬
‫‪End‬‬

‫‪82‬‬
‫توابع ریاضی و محاسباتی ‪...‬‬
‫تابع ‪RO UND‬‬
‫‪)Var =ROUND) x‬‬
‫متغير یا داده ‪ X‬از نوع ‪ SINGLE‬روند شده و در متغير ‪ VAR‬از نوع داده ‪ SINGLE‬قرار می‬
‫گيرد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Round)2.3( =2‬‬ ‫‪; Round)-2.3(= -2‬‬


‫‪Round)2.8(=3‬‬ ‫‪; Round)-2.8(= -3‬‬

‫‪83‬‬
‫تبدیل کدها و متغیرها به یکدیگر‬

‫ميكروكنترلرهايِ ‪AVR‬‬

‫‪84‬‬
‫تبدیل کدها و متغیرها به یکدیگر ‪...‬‬
‫دستور ‪ASC‬‬

‫‪)Var = ASC )string‬‬


‫این دستور اولين کاراکتر یک متغير از نوع داده ‪ STRING‬را به مقدار اسکی آن تبدیل می کند ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Dim A As Byte , S As string‬‬


‫‪“S= “ABC‬‬
‫‪)A = ASC)s‬‬
‫‪Print A‬‬ ‫‪‘will print 65‬‬
‫‪End‬‬

‫‪85‬‬
‫تبدیل کدها و متغیرها به یکدیگر ‪...‬‬
‫دستور ‪HE X‬‬
‫‪)Var = Hex )x‬‬
‫این دستور یک داده از نوع ‪ BYTE,INTEGER , WORD , LONG‬را به مقدار هگزادسيمال‬
‫تبدیل می کند ‪.‬‬
‫مقدار ‪ HEX‬متغير یا ثابت ‪ X‬در متغير ‪ VAR‬جای می گيرد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Dim A As Byte , S As string*10‬‬


‫‪A= 123‬‬
‫‪)S= Hex)A‬‬
‫‪Print S‬‬ ‫‪‘7B will print‬‬
‫(‪Print Hex)A‬‬ ‫‪‘7B will print too‬‬
‫‪End‬‬
‫‪86‬‬
‫تبدیل کدها و متغیرها به یکدیگر ‪...‬‬
‫دستور ‪HE XVA L‬‬
‫‪)Var = HexVal )x‬‬
‫این دستور یک داده هگزدسيمال را به مقدار عددی تبدیل می کند ‪.‬‬
‫مقدار عددی داده هگزدسيمال ‪ X‬که می تواند ‪LONG , WORD , INTEGER , BYTE‬‬
‫باشد در متغير ‪ 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‬‬
‫رجیسترها و آدرس های حافظه ‪.. .‬‬

‫تمام ميکروهای ‪ AVR‬دارای ‪ 32‬رجيستر ‪ 8‬بيتی (‪ ) R0 –R31‬همه منظوره در ‪ CPU‬خود‬


‫هستند ‪.‬‬
‫رجيسترهای ‪ )R31)MSB‬با ‪ R30)LSB( ,)R29)MSB‬با ‪ R28)LSB‬و ‪)R27)MSB‬‬
‫با ‪ )R26)LSB‬تشکيل سه رجيستر ‪ 16‬بيتی با ترتيب با نامهای ‪ X,Y,Z‬را می دهند ‪.‬‬

‫‪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‬‬
‫از این دستور برای برگرداندن بایتی که در ادرسی از حافظه کدی ذخيره شده است استفاده می‬
‫کنيم ‪.‬با این دستور می توانيد به رجيسترهای داخلی نيز دسترسی پيدا کنيد ‪ .‬البته با این دستور نمی‬
‫توان در حافظه داخلی چيزی نوشت ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Dim I As Integer , B1 As Byte‬‬


‫‪For I = 0 To 31‬‬
‫( ‪B1 = Peek )I‬‬ ‫‪‘ only 32 registers in AVR‬‬
‫(‪)Print Hex )b1‬‬ ‫‪‘ get byte from internal memory )r0-r31‬‬
‫‪Next‬‬

‫‪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‬هستند ‪.‬‬
‫این دستور جز دستورات اسمبلی است و برای کمک به برنامه نویسان اضافه شده است ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Dim S As String ,A As Byte‬‬


‫‪asm$‬‬
‫‪Loadadr S , X‬‬ ‫‪‘load address into R26 and R27‬‬
‫‪ld _temp1 , X‬‬ ‫‪‘load value of location R26/R27 into‬‬
‫’‪)R24 ) _temp1‬‬
‫‪end asm$‬‬
‫‪End‬‬

‫‪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‬است نوشته می شود ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Poke 1 , 5‬‬ ‫‪‘write 5 to R1‬‬


‫‪End‬‬

‫‪108‬‬
‫رجیسترها و آدرس های حافظه ‪...‬‬
‫دستور ‪VA RPT R‬‬
‫‪) Var = VARPTR )var2‬‬
‫این دستور آدرس یک متغير را در مکان حافظه بر می گرداند ‪.‬‬
‫آدرس متغير ‪ var2‬در مکان حافظه بدست آمده و در متغير ‪ var‬قرار می گيرد ‪.‬‬

‫مثال‬ ‫‪‬‬

‫‪Dim B As Xram Byte At &H300 , I As Integer , W As Word‬‬


‫‪)W = Varptr )b‬‬
‫(‪Print Hex)W‬‬ ‫‪‘Print &H0300‬‬
‫‪End‬‬

‫‪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‬ادامه می یابد ‪.‬‬

‫شما می توانيد به صورتهای زیر نيز متغير را امتحان کنيد ‪:‬‬


‫‪Case is >2‬‬ ‫اگر متغير موردنظر بزرگتر از ‪ 2‬باشد ‪.‬‬
‫و یا می توان محدوده ای را برای امتحان کردن در نظر گرفت ‪:‬‬
‫‪Case 2 to 5‬‬ ‫اگر متغير موردنظر بين ‪ 2‬تا ‪ 5‬باشد ‪.‬‬

‫‪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

) Sub test )A As Byte


Print A ; B1 ; C ‘123 will print
End Sub

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

) Sub Test ) B1 As Byte , Byval B2 As Byte


Lcd B1
LowerLine
)Lcd BCD)B2
B1 = 10
B2 = 15
End Sub
134
‫زیر برنامه و تابع …‬
‫بکارگیری متغیر محلی یا ‪LOC AL‬‬
‫از این دستور برای تعریف متغير محلی در زیربرنامه استفاده می کنيم ‪.‬‬
‫‪LOCAL VAR As Type‬‬
‫‪ VAR‬نام متغير و ‪ type‬نوع داده است که می توانند ‪STRING , WORD , INTEGER , BYTE ,‬‬
‫‪ SINGLE , LONG‬باشند نوع داده های ‪ ERAM , SRAM , XRAM‬و آرایه ها نمی توانند محلی تعریف‬
‫شوند‪.‬‬
‫یک متغير محلی یک متغير موقت است که فقط در هنگام فراخوانی زیر برنامه مربوطه برای آن فضا در نظر گرفته‬
‫می شود و با برگشت از زیر برنامه عمر متغير (‪ ) LIFE TIME‬به اتمام می رسد ‪.‬‬

‫نکته‬

‫متغيرهای بيتی نمی توانند بصورت محلی تعریف شوند ‪.‬‬

‫‪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‬‬ ‫‪‬‬

‫پورت ‪ 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 ‫ رجيستر داده پورت‬

PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0


R/W R/W R/W R/W R/W R/ W R/W R/W

A - DDRA [ [PORT A DATA DIRECTION REGISTER ‫ رجيستر جهت داده پورت‬

PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0


R/W R/W R/W R/W R/W R/ W R/W R/W

A PINA- [ [PORT A INPUT PINS ADDRESS ‫ بایت آدرس پایه های ورودی پورت‬

PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0


143 R/W R/W R/W R/W R/W R/ W R/W R/W
‫پیکره بندی پورت ها ‪...‬‬
‫بررسی پورتهای میکرو ‪ATMEG A32‬‬

‫‪ ‬استفاده از پورت ‪ A‬به عنوان یک ‪ I/O‬عمومی دیجیتال‬


‫تمام ‪ 8‬پایه موجود زمانيکه بعنوان پایه های ‪ I/O‬دیجيتال استفاده می شوند دارای عملکرد مساوی هستند ‪ , Pan.‬پایه‬
‫‪ I/O‬عمومی ‪ :‬بيت ‪ DDAn‬در رجيستر ‪ DDRA‬مشخص کننده جهت پایه است ‪ .‬اگر‪ DDAn‬یک باشد ‪ PAn ,‬بعنوان‬
‫یک پایه خروجی مورد استفاده قرار می گيرد و اگر ‪DDAn‬صفر باشد ‪ PAn ,‬بعنوان یک پایه ورودی در نظر گرفته‬
‫می شود ‪.‬اگر ‪ PORTAn‬یک باشد هنگاميکه پایه بعنوان ورودی تعریف می شود ‪,‬مقاوت ‪ Pull-up‬فعال می شود ‪.‬‬
‫برای خاموش کردن مقاومت باید ‪ PORTAn‬صفر شود یا اینکه پایه بعنوان خروجی تعریف شود ‪.‬پایه های پورت‬
‫زمانيکه ریست اتفاق می افتد به حالت ‪ Tri-state‬می روند ‪.‬‬

‫‪DDAn‬‬ ‫‪PORTAn‬‬ ‫‪I/O‬‬ ‫‪Pull up‬‬ ‫‪Comment‬‬

‫‪0‬‬ ‫‪0‬‬ ‫‪Input‬‬ ‫‪No‬‬ ‫‪Tri-state‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪Input‬‬ ‫‪Yes‬‬ ‫‪PAn will source current if ext. pull up low‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪Output‬‬ ‫‪No‬‬ ‫‪Push-Pull Zero output‬‬

‫‪1441‬‬ ‫‪1‬‬ ‫‪Output‬‬ ‫‪No‬‬ ‫‪Push-Pull one output‬‬


‫پیکره بندی پورت ها ‪...‬‬
‫بررسی پورتهای میکرو ‪ATMEG A32‬‬

‫پورت ‪B‬‬ ‫‪‬‬

‫پورت ‪ 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 ‫ رجيستر داده پورت‬

PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0


R/W R/W R/W R/W R/W R/ W R/W R/W

B - DDRB [ [PORT B DATA DIRECTION REGISTER ‫ رجيستر جهت داده پورت‬

PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0


R/W R/W R/W R/W R/W R/ W R/W R/W

B PINB- [ [PORT B INPUT PINS ADDRESS ‫ بایت آدرس پایه های ورودی پورت‬

146 PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0


R/W R/W R/W R/W R/W R/ W R/W R/W
‫پیکره بندی پورت ها ‪...‬‬
‫بررسی پورتهای میکرو ‪ATMEG A32‬‬
‫‪ ‬استفاده از پورت ‪ B‬به عنوان یک ‪ I/O‬عمومی دیجیتال‬
‫تمام ‪ 8‬پایه موجود زمانيکه بعنوان پایه های ‪ I/O‬دیجيتال استفاده می شوند دارای عملکرد مساوی هستند ‪ , Pbn.‬پایه‬
‫‪ I/O‬عمومی ‪ :‬بيت ‪ DDBn‬در رجيستر ‪ DDRB‬مشخص کننده جهت پایه است ‪ .‬اگر‪ DDBn‬یک باشد ‪ PBn ,‬بعنوان‬
‫یک پایه خروجی مورد استفاده قرار می گيرد و اگر ‪DDBn‬صفر باشد ‪ PBn ,‬بعنوان یک پایه ورودی در نظر گرفته‬
‫می شود ‪.‬اگر ‪ PORTBn‬یک باشد هنگاميکه پایه بعنوان ورودی تعریف می شود ‪,‬مقاوت ‪ Pull-up‬فعال می شود ‪.‬‬
‫برای خاموش کردن مقاومت باید ‪ PORTBn‬صفر شود یا اینکه پایه بعنوان خروجی تعریف شود ‪.‬پایه های پورت‬
‫زمانيکه ریست اتفاق می افتد به حالت ‪ Tri-state‬می روند ‪.‬‬

‫‪DDBn‬‬ ‫‪PORTBn‬‬ ‫‪I/O‬‬ ‫‪Pull up‬‬ ‫‪Comment‬‬

‫‪0‬‬ ‫‪0‬‬ ‫‪Input‬‬ ‫‪No‬‬ ‫‪Tri-state‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪Input‬‬ ‫‪Yes‬‬ ‫‪PBn will source current if ext. pull up low‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪Output‬‬ ‫‪No‬‬ ‫‪Push-Pull Zero output‬‬

‫‪1471‬‬ ‫‪1‬‬ ‫‪Output‬‬ ‫‪No‬‬ ‫‪Push-Pull one output‬‬


‫پیکره بندی پورت ها ‪...‬‬
‫بررسی پورتهای میکرو ‪ATMEG A32‬‬

‫پورت ‪C‬‬ ‫‪‬‬

‫پورت ‪ 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 ‫ رجيستر داده پورت‬

PORTC7 PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0


R/W R/W R/W R/W R/W R/ W R/W R/W

C - DDRC [ [PORT C DATA DIRECTION REGISTER ‫ رجيستر جهت داده پورت‬

PORTC7 PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0


R/W R/W R/W R/W R/W R/ W R/W R/W

C PINC- [ [PORT C INPUT PINS ADDRESS ‫ بایت آدرس پایه های ورودی پورت‬

PORTC7 PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0


149 R/W R/W R/W R/W R/W R/ W R/W R/W
‫پیکره بندی پورت ها ‪...‬‬
‫بررسی پورتهای میکرو ‪ATMEG A32‬‬

‫‪ ‬استفاده از پورت ‪ C‬به عنوان یک ‪ I/O‬عمومی دیجیتال‬


‫تمام ‪ 8‬پایه موجود زمانيکه بعنوان پایه های ‪ I/O‬دیجيتال استفاده می شوند دارای عملکرد مساوی هستند ‪ , PCn.‬پایه‬
‫‪ I/O‬عمومی ‪ :‬بيت ‪ DDCn‬در رجيستر ‪ DDRC‬مشخص کننده جهت پایه است ‪ .‬اگر‪ DDCn‬یک باشد ‪PCn ,‬‬
‫بعنوان یک پایه خروجی مورد استفاده قرار می گيرد و اگر ‪DDCn‬صفر باشد ‪ PCn ,‬بعنوان یک پایه ورودی در نظر‬
‫گرفته می شود ‪.‬اگر ‪ PORTCn‬یک باشد هنگاميکه پایه بعنوان ورودی تعریف می شود ‪,‬مقاوت ‪ Pull-up‬فعال می‬
‫شود ‪ .‬برای خاموش کردن مقاومت باید ‪ PORTCn‬صفر شود یا اینکه پایه بعنوان خروجی تعریف شود ‪.‬پایه های‬
‫پورت زمانيکه ریست اتفاق می افتد به حالت ‪ Tri-state‬می روند ‪.‬‬

‫‪DDCn‬‬ ‫‪PORTCn‬‬ ‫‪I/O‬‬ ‫‪Pull up‬‬ ‫‪Comment‬‬

‫‪0‬‬ ‫‪0‬‬ ‫‪Input‬‬ ‫‪No‬‬ ‫‪Tri-state‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪Input‬‬ ‫‪Yes‬‬ ‫‪PCn will source current if ext. pull up low‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪Output‬‬ ‫‪No‬‬ ‫‪Push-Pull Zero output‬‬

‫‪1501‬‬ ‫‪1‬‬ ‫‪Output‬‬ ‫‪No‬‬ ‫‪Push-Pull one output‬‬


‫پیکره بندی پورت ها ‪...‬‬
‫بررسی پورتهای میکرو ‪ATMEG A32‬‬

‫پورت ‪D‬‬ ‫‪‬‬

‫پورت ‪ 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 ‫ رجيستر داده پورت‬

PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0


R/W R/W R/W R/W R/W R/ W R/W R/W

D - DDRD [ [PORT D DATA DIREDTION REGISTER ‫ رجيستر جهت داده پورت‬

PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0


R/W R/W R/W R/W R/W R/ W R/W R/W

D PIND- [ [PORT D INPUT PINS ADDRESS ‫ بایت آدرس پایه های ورودی پورت‬

152 PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0


R/W R/W R/W R/W R/W R/ W R/W R/W
‫پیکره بندی پورت ها ‪...‬‬
‫بررسی پورتهای میکرو ‪ATMEG A32‬‬

‫‪ ‬استفاده از پورت ‪ D‬به عنوان یک ‪ I/O‬عمومی دیجیتال‬


‫تمام ‪ 8‬پایه موجود زمانيکه بعنوان پایه های ‪ I/O‬دیجيتال استفاده می شوند دارای عملکرد مساوی هستند ‪ , PDn.‬پایه‬
‫‪ I/O‬عمومی ‪ :‬بيت ‪ DDDn‬در رجيستر ‪ DDRD‬مشخص کننده جهت پایه است ‪ .‬اگر‪ DDDn‬یک باشد ‪PDn ,‬‬
‫بعنوان یک پایه خروجی مورد استفاده قرار می گيرد و اگر ‪DDDn‬صفر باشد ‪ PDn ,‬بعنوان یک پایه ورودی در نظر‬
‫گرفته می شود ‪.‬اگر ‪ PORTDn‬یک باشد هنگاميکه پایه بعنوان ورودی تعریف می شود ‪,‬مقاوت ‪ Pull-up‬فعال می‬
‫شود ‪ .‬برای خاموش کردن مقاومت باید ‪ PORTDn‬صفر شود یا اینکه پایه بعنوان خروجی تعریف شود ‪.‬پایه های‬
‫پورت زمانيکه ریست اتفاق می افتد به حالت ‪ Tri-state‬می روند ‪.‬‬

‫‪DDDn‬‬ ‫‪PORTDn‬‬ ‫‪I/O‬‬ ‫‪Pull up‬‬ ‫‪Comment‬‬

‫‪0‬‬ ‫‪0‬‬ ‫‪Input‬‬ ‫‪No‬‬ ‫‪Tri-state‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪Input‬‬ ‫‪Yes‬‬ ‫‪PDn will source current if ext. pull up low‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪Output‬‬ ‫‪No‬‬ ‫‪Push-Pull Zero output‬‬

‫‪1531‬‬ ‫‪1‬‬ ‫‪Output‬‬ ‫‪No‬‬ ‫‪Push-Pull one output‬‬

Vous aimerez peut-être aussi