تبلیغات
برق. قدرت. کنترل. الکترونیک. مخابرات. تاسیسات. - آموزش میکروavrبه زبان ساده(قسمت2)

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

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

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

کد:

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM A AS BYTE
A = 3
CLS
LCD A
END

1-
خوب تحلیلش كن
2-
باشه
خط اول كه معرفی میكرو هستش
خط دوم فركانس كاری میكرو هستش
خط سوم ما یك متغییر را كه نامش هست A و را از نوع بایت می باشد را تعریف كردیم
خط چهارم به متغییر مقدار دادیم
خط پنجم با دستور CLS ال سی دی را برای نوشتن جدید پاك كردیم
خط ششم دستور دایم كه مقداری را كه به متغییر A داده ایم روی LCD نمایش داده شود
خط هفتم با دستور END برنامه را به پایان رساندیم.
1- اها یعنی به متغییر A هر مقداری كه داده باشیم مثلا 1 یا 0 یا 1001 روی LCD نمایش داده می شود
2- كاملا درسته واما مثال دوم: این دفعه می خایم دو تا متغییر رو یكی پس از دیگری روی LCD نمایش بدیم

کد:

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM ALI AS BIT
DIM IRAN AS BYTE
ALI = 0
IRAN = 224
CLS
LCD ALI
CLS
LCD IRAN
END

خط اول كه معرفی خود میكرو
خط دوم معرفی فركانس كاری میكرو
خط سوم اومدیم یك متغییر از نوع BIT كه نامش است ALI رو معرفی كردیم
خط چهارم هم اومدیم یك متغییر از نوع بایت كه نامش هست IRAN رو معرفی كردیم
خط پنجم به متغییر BIT كه نامش بود ALI یك مقدار دادیم
خط ششم هم مثل خط پنجم
خط هفتم با دستور CLS ال سی دی را برای نوشتن اماده كردیم
خط هشتم به میكرو دستور دادیم كه مقدار متغییر ALI رو روی LCD نمایش بدهد
خط نهم دوباره با دستور CLS ال سی دی رو برای نوشتن دوباره پاك كردیم
خط دهم هم به میكرو دستور دادیم كه مقدار متغییر IRAN رو روی ال سی دی نمایش بده
و در خط اخر نیز با دستور END برنامه رو به اتمام رساندیم
2- مثال اخر :

کد:

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM G AS WORD
G = 12
CLS
LCD G
INCR G
CLS
LCD G
END

خط اول و دوم رو كه دیگه تكراری شده كه بخام توضیح بدم
خط سوم هم تغریبا مثل قبل اومدیم یك متغییر كه نامش هست G و از نوع WORD می باشد را برای میكرو تعریف كردیم
خط چهارم به متغییر G یك مقدار دلخاه دادیم
خط پنجم ال سی دی را با دستور CLS برای اماده شدن پاك كردیم
خط ششم با دستور LCD G مقدار فعلی متغییر G را كه هست 12 را روی LCD نمایش دادیم
خط هفتم به متغییر G یك واحد اضافه كردیم یعنی شد 13
خط هشتم با دستور CLS ال سی دی را برای نوشتن دوباره پاك كردیم
خط نهم به میكرو دستور دادیم مقدار متغییر G را كه الان به ان یك واحد اضافه شده است یعنی شده 13 رو روی ال سی دی نمایش بده
خط دهم هم یعنی پایان برنامه
1-
همه این مثالایی رو كه گفتی توی محیط شبیه سازی قابل اجراست
2-
اره قابل اجراست و میتونی اونجا همه این مثال های رو مشاهده كنی.
خوب حال بریم سر مبحث بعدی
1- دستورات LCD همینا بود
2- نه هنوز چند تا دیگه هست كه به موقش میگم
1- خوب برو سر مبحث بعدی
2- باشه . ببین گاهی وقتا لازم هستش كه در بین برنامه هایی كه داریم می نویسیم یك تاخیر ایجاد كنیم كه این تاخیر می تونه یك ثاینه . ده ثانیه . یك میلی ثانیه . یك میكرو ثانیه یا هر تایمی كه عشقت بود رو تاخیر ایجاد كنی
1- همین جا وایستا كه یك سوال دارم . این تاخیر به چه درد می خوره لطفا فقط یك مثال كاربردی هم بزن
2- ببین مثالا شما می خای یك LED رو روشن كنی و می خای این LED بعد از مثلا ده ثانیه خاموش بشه خوب حالا ارزش این دستور باید حس كنی
1- اها فهمیدم حالا ادامه بده
2- تاخیراتی را كه ما میتوانیم ایجاد كنیم بر حسب ثانیه- میلی ثانیه- میكرو ثانیه می باشد
WAIT 1 تاخیر برای مدت زمان یك ثانیه
WAITMS 1 تاخیر برای مدت زمان یك میلی ثانیه
WAITUS 1 تاخیر برای مدت زمان یك میكرو ثانیه
متاسفانه این مدت زمان های تاخیر زیاد هم دقیق نیستند مثلا شما دستور میدی كه یك ثانیه تاخیر داشته باش میكرو میاد دوازده ثانیه تاخیر ایجاد میكنه
1- خوب پس چاره چیه؟؟
2- برای حل این مشكل شما باید از میلی ثانیه یا میكرو ثانیه بیشتر استفاده كنی مثال اگه می خای یك تاخیر یك ثایه ایجاد كنی باید بنویسی WAITMS 30 البته این یك مثال بود كه اگه یكم با این دستورات ور بری همش دستت میاد
خوب حالا بریم سر مثال ها
مثال اول:

کد:

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM A AS BYTE
A = 112
CLS
LCD A
INCR A
WAITMS 500
CLS
LCD A
END

حالا تحلیل برنامه
خط اول و دوم كه خودت میدونی
خط سوم هم كه باید بدونی
خط چهارم هم باز باید بدونی ولی می گم كه دلت نشكنه در خط چهارم ما به متغییر A یك مقدار دادیم
خط پنجم با دستور CLS ال سی دی را برای نوشتن و اماده شدن پاك كردیم
خط ششم با دستور LCD A مقدار متغییر A را كه هست 112 روی ال سی دی نمایش دادیم
در خط هفتم با دستور INCR A یك واحد به متغییر A اضافه كردیم یعنی بود 112 حالا شد 113
در خط هشتم با دستور WAITMS 500 یك تاخیر پانصد میلی ثانیه ای ایجاد كردیم یعنی اینكه برنامه فعلا هیمنجا متوقف است و بعد از 500 میلی ثانیه برنامه از خط بعدی خوانده می شود
در خط نهم با دستور CLS ال سی دی را پاك كردیم
در خط دهم مقدار جدید متغییر A را كه الان هست 113 روی ال سی دی نمایش دادیم
در خط اخر هم با دستور END برنامه رو پایان دادیم


کد:

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM S AS BYTE
S = 112
CLS
LCD S
INCR S
WAITMS 500
CLS
WAITMS 100
LCD S
END


از خط اول تا خط هشتم
خط نهم ال سی رو رو پاك كردیم
خط دهم یك تاخیر در برنامه با مدت زمان 100 میلی ثانیه ایجاد كردیم و بعد از اینكه صد میلی ثانیه گذ شت برنامه از خط بعدی ادامه پیدا می كنه
خط یازدهم دستور دادیم كه مقدار جدید S را كه 113 هستش رو روی ال سی دی نمایش بده
خط اخر هم پایان برنامه
1- اینم توی محیط شبیه ساز قابل اجراست
2- بله حتما. موافقی كه بریم سر مبحث بعدی
1- اره بریم
2- خوب حالا رسیدیم به قسمت های جون دارتر میكرو. اگه یادت باشه اون اوایل بهت گفته بودم كه میكروكنترلر دارای یك سری امكانات هستش مثل تایمر – كانتر - مبدل انالوگ به دیجیتال همچنین گفتم كه یكی از امكاناتش ورودی خروجی یا همون I/O هستش كه كاربردای فراون داره . مثلا در ساده ترین حالت شما با استفاده از این امكان می تونی یك LED رو روشن یا خاموش یا هر دو حالت رو انجام بدی
1- I/O چی هست
2- I یعنی ورودی O هم یعنی خروجی البت هردو از نوع دیجیتال هستند
1- ها فهمیدم . میشه یك مثال دیگه از كاربردش بزنی
2- چراكه نه حتما. فرض كن می خای با یك میكرو سوییچ ( یك نوع كلید ) یك موتور رو روشن خاموش كنی و حتما باید با یك عدد میكروسوییچ یك بار كه میزنی روشن و دفعه بعد كه میزنی خاموش شود
1- میكرو سوییچ همون شسی هستش ؟
2- اره میكروسوییچ همون كلید زنگ در خونتون هستش
2- در كل برای استفاده از امكانات میكروكنترلر باید از روش پیكره بندی استفاده شود كه بهش می گن CONFIG یعنی شما با این كار به میكروكنترلر اعلام می كنی كه می خاهم از فلان امكانات استفاده كنم . بزار اول یك سری دستورات رو لیست وار معرفی كنم بعد یكی یك اونها رو توضیح بدم
PORT
PIN
SET
RESET
TOGGLE
خوب حالا درباره هر كدوم توضیح میدم
PORT به معنی خروجی هستش هر وقت كه خاستی از میكرو یك خروجی بگیری از این دستور باید استفاده كنی . مثلا یك LED رو می خای روشن كنی یا هر چیز دیگه
PIN به معنی ورودی هستش هر وقت كه خاستی یه میكروكنترلر یك ورودی بدی بایداز این دستور استفاده كنی مثلا می خای یك كلید به ورودی وصل كنی البته این دستور PIN و PORT به تنهایی كاربرد ندارن كه در ادامه میگم كه باید چیكار كنی
SET كه همون یك دیجیتال خودمونه
RESET كه همون صفر دیجیتال خودمونه
TOGGLE یعنی عكس حالت فعلی بعنی اگر قبلا یك بوده حالا صفر میشه اگه قبلا صفر بوده حالا یك میشه
بزار قبل از اینكه توضیحاتمو كامل كنم یك سری اطلاعات درباره پایه های میكرو بدم . ببین هر میكرو بسته به نوعش یك تعداد پایه داره كه از 8 پایش هست تا 40 پایه كه هر هشت پایه رو یك پورت می نامند البته ربطی به اون پورتی كه توی دستورات بهت گفتم نداره هر پورت رو كه هشت پایه هستش رو با یك اسم نام گذاری می كنن كه استاندارد هستش به نام های پورت A پورتB پورت C پورت D میكرو ها حداكثر چهار پورت ورودی خروجی دارن. در ضمن هر كدام از پورت ها می توانند ورودی یا خروجی باشند كه بستگی به انتخاب برنامه نویس داره علامت پورت ها به ترتیب زیر هستش:
A,0
A.1
A.2
A.3
A.4
A.5
A.6
A.7
برای پورت های B C و D هم مثل بالا هستش
1-
یك سوال . اگه بخاد حداكثر چهار پورت داشته باشه و هر پورت هم كه هشتا پایه هستش پس در كل میشه 32 پایه پس چرا بعضی از میكرو ها 40 پایه هستند
2-
خوب 32 پایه هستش با به عبارتی چهار پورت بقیش مال VCC GND و... هستش
1-
اها فهمیدم ادامه بده
2-
خوب گفتیم كه برای استفاده از امكانات میكرو باید انها را پیكره بندی كنیم یا به عبارتی CONFIG كنیم . حالا ما برای استفاده از ورودی خروجی میكروكنترلرI/O هم باید اونو پیكره بندی كنیم یعنی به میكرو اعلام كینم كه اقا ما میخاهیم از فلان پایه تو به عنوان ورودی یا مثلا خروجی استفاده كنیم.
اگه خاستیم از یك پورت به عنوان خروجی استفاده كنیم باید به ترتیب مثال زیر عمل كنیم:
مثال : مثلا می خاهیم از پورت A به عنوان خروجی استفاده كنیم :
CONFIG PORTA = OUTPUT
حالا تحلیل این دستور. CONFIG كه بهت گفتم یهنی چی PORTA یعنی می خواهیم از پورت A به عنوان خروجی استفاده كنیم به جای A از هر پورت دلخاه دیگه هم می تونیم استفاده كنیم . علا مت مساوی = رو كه باید همیشه بزاری . عبارت OUTPUT هم یعنی خروجی
اگه خاستیم از یك پورت به عنوان ورودی استفاده كنیم باید به ترتیب مثال زیر عمل كنیم :
مثال : مثلا می خاهیم از پورت B به عنوان وردی استفاده كنیم
CONFIG PINB.0 = INPUT
حالا گوش فرا بده به تحلیل این دستور. CONFIG كه گفتم قبلا. خوب PINB.0 یعنی ما می خاهیم از پایه B.0 به عنوان ورودی استفاده كنیم . = هم كه هیچی همیشه باید بزاری. كلمه INPUT را وقتی میزاری كه خاسته باشی از یك پایه به عنوان ورودی استفاده كنی
3-
خوب بزار یك مرور بكینم . اگر خاستیم كه از یك پایه به عنوان ورودی استفاده كنیم از دستور
CONFIG PINC.0 = INPUT استفاده كنیم كه ما دراین مثال از پورت C.0 به عنوان ورودی استفاده كردیم نكته اینجاست كه هر وقت كه خاستی از یك پایه به عنوان ورودی استفاده كنی باید شماره پایه رو هم مثل همین مثال بالا كه برای زدم استفاده كنی به جای PINB.0 هم می تونی مثال بزاری PINB.1 یا PINB.3 یا بزاری PINB.7 كه بستگی داره به انتخاب تو
اگر خاستیم كه از یك پورت به عنوان خروجی استفاده كنیم از دستور زیر استفاده می كنیم باید از دستور زیر استفده كنی
CONFIG PORT C = INPUT ما در این مثال به میكرو فهماندیم می خاهیم از پورت C تو به عنوان خروجی استفاده كنیم
1-
شما ره پایه رو نباید بنویسیم
2-
نه نباید بنویسیم بعدا ما بین برنامه مشخص می كنیم كه كدام پایه باید خروجی بدهد
بزار ادمه درس رو با یك مثال برات بگم فرض كن ما میخایم از پایه D.4 میكرو كنترلر یك خروجی بگیرم و یك LED رو روشن كنیم برای این كار از برنامه زیر استفاده می كنیم:

کد:

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG PORTD = OUTPUT
SET PORTD.4
END

خط اول ودوم كه هیچ
خط سوم ما اومدیم به میكرو اعلام كردیم كه می خاهیم از پورت C تو به عنوان یك خروجی استفاده كنیم
خط چهارم نوشتیم SET PORTD.4 ما بانوشتن كلمه SET این منظور را رساندیم كه می خاهیم پورت D.4 یك شود . و همچنین جلوی SET نام پایه ای رو كه باید یك شود یا به عبارتی دیگر SET شود رو هم اعلام كردیم
در خط اخر هم با دستور END برنامه را به پایان رساندیم
1-
یعنی اگه یك LED رو به پایه D.4 میكروكنترلر وصل میكردیم LED روشن می شد
2-
اره روشن می شد
مثال دوم: می خاهیم همان پورت D.4 را یك بار كه روشن شد بعد از دو ثانیه خاموش شود

کد:

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG PORTD = OUTPUT
SET PORTD.4
WAITMS 2000
RESET PORTD.4
END

خط اول دوم كه هیچ
خط سوم هم اومدیم تعرف كردیم كه از پایه D.4 می خاهیم به عنوان خروجی استفاده كنیم
خط چهارم با دستور SET PORTD.4 پایه D.4 رو یك كردیم
خط پنجم با دستور WAITMS 2000 این را رساندیم كه می خاهیم 2000 میلی ثانه به عبارتی دو ثانیه در همین جا تاخیر ایجاد شود در طول این دو ثانیه PORTD.4 در همان حالت یك باقی می ماند. بعد از دو ثانیه برنامه از خط بعد ادامه پیدا می كند
خط ششم با دستور RESET PORTD.4 به میكرو دستور دادیم كه همان پایه D.4 را ریست كن یعنی صفر كن
خط اخر هم كه یعنی پایان برنامه. در این مثال اگر كه ما یك LED به پایه D.4 وصل می كردیم LED برای بار اول با دستور SET روشن می شد و این روشن بودن با دستور WAITMS 2000 دو ثانیه به طول می انجامید و بعد از دو ثانیه با دستور RESET PORTD.4 LED خاموش می شد چون پایه را صفر كردیم.
مثال سوم : فرض كن می خا هیم دو تا پایه رو هم زمان یك كنیم و بعد از دو ثانیه فقط یكی از انها را صفر كنیم .

کد:

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG PORTC = OUTPUT
SET PORTC.2
SET PORTC.7
WAITMS 2000
RESET PORTC.7
END

خط اول و دوم كه هیچ
خط سوم هم كه باید حتما یاد داشته باشی
خط چهارم اومدیم فرمان دادیم كه پایه C.2 را یك كن
خط پنجم هم اومدیم فرمان دادیم كه پایه C.7 رو یك كن
خط ششم دو ثانیه تاخیر در برنامه ایجاد كردیم كه در طول این مدت پایه های C.2 و C.7 در حالت یك است
خط هفتم با دستور RESET PORTC.7 فقط پایه C.7 رو صفر كردیم. ولی پایه C.2 در همان حالت یك باقی مانده است
خط اخر هم كه هیچ
مثال سوم : این مثال رو ببینم كه می تونی تحلیل كنی

کد:

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG PORTA = OUTPUT
CONFIG PORTC = OUTPUT
SET PORTA.1
SET PORT C.0

حالا خودت تحلیلش كن
1-
خط اول و دوم رو كه بلدم
خط سوم اومدیم به میكرو اعلام كردیم كه می خاهیم از پوت A به عنوان خروجی استفاده كینم
خط چهارم هم مثل خط سوم
خط ششم دستور یك شدن پایه A.1 رو صادر كردیم
خط هفتم هم دستور یك شدن پایه C.0 رو صادر كردیم
خوب بود
2-
عالی بود
1-
حال ورودی رو برام توضیح بده
2-
ورودی باشه برای وقتی كه چندتا از دستورات شرط و چندتا دستور دیگه رو گفتم برات میگم
1-
خوب حالا این صفر و یك شدن پایه ها رو میشه تو شبیه ساز نرم افزار تماشا كرد
2-
متاسفانه نه نمیشه
1-
پس باید چكار كنم
2-
دو راه داری اول اینكه بری یك میكرو بخری و خودت امتحان كنی دوم اینكه با استفاده از نرم افزار پروتوس اونو شبیه سازی كنی .
1-
خوب این پروتوس رو برام توضیح بده
2-
اینو دیگه خودت برو یاد بگیر توی انجمن های برق و الكترونیك ایرانی كه تعدادشون هم زیاده به خوبی توضیح دادن
1-
باشه حالا چی رو می خای برام توضیح بدی
2-
فعلا تا همین جاشو داشته باش تا بعدا ادامشو برات توضیح بدم

تمرینات قسمت سوم:

1-
برنامه ای بنویسید كه روی LCD نوشته شود MICRO
2-
برنامه ای بنویسید كه ابتدا روی LCD نوشته شود AVR . و بعد از 30 میلی ثانیه تاخیر LCD پاك شود و دوباره روی ان نوشته شود ALI
3-
برنامه ای بنویسید كه در ان پایه A.0 میكرو SET شود ( منظور PORTA.0 میباشد)
4-
برنامه ای بنویسید كه در ان پایه A.1 یك بار SET شود و بعد از 50 میلی ثانیه تاخیر RESET شود
5-
برنامه ای بنویسید كه در ان پایه های B.5 و D.7 میكرو یك بار هم زمان باهم SET شوند و بعد از 60 میلی ثانیه تاخیر RESET شوند.
درضمن دوستان توجه داشته باشند اگر در جایی به اشكال برخوردید حتما سوال كنید . یك نكته اینكه SET و RESET وورودی خروجی های میكرو رو نمیشه تویه محیط شبیه ساز تماشا كرد و برای شبیه سازی بهتره از نرم افزار PROTEUS استفاده كنید خوشبختانه یك فایل اموزشی این نرم افزار رو با فرمت PDF و به زبان فارسی دارم كه اگر تونستم اپلودش كنم براتون میزارم یا میتونید به لینك زیر مراجعه كنید .
[]

اغاز قسمت چهارم :
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 ها یك بار روشن و باردیگه خاموش می شن.

برای امروز دیگه كافیه بقیش باشه برای جلسه بعدی


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

صفحات جانبی

نظرسنجی

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


  • آخرین پستها

آمار وبلاگ

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