برق. قدرت. کنترل. الکترونیک. مخابرات. تاسیسات.

دایره المعارف تاسیسات برق (اطلاعات عمومی برق)

آموزش میکرو avr به زبان ساده قسمت چهارم
1-
سلام چطوری
2-
سلام ممنون چی كار می كنی
1-
قربانت هیچكار . امروز اومدم كه بقیه میكرو رو بهم یاد بدی
2-
چشم . حالا كجا بودیم
1-
توی قسمت جمع و تفریق و ...
2-
اها یادم اومد جمع رو گفتم بقیش موند . باشه . عملیات بعدی تفریق هستش كه بایك مثال بهت می گم كه چطوری باید عمل كنی

کد:

DIM G AS BYTE
G = 6 – 2
CLS
LCD G
END

مثال بالا یك مثال خیلی ساده هستش . ما در خط اول یك متغییر تعریف كردیم به نام G در خط دوم بهش مقدار 6-2 رو دادیم كه یعنی 4 . در خط بعدی با فرمان CLS ال سی دی را پاك كردیم تا اماده نوشتن بشه . در خط بعدی با فرمان LCD G از میكرو خواستیم تا مقدار متغییر G را روی LCD نمایش دهد كه میكرو برای ما عدد 4 را نمایش می دهد یعنی حاصل عبارت 6-2 را نشان می دهد . در خط اخر هم با دستور END برنامه رو به پایان رسوندیم . این برنامه بالا رو اگه دوست داشتی می تونی با شبیه ساز خود BASCOM نگاه كنی .
یك مثال دیگه:

کد:

DIM L AS BYTE
DIM N AS BYTE
L = 12 - 3
N = 2 – 2
CLS
LCD L
WAITMS 100
CLS
LCD N
END

خوب توی برنامه بالا ما اومدیم دو تا متغییر به نام های N و L از نوع بایت تعریف كردیم . در خط سوم به متغییر L مقدار 12 – 3 دادیم . در خط بعدی به متغییرN مقدار 2-2 دادیم .در خط بعدی با فرمان CLS ال سی دی را پاك كردیم و در خط بعد با فرمان LCD L به میكرو دستور دایم كه مقدار متغییر L را كه هست 12 – 3 یعنی 9 رو نمایش بده و میكرو مقدار 9 را برای متغییر L نمایش میده . در خط بعد ما یك تاخیر در برنامه گذاشتیم . در خط بعدی با فرمان CLS ال سی دی را مجددا پاك كردیم و در خط بعدی با فرمان LCD N به میكرو دستور دادیم كه مفدار متغییر N رو كه هست 2-2 یعنی 0 رو به ما نشون بده كه میكرو مقدار 0 رو روی LCD نمایش میده و در خط اخر هم برنامه به پایان می رسه.
یك مثال دیگه هم رو حساب معرفت میزنم :

کد:

DIM L AS BYTE
DIM N AS BYTE
DIM AHMAD AS BYTE
L = 12 - 3
N = 10 – 2
AHMAD = L + N
CLS
LCD L
WAITMS 100
CLS
LCD N
WAITMS 100
CLS
LCD AHMAD
END

این برنامه رو خودت می دونی كه چی به چیه ولی بازم خودم می گم . ببین ما سه تا متغییر تعریف كردیم هر سه تا هم از نوع بایت هستن به نام های L و N و AHMAD . به متغییر های L و N مقدار دادیم و به متغییر AHMAD مقداری كه دادیم این بود كه اقای میكروكنترلر حاصل متغییر های L و N رو با هم جمع كن و حاصل را مقدار متغییر AHMAD قرار بده خوب مقدار متغییر L هست 12 – 3 یعنی 9 و مقدار متغییر N هست 10 – 2 یعنی 8 . ما با دستور AHMAD = N + L این فرمان را دادیم كه مقدار متغییر AHMAD هست 9 + 8 یعنی 17 .
خوب بقیه دستورات هم به این شكل هستش فقط به جای علامت جمع و تفریق كافیه علامت های ضرب و تقسی رو بزاری كه علامت تقسیم هستش /
و علامت ضرب هستش *
همینطور ایناها رو با هم جمع و تفرق و یا ضرب و تقسیم كن تا كامل دستت بیاد یا یك شرط بزار كه مثال اگه مقدار عبارت
4 – 1 شد عدد 3 برو فلان كار رو انجام بده یا خیلی كارای دیگه میتونی انجام بدی.
1- خوب درس بعدی چیه ؟
2- راستشو بخای من قبل از این كه بخوام تایمر و كانتر رو بهت بگم باید یك سری از چیزهایی رو كه قبلا نگفتم بهت بگم مثلا بعضی از دستورات مربوط به LCD رو نگفتم بعضی از دستورات پرش رو نگفتم كه باید همون اول می گفتم
1- خوب چرا همون اول نگفتی
2- خوب ترسیدم كه باهم قاطی كنی بلایی كه سرخودم تو كلاس اومده .استاد میومد چند تا دستور شبیه به هم رو كه همش یك كار رو انجام می داد باهم می گفت بقیه هم قاطی می كردن
1- مثلا چی
2- مثلا همین دستور GOTO كه پرش به یك زیربرنامه هستش رو با دستور GOSUB هم می شه انجام داد كه هر دوتاش یك كار رو انجام میدن . یا بعضی از دستورات مربوط به LCD رو مثلا خاموش روشن كردن LCD – خاموش روشن شدن كرسر
و چند تا دستور دیگه .
1- اینا خیلی سخته
2- نه بابا از دستورات جمع و تفرق اسون تره . بعد كه اینا رو گفتم می ریم سر تایمر و كانتر.
اول بریم سر بقیه دستورات LCD : خوب ما از ال سی دی فقط دو دستور CLS و LCD رو با هم مرور كردیم دستوررات بعدی به این شرح هستش :
دستور CONFIG LCD : توسط این دستور می شه اندازه LCD رو مشخص كرد . مثال :

کد:

DIM A AS BYTE
A = 10
CONFIG LCD = 16 * 2
CLS
LCD A
END

خوب برنامه بالا خیلی راحته ما یك متغییر تعریف كردیم بعد بهش مقدار دادیم . بعد اندازه LCD رو مشخص كردیم . وبعد مقدار متغییر رو روی LCD نمایش دادیم.در نهایت برنامه رو به پایان رسوندیم .
1-
هر اندازه ای كه خاستیم می تونیم بدیم ؟
2-
نه اندازه ها باید استاندارد باشه و باید یكی از انواع اندازه های زیر باشه :
16 * 1 - 16 * 2 - 16 * 4 - 20 * 2 - 20 * 4 - 40 * 2 - 40 * 4
درضمن این اندازه ها رو می تونی از داخل نرم افزار كه قبلا توضیح دادم هم تنظیم كنی
دستور بعدی DISPLAY هستش كه جلوی این دستور باید یكی از دو گزینه ON یا OFF قرار بگیره . توسط این دستور میشه ال سی دی رو روش یا خاموش كرد . مثال :

کد:

DIM AHMAD AS BYTE
AHMAD = 3
CLS
LCD AHMAD
WAITMS 100
DISPLAY OFF
END

خوب در این برنامه ما یك متغییر به نام AHMAD از نوع بایت تعریف كردیم . بعد در خط دوم به متغییر AHMADمقدرا 3 رو دادیم . در خط بعدی با دستور CLS ال سی دی رو پاك كردیم . در خط بعدی توسط دستور LCD AHMAD دستور دادیم كه مقدار متغییر AHMAD رو روی ال سی دی نمایش بده . در خط بعدی یك تاخیر 100 میلی ثانیه ای در برنامه ایجاد كردیم بعد از گذشت این مدت زمان میكرو خط بعدی رو می خونه كه نوشته DISPLAY OFF و توسط این دستور LCD خاموش میشه. ودر خط اخر هم برنامه به پایان می رسه. در ضمن هر وقت كه خاستی LCD رو كه با دستور DISPLAY OFF خاموش كرده بودی دوباره روشنش كنی باید با دستور DISPLAY ON این كار رو بكنی.
دستور بعدی CURSOR هستش كه جلوی این دستور یكی از چهار گزینه زیر باید قرار بگیره :
ON : كه اگه ON جلوی CURSOR قرار بگیره CURSOR فعال میشه
OFF : كه اگه OFF جلوی CURSOR قرار بگیره CURSOR خاموش میشه
BLINK : اگر BLINK جلوی CURSOR قرار بگیره CURSOR چشمك میزنه
NOBLINK : كه اگه NOBLINK جلوی CURSOR قرار بگیره CURSOR چشمك نمی زنه
1-
خوب حالا این CURSOR چی هستش
2-
CURSOR یا به فارسی كرسر همون خطی هستش كه وقتی داری مثلا با برنامه WORDPAD تایپ می كنی هی چشمك می زنه توی LCD هم این كرسر قرار داره كه می تونه خاموش یا روشن یا چشمك زن باشه كه دست خودمونه كه چه بلایی سرش بیاریم .
مثال :

کد:

DIM A AS BYTE
A = 100
CURSOR BLINK
CLS
LCD A
END

خوب ما یك متغییر تعریف كردیم به نام A و از نوع بایت . در خط دوم مقدار دادیم .در خط سوم توسط دستور
CURSOR BLINK كرسر را از نوع چشمك زن انتخاب كردیم . در خط چهارم با دسترو CLS ال سی دی رو پاك كردیم . در خط بعد با دستور LCD A مقدار متغییر A رو روی ال سی دی نمایش دادیم. در خط اخر هم توسط دستور END برنامه رو به پایان رسوندیم.
دستور بعدی SHIFLCD هست كه بعد از این دستور باید از یكی از دو فرمان LEFT یا RIGHT استفاده كرد . توسط این دستور می توان كل صفحه نمایش رو به اندازه یك واحد به چپ یا راست منتقل كرد . مثال :

کد:

CLS
LCD "AHMAD"
SHIFTLCD RIGHT
END

این یك برنامه ساده هستش كه ما اول اومدیم توسط دستور CLS ال سی دی رو پاك كردیم بعد توسط دستور
LCD "AHMAD" اومدیم ثابت AHMAD رو روی ال سی دی نمایش دادیم در خط بعد توسط دستور
SHIFTLCD RIGHT اومدیم كل صفحه ال سی دی رو یك واحد به سمت راست انتقال دادیم .
1-
این ثابت AHMAD رو كه گفتی یعنی چی ؟
2-
هر چیز كه در داخل " " قرار بگیره میشه یك ثابت
1-
یك سوال دیگه اگه ما خواستیم كه دو یا چند واحد كل صفحه ال سی دی رو به سمت راست یا چپ هدایت كنیم باید چكار كنیم؟
2-
به ازای هر چند واحد كه خاستیم كل صفحه ال سی دی رو به سمت راست هدایت كنیم باید دستور SHIFTLCD رو زیر هم بنویسیم. مثلا می خایم 4 واحد به سمت راست هدایت بشه از روشی كه گفتیم باید به صورت زیر عمل كنیم:

کد:

CLS
LCD "AHMAD"
SHIFTLCD RIGHT
SHIFTLCD RIGHT
SHIFTLCD RIGHT
SHIFTLCD RIGHT
END

كه میكرو به ازای هر دفعه كه دستور SHIFTLCD رو می بینه یك واحد كل صفحه ال سی دی رو به سمت راست هداید می كنه
1-
اگه این دستور SIFTLCD رو هزار بار زیر هم بنویسم چی میشه
2-
مگه مرض داری ولی خوب در نهایت بعد چند بار اون نوشته روی ال سی دی از LCD خارج میشه.
دستور بعدی LOCATE هستش كه جلوی این دستور باید مقدار بدی كه در ادامه می گم چه مقداری باید بدی . توسط این دستور می تونی مكان نوشته ای كه می خای روی ال سی دی نوشته بشه رو انتخاب كنی یا تغییر بدی مثلا شاید حال كردی كه یك كلمه رو وسط ال سی دی نمایش بدی یا پایین سمت چپ یا هر جای ال سی دی كه حال كردی نمایش بدی اونجاست كه این دستور به كارت میاد. ببین هر ال سی دی بسته به این كه اندازه ان چند در چند باشه تعدادی ستون افقی و تعدادی ستون عمودی داره مثلا در ال سی دی 16 * 2 تعداد ستون افقی 16 و تعداد ستون عمودی 2 هستش یا در ال سی دی 40 * 4 تعداد ستون افقی 40 و تعداد ستون عمودی 4 هست . خوب حالا كه فهمیدی اندازه هایی كه برای ال سی دی مشخص می كنن چه مفهومی داره می تونی اون مقداری رو كه گفتم باید جلوی دستور LOCATE بنویسی رو به دست بیاری كه باید به ترتیب زیر عمل كنی :
LOCATE 1 , 1
در بالا من یك نمونه مكان نما رو نوشتم البته هر مقداری كه خواستی می تونی بدی به شرط این كه مقدار رو خیلی زیاد ندی چون ممكنه اون كلمه ای كه قرار روی ال سی دی نوشته بشه از ال سی دی بره بیرون . عدد اولی رو كه نوشتم به این منظور بوده كه مقدار مكان عمودی رو مشخص كردم . عدد دومی كه جلوش نوشتم مقدار پیشروی كلمه به جلو در سمت ستون های افقی هستش . این اعداد برای هر نوع ال سی دی ممكنه فرق كنه مثلا در ال سی دی نوع 16 * 2 به علت این كه تعداد ستون های عمودی ما 2 تا بیشتر نیست برای مقدار دهی به دستور LOCATE ما مجاز نیستیم كه برای ستون عمودی بیشتر از 2 و برای ستون افقی بیشتر از 16 بدهیم . ویا در ال سی دی 16 * 1 فرق میكنه و به علت اینكه ما یك عدد ستون عمودی داریم نمی توانیم برای مقدار دهی به دستور LOCATE برای ستون عمودی بیشتر از 1 بدهیم و برای مقدار دهی برای ستور افقی بیشتر از 16 بدهیم .
1-
خوب حالا فكر كن كه من ازسر كنجكاوی بیشتر از این عدد های مجاز دادم چه اتفاقی میوفته؟
2-
اتفاق خاصی نمیوفته فقط شما چیز روی ال سی دی نمی بینی
مثال :

کد:

CONFIG LCD = 16 * 2
DO
CLS
LOCATE 2 , 1
LCD "AHMAD"
WAITMS 50
CLS
LOCATE 1 , 1
LCD "AHMAD"
WAITMS 50
LOOP
END

برنامه بالا میاد یك بار كلمه ثابت AHMAD رو یك بار در قسمت پایین ال سی دی نمایش می ده و یك بار بالای ال سی دی .
خوب حال تحلیل برنامه :
در خط اول ما اومدیم به میكرو فهموندیم كه اقای میكروكنترلر ال سی دی كه ما داریم استفاده می كنیم از نوع 16 * 2 هستش
در خط دوم ما با دستور DO ابتدای حلقه رو مشخص كردیم
در خط سوم با دستور CLS ال سی دی رو پاك كردیم
در خط چهارم با دستور LOCATE 2 , 1 مكان یا نقطه ای از ال سی دی رو كه می خای چیز رو روش نمایش بدیم رو مشخص كردیم كه با نوشتن عدد 2 این رو به میكرو فهموندیم كه باید در خط دوم عمودی یعنی پایین ال سی دی بنویسی . و با نوشتن عدد 1 بعد از عدد دو این رو به میكرو فهموندیم كه باید در اول ستون افقی ال سی دی چیزی بنویسی.
در خط پنجم با دستور LCD "AHMAD" كلمه AHMAD رو در خط پایین اول ال سی دی نمایش دادیم
در خط ششم با دستور WAITMS 50 یك تاخیر 50 میلی ثانیه ای در اجرای برنامه ایجاد كردیم.
در خط هفتم با دستور CLS دوباره ال سی دی رو پاك كردیم .
در خط هشتم با دستور LOCATE 1 , 1 دوباره یك ادرس مكان برای جایی كه میكرو باید روی ال سی دی نمایش بدهد دادیم كه هردو رو عدد 1 دادیم یعنی اول ال سی دی
در خط بعدی با دستور LCD "AHMAD" دوباره كلمه AHMAD رو روی ال سی دی نمایش دادیم با این تفاوت كه مكانی كه این دفعه ال سی دی كلمه AHMAD رو نمایش میده فرق كرده و اول ال سی دی داره نمایش می ده نه این كه در خط پایین
در خط بعدی با دستور WAITMS 50 یك تاخیر 50 میلی ثانیه ای در اجرای برنامه ایجاد كردیم
در خط بعدی هم با دستور LOOP انتهای حلقه رو مشخص كردیم كه برنامه ما در این حلقه دور می زنه و كارش رو از اول شروع می كنه و به END هیچ وقت نمی رسه و برنامه به پایان نمی رسه.
یك نكته ای رو كه باید بگم و تو هم سوال نكردی این هستش كه همیشه باید دستور LOCATE بین CLS و LCD نوشته بشه مثل زیر

کد:

CLS
LOCATE 2 , 1
LCD "AHMAD"

خوب اینم بقیه دستورات ال سی دی كه تموم شد.
باید دستور حلقه و پرش رو كه قبلا بهت نگفتم بهت بگم كه خیلی راحت هست
1-
اماده ام بگو
2-
اولین دستور GOSUB هستش توسط این دستورشما می تونی بپری توی یك زیر برنامه و دستورات داخل اون زیربرنامه رو انجام بدی دقیقا همان كاری كه دستور GOTO برای ما انجام می داد این دستور GOSUB هم برای ما انجام می ده با یك تفاوت و اون هم اینكه در دستور GOSUB ما با دستور RETURN می توانیم دوباره برگردیم GOSUB رو بخونیم كاری كه با دستور GOTO نمی تونستیم انجام بدیم
1-
یك مثال بزن كه نفهمیدم
2-
باشه اینم مثال :

کد:

CONFIG PINB.0 = INPUT
CONFIG PORTA = OUTPUT
DO
IF PINB.0 = 1 THEN GOSUB BENZ
LOOP
END
BENZ:
TOGGLE PORTA
WAITMS 50
RETURN

توسط برنامه بالا می تونیم با زدن میكرو سوییچ پورت A رو TOGGLE كنیم. یعنی برای بار اول كه میكروسوییچ رو میزنیم پورت A یك می شه برای بار دوم كه میزنی صفر میشه برای بار سوم كه می زنی دوباره یك می شه برای بار چهارم كه میزنی صفر میشه و الی اخر. در خط اول ما پایه B.0 رو به عنوان ورودی پیكره بندی كردیم . در خط دوم پورت A رو برای خروجی پیكره بندی كردیم . در خط سوم ما اول حلقه رو با نوشتن دستور DO عنوان كردیم. در خط چهارم ما نوشتیم
IF PINB.0 = 1 THEN GOSUB BENZ به معنی كه اگر پایه B.0 میكروكنترلر یك شد بپر برو توی
زیربرنامه BENZ . در خط پنجم با دستور LOOP انتهای حلقه رو مشخص كردیم . در خط ششم نوشتیم END كه برنامه ما هیچ وقت به اینجا نمی رسه . در خط بعدی ما یك زیربرنامه به اسم BENZ مشخص كردیم . خط هفتم نوشتیم TOGGLE PORTA یعنی وضعیت پورت A رو هر چی كه هست معكوسش كن یعنی اگه یك هستش بكنش صفر و اگه صفر هستش بكنش یك . در خط هشتم ما یك تاخر 50 میل ثانیه ای گذاشتیم . در خط نهم نوشتیم RETURN كه در ادامه بهت كه توی این برنامه وضیفش چیه.
خوب میكروكنترلر میاد از خط اول برنامه شروع میكنه به خوندن خط اول خط دوم رو می خونه . به خط سوم كه می رسه یعنی DO می فهمه كه یك حلقه سر راهشه و توی این حلقه یكسره دور میزنه و خارج نمی شه تا وقتی كه اون شرطی كه گذاشتیم اجرا بشه یعنی IF PINB.0 = 1 THEN GOSUB BENZ . حالا فرض می كنیم كه ما میكروسوییچ رو فشار دادیم و با این كارمون PINB.0 رو یك كردیم در اینجا میكرو میاد دستور شرط رو یعنی THEN GOSUB BENZ رو اجرا میكنه یعنی میپره می ره توی زیربرنامه BENZ و دستورات داخل این زیر برنامه رو اجرا میكنه. خوب حالا داخل این زیر برنامه ما این دستورات رو نوشتیم TOGGLE PORTA یعنی وضعیت پورت A رو هر چی كه هستش معكوسش كن و در اینجا میكرو میاد پورت A رو یك میكنه و اگه شما به پورت A LED وصل كرده باشی می بینی كه روشن می شه دستور بعدی كه داخل این زیربرنامه هست WAITMS 50 كه میكرو با خوندن این خط به مدت 50 میلی ثانیه در اجرای برنامه تاخیر ایجاد میكنه . دستور بعدی كه ما داخل این زیربرنامه نوشتیم RETURN هستش كه میكرو بعد از گذشت 50 میلی ثانیه كه این دستور رو می خونه برمی گرده توی حلقه . و دوباره توی اون حلقه دور می زنه تا وقتی كه دوباره شرط اجرا بشه و دوباره بپره بره توی زیربرنامه.
برنامه بالا رو اینطوری هم میشه نوشت كه این روش منطقی تره :
3-


کد:

CONFIG PINB.0 = INPUT
CONFIG PORTA = OUTPUT
DO
DEBOUNCE PINB.0 , 1 , BENZ , SUB
LOOP
END
BENZ:
TOGGLE PORTA
RETURN

برنامه بالا رو فقط تاخیر 50 میلی ثانیه ای شو حذف كردم . برنامه بالا رو تنها تغییری كه توش انجام دادم خط چهارمش هستش یعنی DEBOUNCE PINB.0 , 1 , BENZ , SUB كه ما با نوشتن این خط این رو به میكرو فهمونیدم كه اگر یك موقع PINB.0 ما یك شد بپر برو توی زیربرنامه BENZ . اون SUB هم نوشتیم كه به میكرو بفهمونیم كه ما دستور GOSUB می خایم كه این پرش صورت بگیره و اگه ننویسیم میكرو خودش پیش فرض با دستور GOTO میپره توی زیربرنامه . خوب حالا فرض كن كه این شرط یعنی پایه B.0 یك شده در اینجا میكرو میپره میره توی زیربرنامه BENZ و دستورات داخل این زیربرنامه رو اجرا می كنه و وقتی كه به دستور RETURN میرسه مفهمه كه باید بپره بره توی حلقه و خط
DEBOUNCE PINB.0 , 1 , BENZ , SUB
رو دوباره بخونه و داخل این حلقه دوباره گیر میكنه تا وقتی كه پایه B.0 دوباره یك بشه و دوباره بپره بره توی زیربرنامه و روز از نو روزی از نو.

دستور بعدی حلقه FOR –NEXT هستش كه با این دستور می تونی یك حلقه شمارشی ایجاد كنی اگه توجه كنی تا حالا من یك حلقه DO-LOOP بهت گفتم كه یك حلقه نا محدود بود ولی این حلقه FOR-NEXT یك حلقه محدود هستش یعنی میاد توی یك حلقه ایجاد میكنه البته تایك زمان مشخصی این كار رو میكنه كه این زمان دست خودمون هستش كه چقدر باشه به مثال زیر توجه كن :
کد:

DIM A AS BYTE
FOR A = 1 TO 10 STEP 1
CLS
LCD A
WAITMS 30
NEXT A
END

خوب بریم سر تحلیل برنامه . خط اول كه ما یك متغییر به اسم A و از نوع بایت تعریف كردیم . در خط دوم ما نوشتیم كه
FOR A = 1 TO 10 STEP 2 به این معنی كه متغییر A رو افزایش بده از عدد 1 تا عدد 10 . و دستور STEP 1 كه نوشتیم به این معنی هستش كه یكی یكی بشمار یا به عبارتی یك پله یك پله بشمار
1-
ببین نفهمیدم این STEP 1 رو دوباره توضیح بده
2-
یعنی این كه یكی یكی بشمار 1 و 2 و3 و4 و5 و6 تا عدد 10 . اگه ما به جای STEP 1 می دادیم STEP 2 دو تا دوتا میشمرد اینطوری 1 و 3 و5 و7 و9
خوب بریم سر ادامه وقتی كه میكرو خط FOR A = 1 TO 10 STEP 2 رو می خونه شروع می كنه به افزایش متغییر A . بعد میاد خط بعدی كه نوشته CLS رو می خونه و در این جا LCD رو پاك میكنه . بعد میاد خط LCD A رو میخونه و می فهمه كه باید مقداری كه داره افزایش پیدا میكنه رو نشون بده . خط بعدی نوشتیم WAITMS 30 كه یك تاخیر 30 میلی ثانیه ای در اجرای برنامه انجام میده و كارش این هستش كه بیاد مدت زمان افزایش رو تند یا كند كنه یا به عبارتی اهسته یا سریع كنه . خط بعدی نوشتیم NEXT A كه میكرو با خوندن این خط دوباره برمیگرده و خط دوم رو یعنی خط
FOR A = 1 TO 10 STEP 2 رو می خونه . خط بعدی نوشتیم END كه برنامه ما فعلا به این قسمت نمی رسه تا وقتی كه شمارش تموم بشه
1-
من كه چیزی نفهمیدم
2-
بزار تحلیلش كنم می فهمی
خوب حالا تحلیل برنامه : میكرو میاد از خط اول شروع میكنه به خوندن و می فهمه كه ما یك متغییر به اسم a و از نوع بایت تعریف كردیم . در خط دوم كه ما نوشتیم FOR A = 1 TO 10 STEP 1 میكرو میاد شروع میكنه به شمارش یا همون افزایش متغییر یك نكته رو بزار همیجا بگم كه فرقی نداره كه عددها چقدر باشه حتی می تونیم بگیم كه از 10 شروع به شمارش كن تا مثال 110 هیچی محدودیتی وجود نداره البته حداكثر تا 255 میتونی بدی . خوب بری سر دستوری كه نوشتیم . خوب بعد میكرو میاد دفعه اول خود مقدار 1 رو میزاره توی متغییر A بعد میاد با فرمان CLS ال سی دی رو پاك میكنه و با دستور LCD A میاد مقدار متغییر A رو كه الان هست 1 رو روی ال سی دی نمایش می ده بعد بادستور WAITMS 30 میاد یك تاخیر 30 میلی ثانیه ای در اجرای برنامه ایجاد می كنه و در خط بعد تا كه دستور NEXT A رو می خونه برمی گرده توی اون خط FOR A = 1 TO 10 STEP 1 و دوباره كه این دستور رو خوند مقدار متغییر A رو یك واحد بیشتر می كنه یعنی 2 و دوباره با دستور CLS ال سی دی رو پاك می كنه و با دستور LCD A میاد مقدار متغییر A رو كه الان هست 2 رو روی ال سی دی نمایش می ده . این روال همینطور ادامه داره تا این كه مقدار متغییر A بشه 10 یا به عبارتی مساوی بشه با مقداری كه در پایان شمارش بهش دادیم ( كه در اینجا عدد 10 رو دادیم) و وقتی كه این اتفاق افتاد میكرو میاد خط زیری NEXT A رو می خونه كه ما در اینجا دستور END رو گذاشتیم كه برنامه به پایان برسه ولی شما اگه حال كردی كه شمارش دوباره اغاز بشه و دوباره بشماره می تونی قبل از دستور FOR یك زیربرنامه تعریف كنی و در بعد دستور NEXT A هم یك دستور پرش به این زیربرنامه رو بزاری كه هر وقت كه شمارش به پایان رسید میكرو بپره بره توی این زیربرنامه و شمارش رو از دوباره اغاز كنه مثل مثال زیر

کد:

DIM A AS BYTE
MAIN:
FOR A = 1 TO 10 STEP 1
CLS
LCD A
WAITMS 30
NEXT A
GOTO MAIN
END


دستور بعدی WHILE – WEND هستش این دستور همون كاری رو می كنه كه دستور DO – LOOP انجام می داد ولی با یك تفاوت اون هم اینكه برای داخل شدن به این حلقه بی نهایت باید شرط مورد نظری كه جلوی WHILE نوشته میشه اول اجرا بشه تا اجازه داخل شدن به این حلقه داده بشه . یك چیز دیگه هم كه هست اینه كه WHILE ابتدای حلقه هستش مثل همان DO كه ابتدای حلقه بود و WEND هم انتهای حلقه مثل LOOP كه انتهای حلقه بود به مثال زیر توجه كن كه خیلی هم ساده هست.
1-
یك سوال فرق بین دستور WHILE – WEND با دستور DO – LOOP چی هستش
2-
در دستور DO – LOOP شما برای ورود به حلقه نیاز به اجازه نداشتی ولی توی دستور WHILE – WEND نیاز به كسب اجازه داری حالا این اجازه كی صادر میشه زمانی كه شرطی رو كه جلوی WHILE گذاشتیم اجرا بشه . اگه بخای به یك زبون دیگه حالیت كنم باید بگم كه فرق این دوتا دستور مثل ابتدایی و دانشگاه هستش شما توی ابتدایی برای بیرون رفتن از كلاس باید از معلمتون اجازه می گرفتی ولی توی دانشگاه اجازه نمی گیری و سرتو میندازی پایین و می ری بیرون و اگه یك زمانی توی دانشگاه از استاد اجازه بگیری بقیه بهت می خندن توی میكرو هم همینطوره ممكنه كه متغییرا بهت بخندن.
خوب بری یك مثال ساده هم برات بزنیم كه حال كنی :

کد:

DIM K AS BYTE
K = 3
WHILE K = 3
CLS
LCD "OK"
WEND
END

خط اول ما یك متغییر به اسم K و از نوع بایت تعریف كردیم .
خط دوم به متغییر K مقدار دادیم . مقدار 3 دادیم
خط سوم با دستور WHILE ابتدای حلقه رو مشخط كردیم البته برای ورود به حلقه این حلقه یك شرط گذاشتیم كه این شرط هر چیزی میتونه باشه كه این شرط رو ما باید جلوی دستور WHILE با یكم فاصله بنویسیم . شرطی كه نوشتیم K = 3 هستش یعنی اگر كه مقدار K عدد 3 بود اجازه ورود به حلقه داده میشه .
خط چهارم كه داخل حلقه قرار داره CLS هستش كه می دونی چی كار می كنه
خط پنجم هم LCD "OK" هستش كه این دستور هم داخل حلقه قرار داره
خط ششم WEND هسش یعنی پایان حلقه
خط هفتم هم END هستش كه تا زمانی كه شرط بر قرار باشه برنامه به این دستور نمی رسه
تحلیل این برنامه هم خیل ساده هسش میكرو میاد از خط اول شروع می كنه به خوندن خط اول خط دوم رو می خونه می رسه به خط سوم این جا رو گوش كن كه خیلی مهمه اگه شرط برقرار بود یعنی مقدار K = 3 بود كه الان هست اجازه ورود به این حلقه داده می شه ولی اگه شرط برقرار نبود میكرو میره و خط بعدی WEND رو می خونه كه ما اینجا حال كردیم كه اگه شرط برقرار نبود برنامه به END برسه وتموم بشه .

دستور بعدی DELAY هستش كه این دستور یك دستور تاخیر در اجرای برنامه هستش همانند دستور های WAITMS – WAIT –WAITUS كه دستور DELAY به مدت 1000 میكروثانیه در اجرای برنامه تاخیر ایجاد میكنه كه نیاز هم به مثال نیست.

http://www.panatel.org/showthread.php?p=101209

صفحات جانبی

نظرسنجی

    لطفاً نظرات خود را درمورد وبلاگ با اینجانب در میان بگذارید.(iman.sariri@yahoo.com)نتایج تاکنون15000مفید و 125غیرمفید. با سپاس


  • آخرین پستها

آمار وبلاگ

  • کل بازدید :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :