رفتن به مطلب

آموزش گام به گام برنامه نویسی میکروکنترلرهای avr به زبان بیسکام


ارسال های توصیه شده

درود بر همه دوستان :a030:

در این اینجا قصد داریم با کمک هم شروع به برنامه نویسی میکروهای AVR به زبان بیسکام کنیم ......

 

m5knmqqvgy2eplgwxvnj.jpg

 

ابتدا چند تا آموزش واسه مقدمات میذارم که واسه یه بنده خدایی و به زبون خودمونی توضیح داده حتما بخونید .....

 

لینک به دیدگاه
  • پاسخ 60
  • ایجاد شد
  • آخرین پاسخ

بهترین ارسال کنندگان این موضوع

بهترین ارسال کنندگان این موضوع

اینم قسمت اولش

1 - سلام خوبي

2 - سلام خوبم تو خوبي

1 - اره خوبم . چكار مي كني كم پيدايي

2 - اره يك چند وقتيه دارم پروژه دانشگاه رو انجام مي دم

1 - چي هست اين پروژت

2 - هيچي ساخت يك دور سنج موتور با ميكروكنترلرAVR

1 - چي ميكروكنترلرavr ؟؟؟؟ ميكرو كنترلر ديگه چيه

2 - ميكروكنترلر رو اگه بخام به زبون ساده بهت بگم يك كنترل كننده هستش كه تقريبا هر چي ازش بخاي برايت انجام ميده

1 - پس بگو يك رباته

2 - نه منظورم هر كاري نبود ببين مثل يك كامپيوتر كه بهش فرمان ميدي اون هم انجام ميده البته از نظر ظاهري كه نگاهش كني يك ايسي 40 پايه هستش

1 - چي؟؟؟؟؟ مگه ميشه يك كامپيوتر به اندازه يك ايسي چهل پايه باشه

2 - نه خود كامپيوتر منظورم از كامپيوتر اينه كه بهش فرمان مي دي اونم انجام ميده

1 - بازم نفهميدم بيشتر توضيح بده اصلا به چه دردي ميخوره

2 - بزار بيشتر برات توضيح بدم اين يك ايسي هستش كه ما به وسيله كامپيوتر برنامه نويسي مي كنيم بعد برنامه رو مي ريزيم توي ميكرو . كاربردش هم خيلي زياده مثلا باهاش مي توني ساعت . فركانس متر. قفل رمز درست كني

1- يكم بيشتر درباه خود ميكرو توضيح بده

2 - اين ميكرويي كه بهت ميگم يك خانواده هستش كه انواع مختلفي داره كه تشكيل شده از سه گروه 1-tiny 2-90s 3-mega

1 - خوب فرق اين سه گروه باهم چيه مثلا tiny با 90s يا با mega چه فرقي دارن

2 - فرفشون توي امكاناتي كه دارن هستش و همين فرق باعث شده كه قيمت هاشونم باهم فرق كنه

1 - منظورت از امكاناتشون چيه

2- ببين بزار بيشتر برات درباره خود ميكرو توضيح بدم . از امكاناتي كه اين ميكرو ها دارن ميشه به تايمر – كانتر- توليد موج pwm – حافظه اي كه اطلاعات رو توي خودش حفظ كنه – سرعت بالاي انجام دستورات- I\O (يا همون ورودي خروجي خدمون) – مبدل انالوگ به ديجيتال adc – مقايسه كننده انالوگ و... . حالا كه با امكاناتش اشنا شدي همينو بهت بگم كه بعضي از ميكرو ها توي امكاناتشون و توي مقدار حافضه با هم فرق دارن براي همين قيمتهاشونم باهم فرق ميكنه

1- خوب حالا كدوم از همه امكاناتش بيشتره

2- نوع mega از همه امكاناتش بيشتر و از نظر مقدار حافضه هم از همه حافضه اش بيشتره بعد نوع 90s و در نهايت نوع tiny

1- اين همه امكانات همه توي يك ايسي پس حتما بايد يك صد هزار تومني قيمتش باشه

2- نه اگه بهت بگم كه بهترين نوع اين ميكرو كه نوع mega هستش رو توي خود بازار ايران با سه هزار تومن مي توني بخري باورت نمي شه

1- چي فط سه هزار تومن اون هم بهترين نوعش اخه چطور ممكنه اين همه امكانات فقط سه هزارتومن اون هم بهترين نوعش!!!!!!!!!!!!!!!!!!!!!!

2- خوب ديگه تكنولوژيه ديگه

1- راستي گفتي يكي از امكاناتش حافضه هستش بگو ببينم اصلا اين حافضه به چه دردي مي خوره؟؟

2- يادت مياد كه بهت گفته بودم كه بايد به اين ميكرو فرمان بديم

1- اره

2- خوب اين فرمان ها رو ما با يك نرم افزار مينويسيم

1- خوب چه ربطي داره به سوال من

2 - يكم صبر داشته باش . اين برنامه اي كه مانوشتيم توي اين حالفضه قرار مي گيره

1- بيشتر توضيح بده

2- حافضه ميكرو avr دو تا هستش يكي حافضه بلند مدت كه بهش مي گن eeprom و دومي هستش حافضه كوتاه مدت كه بهش مي گن flash

1- خوب فرقشون باهم چيه

2- فرقشون در اينه كه در حافظه كوتاه مدت با قطع تغذيه (ولتاژ) ميكرو اطلاعات از بين مي ره ولي در حافضه بلند مدت با قطع شدن تغذيه ميكرو اطلاعات از بين نميره

1- اها فهميدم . خوب يادم مياد بهم گفتي كه هر كاري ازش بخايم برامون انجام ميده چطوري بايد بهش بگيم كه فلان كار رو انجام بده ؟

2- خوب بزار به صورت كلي بهت بگم كه گيج نشي . ما براي كارهايي كه از اين ميكرو مي خايم بايد بهش برنامه بديم اين برنامه توسط نرم افزار نوشته مي شه

1- چه نرم افزاري؟

2- نرم افزاراي مختلفي هستش كه باهاش براي ميكرو برنامه مي نويسن برنامه هايي رو كه من مي شناسم bascom –codvision و ... هستش كه من با bascom كار مي كنم. خوب حالا بزار ادامه مطلب رو بگم . برنامه اي رو كه ما مي نويسيم زبان هاي مختلفي داره

1- منظورت انگليسي يا فارسي هستش

2- نه بابا منظورم زبان هاي برنامه نويسي هستش كه عبارتند از baisic-c –اسمبلي

1- يعني بايد همه اي زبان هاي برنامه نويسي رو بلد باشيم

2- نه بابا ناراحت نباش من خودم وقتي كه مي خاستم ميكروكنترلر ياد بگيرم هيچ كدوم از اين زبان ها رو ياد نداشتم . چقدر سوال مي كني منو از موضوع پرت كردي . هر كدوم از اين زبان ها در يك نرم افزار خاص خودش نوشته مي شه مثلا اگه دوست داشتي برنامه رو با زبان بيسيك بنويسي بايد با نرم افزار baisic كار كني اگه خاستي با زبان c برنامه بنويسي بايد با نرم افزار codvision برنامه بنويسي . خوب حالا وقتي كه برنامه رو نوشتي بايد برنامه رو بريزي توي ميكرو . حتما مي خاي بپرسي چطوري برنامه رو ميريزن توي ميكرو خوب بهت مي گم با يك پروگرامر

1- چي پروگرامر ديگه چيه؟

2- نترس پروگرامر وسيله اي هستش كه ميكرو رو روي اون قرار ميدي ويك سر ديگش وصل مي شه به پرينتر كامپيوتر بعد كه به كامپيوتر نصب شد از طريق نرم افزار فرمان ارسال برنامه به داخل ميكرو رو ميدي مثلا در نرم افزار بيسكام كه بعدا مفصلا بهت توضيح ميدم با زدن كليد F4 برنامه ريخته مي شه داخل ميكرو

1- ببين من نفهميدم نقش اين پروگرامر اين وسط چيه

2- پروگرامر واسطه اي هست ميان ميكرو و كامپيوتر . خوب اخه مرد حسابي برنامه اي كه تو براي ميكرو نوشتي بايد بره توي ميكرو يا نه . پس از روي هوا هم كه نمي شه برنامه رو فرستاد پس ميان يك پروگرامر وصل مي كنند به كامپيوتر و ميكرو رو روي اين پروگرامر قرار ميدن بعد از توي كامپيوتر فرمان ارسال برنامه رو مي دن

1- ببين درست فهميدم يا نه پروگرامر تنها نقشي كه داره اينه كه برنامه اي كه ما توي كامپيوتر نوشيتم رو بريزه توي ميكروكنترلر

2- افرين

1- بازم سوال دارم

2- بگو

1- اين امكاناتي رو كه گفتي ميكرو داره چطوري مي تونيم ازش استفاده كنيم

2- اين كار رو موقع برنامه نويسي بهش مي گيم . مثلا مي خايم از كانتر ميكرو ( كانتر به معني شمارنده ) استفاده كنيم . بايد در اول برنامه بنويسيم كه از كانتر مي خا هيم استفاده كنيم . به اين كار در اصتلاح مي گويند config . البته بعدا درباره برناه نويسيش – نحوه كار با نرم افزار – اتصال سخت افزاري ميكرو براي كامل توضيح مي دم

1- يك مثال مي توني بزني كه كاربرد اين ميكرو و امكاناتش چيه؟؟؟

2- اره ولي قول بده كه نترسي كه برنامه شو بنويسم چون كه بعدا درباره كل دستورات برنامه نويسي و نحوه كار با نرم افزار برات توضيح مي دم

1- باشه

2- خوب گفتي يك مثال بزن منم يم مثال خيلي ساده ميزنم . فرض كن كه با دو تا ميكروسوييچ مي خايم يك led رو روشن خاموش كنيم . براي اين كار اول بايد برنامه توسط نرم افزار نوشته بشه كه من در اينجا از زبان بيسيك براي نوشتن برنامه استفاده ميكنم :

$regfile = "8515DEF.DAT"

$crystal = 8000000

Config Porta = Output

Config Pinb.0 = Input

Config Pinb.1 = Input

Config Debounce = 25

Do

Debounce Pinb.0 , 1 , Sett , Sub

Debounce Pinb.0 , 1 , Resett , Sub

Loop

End

 

Sett:

Set Porta.0

Return

Resett:

Reset Porta.0

Return

 

1- خوب درباره اينا توضيح بده

2- صبر داشته باش اسياب به نوبت گفتم كه بعدا درباره تك تك دستورات و نحوه كار با نرم افزار برات توضيح مي دم

1- قول مي دي

2- قول مي دم كه تك تك دستورات رو با مثال زباد برات توضيح بدم

1- خوب حالا من چكار كنم

2- فعلا برو نرم افزار بيسكام (bascom) رو نصب كن تا بعد

1- باشه پس فعلا تا بعد

 

 

پايان قسمت اشنايي با ميكروكنترلر AVR

لینک به دیدگاه

1- سلام چطوري

2- سلام ممنون تو چطوري

1- قربانت اقا اين avr چي بوده ما نمي دونستيما

2- اره تازه كجاشوديدي بزار يكم راه بيفتي اونوقت مي فهمي چي بوده

1- يادم مي ياد بهم قول داده بودي كه بهم ميكرو ياد بدي

2- حتما به روي چشم . خوب حالا قرار بود از كجا شروع كنيم

1- يك لحظه وايستا اول به چندتا از سوالايي كه برام پيش اومده جواب بده بعد شروع كن به ياد دادن

2- در خدمتم هر چي سوال داري بگو كه منو ياد اون اولايي كه مي خاستم ميكرو ياد بگيرم مي ندازي

1- سوال اول اينكه اصلا ما چرا از ميكروكنترلر استفاده مي كنيم اصلا چه مزيتي داره و كجاها ازش استفاده ميشه؟

2- خوب . همونطور كه از اسمش پيداست ميكرو كنترلر يعني يك كنترل كننده . اين كنترل كننده مي تونه هر پديده اي رو كنترل كنه فقط كافيه كه بهش برنامه بدي ( تكنولوژي ديگه) كنترل دقيق پديده هايي همچون دما. فشار. نور. فاصله. و... . و كاربرد ان در بيشتر زمينه هاي رباتيك . ماشين هاي هوشمند و صنعت هستش

1- مثل plc ؟؟؟

2- بله با اين تفاوت كه ميكرو كنترلر از نظر حجم و قيمت زمين تا اسمان با plc فرق مي كند مثلا قيمت يك plc حدود هفتاد هزارتومنه اون هم با امكانات حداقل و ابعاد زياد ولي ميكروكنترلر با همه امكانات با قيمت 3000 تومان كه ابعاد بسيار كمي هم داره در بازار ايران به وفور پيدا ميشه . البته اين تفاوت هيچ وقت از ارزش plc كم نخواهد كرد زيرا plc فقط در صنعت كاربرد دارد و يك المان صنعتي مي باشد نسبت به ميكروكنترلر بيشتر در صنعت استفاده مي شه.

1- خوب يك سوال ديگه اين ميكروكنترلري كه ميگي سرعت اجراي فرمان هايي كه بايد اجرا كنه چقدر هستش

2- بستگي به فركانس كاري ميكرو داره . معمولا سرعت انجام دستوراللعمل هايي كه انجام مي ده بين 8 تا 16 ميليون دستور العمل در ثانيه هستش

1- چي درست شنديم 8 تا 16 ميليون فرمان اونم فقط توي يك ثانيه ؟؟؟

2- اره درست شنيدي

1- خوب اين 8 تا 16 ميليون فرمان يا به قول خودت دستورالعمل سرعتش به چي بستگي داره

2- مستفيما به فركانش كاري ميكرو بستگي داره

1- اخرين سوال بعد برو سراغ ادامه مطالب اموزشي

2- در خدمتم بگو

1- اين امكاناتي كه گفتي بعضي از ميكرو ها دارن بعضي ها هم ندارن بايد از كجا متوجه بشيم خودت حتما همه رو حفظ كردي

2- ( با خنده) نه عزيز اين ميكرو ها هر كدومشون داراي يك ديتا شيت هستند كه اطلاعاتي درباره ميكرويي كه مي خاي باهاش كار كني بهت ميده . اطلاعاتي از قبيل . ولتاز كاري . فركانس كاري . امكانات ميكرو و...

1- ok حالا برو سر اموزش

2- خواهش مي كنم به روي چشم . بزار يك سر فصل خيلي كلي برات بگم كه چه چيزايي رو بايد بهت بگم 1- اول بايد با نرم افزار bascom اشنا بشي 2- و در اخر بايد دستورات برنامه نويسي رو ياد بگيري

 

خوب اول مي ريم سر نرم افزار bascom كه خيلي ساده هستش . منم خيلي كلي برات نرم افزارو توضيح مي دم بقيشو خودت يكم سيخ بزني ياد مي گيري

1- باشه هر طور كه صلاح مي دوني

2- اول بزار در باره اين نرم افزار بيسكام (bascom) برات بگم . خوب من قبلا بهت گفتم كارهايي رو كه ما از يك ميكرو مي خايم بايد به صورت برنامه بهش بديم . خوب حالا اين برنامه رو بايد با يك نرم افزاري نوشته بشه يا نه

1- بله

2- خوب اين نرم افزار همين بود كه بهت گفتم . ما به وسيله اين نرم افزار خواسته هايي كه از يك ميكرو AVR داريم را به صورت برنامه نويسي اجرا مي كنيم. خوب بهتره كه زياد طولش ندم و مستقيم برم سر نرم افزار. اول بزار يك مقدار از منو هاي كاري نرم bascom1.11.7.4 برات توضيح بدم

File : اول روي گزينه file كليل مي كني بعدش روي NEW كليك مي كني . يك صفحه سفيد باز ميشه . اين صفحه محيط برنامه نويسي هستش

منوي EDIT كه چيز مهمي نداره

PROGRAM : با كليك كردن روي اين منو به اولين گزينه مي رسيم كه نوشته COMPILE . حتما با خودت مي گي اين COMPILE به چه دردي مي خوره خوب الان من بهت مي گم . گفتيم كه ما در محيط برنامه نويسي برنامه مان را مي نويسيم خوب ما بالخره بايد بدانيم كه اين برنامه اي كه نوشتيم داراي خطاي نوشتاري هست يا نه خوب پس حالا فهميدي به چه دردي مي خوره .

1- نگفتي چطوري از گزينه COMPILE‌ استفاده كنيم ؟؟

2- شما بعد اي كه برنامه رو نوشتي بايد از منوي PROGRAM گزينه COMPILE رو انتخاب كني سپس به طور اتومات برنامه شما چك مي شه اگه خطايي بود زير نرم افزار مي نويسه اگه نبود كه هيچي در ضمن شما اين كار رو مي توني با كليد ميانبر F7 هم انجام بدي

SIMULATE : اين گزينه يك شبيه ساز هستش و برنامه اي رو كه شما نوشتي رو برات شبيه سازي مي كنه مي كنه كه من هيچ ازش خوشم نمي ياد چون داراي خطا هستش و بهتره كم ازش استفاده كني . اين كار رو مي توني با كليد ميانبر F2 انجام بدي

SEND TO CHIP : شما بعد از اين كه برنامه رو توي محيط برنامه نويسي نوشتي و بعدش هم COMPILE كردي نياز داري كه برنامه رو بريزي داخلي ميكرو اين كار رو با كليك روي گزينه SEND TO CHIP بايد انجام بدي كه خودش اتومات برنامه رو ميريزه توي ميكروكنترلر . اين كار رو بازدن كليد F4 هم مي توني انجام بدي

 

 

منو TOOLS : اين منو باشه بعدها برات توضيح ميدم چون فعلا باهاش سروكار نداري

 

منوي OPTIONS: با كليك روي اين منو اولين گزينه اي كه به چشم مي خوره COMPILER هستش كه مهمه بقيه هم باهاش سروكار نداشتم پس فكروتو مشغول بقيش نكن حرفه اي كه شدي شايد بقيش برات كاربرد داشته باشه . خوب حالا اين COMPILER رو كه روش كليك مي كني پنج گزينه ديگه ضاهر ميشه . اولي نوشته CHIP : به معني انتخاب ميكرو هستش شما ميكرويي رو كه مي خاي ازش استفاده كني رو توي ان قسمت انتخاب مي كني . گزينه بعدي OUTPUT هستش كه باهاش كاري نداريم .گزينه بعدي COMMUNCIATION هستش وقتي روي اين گزينه كليك مي كني يك پنجره باز مي شه شما بايد در قسمت FERQUENCY مقدار فركانس كاري ميكروAVR رو بر حسب هرتز اينجا وارد كني

1- يك سوال از كجا بفهمم كه فركانس كاري ميكرويي كه ازش مي خام استفاده كنم چنده ؟؟

2- با خواندن ديتا شيت يا همان كاتالوگ خود مكرو كنترلر . گزينه بعدي 12C هستش كه با اونم كاري نداريم . گزينه بعد LCD هستش

1- حتما بايد اين گزينه رو هم بي خيال شيم

2- برعكس گزينه LCD گزينه مهمي هستش . تو در اين قسمت بايد مشخص كني كه LCD بايد به كدوم يكي از پايه هاي ميكروكنترلر وصل بشه و اندازه LCD رو هم مي توني توي اين قسمت مشخص كني

1- خوب بيشتر توضيح بده در باره اين گزينه

2- اين گزينه باشه وعتي كه LCD رو بهت توضيح دادم اونوقت اين گزينه رو هم بهت ياد ميدم

1- اين LCD خيلي مشكله ؟؟

2- نه اتفاقا بسيار اسون و كار كردن باهاش بسيار لذت بخشه. راستي يك گزينه ديگه توي منويTOOLS هستش به نام PROGRAMMER . كه مال اتخاب نوع پروگرامر هستش

اين هم از قسمت هاي مهم نرم افزار BSCOM

اگه سوالي هست بگو

1- ما چرا بايد از گزينه COMPILE استفاده كنيم

2- براي اين كه ببينيم برنامه اي رو كه نوشتيم از لحاظ نوشتاري (لغت) مشكلي داره يا نه . اگه بعد از نوشتن برنامه COMPILE نكني نرم افزار اجازه ريخت برنامه روي ميكروكنترلر رو نميده

1- اها گرفتم چي مي گي

2- خوب حالا بريم سر اصل مطب كه اشنايي با برنامه نويسي هستش كه مهمترين بخشه پس خوب گوش كن

1- اي به چشم

2- پس بزار اول يك مقدمه اي بگم بعد . ببين برنامه اي رو كه شما مي خاي براي ميكروكنترلر توي محيط برنامه نويسي نرم افزار بنويسي به زبان هاي مختلف نوشته مي شه و هر زبان برنامه نويسي نرم افزار مخصوص خودشو داره مثلا براي نوشتن برنامه به زبان بيسيك از نرم افزار BASCOM . براي نوشتن با زبان C از نرم افزار CODVISION استفاده مي كنيم . كه من بيسيك رو دوست دارم وبهت ياد مي دم . چون زبان برنامه نويسي بسيار ساده اي هستش . خوب ديگه وقتشه بريم سر دستورات برنامه نويسي.

دستور $REGFILE : اولين حركتي كه بايد در محيط برنامه نويسي انجام بدي اينه كه ميكروكنترلري رو كه مي خاي ازش استفاده كني رو بايد در محيط برنامه نويسي ذكر كني مثلا تو يك ميكرو كنترلر ATMEGA16 خريدي پس بايد در محيط برنامه نويسي اينطور ميكرو رو معرفي كني

$REGFILE = "M16DEF.DAT" براي ATMEGA16

$REGFILE = "8535DEF.DAT" براي AT90S8535

$REGFILE="AT12DEF.DAT" براي ATTINY12

يك راه ديگه هم هست كه ميكرو رو از داخل تنظيمات خود نرم افزار معرفي مي كني

1- چطوري . يعني ديگه نمي خاد دستور $REGFILE رو بنويسيم

2- نه لازم نيست . براي اين كار به منوي OPTIONS نرم افزار مراجعه مي كني سپس گزينه COMPILR و بعد گزينه CHIP رو كليك مي كني يك پنجره باز مي شه كه اول صفحه نوشته CHIP . كه جلوش يك كادر هستش كه ميكرو رو اونجا انتخاب مي كني سپس OK مي كني

1- پس هميشه در برنامه اولين كاري كه بايد بكنم اينه كه ميكروكنترلر رو معرفي كنم طبق روش بالا كه گفتي نه ؟

2- اره كاملا درسته

دستور $CRYSTAL : دومين گامي كه بعد از معرفي ميكرو بايد انجام بدي اينه كه فركانس كاري ميكرو رو براي نرم افزار مشخص كني كه براي اين كار از دستور $CRYSTAL استفاده ميكني مثلا فرض كن فركانس ميكروي MEGA16 تو 8 مگاهرتز هستش يعني 8000000 هرتز كه با اين دستور فركانس كاري رو معرفي مي كني البته به هرتز :

$CRYSTAL = 8000000

فركانس كاري ميكرو رو هم مي توني از داخل نرم افزار انتخاب كني به اين صورت كه مي روي داخل منوي OPTIONS سپس گزينه COMPILER سپس گزينه COMMUNICATION رو كليك مي كني يك پنجره باز مي شه در داخل اين پنجره يك جايي نوشته FERQUENCY كه جلوش شما بايد فركانس رو انتخاب كني و بعد OK كني

END : در گام سوم پايان هر برنامه اي بايد از دستور END استفاده كني يعني اتمام برنامه

1- خوب بگو ببينم كه گام چهارم چي هستش

2- گام چهارمي وجود نداره خيط شدي . در واقع برنامه نويسي يعني قسمت شيرين كار از اينجا شروع ميشه. خوب حالا بهت توضيح ميدم كه براي نوشتن يك برنامه بايد چكار كرد اولين چيزي رو كه بايد بهت ياد بدم متغييرها هستند . همونطور كه از اسمش پيداست يعني قابل تغيير هستش . انواع متغيير ها عبارتند از: 1- BIT 2- BYTE 3- WORD 4- INTEGER 5- LONG 6- SINGLE 7- STRING .

BIT كه يعني 0 و 1

BYTE تشكيل شده از هشت بيت و هر BYTE 0 تا 255 مقدار دارد

WORD تشكيل شده از دو BYTE و هر WORD 0 تا 65535 مقدار دارد

با بقيه متغيير ها هم فعلا كاري نداريم

1- خوب درست كارش چي هست و كجا كاربرد داره

2- بزار وقتي كه يكم رفتيم جلوتر كم كم مي فهمي خوب ادامه مطلب رو گوش كن

دستور DIM : DIM به معني معرفي اسم متغيير است كه مي تونه هر اسمي باشه مثلا : A يا B يا ALI يا TEMO حتي اسم خودت فقط براي اينه كه متغيير رو يك نامي بهش بدي كه با بقيه متغييرها قاطي نشه

دستور AS : AS به معني نوع متغيير هستش كه بايد يكي از انواع متغيير هاي BIT يا BYTE يا INTEGER باشه

مثال: DIM A AS BYTE

DIM B AS BIT

DIM ALI AS BYTE

DIM N AS SINGLE

1- يك مثال مفهومي تر بزن

2- باشه مثلا در DIM A AS BYTE . به اين معني كه متغييري كه نامش هست A از نوع بايت (BYTE) مي باشد

DIM ALI AS BIT . يعني متغييري كه نامش هست ALI از نوع بيت BIT مي باشد .

1- حالا فهميدم

2- بزار بريم جلوتر مثال روز برات روشن ميشه كه اين دستورات كجا كاربرد داره

در ضمن شما گاهي لازم است كه به متغيير مقدار هم بدي كه به ترتيب زير عمل مي كني

مثلا شما يك متغيير داري از نوع بايت

DIM S AS BYTE

كه مي توني از 0 تا 255 بهش مقدار بدي به تريتيب زير

S = 1 يا S = 12 يا S = 0 يا S = 255 يا هر رقمي كه از 0 تا 255 دوست داشتي البته اگه لازم بود

دستور INCR : با نوشتن اين دستو شما مي توانيد يك متغيير را افزايش بدي به مثال زير توجه كن بهتر مي فهمي

DIM B AS BYTE

B=0

INCR B

بزار از خط اول برات توضيح بدم برنامه اي كه ما نوشتم رو ميكرو مياد از خط اول شروع مي كنه به خوندن خط اول يعني ما يك متغيري داريم به نام B و از نوع BYTE

خط دوم به متغيير B مقدار داديم

خط سوم دستور داديم كه متغير B رو يك واحد افزايش بده وقتي كه ميكرو به خط سوم رسيد و اونو خوند اگه متغيير ما بوده 0 الان ميشه 1

1- كاربردش چيه اين دستور INCR

2- كاربردش توي شمارنده هستش

دستور DECR : اين دستور برعكس دستور قبل هستش و يك واحد از متغيير ما كم مي كنه

مثال :

DIM U AS BYTE

U = 20

DECR U

خط اول يعني ما يك متغييري داريم كه اسمش هست U و از نوع بايت

خط دوم به U مقدار داديم

خط سوم يك واحد از مقدار U كم كرديم

بزار يك مثال كاربردي تر بزنم :

$REGFILE = "M16DEF.DAT"

$CRYSTAL = 8000000

DIM K AS BYTE

K = 100

INCR K

DECR K

END

خوب حال خوب گوش كن

خط اول ما اومديم نوع ميكرو مونو مشخص كرديم كه هست مگا16

خط دوم فركانس كاري ميكرو رو مشخص كردم

خط سوم گفتيم كه ما يك معغييري داريم به نام K و از نوع بايت

خط چهارم براي متغيير بايت يك مقدار داديم

خط پنجم دستور داديم كه يك واحد به متغيير K اضافه كن يعني اگه 100 بوده الان مي شه 101

خط ششم دستور داديم كه يك واحد از متغيير K كم كن يعني الان كه هست 101 يك واحد كه كم بشه ميشه 100

خط هفتم دستور پايان برنامه رو داديم

1- سوال دارم اگه مثلا در مثال بالا دستور INCR و يا DECR رو دو بار زير هم بنويسيم چي مي شه

2- براي پاسخ به سوالت به يك مثال ديگه توجه كن

 

$REGFILE = "M16DEF.DAT"

$CRYSTAL = 8000000

DIM K AS BYTE

K = 100

INCR K

DECR K

DECR K

DECR K

INCR K

END

خوب حال خوب گوش كن

خط اول ما اومديم نوع ميكرو مونو مشخص كرديم كه هست مگا16

خط دوم فركانس كاري ميكرو رو مشخص كردم

خط سوم گفتيم كه ما يك معغييري داريم به نام K و از نوع بايت

خط چهارم براي متغيير بايت يك مقدار داديم

خط پنجم دستور داديم كه يك واحد به متغيير K اضافه كن يعني اگه 100 بوده الان مي شه 101

خط ششم دستور داديم كه يك واحد از متغيير K كم كن يعني الان كه هست 101 يك واحد كه كم بشه ميشه 100

خط هفتم دوباره دستور داديم كه يك واحد از متغيير K كم كن خوب متغيير K كه الان هستش 100 ميشه 99

خط هشتم دوباره دستور داديم كه يك واحد از متغيير K كم كن خوب متغيير K كه 99 بوده ميشه الان 98

1- فهميدم بزار خط نهم و دهم رو خودم بگم ببينم ياد گرفتم يا نه

خط نهم يعني خط نهم دستور داديم يك واحد به متغيير K اضاف بشه يعني الان كه K هستش 98 بعد از خونده شدن دستور خط نهم ميشه 99 و خط دهم يعني اتمام برنامه

2- احسنت افرين داري راه ميافتي ها

1- دستور بعدي چيه

2- دستور بعدي در مورد LCD هستش . بزار اول در مورد خود LCD برات بگم بعد دستوراتش رو با هم مرور مي كنيم

LCD ها انواع مختلفي دارند اولي گرافيكي – دومي كاركتري كه من با كاركتري كار مي كنم شبيه lcd ماشين حساب هستش كه از نظر ابعاد هم باهم فرق دارن مثلا 16 در 1 – 16 در 2 – 16 در 4 – 40 در 4 و...

1- خوب مثلا اين شماره ها براي چيه مثلا همين 16 در 2

2- عدد اول يعني 16 به ما ميگه كه اين lcd ما 16 رديف ( افقي ) داره عدد دوم بعني 2 به ما مي گه اين lcd دو ستون ( عممودي ) داره

1- حالا گرفتم

2- اين lcd ها 14 پايه دارند كه ما فقط از 9 پايه ان استفاده مي كنيم كه براي استفاده از ان و وصل ان به ميكروكنترلر به ترتيب زير عمل مي كنيم

پايه اول vss نام دارد كه به زمين وصل ميشه

پايه دوم vdd هستش كه به ولتاژ 5 ولت وصل ميشه

پايه سوم vee هستش كه به زمين وصل ميشه

پايه چهارم rs هستش كه به ميكرو وصل مي شه . بعدا بهت مي گم به كجاي ميكرو وصل ميشه

پايه پنجم rw هستش كه اونم به زمين وصل ميشه

پايه ششم E هستش كه اونم به ميكرو وصل مي شه

پايه هاي 7 8 9 10 كه هيچي به جايي وصل نميشن

پايه 11 DB4 اسمش هست اونم به ميكرو وصل ميشه

پايه 12 DB5 اسمش هست اونم به ميكرو وصل ميشه

پايه 13 DB6 اسمش هست اونم به ميكرو وصل ميشه

پايه 14 DB7 اسمش هست اونم به ميكرو وصل ميشه

 

1- يك سوال بعضي از پايه هاي بالا رو كه معرفي كردي گفتي وصل ميشه به LCD ولي نگفتي به كدوم پايه LCD بايد وصل بشه

2- بله نگفتم ولي اگر يكم صبر كني بهت ميگم . اگه يادت باشه وقتي كه داشتم نرم افزار BASCOM رو برات توضيح مي دادم گفتم كه توي منوي OPTINS بعد COMPILER يك گزينه هست به نام LCD شما اونجا مشخص مي كني كه پايه هاي ميكروكنترلر به كدوم پايه LCD وصل بشه كه بايد به ترتيب زير عمل كني بعد از اين كه وارد گزينه LCD توي نرم افزار شدي يك پنجره باز ميشه كه سمت راست اون شش كادر هستش كه شما بايد اونجا مشخص كني كه LCD به كدوم پايه هاي ميكرو وصل بشه . مي دانيم كه اكثر ميكرو ها داراي چهار PORT هستند البته به غير از خانواده TINY

1- پورت چيه واز؟؟

2- به هر هشت پايه ميكرو يك پورت ميگن كه هر پورت باز خودش يك اسم داره مثلا ATMEGA32 داراي چهار پورت هستش به نام هاي A –B –C –D هر كدو از اين پورت ها هشت پايه هستند

1- از كجا بفهميم كه مثلا پورت A يا پورت C كجاست

2- باز هم از روي ديتاشيت خود ايسي

1- خوب ادامه بده

2- هنگامي كه شما مي خاي LCD رو به ميكرو وصل كني بايد در گزينه LCD يك پورت رو به دلخاه انتخاب كني

1- فرقي نميكنه كه كدوم پورت باشه

2- نه هر كدو از پورت ها كه دوست داشته مثلا پورت A يا پورت D

1- اها خوب ادامه بده

2- مثلا حال كردي كه LCD رو به پورت C وصل كني براي اين كار در نرم افزار وقتي كه به قسمت LCD رفتي و يك پنجره باز شد در قسمت راست پنجره شش گزينه براي انتخاب وجود داره كه بايد به ترتيب زير عمل كني :

اولين گزينه از بالا نوشته ENABLE كه بايد PORTC.5 رو انتخاب كني

دومين گزينه نوشته RS كه بايد PORTC.4 رو انتخاب كني

سومين گزينه نوشته DB7 كه بايد PORTC.3 رو انتخاب كني

چهارمين گزينه نوشته DB6 كه بايد PORTC.2 رو انتخاب كني

پنجمي گزينه نوشته DB5 كه بايد PORTC.1 رو انتخاب كني

ششمين گزينه نوشته DB4 كه بايد PORTC.0 رو انتخاب كني

حال فهميدي كدوم پايه هاي ميكرو به LCD وصل ميشه

1- اها پس سخت افزاري هم بايد به ترتيبي كه مثل بالا مشخص كرديم LCD رو به ميكروكنترلر وصل كنيم

2- كاملا درسته. شما مختاري كه هر PORT كه دوست داشتي رو به ميكرو وصل كني ولي بايد هر پورتي كه توي ذهنت در نظر داري رو توي نرم افزار مثل شكل بالا انتخاب كني

يك نكته ديگه اينكه در قسمت سمت چپ همين پنجره LCD يك گزينه هست به نام LCD TYPE كه شما اونجا اندازه LCD تو مشخص مي كني مثلا يك LCD رفتي خريدي كه اندازش هست 16در 2 توي اين گزينه بايد 16*2 رو انتخاب كني بعدي OK رو بزني . خوب حال بريم سر دستورات LCD :

دستور CLS : اين دستور كل LCD رو پاك و اماده نوشتن مي كنه كه هميشه بايد قبل از دستور نوشت روي LCD اين دستور نوشته بشه

دستور LCD : خوب با اين دستور شما مي توني يك عبارت رو روي LCD نمايش بدي مثلا يك عدد يا يك اسم يا يك كلمه يا يك متغيير . البته قبل اين دستور بايد حتما CLS نوشته بشه اين مثال توجه كن

$REGFILE = "M16DEF.DAT"

$CRYSTAL = 8000000

CLS

LCD " ALI "

END

 

دو خط اول رو كه مي دوني چي هستش .در خط سوم دستور پاك كردن LCD رو با دستور CLS داديم در خط چهارم يعني اينكه روي صفحه LCD بنويس ALI . البته به جاي ALI هر چيز ديگه اي هم مي شه نوشت از قبيل عدد . كلمه جمله

مثل مثال زير

$REGFILE = "M16DEF.DAT"

$CRYSTAL = 8000000

CLS

LCD " 999 "

END

مثل مثال قبل

1- اها فهميدم

2- يادت مياد كه بهت گفتم نرم افزار بيسكام يك جايي داره به نام شبيه ساز

1- اره چطور مگه

2- خوب تو مي توني اونجا اين دستوراتي رو كه امروز يادت دادم رو اونجا شبيه سازي كني

1- تو كه گفتي از اين شبيه سازش خوشت نمي ياد

2- اره منظورم اين بود كه توي كار هاي بزرگ نميشه ازش استفاده كرد ولي توي كارهاي كوچيك ميشه ازش استفاده كرد

1- حالا چي كار مي كنه اين شبيه ساز نرم افزار

2- برنامه اي رو كه تو نوشتي برات شبيه سازي مي كنه داخلش يك LCD هم داره برو حال كن

1- چطوري ازش استفاده كنم

2- بعد از اين كه تو برنامه رو نوشتي بايد برنامتو از نظر نداشتن خطا چك كني

1- چطوري

2- با زدن كليد F7 . بعد اگه برنامت اشكالي نداشت كليد F2 رو مي زني و وارد محيط شبيه ساز يا همون SIMULATOR ميشي

1- اينطوري گيج ميشم يك مثال هم بزن

2- باشه به روي چشم فرض كن كه ما يكي از برنامه هاي بالا رو نوشتيم مثل برنامه زير:

$REGFILE = "M16DEF.DAT"

$CRYSTAL = 8000000

CLS

LCD " ALI "

END

درضمن تنظيمات روهم مثل بالا كه گفتم پايه هاي LCD رو توي نرم افزار انتخاب كن رو مثل بالا انتخاب مي كني

بعد دكمه F7 رو بزن تا برنامه چك بشه

بعد دكمه F2 رو بزن تا وارد محيط شبيه ساز بشي . توي محيط شبيه ساز خيلي دكمه هستش كه من فقط چند تارو كه كاربرد داره برات ميگم

دكمه اوال از بالا سمت چپ شبيه دكمه PLAY ويدو هست كه اسمش هست RUN PROGRAM كه براي اجراي برنامه شبيه ساز هستش

دكمه بعدي كه هچي دكمه بقليش شبييه دكمه استپ ويدو هست كه اسمش هست STOP PROGRAM كه براي توقف شبيه سازي هستش

چند تا دكمه اون طرفتر يك دكمه كه داخلش يك مستطيل ابي رنگي هستش و روش نوشته LCD . اين دكمه رو وقتي كه ميزني يك LCD توشه

خوب ادامه حالا كه وارد محيط شبيه ساز شدي اول براي شبيه سازي مثال بالا دكمه LCD رو انتخاب مي كني بعد دكمه RUN PROGRAM رو ميزني بايد يك ده پانزده ثانيه صبر مي كني تا روي LCD نوشته بشه ALI

براي امروزديگه بسه باشه بقيش براي يك فرصت ديگه فعلا باي

لینک به دیدگاه

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- سلام خوبي

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 ها يك بار روشن و بارديگه خاموش مي شن.

 

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

 

پايان قسمت چهارم

لینک به دیدگاه

1- سلام خوبي

2- سلام من خوبم تو چطوري چكار مي كني

1- خوبم ولي يكم ناراحتم

2- چرا

1- بابا تمام اين مثال هايي رو كه گفته بودي توي نرم افزار BASCOM تست كردم همشون هم درست بود ولي چه فايده وقتي كه نمي تونم توي محيط BASCOM شبيه سازيشون كنم

2- خوب من كه بهت گفته بودم كه برو توي نرم افزار پروتوس تستش كن

1- اره گفته بودي ولي من كه ياد ندارم باهاش كار كنم

2- خوب بهت يك لينك داده بودم كه بري اونجا دربارش مطلب زياده

1- خوب درست ولي اگه توضيح بدي اونايي رو هم كه از توي لينك گرفتم باهاش اطلاعاتم كامل مي شه

2- خيلي خوب چاره چيه ما كه اين همه گفتيم اموزش پروتوس هم مي گيم ديگه چي ؟؟

1- دمت گرم بابا خيلي حال دادي

2- فقط يك چيزي رو از همين الان بگم من اين نرم افزار پروتوس رو بهت مي گم و از اونجايي كه اين نرم افزار بعضي وقتا EROR هاي بدي ميده بايد مشكلتو خودت حل كني يا توي توي انجمن مشكلت رو بگي چون من فقط در حد كاركردن با اين نرم افزار سرم ميشه .

1- باشه هر چي كه تو بگي

2- خوب پس اين جلسه نحوه نصب و كاركردن با نرم افزار پروتوس ورژن 6 رو برات توضيح مي دم

قبل از اينكه نحوه نصب رو برات توضيح بدم بزار يك مقدار درباره كاربرد نرم افزار برات بگم . اين نرم افزار پروتوس يك نوع شبيه ساز هستش كه علاوه بر شبيه سازي قادره يك مدار رو اناليز كنه و همچنين امكان كشيدن پشت فيبر مدار چاپي رو هم ميشه از امكاناتش شمرد . ما در اينجا فقط مي خوايم از امكان شبيه سازيش استفاده كنيم پروتوس يك شبيه ساز بسيار قدرت مند هستش كه شما مي توني هر مداري رو كه مي خاي توش شبيه سازي كني و نتيجه كارت رو ببيني . خود من هر وقت كه مي خام يك مداري رو درست كنم اول با پروتوس شبيه سازيش مي كنم بعد از اينكه نتيجه گرفتم مي روم و اونو روي برد پياده مي كنم . يكي از امكاناتي كه نرم افزار پروتوس در اختيار ما قرار داده شبيه سازي مدارات ميكروكنترل هستش و شما قبل از اين كه خاسته باشي مدارتو روي برد سوار كني مي توني توي پروتوس شبيه سازيش كني و بعد از اينكه نتيجه دلخواهت رو گرفتي اونو روي برد پياده كني . شما داخل اين پروتوس هر قطعه اي رو كه حتي تا حالا نديديش پيدا مي كني و باهاش كار كني .

خوب حالا بريم سر نصب نرم افزار پروتوس ورژن6 :

براي نصب نرم افزار PROTEUS ابتدا با اجرا كردن SETUP يا INSTALL ان انرا نصب مي كنيم بعد از اينكه نصب شد مي ريم داخل پوشه CRACK كه در داخل CD نرم افزارش هست . سه تا CRACK داخلش هست كه هر سه تاشون شبيه ادمك هستند و هر سه تا رو بايد كپي كني و در داخل پوشه BIN بريزي يعني PASTE كني حالا اين فايل BIN رو حتما از خود مي پرسي كه كجاست پوشه BIN همون جايي هستش كه نرم افزار رو ريختي بعد از اينكه اين كارا رو كردي نوبت مي رسه به اجرا كردن خود CRACK هايي كه ريختي كه بايد يكي يكي اونا رو اجرا كني بعد از اينكه هر كدوم رو اجرا كردي يك كادر كوچيك باز مي شه كه سه گزينه داره اولي NEXT دومي RESTORE و سومي PATCH مي باشد كه بعد از باز شدن پنجره بايد روي گزينه RESTORE يا PATCH كه دقيقا يادم نيست كدومشون هست كليك كني كه يك پنجره باز مي شه داخل اين پنجره جديد يك فايل هستش كه بايد اونو انتخاب كني و هي NEXT رو بزني تا وقتي كه پغام بده CRACK SUCCESSFUL بعد از اين كه هرسه تا رو اجرا كردي نرم افزار اماده اجرا هستش .

1- خوب تا اينجاش كه راحت بود حالا برو سر توضيح خود نرم افزار

2- باشه . خوب قصد من از اموزش اين نرم افزار PROTUES فقط شبيه سازي خود ميكروكنترلرAVR هستش .براي اين كه بتوني اين كار رو بكني پس از اينكه پروتوس رو باز كردي بايد روي يك شكل كه در بالاي نرم افزار است كليك كني كه اين شكل شبيه يك OPAMP است و از سمت چپ اولين شكل هستش كه اگر روي اين شكل موس رو نگه داري نوشته COMPONENT . پس از اين كه روي اين شكل كليك كردي يكم پايين تر از اين شكل دو تا گزينه پيدا ميشه كه اوليش هست P و دوميش هست L كه تو بايد روي P كليك كني تا كتابخانه قطعت ضاهر بشه كه بالاي پنجره اين كتابخانه نوشته PICK DEVICES . خوب تو بايد از داخل اين پنجره قطعاتي رو كه مي خاي انتخاب كني مثلا اگر يك ميكرو كنترلر AT90S8535 مي خاي بايد ابتدا روي گزينه MICRO كليك كني تا ليست كل ميكروكنترلر ها اعم از 8051-AVR-PIC رو برات نمايش بده كه ما براي انتخاب ميكروكنترلر AT90S8535 بايد روي ان دوبار كليك كنيم تا در كادر كناري سمت چپ نرم افزار ذخيره شود . اگر ميكروسوييچ مي خاستي در كادر بالايي همين پنجره گزينه ACTIVE رو انتخاب كني كه توش قصعاتي هستش كه كاربرد زيادي دارند مثل باطري – موتورDC-LED- و همچنين ميكروسوييچ . خوب براي اين كه ميكروسوييچ خاستي بياري بايد روي BUTTON دو بار كليك كني تا اون هم در كادر سمت چپ نرم افزار ذخيره بشه منظورم از كادر سمت چپ نرم افزار كادي هستش كه بالاش نوشته DEVICES و دقيقا زير همون LوP كه بهت گفتم قرار داره. در ضمن براي بزرگ نمايي صفحه نرم افزار بايد از F6 و F7 استفاده كني . يك نكته ديگه اون هم اينكه براي اين كه از VCC و GND نرم افزار استفاده كني بايد بري روي يك شكل ديگه كه علامت دوتا پيكان هستش كه مخالف جهت يكديگردن و اين شكل 7 تا شكل بعد از اون شكلي رو كه گفتم شكل OPAMP هستش به سمت راست قرار داره كه اگه روي اين شكل با موس وايستي نوشته INTER-SHEET TERMINAL كه بعد از كليك روي اين گزينه يك كادر در سمت چپ نرم افزار باز ميشه كه هم GND داره و هم VCC براي اينكه بتوني اين دوتارو روي صفحه بياري كافيه روش يك بار كليك چپ كني بعد بياي روي صفحه نرم افزار دو باره كليك چپ كني تا روي صفحه نرم افزار ضاهر يشه. براي ديگر قطعات هم بايد همين كار رو بكني يعني قطعاتي رو كه ذخيره كردي رو يك بار روش كليك چپ كني تا انتخاب بشه بعد بياي روي صفحه نرم افزار دوباره كليك چپ كني تا ضاهر بشه . براي پاك كردن قطعه از روي صفحه برنامه بايد روي اون دوبار كليك راست كني . براي تنضيمات يك قطعه مثلا عوض كردن مقدار يك مقاومت يا يك باطري بايد ابتدا يك بار روي اون كليك راست كني تا قطعه قرمز بشه بعد دوباره روش كليك چپ كني تا يك پنجره باز بشه و بتوني مقدار يا هر چيز ديگه شو عوض كني ولي مواظب باش كه يك وقت دوبار روي اون كليك راست نكي چون قطعه پاك بشه و اگر يك مومقع اين اشتباه رو كردي مي توني ctrl + z رو از روي صفحه كليد بزني تا قطعه برگرده . براي اين كه جاي يك قطعه رو روي صفحه عوض كني بايد ابتدا روي قطعه يك بار كليك راست كني تا انتخاب بشه بعد با كليك چپ هر طرف كه خاستي ببريش .

بزار يك كار عملي انجام بديم تا طرز راه اندازي يا شبيه سازي ميكروكنترلر رو توي محيط برنامه ياد بگيري

فرض كن كه مي خايم يك مدار ساده مثلا يك چشمك زن رو با AVR درست كني كه از اين ساده تر ديگه وجود نداره اين چشمك زن رو مي خايم با هشت LED درست كني كه همه هم زمان با هم روشن خاموش مي شن. براي اين كار اول مي يايم توي محيط پروتوس تا قطعات رو به هم وصل كنيم . خوب طبق همون روشي كه گفته بودم قطعات رو مي ياري ميكروكنترلر رو از نوع AT90S8535 انتخاب مي كنيم و همچنين اول ميكرو كنترلر رو مياريم در ضمن اند اين هشتا LED رو به ترتيب به پايه هاي A.0 تا A.7 وصل مي كنيم و سر ديگر اين LED ها رو به GND وصل كن GND رو هم همون طور كه بهت ياد دادم بيار بعد برو روي توي منوي FILE و روي گزينه SAVE DESING AS كليك كن و مسيري رو كه براي SAVE كردن مدار ازت مي خاد رو بده همون جايي كه نرم افزار رو نصب كردي يعني توي پوشه SAMPLE البته بهتره توي اين پوشه قبلش يك پوشه جديد ايجاد كني و مدارتو توي اين پوشه جيد SAVE كني .

1- من يك چيز رو نفهميدم برنامه اي نمي خاي براش بنويسي و برنامه رو چطوري مي خاي توش بريزي

2- اگه يكم صبر كني به اونجاشم مي رسيم . خوب تا اينجا كه قسمت سخت افزاري مدار رو انجام داديم حالا بايد براي اين مدار يك برنامه هم بنويسيم كه اونم خيلي راحته خوب BASCOM رو باز كن و يك صفحه جديد ايجاد كن و برنامه زير رو بنويس :

CONFIG PORTA = OUTPUT

DO

TOGGLE PORTA

WAITMS 100

LOOP

براي انتخاب نوع ميكروكنترلر همونطور كه بهت ياد دادم برو از داخل خود BASCOM انتخابش كن و حتما AT90S8535 رو انتخاب كن و براي انتخاب فركانس كاري هم بازم همونطوري كه بهت ياد دادم از داخل خود نرم افزار انتخابش كن و بزارش روي 8000000 هرتز بعد كه اين تنظيمات رو انجام دادي و OK كردي بيا اول دكمه F7 رو بزن تا برنامه چك بشه تا خطا نداشته باشه وقتي كه اين دكمه F7 رو ميزني قبل از اينكه برنامه رو چك كنه ازت يك مسير ميخاد كه برنامه رو كجا ذخيره كنه كه شما بايد دقيقا ادرس رو همون جايي بدي كه مدارتو اونجا SAVE كردي خوب كار ما با BASCOM تمام شد و اگه حال كردي مي توني ببنديش و بري سر نرم افزار پروتوس . اول پروتوس رو باز كن بعد برو توي منوي FILE و گزينه

LOAD DESING رو انتخاب كن تا يك پنجره باز بشه بعد از طريق اين پنجره برو اون جايي كه مدارتو SAVE كردي و مدارتو انتخاب كن تا روي صفحه بياد . خوب گفتي كه چطوري برنامه اي رو كه نوشتيم مي ريزيم توي ميكروكنترلر خوب الان بهت مي گم براي اين كار بايد روي ميكروكنترلر يك بار كليك راست كني تا انتخاب بشه و به رنگ قرمز در بياد بعد يك بار كليك چپ مي كني تا يك پنجره باز بشه داخل اين پنجره يك جايي نوشته PROGRAM FILE كه جلوش يك كادر هستش و جلوي اين كادر يك شكل زرد رنگ هستش كه بايد روي اين شكل كليك كني تا دوباره يك كادر ديگه باز بشه . به وسيله اين كادري كه الان باز شد بايد بري برنامه اي كه نوشتي رو از اونجايي كه SAVE قبلا كردي انتخاب كني منظور فايلي هستش كه با پسوند HEX هستش بعد كه انتخاب كردي و OK رو زدي برنامه خودكار توي ميكرو قرار مي گيره بعد بايد براي انتخاب فركانس كاري ميكرو بايد در كادري كه نوشته CLOCK FREQUENCY مقدار فركانس ميكرو رو بنويسي البته به مگا هرتز 8MHZ . خوب كار ديگه تموم شد OK رو مي زني تا پنجره بسته بشه بعد براي اجراي اين مدار بايد بري پايين صفحه و روي علامتي كه شبيه PLAY ضبط هستش كليك كني كه شبيه مثلث هستش و مي بيني كه هر هشتا LED دارن باهم ديگه هم زمان چشمك مي زنن. در ضمن اگر برنامه EROR داد اين ديگه تقصير من نيست چون من به قلق نرم افزاره مسلط نيستم موفق باشي.

پايان قسمت پنجم

لینک به دیدگاه

1- سلام خوبي

2- سلام قربانت تو چطوري

1- خوبم . امروز چي مي خاي يادم بدي

2- اول بگو كه با اين پروتوس مشكلي نداشتي

1- اين پروتوس اوايل eror ميداد ولي رفتم مشكلم رو حل كردم

2- خوبه . امروز مي خام طرز اتصال صفحه كليد ماتريسي به ميكروكنترلر همراه با برنامه اون بهت بگم

1- صفحه كليد ماتريسي ديگه چيه

2- همون صفحه كليدي كه ماشين حسابا و تلفن ها دارن

1- اها ادامه بده

2- اين صفحه كليد ها از نظر سخت افزاري 8 تا پايه دارن كه مستقيم وصل ميشن به ميكروكنترلر ويك پوت كامل رو اشغال مي كنن

1- منظورت از اينكه يك پورت كامل رو اشغال مي كنن چيه ؟

2- منظورم اينه كه بايد وصل بشن به هشتا از پايه هاي ميكرو مثلا وصل بشن به پورت A يا پورت B يا هر پورتي فرقي نداره كدوم پورت ولي بايد اگه مي خاي به پورت A وصل كني بايد فقط به پايه هاي پورت A وصل بشن نبايد مثلا چندتا رو به پايه هاي A و چندتاي ديگشو وصل كني مثلا به پايه هاي پورت B .

خوب بزار بهتر بهت بگم كه بايد چطوري وصلش كني

1- يك لحظه وايستا اصلا چرا ما بايد كيبرد رو وصل كنيم به ميكرو خوب كاربردشم بگو ديگه مارو گيج كردي

2- باشه معزرت مي خام . فرض كن كه مي خاي يك ماشين حساب با ميكروكنترلر درست كني يا اينكه مي خاي اعداد 0 تا 15 رو روي LCD نمايش بدي . يا يكم پيشرفته تر مي توني يك قفل رمز الكترونيكي درست كني

1- حالا فهميدم ادامه بده

2- خوب مي خاستم بهت بگم كه چطوري كيبرد رو به ميكرو وصل كني . خوب اين خيلي ساده است ابتدا يك پورتي كه حال كردي كيبرد رو بهش وصل كني رو در نظر مي گيري خوب گفتم كه كيبرد 8 تا پايه داره خوب ميكرو هم هر پورتش 8 تا پايه داره مثلا مي خاي به پورت A وصل كني . خوب براي اين كار پايه اول كيبرد رو وصل مي كني به پايه A.0 پايه دوم رو وصل مي كني به پايه A.1 و الي اخر كه بايد پايه اخر يعني پايه هشتم كيبرد رو وصل كني به پايه A.7

1- خوب اين طرز اتصال شو فهميدم برنام چطوري به ميكرو بديم

2- عجله مي كني يا . خوب حالا مي ريم سر برنامه . قبلش بگم كه وصل كردن صفحه كليد به ميكرو رو در اصطلاح بهش

ميگن اسكن صفحه كليد . اينو گفتم كه يك موقع جايي شنيدي نگي اين ديگه چه اصطلاحيه . خوب برنامه اتصال صفحه كليد ماتريسي به ميكرو ساده هستش. طرز كار به اين صورت هستش كه ما اول يك متغيير رو از نوع بايت تعريف مي كنيم بعد مقدار خونده شده از كيبرد رو مي ريزيم توي اين متغيير بعد با فرمان CLS و LCD اونو روي LCD نمايش مي ديم به همين سادگي . خوب اول بايد ما براي ميكرو تعريف كنيم كه اقا ما ميخايم يك كيبرد ماتريسي به جنابعالي وصل كنيم تا طفلي بفهمه كه اين جسمي كه بهش وصل شده چيه . يادت مي ياد گفتم كه براي استفاده از امكانات ميكرو بايد اونها رو پيكره بندي كني يا به اصطلاح CONFIG كني

1- اره

2- يادت مياد كه براي استفاده از امكان ورودي خروجي ميكرو از دستور CONFIG PORTA = OUTPUT براي خروجي و CONFIG PINA.0 = INPUT براي ورودي استفاده مي كرديم

1- بازم اره

2- خوب يكي از امكانات ميكروكنترلر AVR اينكه كه مي تونه كليد هايي رو كه روي كيبرد فشرده ميشه رو بخونه كه چه عددي بوده و براي استفاده از اين امكان هم مثل ساير امكانات ديگه بايد از دستور CONFIG استفاده كنيم

CONFIG KBD = PORTB

با دستور بالا ما به ميكرو فهمانديم كه اقا ما مي خايم يك كيبرد به شما متصل كنيم اون هم به پورت B . توجه كن كه پورتي رو كه جلوي علامتي مساوي مي نويسي مي تونه يكي از چهار پورت A يا B يا C ويا D باشه ولي هر پورتي رو كه مي نويسي كيبرد رو هم بايد به همون وصل كني .

DIM A AS BYTE

خوب ما يك متغيير تعريف كرديم كه مقدار خونده شده از كيبرد رو بريزيم توي اين متغيير

1- منظورت از اين كه مقدار خونده شده از كيبرد رو مي ريزيم توي متغيير چيه

2- خوب ببين ما وقتي كه كار برنامه نويسيمون تموم شد و مدار رو راه اندازي كرديم مثلا يك كليد رو از روي صفحه كليد فشار داديم ميكرو قادره مقدار عددي اين كليد فشرده شده رو بخونه مثلا كليد شما ره يك رو فشار داديم ميكرو مي فهمه كه كليد شماره يك فشرده شده خوب اين مقدار عددي بايد در يك جا قرار بگيره و ما جايي بهتر از اينكه اين مقدار عددي رو انتقال بديم به يك متغيير گير نياورديم . البته وقتي كه مطلب كيبرد رو تموم كردم كامل مي فهمي چي به چيه. بزار يك مثال بزنم . فرض كن كه ما يك كيبرد داريم بايك ميكروكنترلر و يك LCD مي خايم اين سه تا رو به هم وصل كنيم وهنگامي كه يك كليد از روي صفحه كليد فشرده شد ميكرو اونو بخونه و مقدار اون عدد رو روي LCD نمايش بده كه برنامه به صورت زير هستش :

CONFIG KBD = PORTA

DIM A AS BYTE

MAIN:

DO

A = GETKBD( )

IF A

LOOP

END

MASHHAD :

CLS

LCD A

DO

A = GETKBD ( )

LOOP UNTIL A = 16

GOTO MAIN

كل برنامه همين هستش البته به غير از معرفي ميكرو و انتخاب فركانس كاري كه بايد در اول برنامه نوشته بشن. خوب حالا بريم سر تحليل برنامه.

خط اول كه ما پيكره بندي كيبرد رو مشخص كرديم كه مي خاهد به پورت A متصل بشه

خط دوم ما يك متغيير تعريف كرديم كه مقدار خوانده شده از كيبرد ريخته بشه يا به عبارتي انتقال داده بشه به داخل اين متغيير

خط سوم كه يك زير برنامه تعريف كرديم

خط بعدي نوشتيم DO يعني ابتداي حلقه

خط بعد نوشتيم A = GETKBD ( ) با اين دستور مقداري كه ميكروكنترلر از كيبرد مي خونه ميريزه توي متغيير A

خط بعد نوشتيم IF A

خط بعدي نشتيم LOOP كه پايان حلقه هستش

خط بعدي نوشتيم END كه برنامه هيچ وقت به اين END نمي رسه

خط بعدي نوشتيم MASSHAD: كه همان زير برنامه MASSHAD هستش كه هر اسم ديگه اي مي تونيم براش بزاريم

خط بعدي نوشتيم CLS كه بايد بدوني كارش چيه

خط بعدي نوشتيم LCD A كه با اين دستور مقدار عددي كه ميكرو از كيبرد خونده و ريخته توي متغيير A رو مي تونيم بخونيم اميدوارم كه فهميده باشه كه چرا مقداري رو كه ميكرو مي خونه بايد بريزيم توي يك متغيير .فرض كن كه ما كليدي از كيبرد رو كه روش نوشته 4 رو فشار مي ديم ميكرو مياد اين مقدار رو ميخونه و انتقالش مي ده توي متغيير A بعد ما براي اينكه ببينيم كليدي رو كه فشرديم چه عددي بوده بايد با دستور LCD A مقدار متغيير A رو روي LCD نمايش بديم

در خط هاي بعدي نوشتيم

DO

A = GETKBD ( )

LOOP UNTIL A = 16

GOTO MAIN

كه اين دستورات هيچ توضيحي نداره و هميشه بايد بنويسيش . اين دستورات براي اينه كه وقتي شما يك دكمه رو فشار مي دي ميكرو نياد هي اون عدد رو روي LCD تند تند نمايش بده . اين سه خط دستور طور كلي مياد يك حالتي رو در برنامه ايجاد مي كنه كه تا وقتي كه ما دستمون رو از روي دكمه فشرده شده برنداشتيم عدد فيكس بمونه بعد وقتي كه دستمون رو از روي كليد برداشتيم مياد خط بعدي رو مي خونه

خط اخر هم نوشتيم GOTO MAIN كه با اين دستور دوباره برمي گرديم توي حلقه اول و انقدر توي اين حلقه مي مومنه تا يك دكمه ديگه فشرده بشه و بره اونو بخونه به عبارتي روز از نو روزي از نو.

1- كل برنامش همين بود

2- اره اگه شك داري مي توني بري توي پروتوس امتحانش كني

1- اين كيبرد كجاي پروتوس هستش

2- وقتي كه كتابخانه نرم افزار رو باز كردي اول مي ري تو قسمت ACTIVE بعد از اونجا ميتوني يك كيبرد انتخاب كني

1- ممنون

2- قربانت . بزار يك مثال كاربدي تر بزنم همين برنامه رو يكم پيشرفته ترش مي كنيم مثلا مي خايم هر وقت كه دكمه شماره 3 رو فشار داديم يك LED روشن بشه و هر وقت كه دكمه شماره 12 رو فشار داديم LED خاموش بشه . پس ما به طور دلخواه بايد يك پورت رو مثلا پورت A رو براي اتصال كيبرد به ميكرو در نظر بگيريم و يك پورت ديگه هم مثلا پورت B رو براي LED در نظر بگيريم البته ما از پورت B فقط يك پايه لازم داريم كه مثلا مي تونه B.0 باشه . LCD هم كه حال مي كنيم وصل بشه به پورت C . خوب برنامه اي كه ما بايد بنويسيم به شرح زير است :

CONFIG PORTB = OUTPUT

CONFIG PORTA = KBD

DIM A AS BYTE

MAIN:

DO

A = GETKBD ( )

IF A

IF A = 3 THEN GOTO SHOW2

IF A = 12 THEN GOTO SHOW3

LOOP

END

SHOW1:

CLS

LCD A

DO

A = GETKBD ( )

LOOP UNTIL A = 16

GOTO MAIN

SHOW2:

SET PORTB.0

CLS

LCD A

DO

A = GETKBD ( )

LOOP UNTIL A = 16

GOTO MAIN

SHOW3:

RESET PORTB.0

CLS

LCD A

DO

A = GETKBD ( )

LOOP UNTIL A = 16

GOTO MAIN

 

خوب اين هم يك برنامه كامل براي اين مثالي كه زدم فقط بايد نوع ميكرو و فركانس كاري ميكرو رو خودت بنويسي يا اينكه از داخل نرم افزار تنظيمشون كني . خوب حالا بريم سر تحليل برنامه:

ميكرو مياد از خط اول برنامه شروع مي كنه به خوندن يعني عبارت CONFIG PORTB = OUTPUT و مي فهمه كه ما يك خروجي رو پيكره بندي كرديم . بعد مياد خط دوم رو مي خونه كه نوشته CONFIG PORTA = KBD و مي فهمه كه قراره يك كيبرد بهش وصل بشه. بعد خط بعدي رو مي خونه DIM A AS BYTE اين يعني اينكه ما يك متغيير تعريف كرديم براي همون كه قبلا بهت گفتم كه مي خايم عددي رو كه ميكرو از كيبرد مي خونه بريزه توي يك متغيير براي همون يك متغيير تعريف كرديم . خط بعدي يك زير برنامه به اسم MAIN تعريف كرديم كه مي تونست هر اسم دخواه ديگه اي با شه كاربردش هم در ادامه بهت مي گم كه چرا گذاشتيمش. خط بعدي نوشتيم DO كه با اين كار ابتداي يك حلقه رو تعريف كرديم. خط بعد نوشتيم كه A = GETKBD ( ) كه اين جمله كوچيك رو مي تونم اينطوري ترجمه كنم كه اقاي ميكرو هر دكمه اي رو كه فشرده شد عدد او دكمه فشرده شده رو بريز توي اين متغيير A . در خط هاي بعدي سه شرط گذاشتيم كه شرط هاي ما هميشه بايد در داخل حلقه DO –LOOP قرار بگيره

1- چرا بايد داخل حلقه قرار بگيره

2- چون كه يكسره ميكرو بياد اين شرط ها رو چك كنه و اگر كه شرطي اجرا شد بره دستور شرط رو اجرا كنه

1- اها ادامه بده

خوب گفتيم كه ما داخل اين حلقه سه تا شرط گذاشتيم . اولي شرط نوشتيم كه IF A

به اين معني كه اگر A كوچكتر از 16 بود برو دستور شرط رو كه بعد از THEN نوشتيم رو برو اجرا كن خوب حالا دستور شرط چيه اينه : GOTO SHOW1 يعني اگر شرط مورد نظر اجرا شد بپر برو توي زير برنامه SHOW1 حال توي زير برنامه SHOW1 چيكار بايد انجام بده رو بهش مي رسيم كه از اين شرط براي خواندن عددي كه دكمه متناظر با اون فشرده شده استفاده ميشه.

شرط دوم نوشتيم كه IF A = 3 THEN GOTO SHOW2 كه با اين جمله اين مطلب رو به ميكرو فهمونديم كه اگر خداي ناكرده دكمه شماره 3 فشرده شد برو دستور شرط رو كه پرش به زير برنامه SHOW2 هستش رو اجرا كن.

شرط سومي كه گذاشتيم اينه IF A = 12 THEN GOTO SHOW3 يعني اگر دكمه شماره 12 فشرده شد برو دستور شرط رو كه پرش به زيربرنامه SHOW3 هستش رو اجرا كن. بعد از اين كه شروط رو نوشتيم LOOP رو كه پايان حلقه هستش رو گذاشتيم . در خط بعد نوشتيم END كه برنامه ما هيچ وقت به اين END نميرسه و نبايد هم برسه . در خط هاي بعدي سه تا زير برنامه به نام هاي SHOW1 و SHOW2 و SHOW3 تعريف كرديم البته كه در داخل اين زير برنامه ها چند تا دستور نوشتيم كه توضيجات اين زير برنامه ها رو حين تحليل دوم برنامه بهت مي گم .

تحليل دوم برنامه : خوب فرض كن كه برنامه رو نوشتيم و ريختيم توي ميكروكنترلر حالا بهت مي گم كه مي كرو با خوندن اين دستورات چيكار مي كنه يا به عبارتي ديگر چكار بايد بكنه . در دو خط اول كه ما يك پورت براي خروجي تعريف كرديم و يك پورت براي اتصال به كيبرد كه ميكرو اين دو خط رو مي خونه و مي ره سر خط سوم در اين خط يك متغيير تعريف كرديم كه اين خط رو هم مي خونه و ميره سر خط بعدي. خط بعدي زير برنامه MAIN رو مي خونه و مي ره سرخط بعدي . خط بعدي كه ما يك DO گذاشتيم و ميكرو اين رو هم مي خونه و هم زمان كه اينو خوند مي فهمه كه ابتداي يك حلقه رسيده و همونجا

ميوفته توي اين حلقه و ميكرو مياد كل چهار خط اين حلقه رو مي خونه

1- منظورت از چهار خط داخل اين حلقه همون خط اول + سه تا شرط بعديشه

2- اره عزيز . بعد كه اين چهار خط رو خوند ميرسه به LOOP مي فهمه كه بايد بره دوباره از خط زير DO شروع كنه به خوندن بعد دوباره مياد اين كار رو مي كنه و بازدوباره اون چهار خط رو ميخونه و بعدش دوباره مي رسه به LOOP و دوباره مي فهمه كه بايد بره برنامه رو از خط زيري DO شروع كنه به خوندن بعد دوباره اين كار رو مي كنه . به عبارت ديگه مي تونم بهت بگم كه داخل اين حلقه يكسره دور مي زنه

1- خوب پس كي بيرون مياد

2- اها اين همون سوالي بود كه الان مي خواستم جوابشو بگم . وقتي بيرون ميادش كه يكي از دستورات شرط اجرا بشه فرقي هم نمي كنه كه كدوم يكي از سه تا شرط باشه

1- حالا شما فرض كن كه شرط اولي اجرا شده خوب چه اتفاقي ميوفته

2- شرط اولي هستش IF A

CLS

LCD A

DO

A = GETKBD ( )

LOOP UNTIL A = 16

GOTO MAIN

خط اول داخل زيربرنامه SHOW1 هستش CLS كه ميكرو با اين دستور مي ره و صفحه LCD رو پاك مي كنه

خط دوم نوشتيم LCD A يعني اين كه مقدار متغيير A رو كه عدد دكمه اي هست كه فشرديم اونجا ريخته شده رو با اين دستور ميره روي LCD نمايش مي ده حالا هر عددي كه باشه فرقي نداره مي ره و نشون مي ده

سه خط بعدي هم كه قبلا برات توضح دادم كه براي اينه كه تا وقتي كه دستمون رو از روي دكمه برنداشتيم همون عدد رو روي LCD نمايش بده

خط بعدي نوشتيم GOTO MAIN كه در اخر اين زير برنامه قرار داره به اين معني كه بپر برو توي زير برنامه MAIN و ميكرو هم ميره همين كار رو ميكنه . بعد از پريدن توي زيربرناه MAIN ميكرو مياد خط بعديشو مي خونه نوشته DO و باز دوباره ميوفته توي حلقه و دوباره توي اين حلقه دور مي زنه تا يكي از شروط اجرا بشه . فرض كن كه اين دفعه شرط دوم اجرا بشه البته فرقي نميكنه كه كدوم شرط اجرا بشه خوب گفتيم كه فرض رو بر اين ميزاريم كه شرط دوم اجرا شده يعني

IF A = 3 THEN GOTO SHOW2 كه ما با اين دستور اين شرط را گذاشته بوديم كه اگر دكمه شماره 3 فشرده شد برو دسترو شرط رو اجرا كن كه اگر اين شرط اجرا بشه دستور شرط هم كه پرش به زيربرنامه SHOW2 هستش هم اجرا ميشه و ميكرو هم همين كار رو مي كنه و مياد ميپره توي زيربرنامه SHOW2 و دستورات داخل اين زيربرنامه رو اچرا مي كنه كه دستورات داخل اين زيربرنامه به قرار زير است :

SHOW2:

SET PORTB.0

CLS

LCD A

DO

A = GETKBD ( )

LOOP UNTIL A = 16

GOTO MAIN

خط اول نوشتيم كه SET PORTB.0 به اين معني كه پايه B.0 رو يك كن

خط بعدي نوشته شده CLS يعني اينكه صفحه LCD رو پاك كن

خط سوم نوشتيم كه LCD A يعني نشون بده مقدار متغيير A رو كه بايد عدد 3 رو نشون بده

1- چرا 3

2- چون كه ما داخل اون حلقه شرط گذاشته بوديم كه اگه دكمه شماره 3 فشرده شده بود بپر برو توي زيربرنامه SHOW2 خوب پس دكمه اي كه فشرده شده شماره سه هستش ديگه پس بايد حتما عدد 3 رو نشون بده

1- اخر ما نفهميديم كه اين شرط بندي حلاله يا حرام

2- تو اين جور موارد حلاله . در سه خط بعدي نوشتيم :

DO

A = GETKBD ( )

LOOP UNTIL A = 16

كه اينو بهت گفتم براي چيه . براي فيكس شدن عدد روي LCD تا موقعي كه دستمون رو از روي دكمه برنداشتيم

در خط بعدي هم نوشتيم GOTO MAIN كه ميكرو با خوندن اين دستور مي پره ميره اولين خط بعد از اين زيربرنامه كه نوشته DO رو مي خونه و مي فهمه كه ابتداي دردسر يعني دور زدن توي اين حلقه شروع شده

1- خوب اين LED كي خاموش مي شه

2- وقتي كه شرط سوم يعني فشرده شدن دكمه شماره 12 اجرا بشه كه شرطي كه براش گذاشتيم از اين قراره

IF A = 12 THEN GOTO SHOW3 اين شرط رو ميشه اينطوري ترجمه كرد كه اگه دكمه شماره 12 ازروي كيبرد فشرده شد بپر برو توي زيربرنامه SHOW3 . حالا توي اين زيربرنامه SHOW3 اين دستورات هستش :

SHOW3:

RESET PORTB.0

CLS

LCD A

DO

A = GETKBD ( )

LOOP UNTIL A = 16

GOTO MAIN

خط اول بعد از زير برنامه نوشته شده RESET PORTB.0 به اين معني كه پايه B.0 رو 0 كن و در اينجا اون LED كه گفتيم خاموش ميشه .

خط بعدي نوشتيم CLS يعني پاك كن صفحه ال سي دي رو

خط بعدي LCD A هستش يعني مقدار متغيير A رو نشون بده كه بايد مقدار 12 رو روي LCD نمايش بده

سه خط بعدي هم از قرار زير هستش :

DO

A = GETKBD ( )

LOOP UNTIL A = 16

كه بايد ديگه بدوني مال چي هستش

خط اخر هم GOTO MAIN هستش كه بعد از اين كه دستورات داخل زيربرنامه اجرا شد و ميكرو به اين خط رسيد با خوندن اين خط ميپره ميره توي زيربرنامه MAIN و ميكرو هم

1- بزار من بقشو بگم ببين ياد گرفتم يا نه

2- بفرماييد

1- بعد از اين كه پريد توي زيربرنامه MAIN اولين خط نوشته DO كه دوباره ميوفته توي اين حلقه . بقيشو خودت بگو

2- خوب بود معلومه كه ياد گرفتي . بعد توي اين حلقه اونقدر دور ميزنه تا دوباره يك شرط ديگه از سه شرط اجرا بشه .

اين هم از تفسير برنامه گمون نكنم كه از اين ساده تر بشه تفسيرش كرد.

يك نكته اي كه من بايد بگم اينه كه تو هر دستور شرطي رو مي توني توي اين زير برنامه ها قرار بدي مثلا بعد از اين كه PORTB.0 رو SET كرد يك پشبندش يعني خط پايينيش بنويسيم كه CLS

LCD "AHMAD" كه با اينكار ميداد هم پايه B.0 رو SET ميكنه و هم روي LCD يك چيزي مي نويسيه و خيلي كاراي ديگه اي هم مي توني بكني كه بستگي به خودت داره

يك نكته ديگه اينه كه گاهي وقتا لازم هستش كه دكمه هاي صفحه كليد رو مثل ماشين حساب پيكره بندي كني كه بايد از جدول LOOKUP استفاده كني كه من الان حضور ذهن ندارم كه چطوري بودش يادم رفته بايد مراجعه كنم استادم.

درس بعدي استفاده از توابع رياضي هستش كه من همه اونا رو بهت نمي گم چون كه كاربرد نداره

علامت جمع + : به مثال زير توجه كن

DIM A AS BYTE

A = 5 + 1

CLS

LCD A

END

اين برنامه هيچ نيازي به توضيح ندارد چون همه چيزش شفاف هستش . فقط همينو بگم كه در مثال بالا ما يك متغيير تعريف كرديم مقداري رو كه به متغيير داديم 5+1 هستش ميكرو مياد با امكاناتي كه داخل خودش داره اين دو عدد رو باهم جمع مي كنه و حاصل كه عدد 6 هست رو هنگامي كه ما دستور LCD A رو مي خونه يعني عدد 6 روي LCD نمايش ميده . بزار يكم پيشرفته ترش كنيم

CONFIG PORTB = OUTPUT

DIM A AS BYTE

A = 5+1

IF A = 5 THEN SET PORTB.0

IF A = 6 THEN SET PORTB.1

IF A = 7 THEN SET PORTB

END

در برنامه بالا ما يك خروجي تعريف كرديم . بعد يك متغيير از نوع بايت تعريف به نام A تعريف كرديم بعد اومديم براي مقدار دهي به متغيير A از جمع دوعدد استفاده كرديم بعني مقدار متغيير A هست 5+1 . بعد اومديم سه تا شرط و سه تا دستور شرط گذاشتيم اولين شرطي كه گذاشتيم اين بود كه اگر مقدار متغيير A شد 5 برو و دستور شرط رو كه هست SET PORTB.0 رو اجرا كن . شرط دوم اومدي گفتيم كه اگه مقدار متغيير A شد 6 برو دستور شرط رو كه هست SET PORTB.1 رو اجرا كن . شرط سوم گفتيم كه اگه مقدار متغيير A شد 7 برو و دستور شرط رو كه هست SET PORTB رو اجرا كن كه يعني يك كردن كل هشتا پايه پورت B .

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

پايان قسمت ششم

لینک به دیدگاه

واسه شروع یه برنامه خیلی خیلی ساده که خودم از همین شروع کردم میذارم .....

 

شاید اولین چیزی که بنظر برسه روشن و خاموش کردن یک LED با میکرو باشه .......البته من دو ردیف LED چیدم که توسط یک دستور ساده به ترتیب و طی هر زمان دلخواه روشن میشن

 

این برنامه اش:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

اینم عکسش:

 

q6797_03082011011.jpg

لینک به دیدگاه

1- سلام چطوري

2- سلام ممنون چي كار مي كني

1- قربانت هيچكار . امروز اومدم كه بقيه ميكرو رو بهم ياد بدي

2- چشم . حالا كجا بوديم

1- توي قسمت جمع و تفريق و ...

2- اها يادم اومد جمع رو گفتم بقيش موند . باشه . عمليات بعدي تفريق هستش كه بايك مثال بهت مي گم كه چطوري بايد عمل كني

dim g as byte

g = 6 – 2

cls

lcd g

end

مثال بالا يك مثال خيلي ساده هستش . ما در خط اول يك متغيير تعريف كرديم به نام g در خط دوم بهش مقدار 6-2 رو داديم كه يعني 4 . در خط بعدي با فرمان cls ال سي دي را پاك كرديم تا اماده نوشتن بشه . در خط بعدي با فرمان lcd g از ميكرو خواستيم تا مقدار متغيير g را روي lcd نمايش دهد كه ميكرو براي ما عدد 4 را نمايش مي دهد يعني حاصل عبارت 6-2 را نشان مي دهد . در خط اخر هم با دستور end برنامه رو به پايان رسونديم . اين برنامه بالا رو اگه دوست داشتي مي توني با شبيه ساز خود bascom نگاه كني .

يك مثال ديگه:

Dim l as byte

dim n as byte

l = 12 - 3

n = 2 – 2

cls

lcd l

waitms 100

cls

lcd n

end

خوب توي برنامه بالا ما اومديم دو تا متغيير به نام هاي n و l از نوع بايت تعريف كرديم . در خط سوم به متغيير l مقدار 12 – 3 داديم . در خط بعدي به متغييرn مقدار 2-2 داديم .در خط بعدي با فرمان cls ال سي دي را پاك كرديم و در خط بعد با فرمان lcd l به ميكرو دستور دايم كه مقدار متغيير l را كه هست 12 – 3 يعني 9 رو نمايش بده و ميكرو مقدار 9 را براي متغيير l نمايش ميده . در خط بعد ما يك تاخير در برنامه گذاشتيم . در خط بعدي با فرمان cls ال سي دي را مجددا پاك كرديم و در خط بعدي با فرمان lcd n به ميكرو دستور داديم كه مفدار متغيير n رو كه هست 2-2 يعني 0 رو به ما نشون بده كه ميكرو مقدار 0 رو روي lcd نمايش ميده و در خط اخر هم برنامه به پايان مي رسه.

يك مثال ديگه هم رو حساب معرفت ميزنم :

Dim l as byte

dim n as byte

dim ahmad as byte

l = 12 - 3

n = 10 – 2

ahmad = l + n

cls

lcd l

waitms 100

cls

lcd n

waitms 100

cls

lcd ahmad

end

اين برنامه رو خودت مي دوني كه چي به چيه ولي بازم خودم مي گم . ببين ما سه تا متغيير تعريف كرديم هر سه تا هم از نوع بايت هستن به نام هاي l و n و ahmad . به متغيير هاي l و n مقدار داديم و به متغيير ahmad مقداري كه داديم اين بود كه اقاي ميكروكنترلر حاصل متغيير هاي l و n رو با هم جمع كن و حاصل را مقدار متغيير ahmad قرار بده خوب مقدار متغيير l هست 12 – 3 يعني 9 و مقدار متغيير n هست 10 – 2 يعني 8 . ما با دستور ahmad = n + l اين فرمان را داديم كه مقدار متغيير ahmad هست 9 + 8 يعني 17 .

خوب بقيه دستورات هم به اين شكل هستش فقط به جاي علامت جمع و تفريق كافيه علامت هاي ضرب و تقسي رو بزاري كه علامت تقسيم هستش /

و علامت ضرب هستش *

همينطور ايناها رو با هم جمع و تفرق و يا ضرب و تقسيم كن تا كامل دستت بياد يا يك شرط بزار كه مثال اگه مقدار عبارت

4 – 1 شد عدد 3 برو فلان كار رو انجام بده يا خيلي كاراي ديگه ميتوني انجام بدي.

1- خوب درس بعدي چيه ؟

2- راستشو بخاي من قبل از اين كه بخوام تايمر و كانتر رو بهت بگم بايد يك سري از چيزهايي رو كه قبلا نگفتم بهت بگم مثلا بعضي از دستورات مربوط به lcd رو نگفتم بعضي از دستورات پرش رو نگفتم كه بايد همون اول مي گفتم

1- خوب چرا همون اول نگفتي

2- خوب ترسيدم كه باهم قاطي كني بلايي كه سرخودم تو كلاس اومده .استاد ميومد چند تا دستور شبيه به هم رو كه همش يك كار رو انجام مي داد باهم مي گفت بقيه هم قاطي مي كردن

1- مثلا چي

2- مثلا همين دستور goto كه پرش به يك زيربرنامه هستش رو با دستور gosub هم مي شه انجام داد كه هر دوتاش يك كار رو انجام ميدن . يا بعضي از دستورات مربوط به lcd رو مثلا خاموش روشن كردن lcd – خاموش روشن شدن كرسر

و چند تا دستور ديگه .

1- اينا خيلي سخته

2- نه بابا از دستورات جمع و تفرق اسون تره . بعد كه اينا رو گفتم مي ريم سر تايمر و كانتر.

اول بريم سر بقيه دستورات lcd : خوب ما از ال سي دي فقط دو دستور cls و lcd رو با هم مرور كرديم دستوررات بعدي به اين شرح هستش :

دستور config lcd : توسط اين دستور مي شه اندازه lcd رو مشخص كرد . مثال :

Dim a as byte

a = 10

config lcd = 16 * 2

cls

lcd a

end

خوب برنامه بالا خيلي راحته ما يك متغيير تعريف كرديم بعد بهش مقدار داديم . بعد اندازه lcd رو مشخص كرديم . وبعد مقدار متغيير رو روي lcd نمايش داديم.در نهايت برنامه رو به پايان رسونديم .

1- هر اندازه اي كه خاستيم مي تونيم بديم ؟

2- نه اندازه ها بايد استاندارد باشه و بايد يكي از انواع اندازه هاي زير باشه :

16 * 1 - 16 * 2 - 16 * 4 - 20 * 2 - 20 * 4 - 40 * 2 - 40 * 4

درضمن اين اندازه ها رو مي توني از داخل نرم افزار كه قبلا توضيح دادم هم تنظيم كني

دستور بعدي display هستش كه جلوي اين دستور بايد يكي از دو گزينه on يا off قرار بگيره . توسط اين دستور ميشه ال سي دي رو روش يا خاموش كرد . مثال :

Dim ahmad as byte

ahmad = 3

cls

lcd ahmad

waitms 100

display off

end

خوب در اين برنامه ما يك متغيير به نام ahmad از نوع بايت تعريف كرديم . بعد در خط دوم به متغيير ahmadمقدرا 3 رو داديم . در خط بعدي با دستور cls ال سي دي رو پاك كرديم . در خط بعدي توسط دستور lcd ahmad دستور داديم كه مقدار متغيير ahmad رو روي ال سي دي نمايش بده . در خط بعدي يك تاخير 100 ميلي ثانيه اي در برنامه ايجاد كرديم بعد از گذشت اين مدت زمان ميكرو خط بعدي رو مي خونه كه نوشته display off و توسط اين دستور lcd خاموش ميشه. ودر خط اخر هم برنامه به پايان مي رسه. در ضمن هر وقت كه خاستي lcd رو كه با دستور display off خاموش كرده بودي دوباره روشنش كني بايد با دستور display on اين كار رو بكني.

دستور بعدي cursor هستش كه جلوي اين دستور يكي از چهار گزينه زير بايد قرار بگيره :

On : كه اگه on جلوي cursor قرار بگيره cursor فعال ميشه

off : كه اگه off جلوي cursor قرار بگيره cursor خاموش ميشه

blink : اگر blink جلوي cursor قرار بگيره cursor چشمك ميزنه

noblink : كه اگه noblink جلوي cursor قرار بگيره cursor چشمك نمي زنه

1- خوب حالا اين cursor چي هستش

2- cursor يا به فارسي كرسر همون خطي هستش كه وقتي داري مثلا با برنامه wordpad تايپ مي كني هي چشمك مي زنه توي lcd هم اين كرسر قرار داره كه مي تونه خاموش يا روشن يا چشمك زن باشه كه دست خودمونه كه چه بلايي سرش بياريم .

مثال :

Dim a as byte

a = 100

cursor blink

cls

lcd a

end

خوب ما يك متغيير تعريف كرديم به نام a و از نوع بايت . در خط دوم مقدار داديم .در خط سوم توسط دستور

cursor blink كرسر را از نوع چشمك زن انتخاب كرديم . در خط چهارم با دسترو cls ال سي دي رو پاك كرديم . در خط بعد با دستور lcd a مقدار متغيير a رو روي ال سي دي نمايش داديم. در خط اخر هم توسط دستور end برنامه رو به پايان رسونديم.

دستور بعدي shiflcd هست كه بعد از اين دستور بايد از يكي از دو فرمان left يا right استفاده كرد . توسط اين دستور مي توان كل صفحه نمايش رو به اندازه يك واحد به چپ يا راست منتقل كرد . مثال :

Cls

lcd "ahmad"

shiftlcd right

end

اين يك برنامه ساده هستش كه ما اول اومديم توسط دستور cls ال سي دي رو پاك كرديم بعد توسط دستور

lcd "ahmad" اومديم ثابت ahmad رو روي ال سي دي نمايش داديم در خط بعد توسط دستور

shiftlcd right اومديم كل صفحه ال سي دي رو يك واحد به سمت راست انتقال داديم .

1- اين ثابت ahmad رو كه گفتي يعني چي ؟

2- هر چيز كه در داخل " " قرار بگيره ميشه يك ثابت

1- يك سوال ديگه اگه ما خواستيم كه دو يا چند واحد كل صفحه ال سي دي رو به سمت راست يا چپ هدايت كنيم بايد چكار كنيم؟

2- به ازاي هر چند واحد كه خاستيم كل صفحه ال سي دي رو به سمت راست هدايت كنيم بايد دستور shiftlcd رو زير هم بنويسيم. مثلا مي خايم 4 واحد به سمت راست هدايت بشه از روشي كه گفتيم بايد به صورت زير عمل كنيم:

Cls

lcd "ahmad"

shiftlcd right

shiftlcd right

shiftlcd right

shiftlcd right

end

كه ميكرو به ازاي هر دفعه كه دستور shiftlcd رو مي بينه يك واحد كل صفحه ال سي دي رو به سمت راست هدايد مي كنه

1- اگه اين دستور siftlcd رو هزار بار زير هم بنويسم چي ميشه

2- مگه مرض داري ولي خوب در نهايت بعد چند بار اون نوشته روي ال سي دي از lcd خارج ميشه.

دستور بعدي locate هستش كه جلوي اين دستور بايد مقدار بدي كه در ادامه مي گم چه مقداري بايد بدي . توسط اين دستور مي توني مكان نوشته اي كه مي خاي روي ال سي دي نوشته بشه رو انتخاب كني يا تغيير بدي مثلا شايد حال كردي كه يك كلمه رو وسط ال سي دي نمايش بدي يا پايين سمت چپ يا هر جاي ال سي دي كه حال كردي نمايش بدي اونجاست كه اين دستور به كارت مياد. ببين هر ال سي دي بسته به اين كه اندازه ان چند در چند باشه تعدادي ستون افقي و تعدادي ستون عمودي داره مثلا در ال سي دي 16 * 2 تعداد ستون افقي 16 و تعداد ستون عمودي 2 هستش يا در ال سي دي 40 * 4 تعداد ستون افقي 40 و تعداد ستون عمودي 4 هست . خوب حالا كه فهميدي اندازه هايي كه براي ال سي دي مشخص مي كنن چه مفهومي داره مي توني اون مقداري رو كه گفتم بايد جلوي دستور locate بنويسي رو به دست بياري كه بايد به ترتيب زير عمل كني :

Locate 1 , 1

در بالا من يك نمونه مكان نما رو نوشتم البته هر مقداري كه خواستي مي توني بدي به شرط اين كه مقدار رو خيلي زياد ندي چون ممكنه اون كلمه اي كه قرار روي ال سي دي نوشته بشه از ال سي دي بره بيرون . عدد اولي رو كه نوشتم به اين منظور بوده كه مقدار مكان عمودي رو مشخص كردم . عدد دومي كه جلوش نوشتم مقدار پيشروي كلمه به جلو در سمت ستون هاي افقي هستش . اين اعداد براي هر نوع ال سي دي ممكنه فرق كنه مثلا در ال سي دي نوع 16 * 2 به علت اين كه تعداد ستون هاي عمودي ما 2 تا بيشتر نيست براي مقدار دهي به دستور locate ما مجاز نيستيم كه براي ستون عمودي بيشتر از 2 و براي ستون افقي بيشتر از 16 بدهيم . ويا در ال سي دي 16 * 1 فرق ميكنه و به علت اينكه ما يك عدد ستون عمودي داريم نمي توانيم براي مقدار دهي به دستور locate براي ستون عمودي بيشتر از 1 بدهيم و براي مقدار دهي براي ستور افقي بيشتر از 16 بدهيم .

1- خوب حالا فكر كن كه من ازسر كنجكاوي بيشتر از اين عدد هاي مجاز دادم چه اتفاقي ميوفته؟

2- اتفاق خاصي نميوفته فقط شما چيز روي ال سي دي نمي بيني

مثال :

Config lcd = 16 * 2

do

cls

locate 2 , 1

lcd "ahmad"

waitms 50

cls

locate 1 , 1

lcd "ahmad"

waitms 50

loop

end

برنامه بالا مياد يك بار كلمه ثابت ahmad رو يك بار در قسمت پايين ال سي دي نمايش مي ده و يك بار بالاي ال سي دي .

خوب حال تحليل برنامه :

در خط اول ما اومديم به ميكرو فهمونديم كه اقاي ميكروكنترلر ال سي دي كه ما داريم استفاده مي كنيم از نوع 16 * 2 هستش

در خط دوم ما با دستور do ابتداي حلقه رو مشخص كرديم

در خط سوم با دستور cls ال سي دي رو پاك كرديم

در خط چهارم با دستور locate 2 , 1 مكان يا نقطه اي از ال سي دي رو كه مي خاي چيز رو روش نمايش بديم رو مشخص كرديم كه با نوشتن عدد 2 اين رو به ميكرو فهمونديم كه بايد در خط دوم عمودي يعني پايين ال سي دي بنويسي . و با نوشتن عدد 1 بعد از عدد دو اين رو به ميكرو فهمونديم كه بايد در اول ستون افقي ال سي دي چيزي بنويسي.

در خط پنجم با دستور lcd "ahmad" كلمه ahmad رو در خط پايين اول ال سي دي نمايش داديم

در خط ششم با دستور waitms 50 يك تاخير 50 ميلي ثانيه اي در اجراي برنامه ايجاد كرديم.

در خط هفتم با دستور cls دوباره ال سي دي رو پاك كرديم .

در خط هشتم با دستور locate 1 , 1 دوباره يك ادرس مكان براي جايي كه ميكرو بايد روي ال سي دي نمايش بدهد داديم كه هردو رو عدد 1 داديم يعني اول ال سي دي

در خط بعدي با دستور lcd "ahmad" دوباره كلمه ahmad رو روي ال سي دي نمايش داديم با اين تفاوت كه مكاني كه اين دفعه ال سي دي كلمه ahmad رو نمايش ميده فرق كرده و اول ال سي دي داره نمايش مي ده نه اين كه در خط پايين

در خط بعدي با دستور waitms 50 يك تاخير 50 ميلي ثانيه اي در اجراي برنامه ايجاد كرديم

در خط بعدي هم با دستور loop انتهاي حلقه رو مشخص كرديم كه برنامه ما در اين حلقه دور مي زنه و كارش رو از اول شروع مي كنه و به end هيچ وقت نمي رسه و برنامه به پايان نمي رسه.

يك نكته اي رو كه بايد بگم و تو هم سوال نكردي اين هستش كه هميشه بايد دستور locate بين cls و lcd نوشته بشه مثل زير

cls

locate 2 , 1

lcd "ahmad"

خوب اينم بقيه دستورات ال سي دي كه تموم شد.

ادامه دستورات كه مربوط به دستور پرش و چندتا چيز ديگه هستش باشه براي بعد

پايان قسمت هفتم

لینک به دیدگاه

1- سلام خوبي

2- سلام خوبم تو چطوري

1- عالي راستي امروز چي مي خاي بگي

2- امروز بايد دستور حلقه و پرش رو كه قبلا بهت نگفتم بهت بگم كه خيلي راحت هست

1- اماده ام بگو

2- اولين دستور GOSUB هستش توسط اين دستورشما مي توني بپري توي يك زير برنامه و دستورات داخل اون زيربرنامه رو انجام بدي دقيقا همان كاري كه دستور GOTO براي ما انجام مي داد اين دستور GOSUB هم براي ما انجام مي ده با يك تفاوت و اون هم اينكه در دستور GOSUB ما با دستور RETURN مي توانيم دوباره برگرديم GOSUB رو بخونيم كاري كه با دستور GOTO نمي تونستيم انجام بديم

1- يك مثال بزن كه نفهميدم

2- باشه اينم مثال :

CONFIG PINB.0 = INPUT

CONFIG PORTA = OUTPUT

DO

IF PINB.0 = 1 THEN GOSUB BENZ

LOOP

END

BENZ:

TOGGLE PORTA

WAITMS 50

RETURN

توسط برنامه بالا مي تونيم با زدن ميكرو سوييچ پورت A رو TOGGLE كنيم. يعني براي بار اول كه ميكروسوييچ رو ميزنيم پورت A يك مي شه براي بار دوم كه ميزني صفر ميشه براي بار سوم كه مي زني دوباره يك مي شه براي بار چهارم كه ميزني صفر ميشه و الي اخر. در خط اول ما پايه B.0 رو به عنوان ورودي پيكره بندي كرديم . در خط دوم پورت A رو براي خروجي پيكره بندي كرديم . در خط سوم ما اول حلقه رو با نوشتن دستور DO عنوان كرديم. در خط چهارم ما نوشتيم

IF PINB.0 = 1 THEN GOSUB BENZ به معني كه اگر پايه B.0 ميكروكنترلر يك شد بپر برو توي

زيربرنامه BENZ . در خط پنجم با دستور LOOP انتهاي حلقه رو مشخص كرديم . در خط ششم نوشتيم END كه برنامه ما هيچ وقت به اينجا نمي رسه . در خط بعدي ما يك زيربرنامه به اسم BENZ مشخص كرديم . خط هفتم نوشتيم TOGGLE PORTA يعني وضعيت پورت A رو هر چي كه هست معكوسش كن يعني اگه يك هستش بكنش صفر و اگه صفر هستش بكنش يك . در خط هشتم ما يك تاخر 50 ميل ثانيه اي گذاشتيم . در خط نهم نوشتيم RETURN كه در ادامه بهت كه توي اين برنامه وضيفش چيه.

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

برنامه بالا رو اينطوري هم ميشه نوشت كه اين روش منطقي تره :

3-

CONFIG PINB.0 = INPUT

CONFIG PORTA = OUTPUT

DO

DEBOUNCE PINB.0 , 1 , BENZ , SUB

LOOP

END

BENZ:

TOGGLE PORTA

RETURN

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

DEBOUNCE PINB.0 , 1 , BENZ , SUB

رو دوباره بخونه و داخل اين حلقه دوباره گير ميكنه تا وقتي كه پايه B.0 دوباره يك بشه و دوباره بپره بره توي زيربرنامه و روز از نو روزي از نو.

 

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

DIM A AS BYTE

FOR A = 1 TO 10 STEP 1

CLS

LCD A

WAITMS 30

NEXT A

END

خوب بريم سر تحليل برنامه . خط اول كه ما يك متغيير به اسم A و از نوع بايت تعريف كرديم . در خط دوم ما نوشتيم كه

FOR A = 1 TO 10 STEP 2 به اين معني كه متغيير A رو افزايش بده از عدد 1 تا عدد 10 . و دستور STEP 1 كه نوشتيم به اين معني هستش كه يكي يكي بشمار يا به عبارتي يك پله يك پله بشمار

1- ببين نفهميدم اين STEP 1 رو دوباره توضيح بده

2- يعني اين كه يكي يكي بشمار 1 و 2 و3 و4 و5 و6 تا عدد 10 . اگه ما به جاي STEP 1 مي داديم STEP 2 دو تا دوتا ميشمرد اينطوري 1 و 3 و5 و7 و9

خوب بريم سر ادامه وقتي كه ميكرو خط FOR A = 1 TO 10 STEP 2 رو مي خونه شروع مي كنه به افزايش متغيير A . بعد مياد خط بعدي كه نوشته CLS رو مي خونه و در اين جا LCD رو پاك ميكنه . بعد مياد خط LCD A رو ميخونه و مي فهمه كه بايد مقداري كه داره افزايش پيدا ميكنه رو نشون بده . خط بعدي نوشتيم WAITMS 30 كه يك تاخير 30 ميلي ثانيه اي در اجراي برنامه انجام ميده و كارش اين هستش كه بياد مدت زمان افزايش رو تند يا كند كنه يا به عبارتي اهسته يا سريع كنه . خط بعدي نوشتيم NEXT A كه ميكرو با خوندن اين خط دوباره برميگرده و خط دوم رو يعني خط

FOR A = 1 TO 10 STEP 2 رو مي خونه . خط بعدي نوشتيم END كه برنامه ما فعلا به اين قسمت نمي رسه تا وقتي كه شمارش تموم بشه

1- من كه چيزي نفهميدم

2- بزار تحليلش كنم مي فهمي

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

DIM A AS BYTE

MAIN:

FOR A = 1 TO 10 STEP 1

CLS

LCD A

WAITMS 30

NEXT A

GOTO MAIN

END

 

دستور بعدي WHILE – WEND هستش اين دستور همون كاري رو مي كنه كه دستور DO – LOOP انجام مي داد ولي با يك تفاوت اون هم اينكه براي داخل شدن به اين حلقه بي نهايت بايد شرط مورد نظري كه جلوي WHILE نوشته ميشه اول اجرا بشه تا اجازه داخل شدن به اين حلقه داده بشه . يك چيز ديگه هم كه هست اينه كه WHILE ابتداي حلقه هستش مثل همان DO كه ابتداي حلقه بود و WEND هم انتهاي حلقه مثل LOOP كه انتهاي حلقه بود به مثال زير توجه كن كه خيلي هم ساده هست.

1- يك سوال فرق بين دستور WHILE – WEND با دستور DO – LOOP چي هستش

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

خوب بري يك مثال ساده هم برات بزنيم كه حال كني :

DIM K AS BYTE

K = 3

WHILE K = 3

CLS

LCD "OK"

WEND

END

خط اول ما يك متغيير به اسم K و از نوع بايت تعريف كرديم .

خط دوم به متغيير K مقدار داديم . مقدار 3 داديم

خط سوم با دستور WHILE ابتداي حلقه رو مشخط كرديم البته براي ورود به حلقه اين حلقه يك شرط گذاشتيم كه اين شرط هر چيزي ميتونه باشه كه اين شرط رو ما بايد جلوي دستور WHILE با يكم فاصله بنويسيم . شرطي كه نوشتيم K = 3 هستش يعني اگر كه مقدار K عدد 3 بود اجازه ورود به حلقه داده ميشه .

خط چهارم كه داخل حلقه قرار داره CLS هستش كه مي دوني چي كار مي كنه

خط پنجم هم LCD "OK" هستش كه اين دستور هم داخل حلقه قرار داره

خط ششم WEND هسش يعني پايان حلقه

خط هفتم هم END هستش كه تا زماني كه شرط بر قرار باشه برنامه به اين دستور نمي رسه

تحليل اين برنامه هم خيل ساده هسش ميكرو مياد از خط اول شروع مي كنه به خوندن خط اول خط دوم رو مي خونه مي رسه به خط سوم اين جا رو گوش كن كه خيلي مهمه اگه شرط برقرار بود يعني مقدار K = 3 بود كه الان هست اجازه ورود به اين حلقه داده مي شه ولي اگه شرط برقرار نبود ميكرو ميره و خط بعدي WEND رو مي خونه كه ما اينجا حال كرديم كه اگه شرط برقرار نبود برنامه به END برسه وتموم بشه .

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

فعلا همينا رو داشته باش تا بعد .

لینک به دیدگاه

1- سلام خوبی

2- خوبم تو چطوری

1- ای بد نیستم خوب قراره امروز چی یادم بدی

2- امروز می خوام کار با حافضه EEPROM رو بهت بگم

1- چی هستش

2- حافضه بلند مدت یا حاظه پایدار میکروکنترلر . اگه یادت باشه برنامه ای رو که ما می نوشتیم و بعد پروگرام می کردیم و با این کار برنامه رو می ریختیم توی قسمت حافضه FLASH . ما در AVR می توانیم برنامه ای رو که نوشتیم یا توی حافظه FLASH بریزم و یا توی حافضه EEPROM بریزیم بستگی داره که دوست داشته باشیم اطلاعات ذخیره بشه یا نه

1- من که نفهمیدم چی شد بالاخره توی کدوم حالضه بریزیم بهتره

2- ببین این دوتا حافظه نسبت به هم یک سری خوبی ها یی دارن و یک سری بدی ها مثلا حافضه FLASH نسبت به حافضه EEPROM از سرعت بالاتری برخورداره و ما برنامه ای رو که قبلا توی این حافظه ریخته بودیم می تونیم از طریق نرم افزار پاکش کنیم بدی حافظه FLASH هم توی همین هستش که اطلاعاتی رو که توی اون ریختیم بعد از این که تغذیه میکروکنترلر قطع بشه از بین می ره

1- منظورت از اطلاعات همون برنامه ای هستش که توش ریختیم

2- نه نه اشتباه نشه منظورم اینه که مثلا شما داری یک متغییر رو افزایش می دی و روی ال سی دی هم نمایش می دی بعد تغذیه میکروکنترلر رو بر می داری بعد دوباره تغذیه رو وصل می کنی ایا مقدار متغییری که قبلا افزایش داده بودی از صفر می یاد یا اخرین عددی که افزایش پیدا کرده بوده خوب مصلما از صفر چون اطلاعاتش پاک شده. خوب بریم سر بحث خودمون حافضه EEPROM هم نسبت به حافضه FLASH یک سری میزیت داره اون هم اینه که می تونیه اطلاعات رو در خودش نگه داره یک بدی هم که داره اینه که سرعتش نسبت به حافظه FLASH پایین هستش و برنامه ای رو که شما توی این حافضه می ریزی نمی تونی با نرم افزار پاکش کنی و باید با اشعه پاک بشه . بزار یک مثال بزنم . فرض کن که داری توی برنامه WORD یک متن رو تایپ می کنی و کلی هم تایپ کردی و ناگهان برق

می ره و بعد از دو ساعت برق میاد می ری کامپیوتر رو روشن می کنی ایا اون متنی رو که بایپ کرده بودی هنوز هستش یا اینکه از بین رفته

1- خوب مسلما چون که ذخیره نکرده بودم از بین رفته

2- افرین . حالا بیا فرض کنیم که شما بعد از این که این متن رو تایپ کردی رفتی توی یک درایوی ذخیرش کردی و بعد از این که ذخیرش کردی یک دفعه برق می ره بعد از دو ساعت برق می ره می ری کامپیوترت رو روشن می کنی بعد می ری سراغ اون متنی که قبلا ذخیره کرده بودی ایا پاک شده

1- نه چون که ذخیرش کرده بودم

2- احسن حافظه EEPROM هم همینظوره و می تونه اخرین اطلاعاتی رو که بهش دادی تا مدت های نا محدود در خودش نگه داره

1- بابا یک مثال هم از نحوه برنامه نویسیش بزن

2- چشم این هم یک مثال

 

Dim A As Byte

Readeeprom A , 0

Do

Debounce Pinb.0 , 1 , Show , Sub

Debounce Pinb.1 , 1 , Show2 , Sub

 

Loop

End

 

show:

Incr A

Writeeeprom A , 0

Waitms 5

Readeeprom A , 0

Cls

Lcd A

Return

show2:

A = 0

Writeeeprom A , 0

WAITMS 5

Cls

Lcd A

Return

در برنامه بالا ما به وسیله دو میکروسوییچ که به پایه های b.0 و b.1 وصل هستند یک متغییر رو زیاد می کنیم و هر وقت که دوست داشتیم صفرش می کنیم میکروسوییچی که به پایه B.0 وسل هستش برای زیاد کردن متغییر هستش و به کمک این میکروسوییچ می تونیم از صفر تا 225 رو به کمک میکروسوییچ زیاد کنیم میکروسوییچی که به پایه B.1 وصل می شه برای این هستش که ما در هر جایی که از برنامه باشیم بتوانیم متغییر رو صفر کنیم

جالبی این برنامه این هستش که ما به دلیل این که برنامه رو توی حافظه EEPROM میریزیم اگه یک وقتی تغذیه میکروکنترلر رو قطع کنیم و مجددا وصل کنیم و دوباره میکروسوییچی که برای زباد کردن متغییر هستش رو تحریک کنیم متغییر از اخرین عددی که قبلا زیاد شده بوده شروع می کنه به زیاد شدن

1- همین تیکه رو یک بار دیگه بگو

2- فرض کن که با میکرو سوییچ متغییر رو زیاد کردی و رسوندی به عدد مثلا 10 و روی ال سی دی نمایش دادی بعد تغذیه میکروکنترلر رو قطع کردی و بعد از چند ساعت میای دوباره تغذیه میکروکنترلر رو وصل می کنی و دوباره میکروسوییچ رو می زنی حتما فکر میکنی که از صفر دوباره شروع میکنه به زیاد کردن . باید بگم اگه اینطوری فکر می کنی اشتباه کردی چون که بازدن میکروسوییچ به دلیل اینکه این مقدار متغییر در حافظه EEPROM ذخیره شده متغییر شروع میکنه به زیاد شدن البته ازادامه کار یعنی ادامه 10 . خوب حالا شاید خواستیم که از صفر شروع کنیم برای این کار میکروسوییچی رو که به پایه B.1 وصل هستش رو فشار می دیم و دوباره مقدار متغییر می شه 0

خوب حالا بریم سر تحلیل برنامه :

میکرو میاد برنامه رو از خط اول شروع می کنه به خوندن

خط اول ما یک متغییر از نوع بایت و به اسم A تعریف کردیم

خط دوم نوشتیم Readeeprom A , 0 یه این معنی که بخوان مقدار متغییر A رو از مکان حافظه 0 EEPROM که به جای 0 هر عدد دیگری میتونی بدی . میکرو که این دستور رو میخونه می فهمه که باید مقدار متغییر A رو که قبلا ذخیره کرده بخونه خوب برای بار اول که ما چیزی رو ذخیره نکردیم .پس مقدرا متغییر A رو در وحله اول صفر در نظر می گیره

بعد میاد میوفته توی حلقه DO - LOOP و اون تو دور می زنه تا وقتی که یکی از پایه های B.0 یا B.1 ما یک بشه که این پایه ها مستقیما وصل شده به میکروسوییچ ها

فرض کن که میکروسوییچ اول که وصل شده به پایه B.0 تحریک بشه در این جا میکروکنترلر میفهمه که پایه B.0 یک شده و می ره دستور شرط رو که پرش به زیر برنامه SHOW هشتش رو اجرا می کنه و میپره میره داخل این زیر برنامه خوب حالا باید دستورات داخل این زیربرنامه رو اجرا کنه

اولین دستور داخل این زیربرنامه هتسش INCR A و میکرو هم این کار رو میکنه و یک واحد به مقدار متغییر A اضافه می کنه یعنی می شه عدد 1

دستور دوم هستش Writeeeprom A , 0 این دستور به این معنی هستش که مقدار متغییر A رو ذخیره کن داخل مکان حافضه 0 و میکرو هم این کار رو میکنه و مقدار عدد 1 رو توی این مکان از حافضظه EEPROM ذخیره میکنه . دستور بعدی داخل این زیربرنامه نوشته Waitms 5 یعنی این که یک تاخیر 5 میلی ثانیه ای ایجاد کن این تاخیر رو همیشه بعد از دستور Writeeeprom بزار چون که یک تاخیر ایجاد بشه و عملیات ذخیره سازی به درستی انجام بشه . دستور بعدی داخل این زیربرنامه نوشته Readeeprom A , 0 این دستور به این معنی هستش که بخوان مکان حافظه 0 از حافظه EEPROM دقیقه همان مکانی که مقدار متغییر A رو اونجا ذخیره کرده بودیم و میکرو هم این مکان رو می خونه و می فهمه که مقدرا متغییر A هستش 1 . دستور بعدی داخل این زیربرنامه هستش CLS که باید بدونی برای چی هستش . خط بعدی داخل این زیربرنامه نوشته LCD A

به این معنی که مقداری رو که توسط دستور Readeeprom A , 0 خوندی رو روی ال سی دی نمایش بده و میکرو هم این کار رو می کنه توجه داشته باش که هر وقت خواستی مقدار متغییری رو که قبلا ذخیره کردی رو بخونی و روی ال سی دی نمایش بدی اول باید با دستور Readeeprom

مقدار ذخیره شده رو بخونی بعد با دستور LCD مقدرا رو روی ال سی دی نمایش بدی . دستور بعدی داخل این زیربرنامه هستش RETURN به این معنی که بپر برو سر همون خطی که قبلا ازش پرش کرده بودی یعنی خط Debounce Pinb.0 , 1 , Show , Sub و دوباره توی این حلقه دور می زنه تا این که دوباره یکی از دو میکروسوییچ ها تحریک بشه و بپره بره توی زیربرنامه ای که براشون تعریف شده . فرض کن که همیجا یک دفعه دستت میخوره به سیم منبع تغذیه ای که به میکروکنترلر وصل هستش و تغذیه میکروکنترلر قطع میشه و تو دوباره تغذیه رو وصل می کنی و میکروکنترلر هم ازخط اول برنامه شروع میکنه به خوندن برنامه و دستور READEEPROM A , 0 رو می خونه و میکروکنترلر با خوندن این دستور می فهمه که باید بره مقدار متغییر A رو از مکان 0 حافظه EEPROM بخونه یعنی دقیقا همانجایی که مقدار متغییر A رو در اونجا ذخیره کرده بود . خوب ما اخرین مقداری رو که با تحریک کردن میکروسوییچ به متغییر A دادیم عدد 1 بود خوب اینجا میکرو می فهمه که ما اخرین مقداری رو که به متغییر A داده بودیم عدد 1 بوده از این به دیگه از صفر شروع نمی کنه به افزایش متغییر بلکه از ادامه عدد 1 شروع میکنه به شمردن . خوب ما یک میکروسوییچ دیگه هم داشتیم که وصل بود به پایه B.1 و این میکرو سوییچ برای این بود که مقدار متغییر ما در هر وضعیتی که بود بیاد صفرش کنه به این ترتیب که با تحریک میکروسوییچ میکروکنترلر می فهمه که پایه B.1 یک شده و باید از داخل حلقه DO - LOOP بپره بره توی زیربرنامه SHOW2 و دستورات داخل این زیربرنامه رو اجرا کنه خوب حالا داخل این زیربرنامه چی هستش الان می گم اولین دستوری که داخل زیربرنامه SHOW2 هستش A = 0 هستش که میکروکنترلر با خوندن این دستور میاد مقدار متغییر A رو صفر می کنه حالا مقدار متغییر A هر چقدر که بوده فرقی نداره و صفرش می کنه . دستور بعدی داخل این زیربرنامه هستش WAITMS 5 که میکروکنترلر با خوندن این دستور یک تاخیر 5 میلی ثانیه ای در اجرای برنامه ایجاد می کنه که این تاخیر رو همونطور که گفتم باید بعد از دستور Writeeeprom همیشه بزاری تا اطلاعاتی که می خواد ذخیره بشه به درستی ذخیره بشه . دستور بعدی داخل این زیربرنامه هست CLS که می دونی برای چی هستش . دستور بعدی هستش LCD A و میکرومیاد مقدار متغییر A رو که ما الان صفرش کردیم رو روی ال سی دی نمایش می ده یعنی عدد صفر رو نمایش می ده . دستور بعدی داخل این زیربرنامه هستش RETURN که میکرو با خوندن این دستور میاد میپره کجا همونجایی که قبلا ازش پریده داخل این زیربرنامه یعنی خط

Debounce Pinb.1 , 1 , Show2 , Sub و دوباره می یوفته داخل این حلقه DO -LOOP و روز از نو روزی از نو

1- یک سوال اگه ما مقدار متغییر رو با زدن میکروسوییچ رسوندیم به مثلا عدد 20 بعد توسط میکروسوییچ دوم اومدیم مقدار میکروسوییچ رو صفر کردیم بعد تغذیه میکروکنترلر رو قطع کردیم و دوباره وصل کردیم حالا سوال اینجاست که اخرین عددی که در حافظه EEPROM ذخیره می شه و بعد از برقراری تغذیه مجددا توسط دستور READEEPROM خونده می شه چه عددی هستش ؟

2- خوب این که خیلی راحته شما بعد از این که مقدار متغییر رو رسوندی به عدد 20 اومدی بازدن میکروسوییچ دوم مقدار متغییر رو صفر کردی پس اخرین مقداری که در این متغییر بوده و ذخیره هم شده عدد صفر هستش و با برقراری تغذیه مجدد و خوانده شدن دستور READEEPROM توسط میکروکنترلر میکروکنترلر میفهمه که مقدار متغییر هم اکنون هستش صفر . اینو یادت باشه که اخرین مقداری که به متغییر می دی توی حافظه EEPROM ذخیره میشه و فرقی نداره که چه عددی باشه.

خوب تا همین جا داشته باش تا جلسه بعدی

لینک به دیدگاه

1- سلام خوبي

2- سلام اي بد نيستيم تو خوبي

1- قربانت . امروز چه مبحثي رو مي خاي بگي

2- دستور ROTATE رو اول مي گم بعد مي ريم سر بحث شيرين تايمر كانتر

1- برو كه رفتيم

2- دستور ROTATE : توسط اين دستور مي شه بيت ها رو به سمت چپ يا راست ببري كه كاربرد زيادي هم داره مثلا در كنترل استپ موتور . بزار يك مثال بهت بگم تا به اهميت اين دستور پي ببري

فرض كن كه هشتا LED داري و مي خاي اولي روشن بشه بعد از چند ثانيه خاموش بشه و همزمان با خاموش شدنش دومين LED روشن بشه بعد از چند ثانيه خاموش بشه همزمان با خاموش شدنش LED سوم روشن بشه و الي اخر تا اين كه LED هشتم روشن بشه و چند ثانيه روشن بمونه و خاموش بشه و از دوباره LED اول روشن بشه و اين ريتم از دوباره تكرار بشه . خوب اگه ما بخايم اين كار رو انجام بديم بايد از برنامه زير استفاده كنيم در برنامه زير LED ها به پورت A متصل شده اند

Config Porta = Output

Do

Set Porta.0

Waitms 25

Reset Porta.0

Set Porta.1

Waitms 25

Reset Porta.1

Set Porta.2

Waitms 25

Reset Porta.2

Set Porta.3

Waitms 25

Reset Porta.3

Set Porta.4

Waitms 25

Reset Porta.4

Set Porta.5

Waitms 25

Reset Porta.5

Set Porta.6

Waitms 25

Reset Porta.6

Set Porta.7

Waitms 25

Reset Porta.7

Loop

End

برنامه بالا كار مي كنه ولي از نظر من غلط هستش چون كه ما با دستور ROTATE مي تونيم اين كار رو خيلي راحتر انجام بديم و نياز به نوشتن اين همه دستور نيست به مثال زير توجه كن

Config Porta = Output

Dim B As Byte

B = &B10000000

Do

Rotate B , Right

Porta = B

Waitms 100

Loop

End

برنامه بالا همون كار برنامه قبلي رو انجام مي ده مي بيني كه چقدر دستورات كم شد البته من فقط يك مثال زدم كه بايد در مورد ستور هم بهت بگم كه چي به چيه. گفتيم كه يك بايت تشكيل شده است از هشت بيت .ما در اين برنامه يك متغيير به اسم B و از نوع بايت تعريف كرديم . اين بيت ها رو مي تونيم به يك پورت هم ارتباط بديم. حالا بزار بريم سر برنامه بهت مي گم كه چه اتفاقي افتاده .

خط اول ما اومديم پورت A رو به عنوان خروجي تعريف كرديم

خط دوم اومديم يك متغيير از نوع بايت و به اسم B تعريف كرديم

خط سوم با دستور B = &B10000000 كد باينري براي متغيير B انتخاب كرديم اگه توجه كني متوجه ميشي كه اين عدد يك عدد هشت رقمي است يعني هشت بيتي هستش اون يكي كه اول نوشته شده همون منطق يك ديجيتال و اون صفرهايي كه نوشته شده همون منطق صفر ديجيتال هستش . اين دستور يك نوع مقدار دهي به متغيير هستش. توضيحات اين دستور هنوز ادامه داره كه در ادامه توضيح ميدم.

خط بعدي با دستور DO اومدي و ابتداي حلقه رو مشخص كرديم

خط بعدي با دستور ROTATE B , RIGHT به ميكرو دستور داديم كه بيت هاي متغيير B رو كه در خط قبل توضيح داديم يك گام به سمت راست جلوتر ببر يعني ميشه 01000000 اگه توجه كني متوجه مي شي كه عدد يك 1 يك گام جلو تر رفته البته صفرها هم جلوتر مي رن ولي هيچ بيتي خارج نمي شه و اگه به اخر برسه دوباره دور مي زنه و مياد اول قرار مي گيره.

خط بعد با دستور PORTA = B به ميكرو فرمان داديم كه مقدار بيت هاي متغيير B رو روي پايه هاي پورت A بار گذاري كن . حتما از خود مي پرسي كه يعني چي . خوب الان من بهت مي گم يعني چي . همونطور كه مي دوني هر پورت هشت پايه داره و هر متغيير از نوع بايت هم هشت بيت داره ما اومديم با اين دستوري كه نوشتيم به ترتيب بيت ها رو روي پايه هاي A.0 تا A.7 بار گذاري كرديم در اينجا عدد باينري ما هستش 01000000 پس پايه A.0 ميشه 0 پايه A.1 ميشه 1 پايه A.2 ميشه 0 پايه A.3 ميشه 0 و الي اخر كه بقيه پايه ها هم صفر هستش چون ادامه عدد باينري صفر هستش صفر در اينجا به معني خاموش بودن پايه مورد نظر و يك در اينجا به معني روشن شدن پايه مورد نظر است . پس تا اينجا پايه A.1 ما 1 هستش يعني روشن هستش پس اون LED ي كه به پايه A.1 وصل هستش بايد روشن بشه و تمام LED هاي ديگه خاموش باشه.

خط بعدي با دستور WAITMS 100 يك تاخير صد ميلي ثانيه اي در اجراي برنامه ايچاد كرديم كه با تغيير اين عدد مي توني سرعت روشن روشن و خاموش بودن LED ها رو تغيير بدي.

خط بعدي با دستور LOOP انتهاي حلقه رو مشخص كرديم كه ميكروكنترلر وقتي به اين دستور مي رسه بر مي گرده و از خط بعدي DO شروع مي كنه به خوندن مجدد دستورات .

خط بعدي نوشتيم END كه برنامه هيچ زمان به END نمي رسه .

گفتيم كه برنامه وقتي به LOOP رسيد بر مي گرده مي ره خط بعدي DO رو مي خونه خط بعدي DO هستش Rotate B , Right به محض اين كه اين دستور توسط ميكرو خونده شد بيت ها دوباره يك واحد به سمت راست هدايت مي شوند حالا قبلا بيتها بودن 01000000 كه بعد از خونده شدن دستور

Rotate B , Right يك واحد به سمت راست هدايت مي شن يعني 00100000 اگه توجه كني مي بيني كه اين دفعه بيت سوم از سمت چپ يعني 1 جلوتر رفت اونم به سمت راست

خط بعدي PORTA = B هستش كه قبلا توضيح شو دادم به اين معني هستش كه مقدار فعلي بيت ها رو روي پورت A بارگذاري كن به محض خونده شدن اين دستور ميكرو ميياد اين بيت ها رو به ترتيب از سمت چپ روي پورت A بار گذاري مي كنه اين دفعه بيت سوم از سمت چپ شده 1 و بيت دوم از سمت چپ كه در دفعه قبل 1 بوده شده صفر پس پايه A.1 كه قبلا يك بوده يعني روشن بوده ميشه صفر و پايه A.2 كه قبلا صفر بوده حالا ميشه يك و LED ي كه بهش وصل هستش روشن ميشه

1- همين جا وايستا كه يك سوال دارم چه اتفاقي افتاد كه بيتي كه قبلا يك بوده شد صفر و بيتي كه قبلا صفر بود شده يك

2- به دليل همون دستور Rotate B , Right كه نوشتيم بوده . ببين ما با اين فرمان به ميكرو دستور داديم كه بيت ها رو يك واحد به سمت راست هدايت كن و از اونجايي هم كه گفتيم بيت ها خارج نميشن و دور مي زنن هر بيتي كه اخر از همه بود و يك واحد به سمت راست هدايت شد بر ميگرده ميره اول.

خوب بزار ادامه تحليل رو بگم:

خط بعدي هستش WAITMS 100 كه قبلا دربارش توضيح كافي داده شد

خط بعدي كه توسط ميكروكنترلر خونده ميشه LOOP هستش و با خونده شدن اين دستور ميكرو ميپره دوباره مي ره از خط زيري DO شروع مي كنه به خوندن يعني خط Rotate B , Right و با خونده شدن اين دستور دوباره تمام بيت ها يك واحد به سمت راست هدايت ميشن يعني 00010000 و الي اخر و هي اين برنامه دور مزنه و LED ها يكي پس از ديگري روشن و خاموش مي شه

1- سوال دارم بعد از اين كه اين 1 به اخر رسيد يعني شد 00000001 و دوباره ميكرو به دستور

Rotate B , Right رسيد تكليف اين 1 چي مي شه چون كه بايد يك واحد به سمت راست هدايت بشه

2- اين كه خيلي راحته خوب 1 دوباره بر مي گرده سر خط يعني 10000000

يكم اين مثال رو دستكاري كن تا همه چيز دستت بياد مثلا در اونجايي كه ما نوشتيم B = &B10000000

مي توني دستكاري كني و يك مقدار ديگه بدي مثلا B = &B 10101010 يا هر چيز ديگه .

خوب رسيديم به مبحث تايمر كانتر در ميكرو كنترلر AVR :

درمیکرو کنترلر AVR نهایتا دو سه تا تایمر و کانتر بیشتر نداریم البته در میکروکنترلر نوع

ATMEGA8 چهار تایمر کانتر داریم که در این نوع استسنا هستش

1- تایمر رو فهمیدم ولی کانتر چی هست

2- کانتر ( COUNTER ) به معنی شمارنده هستش که در میکروکنترلر هم وظیفه این کانتر شمردن پالس هایی هستش که به ورودیش اعمال میشه که سر فرصت بهم می گم . من اینجا فقط تایمر صفر 0 و تایمر یک 1 رو بهت می گم تایمر 3 هم به کارم نیومده که برم دنبالش به کار توهم نمیاد . این تایمر کانتر صفر و یک دو تا فرق باهم دارن و اون اینه که تایمر کانتر صفر 8 بیتی هسش و تایمر کانتر یک 16 بیتی .

1- موارد کاربردش کجا هستش

2- موارد کاربردش ساخت ساعت . شمارنده . فرکانس متر و ...

اول میرم سر تایمر کانتر صفر .ببین یزار یک چیز رو اول بهت بگم که بعضی از دستورات رو نمی شه موشکافی کنیم پس زیاد گیر نده .

1- باشه

2- اول تایمر صفر : برای این که شما بتونی از تایمر کانتر برای زمان های دقیق استفاده کنی مجبوری بری و یک RTC از بازار بخری و وصل کنی به دو تا از پایه های مخصوص میکروکنترلر که بهش بعدا اشاره می کنم . برای ایجاد یک تایم مثلا یک ثانیه ای شما باید ابتدا به میکروکنترلر با دستور پیکره بندی CONFIG حالی کنی که اقای میکروکنترلر من می خام از تایمر صفر شما استفاده کنم . برای ایجای زمان یک ثانیه توسط تایمر صفر به ترتیب زیر باید عمل کنی

اول باید ببینی فرکانس کاری میکروکنترلرت چند هستش که اکثر میکروکنترلرها 8 مگا هستن.

Config Timer0 = Timer , Prescale = 256

Dim A As Byte

Dim B As Byte

Enable Interrupts

Enable Timer0

On Timer0 Show

 

Do

Loop

End

Show:

Timer0 = 6

Incr A

If A = 125 Then

Incr B

Cls

Lcd B

Timer0 = 0

A = 0

End If

Return

اين برنامه بايد براي ما يك تايم يك ثانيه ايجاد مي كنه ولي در عمل اين طور نيست وزمان ها بيشتر از يك ثانيه طول مي كشه كه اين مشكل بايك RTC قابل حل هستش.

در خط اول برنامه ما با دستور Config Timer0 = Timer , Prescale = 256 اومديم و تايمر صفر رو براي مد تايمر پيكره بندي كرديم البته با اين دستور CONFIG TIMER0 = TIMER در ادامه همين خط بعد از گذاشتن علامت , با دستور Prescale = 256 اومديم و مقدار فركانس كاري ميكرو رو بر 256 تقسيم كرديم توجه كن كه به جاي اين عدد از اعداد 1 و 8 و 64 و 1024 هم مي توني استفاده كني كه گذاشتن يكي از اين اعداد بعد PRESCALE اجباري هست با اين كار ما فركانس كاري ميكروكنترلر رو بر 256 تقسمت كرديم يعني 8000000 / 256 = 31250 خوب حتما از خودت مي پرسي كه ما چرا اين تقسيم رو انجام داديم .بايد بهت بگم كه براي اين كه فركانس يكم كوچيكتر بشه و بتونيم ازش براي ايجاد يك ثانيه استفاده كنيم.

خط دوم اومديم يك متغيير از نوع بايت به نام A تعريف كرديم

خط سوم هم اومديم يك متغيير از نوع بايت به نام B تعريف كرديم كه در ادامه مي گم كه اين متغيير ها رو براي چه كاري هستن .

خط بعدي با دستور ENABLE INTERRUPTS اومديم وقفه ميكرو كنترلر رو فعال كرديم توجه كن كه ما در ميكرو كنترلر يك وقفه داريم كه انواع مختلف هم داره كه بعدا در بارش توضيح مي دم ولي همين رو بدون كه هر وقت از تايمر و كانتر استفاده مي كني بايد اين دستور رو در اوايل برنامه بزاري تا هر وقت كه وقفه تايمر خورد به ميكرو اعلام بشه كه زمان يك ثانيه شد . در ضمن با دستور

DISABLE INTERRUPTS هم مي تونيم اين فرمان رو غير فعال كنيم

خط بعد با دستور ENABLE TIMER0 تايمر 0 رو فعال كرديم . بادستور DISABLE TIMER0 هم مي تونيم اين تايمر 0 رو غير فعال كنيم.

خط بعدي نوشتيم ON TIMER0 SHOW اين دستور به اين معني هستش كه اگر تايمر صفر سرريز شد بپر برو توي زير برنامه SHOW . توجه داشته باش كه اين سرريز شدن تايمر به منزله زمان يك ثانيه نيست كه در ادامه ميگم زمان يك ثانيه كي به وجود مياد .

خط بعدي نوشتيم DO وپايين DO هم نوشتيم LOOP . اين حلقه DO –LOOP رو كه تو حلقه هم خالي گذاشتيم براي اين هستش كه اگه برنامه ديگه اي هم داشتيم بزاريم داخل اين حلقه مثلا شايد ما يك برنامه اي نوشته باشيم كه علاوه بر تايمر يك كيبرد هم در برنامه استفاده كرده باشيم كه برنامه مثلا كيبرد هم داخل اين حلقه بايد نوشته بشه.

در خط بعدي نوشتيم END كه برنامه ما هيچ وقت به اين END نمي رسه

خط بعدي نوشتيم SHOW: كه زير برنام ما رو مشخص كرده كه داخل اين زير برنامه عبارات زير نوشته شده:

اولي دستور داخل اين زيربرنامه هستش TIMER0 = 6 ببين ما گفتيم كه تايمر صفر يك تايمر 8 بيتي هستش يعني يك بايتي خوب يك بايت هم با 255 پر ميشه و با 256 تا هم سرريز ميشه و دوباره صفر ميشه

ما اومديم براي اين كه اين 256 سرراست بشه تايمر صفر رو با 6 تا پر كرديم كه تقسيمات هم اعشاري نشه .

قبل از اين كه بخام خط بعدي يعني INCR A رو توضيح بدم بزار يك چيزي رو اول بگم بعد برم سراغش چون كه به هم ربط دارن . ما يك تقسيم ديگه هم بايد انجام بديم يعني 31250 / 250 = 125 كه حاصل شد 125 اين 250 همون عدد تايمر هستش كه در دستور قبل با فرمان TIMER0 =6 شش واحد بهش اضافه كرده بوديم كه تقسيم ما سرراست بشه نه اين كه اعشاري بشه . حالا ما اين تقسيم رو براي اين انجام داديم كه بفهميم يك متغيير رو چند بار بايد افزايش بده تا تايم يك ثانيه ايجاد بشه كه در اينجا عدد 125 به دست اومد يعني براي اين كه زمان يك ثانيه ايجاد بشه متغيير ( در اين جا متغيير A ) بايد 125 تا پر بشه . حالا بريم سر خط دستور بعدي.

خط بعدي نوشتيم INCR A به اين معني كه هر وقت تايمر ما وقفه خورد بياد و يك واحد به اين متغيير A اضافه كنه

خط بعدي نوشتيم IF A = 125 THEN ما گفتيم كه براي به دست اومدن زمان يك ثانيه طبق تقسيماتي كه انجام داديم متغيير A بايد 125 تا پر بشه براي همين دستور شرط رو نوشتيم كه اگر متغيير A مساوي 125 شد برو دستور شرط رو اجرا كن اين دستور شرط هر چيزي مي تونه باشه مثال برو يك پورت رو يك كن يا اين كه يك واحد به يك متغيير ديگه اضافه كن . يا يك پايه رو صفر كن يا هر چي كه دوست داشتي فقط ما اين جا اومديم و دستورات شرط رو در خط هاي پايين نوشتيم كه دستورات شرطي كه نوشتيم به اين ها هستن :

اولين دستور شرط اين هستش INCR B يعني يك واحد به متغيي B اضافه كن كه هر دستور ديگه اي هم مي تونستيم بزاريم مثلا اين كه يك پايه رو TOGGLE كن كه ما حال كرديم بعد از يك ثانيه يك متغيير ديگه رو بره اضافه كنه .

دستور شرط بعدي CLS هستش يعني ال سي دي رو پاك كن

دستور شرط بعدي LCD B هستش كه ما به ميكرو دستور داديم كه مقدار متغيير B رو روي ال سي دي نمايش بده.

دستور شرط بعدي TIMER0 = 0 قرار داديم تا براي شروع مجدد صفر بشه

دستور شرط بعدي A = 0 هستش كه با اين كار مقدار متغيير A رو صفر كرديم تا براي بار بعدي كه مي خاد متغيير رو اضافه كنه دوباره از صفر شروع به اضافه كردن كنه نه اين كه از ادامه 125

خط بعدي END IF هستش كه ما هر وقت دستورات شرط تمام ميشه بايد از اين دستور استفاده كنيم تا ميكرو بفهمه كه دستورات شرط تموم شده . پس از اين كه ميكرو به اين خط رسيد و اين دستور رو خوند هيچ كاري انجام نمي ده و فقط از خط پايين اين دستور شروع به خوندن ادامه برنامه مي كنه

خط اخر نوشتيم RETURN ببين ما براي اين كه دوباره يك تايم يك ثانيه ديگه به وجود بياد مجبوريم كه دوباره برگرديم به اول برنامه در تايمر ها با دستور RETURN اين كار رو انجام مي ديم . و ميكرو ميره به اول برنامه از دوباره روز از نو روزي از نو و اين ايجاد زمان يك ثانيه ادامه داره .

1- يك سوال اگه ما خاستيم كه يك زمان بيشتر از يك ثانيه ايجاد كنيم مثلا دو ثانيه يا بيشتر بايد چكار كنيم

2- سوال خوبي كرديم اين كار خيلي راحته در خطي كه نوشتيم IF A = 125 و اين 125 براي يك ثانيه بود رو دو برابركنيم تا زمان دو ثانيه حاصل شه يعني بزاريم 250 . يك چيز ديگه هم بايد بهت بگم كه اگه زمان بيشتري مثلا از دو ثانيه بيشتر خاستي بايد 125 رو ضرت در اون تايمي كه مي خاي بكني

مثلا زمان سه ثانيه مي خاي 125 * 3 = 375 كه حاصل شد 375 كه اين جا چون متغيير A فقط تا 255 تا مي تونه پر بشه و با 256 تا سرريز ميشه ما نمي تونيم از اين نوع متغيير استفاده كنيم و مجبوريم از يك متغيير ديگه استفاده كنيم كه از نوع WORD هستش كه ظرفيت خيلي بالا داره . حالا كافيه در اويل برنامه به جاي دستور DIM A AS BYTE بنويسيم DIM A AS WORD و به جاي دستور

IF A = 125 بنويسيم IF A = 375 (البته براي تايم سه ثانيه)

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

لینک به دیدگاه

خب آقا کوروش بیا که میخایم یه بحث بدردبخور راه بندازیم:ws3:

 

از بقیه دوستانم همینجا دعوت میکنم بیان بحث رو پرشورتر رو داغتر کنن:mood (23):

لینک به دیدگاه
خب آقا کوروش بیا که میخایم یه بحث بدردبخور راه بندازیم:ws3:

 

از بقیه دوستانم همینجا دعوت میکنم بیان بحث رو پرشورتر رو داغتر کنن:mood (23):

 

باشه :hapydancsmil:

درباره چه موضوعیش بحث کنیم؟:ws38:

لینک به دیدگاه
باشه :hapydancsmil:

درباره چه موضوعیش بحث کنیم؟:ws38:

 

 

هرچی که راحت تری:a030:

 

در مورد همون EEPROM شروع کن هرجاشو که منم بلد بودم همون موقع بگم ، بلدم نبودم بگردم بعد بگم:ws3:

لینک به دیدگاه
هرچی که راحت تری:a030:

 

در مورد همون EEPROM شروع کن هرجاشو که منم بلد بودم همون موقع بگم ، بلدم نبودم بگردم بعد بگم:ws3:

 

خب خب قصه از اونجایی شرو شد که وقتی ما یه متغییر تو برنامه ای تعریف میکنیم و حالا یه عددی توش قرار میدیم این عدده میره تو حافظه Flash و وقتی منبع قطع میشه... میدونید که موندگاری حافظه فلش به منبع وابسته اس اینجاس که EEPROM آمد:w16:

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


×
×
  • اضافه کردن...