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-
فعلا تا همین جاشو داشته باش تا بعدا ادامشو برات توضیح بدم
پایان قسمت سوم