قسمت چهارم :
1- سلام خوبي
2- سلام قربانت تو چطوري چكار مي كني با اين ميكروكنترلر
1- منم خوبم . با اين ميكروكنترلر داريم حال مي كنيم والا قبلا براي طراحي يك مدار ساده ديجيتال مجبور بودم چند روز روش كار كنم ولي حالا ديگه نه . بعدشم يك چيزو يادت رفته بود بگي
2- چي؟؟
1- از TOGGLE مثال نزدي
2- باشه توي اين درسي رو كه امروز بهت ميدم از اين دستور هم استفاده مي كنم كه ياد بگيري . خوب شروع كنيم
1- اره
2- خوب قرار بود از كجا شروع كنيم
1- قرار بود ورودي رو بهم بگي . گفته بود قبل از اينكه ورودي رو درس بدي بايد چند تا دستور شرط و ... رو برام بگي
2- اره اين جلسه قبل از اينكه ورودي يا همون PIN رو بهت بگم بايد . دستور حلقه – دستور پرش رو اول بگم بعد بريم سر ورودي . چون كه اين طوري بهتره
1- حرفي نيست بريم
2- خوب اول بريم سراغ حلقه . ببين به يك چيز توي برنامه هاي قبلي توجه كرده بودي
1- نه چي ؟؟
2- ما ميومديم يك برنامه رو مي نوشتيم اين برنامه هم يك كاري رو برامون انجام ميداد و در نهايت برناه به END مي رسيد و برنامه كلا تمام مي شد . و براي شروع مجدد مجبور بوديم برنامه رو دوباره اجرا كنيم . خوب حالا فرض كن ما يك برنامه اي رو ميخايم كه مثلا PORTB.0 رو هر 40 ميلي ثانيه يك بار روشن و خاموش كنه و اين كار ادامه داشته باشه يعني اينكه 40 ميلي ثانيه روشن باشه و 40 ميلي ثانيه خاموش باشه . براي اين كار بايد از دستور استفاده كنيم كه برنامه هيچ وقت به پايان نرسه كه اين دستور اسمش هست حلقه
1- خوب حالا اين حلقه چكار ميكنه
2- اين حلقه باعث ميشه برنامه توي اين قسمت دور بزنه و هيچ وقت به END نرسه يعني برنامه تمام نشه مگر اينكه ما يك شرط بزاريم كه از حلقه بيرون بزاريم
1- چه شرطي
2- اونو تو قسمت دستور شرط برات مي گم
2- حلقله DO –LOOP
براي گذاشتن حلقه DO رو اول مي نويسيم و در خط هاي بعدي برنامه اي كه بايد در حلقه باشد رو مي نويسيم و در نهايت LOOP رو مي نويسيم
1- من كه چيزي نفهميدم . يك مثال بزن
همون مثالي رو كه PORTB.0 بايد SET و RESET بشه رو برات مي نويسم . از اين به بعد هم ديگه $REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000 رو نمي نويسم خودت اونا رو نوشته فرض كن
خوب حالا برنامه اي كه گفتم:
CONFIG PORTA = OUTPUT
DO
TOGGLE PORTA.0
WAITMS 40
LOOP
END
خوب حالا تحليل برنامه :
اين برنامه هيچ گاه به END نمي رسد تا برنامه تمام شود
خط اول رو كه PORTA رو به عنوان خروجي پيكره بندي كرديم
خط دوم DO را گذاشتيم
خط سوم با نوشتن TOGGLE PORTA.0 اين را رسانديم كه PORTA.0 در هر حالتي از حالت ها صفر يا يك كه بوده بايد وضعيتش معكوس شود يعني اگه صفر بوده حالا بايد يك شود . اگر يك بوده حالا بايد صفر شود
خط چهارم هم اخر حلقه را گذاشتيم
خط پنجم هم نوشتيم END البته برنامه هيچ گاه به خاطر اين كه ما يك حلقه گذاشتيم به END نمي رسد
توجه كن كه ما برنامه اي رو كه مي خاستيم رو داخل اين حلقه گذاشتيم و برنامه داخل اين حلقه دور ميزند . بار اول برنامه TOGGLE PORTA.0 رو مي خونه و پايه A.0 رو SET يا همون يك مي كنه بعد 40 ميلي ثانيه صبر مي كنه و برنامه از خط بعد شروع مي شه خط بعد LOOP هستش كه ميكرو با خوندن LOOP دوباره بر ميگرده برنامه رو از خط پاييني DO شروع به خوندن مي كنه يعني دوباره همون TOGGLE PORTA.0 رو مي خونه اين بار چون پايه A.0 در حالت SET يا همون يك بوده اين بار ياد بشه عكس همين حالت بشه يعني RESET يا صفر ميشه بعد 40 ميلي ثانيه صبر ميكنه و ميكرو برنامه رو از خط بعدي ميخونه بعني دستور LOOP رو مي خونه . با خوانده شدن دستور LOOP ميكرو برنامه رو از خط زيري DO شروع به خوندن مي كنه يعني دوباره TOGGLE PORTA.0 رو مي خونه اين بار چون در حالت قبلي پايه A.0 در حالت صفر بوده اين بار يك مي شه برنامه به همين منوال ادامه داره و ادامه پيدا مي كنه و هيچ وقت به پايان نمي رسه
1- گرفتم چي مي گي ولي اگه ممكنه يك مثال ديگه هم بزن
2- باشه
مثال دوم:
CONFIG PORTB = OUTPUT
DO
SET PORTB.5
WAITMS 60
RESET PORTB.5
WAITMS 60
LOOP
END
خوب حالا بريم سر تحليل برنامه:
برنامه از خط اول شروع ميشه و ميكرو خط اول رو مي خونه
خط دوم كه DO هستش كه ابتداي حلقه ما هستش
خط سوم SET PORTB.5 يعني پايه B.5 يك بشه
خط چهارم يك تاخير در برنامه با مدت زمان 60 ميلي ثانيه گذاشتم
خط پنجم RESET PORTB.5 يعني پايه B.5 صفر بشه
خط ششم با گذاشتن دستور LOOP انتهاي حلقه رو مشخص كرديم
خط هفتم هم نوشتيم END كه برنامه به خاط داشتن حلقه هيچ گاه به END نمي رسد
برنامه به اين صورت است كه از خط اول شروع به خونده شدن توسط ميكرو ميشه و پيكره بندي رو مي خونه . بعد ميوفته توي حلقه و اولين عبارتي رو كه مي خونه SET PORTB.5 هستش كه در اين زمان ميكرو پايه B.5 رو يك مي كنه بعد توسط دستور WAITMS 60 حدود 60 ميلي ثانيه تاخير ايچاد مي كنه بعد از سپري شدن اين مدت زمان ميكرو برنامه رو از خط بعدي شروع به خوندن مي كنه يعني RESET PORTB.5 كه ميكرو توسط اين دستور پايه B.5 رو صفر مي كنه بعد توسط دستور WAITMS 60 ميكرو 60 ميلي ثانيه در اجراي برنامه دوباره تاخير ايجاد مي كنه بعد از سپري شدن اين مدت زمان ميكرو برنامه رو از خط بعدي يعني LOOP شروع به خوندن مي كنه كه با خوانده شدن LOOP برنامه مي پره از خط بعدي DO يعني SET PORTA.0 شروع ميشه و دوباره پايه B.5 يك ميشه و دوباره 60 ميلي ثانيه تاخير ايجاد ميشه دو باره پايه B.5 صفر ميشه و 60 ميلي ثانيه تاخير ايجاد ميشه بعد دوباره به LOOP مي رسه و دوباره ميكرو ميپره و برنامه رو از خط بعدي DO شروع به خوندن ميكنه و الي بي نهايت اين برنامه تكرار مي شه
1- عالي بود كامل گرفتم
2- خدارو شكر. جهنم ضرر يك مثال ديگه هم ميزنم كه LCD هم توش باشه
DO
CLS
LCD "AHMAD"
WAITMS 50
CLS
LCD "MICRO"
WAITMS 60
LOOP
END
خوب حالا نوبت مي رسه به تحليل برنامه :
برنامه از DO شروع ميشه DO يعني ابتداي حلقه . در خط بعد با دستور CLS ال سي دي پاك مي شه و اماده نوشتن . در خط بعدي به ميكرو دستور مي ديم كه عبارت AHMAD رو روي LCD نمايش بده . در خط بعد فرمان ايجاد تاخير به مدت زمان 50 ميلي ثانيه را مي دهيم پس از سپري شدن اين مدت زمان ميكرو برنامه را از خط بعد مي خواند . خط بعدي با دستور CLS صفحه LCD را پاك كرديم تا براي نوشتن دوباره اماده شود. در خط بعد فرمان داديم كه عبارت MICRO روي صفحه LCD نمايش داده شود. در خط بعد دستور داديم كه 60 ميلي ثانيه تاخير ايجاد شود كه پس از سپري شدن اين تاخير برنامه از خط بعد اجرا مي شود. به خط بعدي يعني LOOP كه مي رسيم ميكرو تا اينكه اين دستور LOOP رو مي بينه بي درنگ مي پره ميره برنامه رو از خط بعدي DO شروع مي كنه به اجرا كردن . بعني از خط CLS و همينطور ادامه مي ده
3- رو حساب رفاقت مي خام يك مثال ديگه هم بزنم كه حالشو ببري
DIM G AS BYTE
G = 0
DO
INCR G
CLS
LCD G
WAITMS 50
LOOP
END
خط اول رو كه خودت مي دوني يعني اينكه ما يك متغيير داريم كه اسمش هست G و از نوع بايت
خط دوم به متغيير G مقدار داديم
خط سوم ابتداي حلقه را مشخص كرديم
خط چهارم يك واحد به متغيير G اضافه كرديم
خط پنجم با دستور CLS ال سي دي را براي نوشتن پاك كرديم
خط ششم دستور داديم كه مقدار متغيير G روي LCD نمايش داده شود
خط هفتم يك تاخير 50 ميلي ثانيه اي در برنامه ايجاد كرديم
خط هشتم با دستور LOOP انتهاي حلقه را مشخص كرديم
خوب حالا تحليل اصلي رو گوش كن :
ميكرو مياد برنامه رو از خط اول شروع مي كنه به خوندن و مي فهممه كه يك متغيير از نوع بايت ايجاد شده . بعد خط دوم رو مي خونه كه نوشته مقدار اين متغيير هست صفر . خط سوم ابتداي حلقه مشخص شده است . خط چهارم با دستور INCR G يك واحد به متغيير G اضافه كرديم يعني اگه بوده صفر حالا كه يك واحد بهش اضاف شده ميشه 1 . خط بعدي با دستور CLS ال سي دي را پاك كرديم تا براي نوشتن حاضر شود . خط بعدي دستور داديم كه مقدار متغيير G كه الان هست 1 روي LCD نمايش داده شود . خط بعدي با دستور WAITMS 50 دستور تاخير به مدت 50 ميلي ثانيه را صادر كرديم . خط بعدي هست LOOP كه ميكرو وقتي كه به اين دستور مي رسه مي پره ميره و برنامه رو از خط زيري DO شروع مي كنه به خوندن توجه كن كه از خط بعدي DO شروع مي كنه به خوندن نه اينكه از بالا . داريم به جاي جالبش مي رسيم . خوب حالا بايد برنامه از خط بعدي DO خونده بشه خط بعد از DO نوشته چي نوشته INCR G خوب يعني اينكه يك واحد به متغيير G اضافه بشه خوب حالا اخرين مقدار متغيير G بوده 1 ( به دليل اينكه دفعه قبل با دستور INCR G يك واحد به ان اضاف كرده بوديم ) و حالا كه دوباره دستور داديم كه يك واحد ديگر به متغيير G اضافه بشه اينبار ميشه 2 . خط بعدي با دستور CLS ال سي دي را براي نوشتم دوباره پاك مي كنيم . در خط بعدي با دستور LCD G مقدار متغيير G را روي ال سي دي نمايش مي دهيم يعني مقدار جديد كه همان 2 است. خط بعدي دوباره يك تاخير ايجاد مي شود و پس از سپري شدن اين مدت زمان برنامه از خط بعدي اجرا مي شود . خط بعدي هست LOOP باز هم مثل دفعه قبل برنامه از خط زيري DO شروع مي شه وروز از نو روزي از نوع همينطور به متغيير G يكسره اضافه مي شه تا جايي كه متغيير G برسه به 255 وقتي كه به اين مقدار رسيد متغيير G پر مي شود ( چون از نوع بايت است و با 255 پر مي شود و با 256 سرريز مي شود) . وقتي كه اين 255 برسه به 256 متغيير سر ريز ميشه و دوباره از صفر شروع به شمردن مي كنه . ديگه از اين ساده تر نمي شد توضيح داد.
1- اقا يك سوال
2- بپرس
1- توي مثالات به يك نكته توجه كردي
2- نه چي
1- مثال توي قسمتي كه مي خاستي توي يك حلقه مثال LCD رو بزني نوشتي LCD "ALI" ولي وقتي كه خاستي مقدار يك متغيير رو نشون بدي اين نوشتي LCD G كه مقدار متغيير G رو نشون بده حالا سوال اينجاست چرا ALI رو داخل " " گذاشتي ولي متغيير G رو داخل " " نزاشتي
2- سوال خوبي بود . ببين هر وقت كه خاستي يك متغيير رو نشون بدي لازم نيست كه اونو داخل " " قرار بدي يعني نبايد داخل " " قرار بدي ولي هر وقت كه خاستي يك عبارت رو روي ال سي دي نمايش بدي بايد اونو داخل " " قرار بدي
1- فهميدم . اين حلقه تموم شد
2- اره
1- پس اگه خاستيم از داخل اين حلقه بيرون بيايم بايد چكار كنيم
2- اينو برات مي گم وقتي كه دستورات شرط رو گفتم
خوب حالا رسيديم به دستورات شرط
1- چي هست اين دستور شرط
2- گاهي لازم است كه اگر يك حالتي كه براي ما مد نظر است اتفاق بيفته دستور شرط يك كاري رو مثلا يك پايه رو برامون يك مي كنه
1- ببين نفهميدم دوباره بگو
2- باشه برميگرديم سر دو تامثال قبل كه يك متغيير داخل يك حلقه بود و هر دفعه كه دو ر مي زد يك واحد به متغيير اضافه مي شد . خوب اگه اين كار ادامه پيدا كنه اين متغيير هي پرو ميشه با 255 و دوباره از صفر شروع مي كنه دوباره پر مي شه با 255 و دوباره از صفر شروع مي كنه به اضافه شدن حالا ما حال كرديم كه اگر اين متغيير G به مثلا 22 رسيد يك كاري رو برامون انجام بده حالا هر كاري رو كه حال كرديم رو بره برامون انجام بده مثلا يك پورت رو بياد برامونSET كنه يا اينكه بره رويه LCD يك چيزي بنويسه . كه ما بايد از دستور شرط استفاده كنيم . يك مثال ساده ديگه كه مي تونم برات بزنم اينه كه مثلا باباي تو بهت مي گه كه اگر اخر سال معدل تو 20 شد برات دوچرخه مي خرم . خوب بابات براي تو يك شرط گذاشته كه اگر اين شرط كه 20 شدن معدل تو است اجرا بشه . دستور شرط كه خريدن دوچرخه توسط بابات هست اجرا ميشه . حالا فهميدي
1- بابا ما از كوچيكي داريم 20 مي گيرم بابامون برامون هيچي نگرفته . ولي مطلبو خوب گرفتم
2- عاليه. خوب بريم سر دستور شرط
IF همان دستور شرط است
THEN يعني اگر شرط اجرا شود اين THEN مياد براي ما يك كاري رو انجام مي ده
1- مثال برن
2- همون مثال دوچرخه رو مي زنم . خوب باباي فلاني بهش گفته كه اگر معدلش 20 بشه يعني شرط IF . .. براش يك دچرخه مي خره يعني يك كاري رو در قبال شرطي رو كه گذاشته براي پسرش انجام مي ده يعني THEN
1- اها گرفتم. از مثال هاي برنامه هم برام بگو
2- باشه . بريم سر اون مثالي كه متغيير G رو توي يك حلقه قرار داده بوديم حالا ما مي خايم كه اگر اين متغيير G به 6 برسه بره و PORTA.0 رو SET كنه :
CONFIG PORTA = OUTPUT
DIM G AS BYTE
G = 0
DO
INCR G
CLS
LCD G
IF G = 6 THEN SET PORTA.0
WAITMS 50
LOOP
END
برنامه بالا رو كه تا حدودي مي دوني چيه چون قبلا توضيحشو دادم فقط مي مونه خط هفتم كه نوشته IF G = 6 THEN SET PORTA.0 ما در اينجا با گذاشتن شرط يعني IF G = 6 شرط گذاشتيم كه اگر متغيير G به عدد 6 رسيد . ادامه نوشتيم THEN SET PORTA.0 بروي SET كن PORTA.0 . فهميدي
1- اره ولي مگه شرط بندي حروم نيست
2- چرا حرومه . ولي بايد مواظب باشي كه شرط رو نبازي
خوب رسيديم به دستورات زير برنامه ( GOTO - GOSUB )
1- چي هستن اين زير برنامه ها
2- با يك مثال برات توضيح مي دم توي مثال قبل اگر دقت كرده باشي متغيير G وقتي كه به عدد 6 مي رسيد مي رفت و PORTA.0 رو SET مي كرد و همينطوري به متغيير G اضافه مي شد . حالا اگر كه ما حال كرديم بعد از اين كه متغيير G به عدد 6 رسيد بره همون كاره خودشو يعني SET كردن PORTA.0 رو انجام بده ولي برنامه ديگه تموم بشه و ديگه شمارش نكنه يا به عبارتي به END برسه . خوب براي اين كار بايد از زير برنامه استفاده كنيم به مثال زير توجه كن :
CONFIG PORTA = OUTPUT
DIM G AS BYTE
G = 0
DO
INCR G
CLS
LCD G
IF G = 6 THEN GOTO AHMAD
WAITMS 50
LOOP
AHMAD :
SET PORTA.0
END
خوب حالا بريم تحليل برنامه . برنامه رو كه مي دوني چجوريه منظورم معني خط ها هستش البته به غير از خط هشتم كه نوشته
IF G = 6 THEN GOTO AHMAD
خوب اين خط يعني اينكه اگر متغيير G رسيد به عدد 6 دستور شرط را اجرا كن كه دستور شرط اين است GOTO AHAD يعني بپر برو به زيربرنامه اي كه استش هست احمد . توجه كن كه به جاي اسم AHMAD هر اسم ديگه اي مي توني بزاري هر اسمي كه حال كردي . بعد از اينكه متغيير G بع عدد 6 رسيد دستور شرط اجرا مي شود و ميكروكنترلر برنامه را از خط بعدي زيربرنامه AHNAD مي خواند يعني خط SET PORTA.0 را مي خونه و پورت A.0 رو ست مي كنه بعد از اين كه ست كرد خط بعدي رو مي خونه كه نوشته END به محض اينكه اين دستور END رو خوند برنامه متوقف مي شه و به پايان مي رسه .
پس فهميدي كه زير برنامه براي وقتي هستش كه ما مي خوايم يك دستور شرط رو اجرا كنيم
به يك مثال ديگه توجه كن :
CONFIG PORTA = OUTPUT
DIM G AS BYTE
METAL:
G = 0
RESET PORTA.0
DO
INCR G
CLS
LCD G
IF G = 6 THEN GOTO AHMAD
WAITMS 50
LOOP
AHMAD:
SET PORTA.0
WAITMS 50
GOTO METAL
END
1- سلام خوبي
2- سلام قربانت تو چطوري چكار مي كني با اين ميكروكنترلر
1- منم خوبم . با اين ميكروكنترلر داريم حال مي كنيم والا قبلا براي طراحي يك مدار ساده ديجيتال مجبور بودم چند روز روش كار كنم ولي حالا ديگه نه . بعدشم يك چيزو يادت رفته بود بگي
2- چي؟؟
1- از TOGGLE مثال نزدي
2- باشه توي اين درسي رو كه امروز بهت ميدم از اين دستور هم استفاده مي كنم كه ياد بگيري . خوب شروع كنيم
1- اره
2- خوب قرار بود از كجا شروع كنيم
1- قرار بود ورودي رو بهم بگي . گفته بود قبل از اينكه ورودي رو درس بدي بايد چند تا دستور شرط و ... رو برام بگي
2- اره اين جلسه قبل از اينكه ورودي يا همون PIN رو بهت بگم بايد . دستور حلقه – دستور پرش رو اول بگم بعد بريم سر ورودي . چون كه اين طوري بهتره
1- حرفي نيست بريم
2- خوب اول بريم سراغ حلقه . ببين به يك چيز توي برنامه هاي قبلي توجه كرده بودي
1- نه چي ؟؟
2- ما ميومديم يك برنامه رو مي نوشتيم اين برنامه هم يك كاري رو برامون انجام ميداد و در نهايت برناه به END مي رسيد و برنامه كلا تمام مي شد . و براي شروع مجدد مجبور بوديم برنامه رو دوباره اجرا كنيم . خوب حالا فرض كن ما يك برنامه اي رو ميخايم كه مثلا PORTB.0 رو هر 40 ميلي ثانيه يك بار روشن و خاموش كنه و اين كار ادامه داشته باشه يعني اينكه 40 ميلي ثانيه روشن باشه و 40 ميلي ثانيه خاموش باشه . براي اين كار بايد از دستور استفاده كنيم كه برنامه هيچ وقت به پايان نرسه كه اين دستور اسمش هست حلقه
1- خوب حالا اين حلقه چكار ميكنه
2- اين حلقه باعث ميشه برنامه توي اين قسمت دور بزنه و هيچ وقت به END نرسه يعني برنامه تمام نشه مگر اينكه ما يك شرط بزاريم كه از حلقه بيرون بزاريم
1- چه شرطي
2- اونو تو قسمت دستور شرط برات مي گم
2- حلقله DO –LOOP
براي گذاشتن حلقه DO رو اول مي نويسيم و در خط هاي بعدي برنامه اي كه بايد در حلقه باشد رو مي نويسيم و در نهايت LOOP رو مي نويسيم
1- من كه چيزي نفهميدم . يك مثال بزن
همون مثالي رو كه PORTB.0 بايد SET و RESET بشه رو برات مي نويسم . از اين به بعد هم ديگه $REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000 رو نمي نويسم خودت اونا رو نوشته فرض كن
خوب حالا برنامه اي كه گفتم:
CONFIG PORTA = OUTPUT
DO
TOGGLE PORTA.0
WAITMS 40
LOOP
END
خوب حالا تحليل برنامه :
اين برنامه هيچ گاه به END نمي رسد تا برنامه تمام شود
خط اول رو كه PORTA رو به عنوان خروجي پيكره بندي كرديم
خط دوم DO را گذاشتيم
خط سوم با نوشتن TOGGLE PORTA.0 اين را رسانديم كه PORTA.0 در هر حالتي از حالت ها صفر يا يك كه بوده بايد وضعيتش معكوس شود يعني اگه صفر بوده حالا بايد يك شود . اگر يك بوده حالا بايد صفر شود
خط چهارم هم اخر حلقه را گذاشتيم
خط پنجم هم نوشتيم END البته برنامه هيچ گاه به خاطر اين كه ما يك حلقه گذاشتيم به END نمي رسد
توجه كن كه ما برنامه اي رو كه مي خاستيم رو داخل اين حلقه گذاشتيم و برنامه داخل اين حلقه دور ميزند . بار اول برنامه TOGGLE PORTA.0 رو مي خونه و پايه A.0 رو SET يا همون يك مي كنه بعد 40 ميلي ثانيه صبر مي كنه و برنامه از خط بعد شروع مي شه خط بعد LOOP هستش كه ميكرو با خوندن LOOP دوباره بر ميگرده برنامه رو از خط پاييني DO شروع به خوندن مي كنه يعني دوباره همون TOGGLE PORTA.0 رو مي خونه اين بار چون پايه A.0 در حالت SET يا همون يك بوده اين بار ياد بشه عكس همين حالت بشه يعني RESET يا صفر ميشه بعد 40 ميلي ثانيه صبر ميكنه و ميكرو برنامه رو از خط بعدي ميخونه بعني دستور LOOP رو مي خونه . با خوانده شدن دستور LOOP ميكرو برنامه رو از خط زيري DO شروع به خوندن مي كنه يعني دوباره TOGGLE PORTA.0 رو مي خونه اين بار چون در حالت قبلي پايه A.0 در حالت صفر بوده اين بار يك مي شه برنامه به همين منوال ادامه داره و ادامه پيدا مي كنه و هيچ وقت به پايان نمي رسه
1- گرفتم چي مي گي ولي اگه ممكنه يك مثال ديگه هم بزن
2- باشه
مثال دوم:
CONFIG PORTB = OUTPUT
DO
SET PORTB.5
WAITMS 60
RESET PORTB.5
WAITMS 60
LOOP
END
خوب حالا بريم سر تحليل برنامه:
برنامه از خط اول شروع ميشه و ميكرو خط اول رو مي خونه
خط دوم كه DO هستش كه ابتداي حلقه ما هستش
خط سوم SET PORTB.5 يعني پايه B.5 يك بشه
خط چهارم يك تاخير در برنامه با مدت زمان 60 ميلي ثانيه گذاشتم
خط پنجم RESET PORTB.5 يعني پايه B.5 صفر بشه
خط ششم با گذاشتن دستور LOOP انتهاي حلقه رو مشخص كرديم
خط هفتم هم نوشتيم END كه برنامه به خاط داشتن حلقه هيچ گاه به END نمي رسد
برنامه به اين صورت است كه از خط اول شروع به خونده شدن توسط ميكرو ميشه و پيكره بندي رو مي خونه . بعد ميوفته توي حلقه و اولين عبارتي رو كه مي خونه SET PORTB.5 هستش كه در اين زمان ميكرو پايه B.5 رو يك مي كنه بعد توسط دستور WAITMS 60 حدود 60 ميلي ثانيه تاخير ايچاد مي كنه بعد از سپري شدن اين مدت زمان ميكرو برنامه رو از خط بعدي شروع به خوندن مي كنه يعني RESET PORTB.5 كه ميكرو توسط اين دستور پايه B.5 رو صفر مي كنه بعد توسط دستور WAITMS 60 ميكرو 60 ميلي ثانيه در اجراي برنامه دوباره تاخير ايجاد مي كنه بعد از سپري شدن اين مدت زمان ميكرو برنامه رو از خط بعدي يعني LOOP شروع به خوندن مي كنه كه با خوانده شدن LOOP برنامه مي پره از خط بعدي DO يعني SET PORTA.0 شروع ميشه و دوباره پايه B.5 يك ميشه و دوباره 60 ميلي ثانيه تاخير ايجاد ميشه دو باره پايه B.5 صفر ميشه و 60 ميلي ثانيه تاخير ايجاد ميشه بعد دوباره به LOOP مي رسه و دوباره ميكرو ميپره و برنامه رو از خط بعدي DO شروع به خوندن ميكنه و الي بي نهايت اين برنامه تكرار مي شه
1- عالي بود كامل گرفتم
2- خدارو شكر. جهنم ضرر يك مثال ديگه هم ميزنم كه LCD هم توش باشه
DO
CLS
LCD "AHMAD"
WAITMS 50
CLS
LCD "MICRO"
WAITMS 60
LOOP
END
خوب حالا نوبت مي رسه به تحليل برنامه :
برنامه از DO شروع ميشه DO يعني ابتداي حلقه . در خط بعد با دستور CLS ال سي دي پاك مي شه و اماده نوشتن . در خط بعدي به ميكرو دستور مي ديم كه عبارت AHMAD رو روي LCD نمايش بده . در خط بعد فرمان ايجاد تاخير به مدت زمان 50 ميلي ثانيه را مي دهيم پس از سپري شدن اين مدت زمان ميكرو برنامه را از خط بعد مي خواند . خط بعدي با دستور CLS صفحه LCD را پاك كرديم تا براي نوشتن دوباره اماده شود. در خط بعد فرمان داديم كه عبارت MICRO روي صفحه LCD نمايش داده شود. در خط بعد دستور داديم كه 60 ميلي ثانيه تاخير ايجاد شود كه پس از سپري شدن اين تاخير برنامه از خط بعد اجرا مي شود. به خط بعدي يعني LOOP كه مي رسيم ميكرو تا اينكه اين دستور LOOP رو مي بينه بي درنگ مي پره ميره برنامه رو از خط بعدي DO شروع مي كنه به اجرا كردن . بعني از خط CLS و همينطور ادامه مي ده
3- رو حساب رفاقت مي خام يك مثال ديگه هم بزنم كه حالشو ببري
DIM G AS BYTE
G = 0
DO
INCR G
CLS
LCD G
WAITMS 50
LOOP
END
خط اول رو كه خودت مي دوني يعني اينكه ما يك متغيير داريم كه اسمش هست G و از نوع بايت
خط دوم به متغيير G مقدار داديم
خط سوم ابتداي حلقه را مشخص كرديم
خط چهارم يك واحد به متغيير G اضافه كرديم
خط پنجم با دستور CLS ال سي دي را براي نوشتن پاك كرديم
خط ششم دستور داديم كه مقدار متغيير G روي LCD نمايش داده شود
خط هفتم يك تاخير 50 ميلي ثانيه اي در برنامه ايجاد كرديم
خط هشتم با دستور LOOP انتهاي حلقه را مشخص كرديم
خوب حالا تحليل اصلي رو گوش كن :
ميكرو مياد برنامه رو از خط اول شروع مي كنه به خوندن و مي فهممه كه يك متغيير از نوع بايت ايجاد شده . بعد خط دوم رو مي خونه كه نوشته مقدار اين متغيير هست صفر . خط سوم ابتداي حلقه مشخص شده است . خط چهارم با دستور INCR G يك واحد به متغيير G اضافه كرديم يعني اگه بوده صفر حالا كه يك واحد بهش اضاف شده ميشه 1 . خط بعدي با دستور CLS ال سي دي را پاك كرديم تا براي نوشتن حاضر شود . خط بعدي دستور داديم كه مقدار متغيير G كه الان هست 1 روي LCD نمايش داده شود . خط بعدي با دستور WAITMS 50 دستور تاخير به مدت 50 ميلي ثانيه را صادر كرديم . خط بعدي هست LOOP كه ميكرو وقتي كه به اين دستور مي رسه مي پره ميره و برنامه رو از خط زيري DO شروع مي كنه به خوندن توجه كن كه از خط بعدي DO شروع مي كنه به خوندن نه اينكه از بالا . داريم به جاي جالبش مي رسيم . خوب حالا بايد برنامه از خط بعدي DO خونده بشه خط بعد از DO نوشته چي نوشته INCR G خوب يعني اينكه يك واحد به متغيير G اضافه بشه خوب حالا اخرين مقدار متغيير G بوده 1 ( به دليل اينكه دفعه قبل با دستور INCR G يك واحد به ان اضاف كرده بوديم ) و حالا كه دوباره دستور داديم كه يك واحد ديگر به متغيير G اضافه بشه اينبار ميشه 2 . خط بعدي با دستور CLS ال سي دي را براي نوشتم دوباره پاك مي كنيم . در خط بعدي با دستور LCD G مقدار متغيير G را روي ال سي دي نمايش مي دهيم يعني مقدار جديد كه همان 2 است. خط بعدي دوباره يك تاخير ايجاد مي شود و پس از سپري شدن اين مدت زمان برنامه از خط بعدي اجرا مي شود . خط بعدي هست LOOP باز هم مثل دفعه قبل برنامه از خط زيري DO شروع مي شه وروز از نو روزي از نوع همينطور به متغيير G يكسره اضافه مي شه تا جايي كه متغيير G برسه به 255 وقتي كه به اين مقدار رسيد متغيير G پر مي شود ( چون از نوع بايت است و با 255 پر مي شود و با 256 سرريز مي شود) . وقتي كه اين 255 برسه به 256 متغيير سر ريز ميشه و دوباره از صفر شروع به شمردن مي كنه . ديگه از اين ساده تر نمي شد توضيح داد.
1- اقا يك سوال
2- بپرس
1- توي مثالات به يك نكته توجه كردي
2- نه چي
1- مثال توي قسمتي كه مي خاستي توي يك حلقه مثال LCD رو بزني نوشتي LCD "ALI" ولي وقتي كه خاستي مقدار يك متغيير رو نشون بدي اين نوشتي LCD G كه مقدار متغيير G رو نشون بده حالا سوال اينجاست چرا ALI رو داخل " " گذاشتي ولي متغيير G رو داخل " " نزاشتي
2- سوال خوبي بود . ببين هر وقت كه خاستي يك متغيير رو نشون بدي لازم نيست كه اونو داخل " " قرار بدي يعني نبايد داخل " " قرار بدي ولي هر وقت كه خاستي يك عبارت رو روي ال سي دي نمايش بدي بايد اونو داخل " " قرار بدي
1- فهميدم . اين حلقه تموم شد
2- اره
1- پس اگه خاستيم از داخل اين حلقه بيرون بيايم بايد چكار كنيم
2- اينو برات مي گم وقتي كه دستورات شرط رو گفتم
خوب حالا رسيديم به دستورات شرط
1- چي هست اين دستور شرط
2- گاهي لازم است كه اگر يك حالتي كه براي ما مد نظر است اتفاق بيفته دستور شرط يك كاري رو مثلا يك پايه رو برامون يك مي كنه
1- ببين نفهميدم دوباره بگو
2- باشه برميگرديم سر دو تامثال قبل كه يك متغيير داخل يك حلقه بود و هر دفعه كه دو ر مي زد يك واحد به متغيير اضافه مي شد . خوب اگه اين كار ادامه پيدا كنه اين متغيير هي پرو ميشه با 255 و دوباره از صفر شروع مي كنه دوباره پر مي شه با 255 و دوباره از صفر شروع مي كنه به اضافه شدن حالا ما حال كرديم كه اگر اين متغيير G به مثلا 22 رسيد يك كاري رو برامون انجام بده حالا هر كاري رو كه حال كرديم رو بره برامون انجام بده مثلا يك پورت رو بياد برامونSET كنه يا اينكه بره رويه LCD يك چيزي بنويسه . كه ما بايد از دستور شرط استفاده كنيم . يك مثال ساده ديگه كه مي تونم برات بزنم اينه كه مثلا باباي تو بهت مي گه كه اگر اخر سال معدل تو 20 شد برات دوچرخه مي خرم . خوب بابات براي تو يك شرط گذاشته كه اگر اين شرط كه 20 شدن معدل تو است اجرا بشه . دستور شرط كه خريدن دوچرخه توسط بابات هست اجرا ميشه . حالا فهميدي
1- بابا ما از كوچيكي داريم 20 مي گيرم بابامون برامون هيچي نگرفته . ولي مطلبو خوب گرفتم
2- عاليه. خوب بريم سر دستور شرط
IF همان دستور شرط است
THEN يعني اگر شرط اجرا شود اين THEN مياد براي ما يك كاري رو انجام مي ده
1- مثال برن
2- همون مثال دوچرخه رو مي زنم . خوب باباي فلاني بهش گفته كه اگر معدلش 20 بشه يعني شرط IF . .. براش يك دچرخه مي خره يعني يك كاري رو در قبال شرطي رو كه گذاشته براي پسرش انجام مي ده يعني THEN
1- اها گرفتم. از مثال هاي برنامه هم برام بگو
2- باشه . بريم سر اون مثالي كه متغيير G رو توي يك حلقه قرار داده بوديم حالا ما مي خايم كه اگر اين متغيير G به 6 برسه بره و PORTA.0 رو SET كنه :
CONFIG PORTA = OUTPUT
DIM G AS BYTE
G = 0
DO
INCR G
CLS
LCD G
IF G = 6 THEN SET PORTA.0
WAITMS 50
LOOP
END
برنامه بالا رو كه تا حدودي مي دوني چيه چون قبلا توضيحشو دادم فقط مي مونه خط هفتم كه نوشته IF G = 6 THEN SET PORTA.0 ما در اينجا با گذاشتن شرط يعني IF G = 6 شرط گذاشتيم كه اگر متغيير G به عدد 6 رسيد . ادامه نوشتيم THEN SET PORTA.0 بروي SET كن PORTA.0 . فهميدي
1- اره ولي مگه شرط بندي حروم نيست
2- چرا حرومه . ولي بايد مواظب باشي كه شرط رو نبازي
خوب رسيديم به دستورات زير برنامه ( GOTO - GOSUB )
1- چي هستن اين زير برنامه ها
2- با يك مثال برات توضيح مي دم توي مثال قبل اگر دقت كرده باشي متغيير G وقتي كه به عدد 6 مي رسيد مي رفت و PORTA.0 رو SET مي كرد و همينطوري به متغيير G اضافه مي شد . حالا اگر كه ما حال كرديم بعد از اين كه متغيير G به عدد 6 رسيد بره همون كاره خودشو يعني SET كردن PORTA.0 رو انجام بده ولي برنامه ديگه تموم بشه و ديگه شمارش نكنه يا به عبارتي به END برسه . خوب براي اين كار بايد از زير برنامه استفاده كنيم به مثال زير توجه كن :
CONFIG PORTA = OUTPUT
DIM G AS BYTE
G = 0
DO
INCR G
CLS
LCD G
IF G = 6 THEN GOTO AHMAD
WAITMS 50
LOOP
AHMAD :
SET PORTA.0
END
خوب حالا بريم تحليل برنامه . برنامه رو كه مي دوني چجوريه منظورم معني خط ها هستش البته به غير از خط هشتم كه نوشته
IF G = 6 THEN GOTO AHMAD
خوب اين خط يعني اينكه اگر متغيير G رسيد به عدد 6 دستور شرط را اجرا كن كه دستور شرط اين است GOTO AHAD يعني بپر برو به زيربرنامه اي كه استش هست احمد . توجه كن كه به جاي اسم AHMAD هر اسم ديگه اي مي توني بزاري هر اسمي كه حال كردي . بعد از اينكه متغيير G بع عدد 6 رسيد دستور شرط اجرا مي شود و ميكروكنترلر برنامه را از خط بعدي زيربرنامه AHNAD مي خواند يعني خط SET PORTA.0 را مي خونه و پورت A.0 رو ست مي كنه بعد از اين كه ست كرد خط بعدي رو مي خونه كه نوشته END به محض اينكه اين دستور END رو خوند برنامه متوقف مي شه و به پايان مي رسه .
پس فهميدي كه زير برنامه براي وقتي هستش كه ما مي خوايم يك دستور شرط رو اجرا كنيم
به يك مثال ديگه توجه كن :
CONFIG PORTA = OUTPUT
DIM G AS BYTE
METAL:
G = 0
RESET PORTA.0
DO
INCR G
CLS
LCD G
IF G = 6 THEN GOTO AHMAD
WAITMS 50
LOOP
AHMAD:
SET PORTA.0
WAITMS 50
GOTO METAL
END