آی پی امداد
آی پی امداد
آریا الکترونیک parcham تکشو

اموزش تخصصی میکروکنترلر avr

saegheh_0836

کاربران vip(افتخاری)
vip افتخاری
کاربر
2007-09-24
118
1,196
38
کرمان
atmega8.blogfa.com
به زودی در این تاپیک برنامه نویسی میکروکنترلرهای ای وی ار به زبان بیسک اموزش داده میشود

ساختار میکروکنترلر

برنامه نویسی

طراحی پروژه

اجرای پروژه
 

saegheh_0836

کاربران vip(افتخاری)
vip افتخاری
کاربر
2007-09-24
118
1,196
38
کرمان
atmega8.blogfa.com
با نام پرودگار یکتا اغاز می کنیم

مقدمه:

اساتید گرامی لطفا به چند نکته توجه کنید

از ایجا تاپیک در این بخش جدا خوداری کنید

سوالات مربوط به این بخش را در تاپیک (پاسخ گویی به میکرو ای وی ار بپرسید)

انتقادها وپیشنهادهای خود را از ما دریغ نفرمایید همانطور که فکر خود را به کار میگیرید دستان خود را به حرکت در اورید و عملی ازمایش کنید
 

saegheh_0836

کاربران vip(افتخاری)
vip افتخاری
کاربر
2007-09-24
118
1,196
38
کرمان
atmega8.blogfa.com
بعضی ها فکر می کنند میکرو یک چیز بسیار پیچیده است که تنها افراد تیزهوش می توانند یاد بگیرند این فکر
کاملا اشتباه است چون تکنولوژ
 
آخرین ویرایش:

saegheh_0836

کاربران vip(افتخاری)
vip افتخاری
کاربر
2007-09-24
118
1,196
38
کرمان
atmega8.blogfa.com
با عرض سلام

ادامه درس

رجیستر داده هم خواندنی و هم نوشتنی است یعنی اگر بخواهیم مقداری را به پورت بفرستیم باید در این رجستر نوشت و هم می توان مقدار رجستر را خواند

مثال portd=25 مقدار 25 را در پورت d می ریزد
a=portd مقدار پورت دی را در متغییر a می ریزد

رجیستر جهت داده برای اینکه بتوانیم از پورت بصورت ورودی و خروجی استفاده کرد ابتدا باید رجیستر جهت داده را مقدار دهی کرد به این معنی که اگر همه بیتهای رجستر را 1 کنیم پورت به صورت خروجی تعریف می شود و اگر بیتها را 0 کنیم پورت به صورت ورودی تعریف کرد و هم می توان هر پین هر پورت به صورت ورودی و خروجی تعریف کرد
مثال:ddrd=255پورت به صورت خروجی تعریف شده است
مثال:ddrd=0پورت dبه صورت ورودی تعریف شده است

رجیستر ادری پایه های ورودی پورت
که بصورت PINn نشان داده می شود
 
آخرین ویرایش:

saegheh_0836

کاربران vip(افتخاری)
vip افتخاری
کاربر
2007-09-24
118
1,196
38
کرمان
atmega8.blogfa.com
با سلام

با سلام خدمت دوستان گرامی

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

با نام خدا شروع می کنیم
 

saegheh_0836

کاربران vip(افتخاری)
vip افتخاری
کاربر
2007-09-24
118
1,196
38
کرمان
atmega8.blogfa.com
با سلام در صورت سوال در تاپیک پاسگویی به مسائل میکرو مطرح کنید

خانواده avr بزرگ و گسترده می باشد که هر کدام دارای اماکانات خاصی می باشند

هر میکرو دارای چند پورت می باشد کار پورت ارتباط با دنیا خارج است به این معنی که تبادل اطلاعات از بیرون میکرو به داخل میکرو و به عکس از راه همین پورتها انجام می گیرد همانطور در تاپیک پیش کفتیم هر پورت دارای سه رجیستر
است که پورت مورد نظر را کنترل می کند

که در تاپیک قبل دو رجیستر را توضیح دادیم

سومی که یک رجستر نیست دقت کنید به سومی بایت ادرس ورودی می گویند به این نکته توجه کنید هر گاه شما از پورت می خوانید میکرو دیتای لچ شده از روی پورت را می خواند

به این مثال دقت کنید

a=porta
هر گاه از این دستور شما استفاده کنید مقدار لچ خوانده می شود
و حال اگر شما از بایت ادرس بخوانید میکرو مقدار منطقی هر پایه را به شما می دهد ه از این دستور باید استفاده کرد

a=pina
aکه یک متغیر است که مقدار پورت ش در ان قرار می گیر د به فرض اگربخواهید مقدار فیزیکی پورت b را بخوانید به جای کارکتر a کارکتر b قرار می گیرد

از این خط به بعد هم با دستورات بیسیک اشنا می شوید هم با سیستم داخلی میکرو
بریا یادگیری مباحث باید هم برنامه بسکام avr و برنامه پرتیوس را در کامپیوتر خود نصب کنید و هر مبحثی که گفته می شود را تمرین کنید

دقت کنید در بعضی از پورتهای میکرو برای هر پایه چند کار تعیین شده است که بصورت مولتی پلکس کار می کند ممکن است مثلا پین شماره 1 از پورت a هم ورودر و خروجی باشد و هم پایه تحریک کننده تایمر که به وسیله دستورا ت برنامه نویسی و دستگاری رجستر ها هر کدام را که خواستیم فعال کنیم لازم به ذکر زمانی که پورت مورد نظر را به عنوان ورودی و خروجی تعریف می کنیم دیگر نمی توانیم از قایلیت دیگر ان استفاده کنیم

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

config portx=input
با استفاده از دستور با لا ما پورت را به صورت ورودی تعریف کردیم که جای x باید نام پورت مورد نظر را نوشت

و حالا اگر به جای واژه input از از واژه output استفاده کنیم پورت به صورت خروجی تعریف می شود

اگر پورت را به صورت ورودی تعریف کنیم تما م پایه های پورت صفر می شود

اگر به صورت خروجی تعریف کنیم کا پایه ها یک می شود
مثال
config porta=input
پورت a به صورت ورودی تعریف شده است
config portc =output
پورت c خروجی شده

حالا زمانی پیش می اید که ما بخواهیم هر پایه از پورت را خواستیم ورودی و کدام را که خواستیم خروجی تعریف کنیم
که از این دستور استفاده م یکنیم

config pinx.y=s
به جای x نا پورت را می نویسیم و به جای y نام پین دلخواه پورت را و به جای s از واژهinput و output استفاده می کنیم به طور مثال
config pinb.5=input
پین شماره 5 از پورت b به صورت ورودی تعریف شده است

در طول یک برنامه ما احتیاج به متغیرهایی داریم که بتوانیم مقداری را در ان بریزیم و یا از ان برداشت کنیم
به طور کلی مغییر خانه هایی از ram هستند که بطور موقت اطلاعاتی در انها قرار می گیرد که بعد قطع برق تمام اطلاعات پاک می شود
برای تعریف متغییر از دستور زیر استفاده می کنیم
dim var as [xram/sram/eram] data type
var همان نام متغیر است شما می توانید تعیین کنید که حافظه استفاده شده از ram خارجی باشد یا ram داخلی و یا eeprom و اگر چیزی نوشته نشود پیش فرض از ram داخلی استفاده می شود data type همان نوع داده است که به صورت زیر است
bit-byte-integer-word-long-singel-single

لازم به ذکر است همیشه نوع داده را طوری انتخاب کنیدکه مورد احتیاج شماست به این معنی اگر متغییر شما از نوع byteاست شما مجاز هستید از مقدار 0تا 255را در متغیر قرار دهید اگر بخواهید مقداری بالا تر از 255 به متغیر اختصاص دهید کامپایلر برای شما خطا می گیردو دیگر اینکه اگر نوع داده byte کار شما راه می اندازد هیچگاه نوع متغیر را از نوع بالاتر انتخاب نکنید
چونئ هر گاه شما از بایت استفاده می کنید 8 بیت از حافظه ram اشغال می شود ولی هر وقت از نوع integer ,word ر 16 بیت و از نوع long,singleر32بیت از حافظه ream اشغال می شود پس به اندازهای که لازم دارید نوع داده را انتخاب کنید فضاو مقداری که هر نوع داده به خود اختصاص می دهد به شرح زیر است

bit a bit 0 or 1

byte 8bit 0 to 255

integer 16bit -32767 to 32767

word 16 bit 0 to 65535

long 32bit -2147483648 to 214783647

single 32bit 1.5*10^-45 to 3.4*10^38

string 0-256 byte
 

saegheh_0836

کاربران vip(افتخاری)
vip افتخاری
کاربر
2007-09-24
118
1,196
38
کرمان
atmega8.blogfa.com
string نوعی داده است که برای رشته یا کارکتر مورد استفاده قرار می گیردبه طور مثال اگر متغییری که از نوع string تعریف شده است به ان فقط می توان رشته یا کارکتر اختصاص داد

مثال

dim s as string*x

دقت کنید سs از نوع string تعریف شده است جای x باید مقدار طول رشته درج شودکه میتوان از مقدار 0تا 255 قرار داد مثلا اگر طول رشته شما 10 کارکتر است باید به جای x مقدار 10 را قرار دهید

dim s as string*3
s="abc" v

s از نوع string است که طول مجاز رشته 3 است که شما فقط می توانید از 1 تا 3 کارکتر بهs اختصاص دهید(به s نمی توان عدد اختصاص داد)

شما بعد از انکه متغیری را تعریف کردید می توانید به ان عددی اختصاص دهید و گر نه پیش فرض به ان 0 اختصاص داده می شود

dim a as byte
a=25
شما متغیری به نام a تعریف کردید و به ان مقدار 25 را اختصاص داده اید
نکته : شما بیشتر حد مجازی که برای متغیر تعریف کرده اید منظور همان نو ع داده است نمی توانید مقدار بیشتری دهید مثلا اگر متغیری از نوع byte تعریف کرده اید بیشتر از مقدار 255 را نمی توانید به ان اختصاص دهید

در محیط برنامه بسکام از منوی help می توانید
 

Tanesh

کاربر
2008-10-05
61
584
انواع مد های آدرس دهی

در پیرو تدریس زیبای استاد صاعقه که در مورد داده ها و انواع آنها توضیح دادند و بنده نیز بعنوان شاگرد ایشان میخوام بعنوان تحویل درس در خدمت استاد (انواع مد های آدرس دهی را خدمتتان تقدیم دارم و از اساتید بزرگوار هم استدعا دارد اشتباهات اینجانب را اصلاح :love-smiley-017:فرمایند
برای دسترسی به داده ها از روش های مختلف استفاده میشود ،داده میتواند در رجیستر ها حافظه SRAM یا حافظه برنامه (FLASH) قرار گیرد به این روش های دستیابی به داده <<مد های آدرس دهی>> گویند
A - انواع مد های آدرس دهی :
1- ادرس دهی فوری یا بلافصل(Immediate Addressing)
2- آدرس دهی مستقیم (Direct Addressing)
3 - آدرس دهی غیر مستقیم
آدرس دهی فوری:
در این روش عملوند Opreand بلافاصله بعد از کد عمل Opcode در حافظه برنامه قرار دارد ، البته عملوند باید یک مقدار ثابت باشد.
مثال :
دستور LDI R16,$55 در حافظه برنامه بصورت زی قرار میگیرد (با فرض قرار داشتن این دستور در آدرس 101H,100H از حافظه برنامه ).
کد دستور LDI R16,$55 برابر​
 
بالا