قسمت چهارم :
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
خوب حالا تحليل برنامه قبل . ميكرو مياد برنامه رو از خط اول شروميكنه به خوندن كه خط اول مربوط به پيكره بندي PORTA به عنوان خروجي هستش . بعد مياد خط دوم رو مي خونه كه در اين خط ما يك متغيير كه اسمش هست G و از نوع بايت مي باشد رو تعريف كرده ايم. خط سوم يك زير برنامه هستش به نام METAL كه فعلا بهش كار ندارم تا بعد در ضمن اين نكته رو بايد يادت باشه كه هر وقت يك زير برنامه رو مي نويسي بايد جلوش دو نقطه رو بزاري اينطوري METAL: . خط بعدي به متغيير يك مقدار داديم كه صفر است . خط بعدي نوشتيم RESET PORTA.0 كه به اين هم فعلا كار نداريم . خط بعدي DO هستش كه ابتداي حلقه را مشخص مي كنه . خط بعدي نوشته INCR G يعني به مقدار متغيير G يك واحد اضاف كن يعني صفر كه بوده حالا كه يك واحد اضاف بشه مي شه يك . خط بعدي با دستور CLS ال سي دي را پاك كرديم تا براي نوشتن دوباره اماده شود . خط بعدي با فرمان LCD G اين را رسانديم كه مقدار متغيير G رو روي ال سي دي نمايش بده كه الان بايد عدد يك رو روي ال سي دي نمايش بده . در خط بعدي نوشتيم IF G = 6 THEN GOTO AHMAD يعني اگر متغيير G ما به عدد 6 رسيد برو دستور شرط رو كه هست THEN GOTO AHMAD اجرا كن بعني بپر برو توي زير برنامه AHMAD البته وقتي دستور شرط اجرا ميشه كه متغيير G به عدد 6 برسه . خط بعدي يك تاخير در برنامه با مدت زمان 50 ميلي ثانيه را گذاشتيم كه بعد از سپري شدن اين مدت زمان برنامه از خط بعدي شروع مي شه خوب تا اين جا كه متغيير ما عدد 1 هستش . بعد كه ميكرو ميرسه به دستور LOOP دوباره دور مي زنه و خط زيري DO رو مي خونه كه نوشته INCR G يعني يك واحد به متغيير G اضافه كن خوب متغيير G الان هستش 1 بعد كه به اين دستور رسيد اين دفعه يك واحد بهش اضافه مي شه و مي شه دو . اين عمل انقدر ادامه مي يابد تا متغيير G برسه به عدد 6 . همين كه به عدد 6 رسيد از اونجايي كه ما يك شرط با دستور
IF G = 6 THEN GOTO AHMAD گذاشتيم يعني اينكه وقتي متغيير G به عدد شش رسيد يعني IF G = 6 برو دستور شرط رو كه هستش THEN GOTO AHMAD اجرا كن يعني اينكه بپر برو توي زير برنامه AHMAD خوب حالا ميكرو ميپره ميره برنامه رو از خط زيري زير برنامه AHMAD مي خونه كه نوشته SET PORTA.0 يعني پايه A.0 رو يك كن . بعدش نوشته WAITMS 50 يعني اينكه به مدت زمان 50 ميلي ثانيه در برنامه تاخير ايجاد كن كه در طول اين مدت PORTA.0 در وضعيت SET قرار دارد بعد از اين كه اين مدت زمان سپري شد برنامه از خط بعدي اجرا مي شه خط بعدي يعني GOTO METAL يعني اينكه بپر برو توي زير برنامه METAL و ميكرو هم همين كار رو مي كنه و مي پره مي ره توي زير برنامه METAL و برنامه از خط بعدي اين زير برنامه كه هستش G = 0 ادامه پيدا مي كنه اين خط به اين معني هستش كه متغيير G رو كه بوده 6 حالا بيا صفرش كن . در خط بعدي يعني RESET PORTA.0 يعني اينكه پايه A.0 رو كه ست كرده بودي حالا بيا ريستش كن يعني صفر كن. خوب حالا هم متغيير G ما صفر هستش هم اينكه PORTA.0 ما صفر يا همون ريست هستش . بعد ميكرو مي ياد برنامه رو از خط بعدي شروع ميكنه به خوندن كه نوشته DO بعني اول زيربرنامه . خط بعدي نوشته INCR G يعني يك واحد به متغيير G ما كه الان دوباره صفرش كرديم اضافه كن كه بشه يك . دوباره روز از نو روزي از نو يعني اينكه دوباره شروع مي كنه به اضافه كردن متغيير تا دوباره برسه به 6 بعد كه رسيد به 6 دوباره بپره بره به زير برنامه AHMAD اونجا باز PORTA.0 رو يك مي كنه بعدش تاخير ايجاد مي كنه بعد با دستور GOTO METAL مي پره ميره به زير برنامه METAL كه در بالاي برنامه هستش بعد دوباره متغيير رو كه 6 هستش رو صفر مي كنه به دنبالش PORTA.0 رو هم كه يك بوده صفر مي كنه باز دوباره...................................
حالا رسيديم به دستور GOSUB
اين دستور همان دستور GOTO هستش با اين تفاوت كه يك دستور ديگه همراهش هست به نام اقاي RETURN كه اين RETURN رو هر جاي برنامه كه بنويسيم ميكرو مياد برنامه رو از خط بعدي GOSUB شروع مي كنه به خوندن . كه دربارش وقتي كه خواستم ورودي رو بهت درس بدم مي گم .
ورودي PIN :
ورودي در ميكرو كاربرداي فراووني داره مثلا در ساده ترين حالت مي خاي يك ميكروسوييچ به ميكروكنترلر وصل كني كه با هر بار زدن اين ميكروسوييچ يك LED روشن و خاموش بشه در مراحل پيشرفته هم مثلا در ساخت يك ربات كاربرد داره به اين صورت كه يك سنسور مادون قرمز بهش وصل بشه و مثلا به يك خط سياه حساس باشه و از اين طور كارا
خوب بريم سر دستور ورودي . باز هم مي خوام با يك مثال برات توضيح بدم
فرض كن كه مي خايم با يك ميكرو سوييچ كه به ميكرو وصل كرديم يك LED رو يك بار روشن و يك بار خاموش كنيم كه برنامه به صورت زير است و خيلي خيلي ساده :
CONFIG PINB.0 = INPUT
DIM A AS BYTE
Ali:
DO
DEBOUNCE PINB.0 , 1 , SONY
LOOP
END
SONY:
INCR A
CLS
LCD A
GOTO ALI
خوب حالا وقت تحليل برنامه هستش: درخط اول ما اومديم با نوشتن دستور CONFIG PINB.0 = INPUT پايه B.0 رو به عنوان ورودي تعريف كرديم . در خط بعد يك متغيير از نوع بايت كه اسمش رو گذاشتيم A تعريف كرديم . در خط بعدي يك زير برنامه به نام ALI گذاشتيم كه فعلا بهش كار نداريم و در ادامه توضيحش مي دم. در خط بعدي با نوشتن DO ابتداي حلقه را مشخص كرديم . در خط بعدي نوشتيم كه DEBOUNCE PINB.0 , 1 , SONY كه هر وقت خاستي كه يك ورودي رو تعريف كني بهتره از اين دستور استفاده كني يا به عبارتي حتما استفاده كني خوب حالا لابد از خودت مي پرسي كه اين دستورات چي هست اين دستور كه همش بايد توي يك خط نوشته بشن رو يكي يكي برات بازش مي كنم DRBOUNCE رو هميشه وقتي كه مي خاي يك ورودي رو تعريف كني اولش بايد بزاري و كاربردشم اينه كه يك تاخير خيلي خيلي كوچيك كه به چشم هم نمياد ايجاد مي كنه و باعث مي شه كه پايه ورودي نويز نگيره يك بار ديگه دوباره مي گم ما نوشتيم كه DEBOUNCE PINB.0 يعني پايه B.0 رو از نظر نويز محافضتش كن خوب اين تا بعدش علامت , رو گذاشتيم تا جملات از هم تفكيك شوند كه بايد حتما علامت , رو بزاري در ادامه ما نوشتيم كه 1 خوب حالا اين 1 يعني چي . اين 1 يعني اگر پايه B.0 يا يك 1 شد يا به عبارتي SET شد با ميتونيم بگيم كه يك نوع شرط است كه در مقابل يك شدن پايه B.0 گذاشته ايم و جلوي اين 1 دوباره علامت , گذاشتيم تا از جمله بعديش تفكيك بشه . در جمله بعديش نوشتيم SONY كه اين يعني اينكه اقا اگر اين پايه B.0 ما 1 شد بپر برو توي زيربرناه SONY كه به جاي اينSONY هر اسم دخواه ديگه اي هم مي توني بزاري . يك بار ديگه برات اين جمله رو به صورت كلي توضيح مي دم معني اين جمله دستوري اين هستش كه اگر PINB.0 ما 1 شد بپر برو توي زيربرنامه SONY و اگر صفر بود كه هيچي . در خط بعدي نوشتيم LOOP كه انتهاي حلقه را با اين كلمه مشخص كرديم . در خط بعدي نوشتيم END كه برنامه هيچگاه به END نمي رسد . در خط بعدي نوشتيم SONY كه SONY يك زيربرنامه است كه مي تونست هر اسم ديگه اي باشه . در خط بعدي نوشتيم INCR A كه به معني اضافه كردن يك واحد به متغيير A مي باشد . در خط بعدي نوشتيم كه CLS يعني پاك كن كل صفحه ال سي دي رو تا براي نوشتن اماده بشه. در خط بعدي نوشتيم GOTO ALI يعني بپر به زيربرنامه ALI .
خوب حالا بريم سر طرز كار مدار : اين مدار در واقع يك شمارنده هستش . طرز كارش هم اينطوريه كه ميكرو مياد سه خط اول رو مي خونه بعد ميره مي يوفته توي حلقه DO - LOOP و اونجا داخل اين حلقه هي دور ميزنه تا كي تا وقتي كه PINB.0 ما يك بشه يعني شرطي كه گذاشته ايم اجرا بشه كه شرط ما اين هستش كه پايه B.0 يك بشه بعد از اينكه اين شرط اجرا شد ميكرو مياد دستور شرط رو اجرا مي كنه دستور شرط كدومه هموني كه بهت گفتم يعني پرش به زير برنامه SONY . وميكرو كه گوش به فرمان برنامه هست مي پره مي ره داخل زير برنامه SONY و از خط بعدي زير برنامه SONY كه نوشته
INCR A رو مي خونه و طبق اين دستور يك واحد به اين متغيير A اضافه مي كنه يعني ميكنش 1 . بعدش مي ياد خط بعدي رو مي خونه كه نوشته CLS يعني اينكه كل ال سي دي پاك بشه تا براي نوشتن حاضر بشه . در خط بعدي نوشتيم كه
LCD A به اين معني كه مقدار متغيير A رو كه هستش يك روي LCD نمايش بده . در خط بعدي نوشته GOTO ALI يعني اينكه بپر برو توي زير برنامه ALI و ميكرو هم همين كار رو مي كنه و مي پره مي ره اولين خط بعد از زير برنامه ALI رو كه نوشته DO رو مي خونه و دوباره ميوفته توي اين حلقه و باز هم دوباره انقدر توي اين حلقه هستش و توي اين حلقه دور مي زنه تا وقتي كه دوياره PINB.0 يك بشه يا به عبارتي SET بشه اونوقت دوباره روز از نو روزي از نو و ميپره دوباره توي زيربرنامه SONY و دستورات داخل اين زير برنامه رو دباره اجرا مي كنه كه در خط اول اين زير برنامه نوشته
INCR A يعني دوباره يك واحد به متغيير A اضافه كن و ميكرو هم اين كار رو ميكنه و متغيير A كه يك بوده الان ميشه 2 بعد مياد دستور CLS رو مي خونه كه لازم به توضيح نيست . بعد مي يا دستور LCD A رو مي خونه كه مقدار جديد اين متغيير A رو كه الان هستش 2 رو روي LCD نمايش مي ده بعد مياد دستور GOTO ALI رو مي خونه و مي پره مي ره توي زير برنامه ALI دوباره ميوفته توي حلقه و الي اخر . با استفاده از اين برنامه مي توني يك شما رنده درست كني كه مي تونه از عدد 0 تا 255 رو بشماره و اگر خاستي رنج شمارشش از 255 بيشتر باشه مي توني به جاي BYTE توي برنامه بنويسي WORD . اين برنامه در كارخونه هم كاربرد داره البته باكمي تغييرات كوچيك در برنامه و مثلا بايك سنسور مي شه قطعات عبوري از روي خط توليد رو شمارش كرد.
1- از نظر اتصالات سخت افزاريش هم توضيح بده برام
2- اين كه خيلي ساده هستش كافيه تغذيه ميكرو رو وصل كني و با يك ميكروسوييچ كه يك سرش رفته باشه به VCC 5 ولت و سر ديگه ميكروسوييچ هم رفته باشه به پايه B.0 و اتصالات ال سي دي اين مدار رو كاملش كني.
1- جالب بود
2- تو به اين مي گي جالب بزار يكم راه بيوفتي اونوقت اين طور مدارا برات پيش پا افتاده هستش . وقتي كه ميتوني ميكروكنترلر رو از طريق تلفن .SMS و اينترنت كنترلر كني ديگه اين مدارات در نظرت بچه بازي هستش
1- چطوري از طريق اينايي كه گفتي كنترل مي كنن
2- ديگه بايد يكم اطلاعاتت در مورد پورتهاي كامپيوتر و PC INTERFACES كامل باشه كه بتوني از طريق مثلا اينترنت يك موتور رو كنترل كني وگرنه برنامه نويسي ميكرو كه چيز نيست
1- با اين PC INTERFACES چه كار ميتوني بكني و اصلا چي هستش
2- اندازه گيري و كنترل با استفاده از پورتهاي استاندار تحت ويندوز رو مي گن PC INTERFACES مثلا شما توي محيط نرم افزار ويرژال بيسيك يك برنامه اي مي نويسي كه اگر مثلا فلان دكمه كيبرد فشرده شد خروجي فلان پورت كامپيوتر رو يك كن كه اين خروجي ها از نظر استاندارد با استاندارد ميكروكنترلر فرق دارند و بايد از اي سي MAX232 استفاده كني كه از نظر استاندارد با هم مطابق شوند .
1- علم چقدر پيشرفت كرده ها
2- بله . بزار يك مثال ديگه هم بزنم ولي توضيحش رو خيلي خلاصه برات مي گم
CONFIG PORTA = OUTPUT
CONFIG PINB.0 = INPUT
DIM A AS BYTE
Ali:
DO
DEBOUNCE PINB.0 , 1 , SONY
LOOP
END
SONY:
INCR A
CLS
LCD A
TOGGLE PORTA
GOTO ALI
در برنامه بالا فقط يك چيز اضافه شده اونم دستور TOGGLE PORTA كه با وجود اين دستور هر وقت كه ميكرو به زير برنامه SONY پرش مي كنه علاوه براين كه يك واحد به متغيير A اضافه مي كنه و روي ال سي دي هم نمايش مي ده موقعييت PORTA رو هم عوض مي كنه يعني اگر صفر باشه يك مي شه و اگه يك باشه صفر مي كنه و دفعه بعد كه به اين زير برنامه رفت دوباره اگر صفر باشه يكش مي كنه و اگه يك باشه صفرش مي كنه بزار منظورمو ساده بگم اگر شما يك LED به پايه هاي A.0 تا A.7 وصل كني به ازاي هر بار زدن ميكروسوييچ اين LED ها يك بار روشن و بارديگه خاموش مي شن.
براي امروز ديگه كافيه بقيش باشه براي جلسه بعدي
پايان قسمت چهارم