.تعمیـــرکاران کیان ست (kiansat.kim)تابع قوانین -جمهموری-اسلامی ایران میباشد و ارسال هر گونه مطلب سیاسی،مذهبی،غیراخلاقی و خرید و فروش متعلقات ماه-واره و دیگر موارد مجرمانه ممنوع میباشد وبا کاربران خاطی به شدت برخورد میگردد انجمن فقط تعمیرات لوازم الکترونیک میباشد...













سلام مهمان گرامی؛
به کیان ست خوش آمدید برای مشاهده انجمن با امکانات کامل می بايست از طريق این لینک عضو شوید.

http://teranzit.pw/uploads/14469017281.png
پیام خصوصی به مدیریت کل سایت ........... صفحه توضیحات و شرایط گروه ویژه ........... ...........
ارتباط تلگرامی با مدیریت سایت ................. ایدی تلگرام suportripair@ .................
نمایش نتایج: از شماره 1 تا 2 , از مجموع 2

موضوع: کاربرد رجیستر ها در avr

  1. #1


    تاریخ عضویت
    Mar 2010
    نوشته ها
    61
    تشکر ها
    305
    380 سپاس از61 پست

    پیش فرض کاربرد رجیستر ها در avr

    ·
    کاربرد رجیستر ها در avr

    همانطور كه ميدانيد وظيفه رجيستر در ميكرو نگهداري اطلاعات است، رجيسترهاي حافظه RAM در AVR از نوع هشت بيتي هستند و شما ميتوانيد اطلاعتتان را در قالب 8 بيت دران اين رجيسترها به عنوان حافظه موقت قرار بدهيد و از آنها استفاده كنيد. اما اين 32 رجيستر تفاوتي با بقيه رجيسترهاي RAM شما و رجيسترهاي با كاربرد خاص دارند و تفاوت اين هست كه اين 32 رجيستر مستقيما با ALU ميكرو در ارتباط هستند و شما براي انجام محاسبات نياز به اين داريد كه اطلاعات را در آنها قرار بدهيد تا بتوانيد به واحد ALU ارسال كنيد و از طريق همين رجيسترها هم بايد اطلاعات را از ALU دريافت كنيد، به عنوان مثال اگر شما ميخواهيد عدد 10 را با 20 جمع كنيد بايد حتما اين اعداد را از طريق اين رجيسترها به ALU ارسال كنيد، در بعضي از ميكروها فقط يك رجيستر هست كه مستقيما با ALU در ارتباط هست كه معمولا به Accumulator يا Working Register معروف هست و اين بستگي به نوع معماري تراشه دارد. در AVR اين 32 رجيستر نقش Accumulator را دارند.
    · در بعضي از دستورات شما ميتوانيد مستقيما از همه 32 رجيستر استفاده كنيد و آنها را كنترل كنيد . اما در بعضي از دستورات شما فقط به نيمه بالايي يعني از R16 تا R31 دسترسي داريد. مثلا در دستوراتي مانند SBR , CBR كه براي صفر و يك كردن بيتي رجيستر ها به كار ميروند محدوديت وجود دارد و شما نميتوانيد اين دستورات را براي رجيسترهاي R0 تا R15 هم مانند 16 رجيستر R16 تا R31 مستقيما به كار ببريد.
    · بعضي از اين رجيسترها علاوه بر كاربرد اصلي كاربردهاي ديگري هم دارند، مثلا رجيسترهاي R31 , R30 را ميشود با هم به عنوان يك رجيستر 16 بيتي با نام Z در نظر گرفت و در آدرس دهي از آن استفاده كرد ( البته كاربردهاي ديگه هم دارد )، رجيستر هاي R29 , R28 هم ميتوانند با هم تركيب بشوند و همچنين رجيسترهاي R27 , R26 هم به همين صورت، رجيسترهاي ديگري هم در بعضي موارد كابردهاي خاص ديگري انجام ميدهند.
    · مي توان گفت كه اگر ما فرض كنيم ALU به عنوان شاه در نظر گرفته شود ، اين شاه فقط به 32 نفر اعتماد دارد و اطلاعات را از اين 32 نفر مستقيما دريافت ميكند، كه در AVR اين 32 نفر همان 32 رجيستر R0 تا R31 هستند و ALU نميتواند مستقيما اطلاعات را از يك خانه از حافظه RAM بردارد و پردازش كند ، شما اگر بخواهيد يك عدد را هم وارد ALU كنيد بايد حتما آن عدد را در اين رجيسترها قرار بدهيد و از اين طريق عدد را براي پردازش به واحد محاسبه و منطق كه همان ALU هست ارسال كنيد. در زبان هاي سطح بالا مثل بيسيك يا زباني مثل C بيشتر اين كارها را كامپايلر براي شما انجام ميدهد و شما لازم نيست زياد وارد جزئيات كار اين رجيسترها بشويد، زماني كه شما يك متغيير را در زباني مثل C تعريف ميكنيد يك خانه از حافظه موقت به آن اختصاص داده ميشود ( كامپايلر براي آن در نظر ميگيرد ) و اگر شما دستوري مانند PORTB = 25 را بنويسيد كامپايلر خودش كدي را توليد ميكند كه ابتدا عدد 25 در يكي از اين رجيسترها كه اشاره شد ريخته شده و بعد از آنجا روي پورت B قرار گيرد ، در حالي كه در زبان اسمبلي كه يك زبان سطح پايين هست شما بايد حتما ابتدا اين عدد را در ثباتي مثل R16 بريزيد و سپس آن را روي پورت بريزيد، مثلا به اين صورت:
    · LDI R16,25
    · OUT PORTB,R16
    · همانطور كه ميبينيد در خط اول مقدار 25 در رجيستر R16 كه نقش واسط را دارد ريخته شده و بعد از آن از رجيستر R16 خوانده شده و در رجيستر PORTB قرار ميگيرد. زماني كه شما يك خط دستور براي اينكار در C بنويسيد كامپايلر حداقل كاري كه براي آن انجام ميدهد اين است كه زمان اسمبل كردن برنامه اين دو خط را براي آن ايجاد ميكند . حالا اگر دستوراتي مثل دستور جمع يا ضرب و تقسيم هم مد نظر باشد روال كار همين است و شما از هر زباني كه استفاده كنيد به خاطر معماري تراشه اين اطلاعات بايد حتما توسط رجيسترهاي R0 تا R31 به ALU وارد بشوند و شما چه متوجه بشيود، چه نشويد و چه بخواهيد چه نخواهيد AVR براي اينكه بتواند عمليات محاسباتي شما را روي داده ها انجام دهد بايد از اين 32 رجيستر كمك بگيرد تا بتواند اطلاعاتتان را براي پردازش وارد بخش محاسبه و منطق كند ( ALU )
    · تمام موارد فوق به معماري تراشه برمي گردد و معمولا براي برنامه نويسان اسمبلي مهم هست، كمتر پيش مي آيد كه برنامه نويسان زبان سطح بالا خودشان را با اين موارد درگير كنند و براي صرفه جويي در وقت اين كار به كامپايلر سپرده ميشود.
    · در ميكروهايي مانند PIC ها شما همين كار را از طريق رجيستري با نام W انجام ميدهيد ( به خاطر نوع معماري و ساختمان داخلي متفاوت )، و هر عملياتي كه بخواهيد انجام بدهيد بايد اطلاعات از طريق اين رجيستر وارد ALU گردد و مثلا اگر بخواهيد مثال بالا را انجام بدهيد به اين صورت انجام مي شود:
    · MOVLW .25
    · MOVWF PORTB
    · در خط اول مقدار 25 دسيمال در ثبات w قرار ميگيرد و در خط بعدي اين مقدار از w به PORTB منتقل ميشود.
    · از اين لحاظ معماري AVR در اين قسمت نسبت به PIC اين برتري را دارد كه شما به جاي يك رجيستر در بيشتر موارد 32 رجيستر در اختيار داريد كه ميتوانند مستقيما با ALU در ارتباط باشند، البته معماري PIC هم اصولي تر از اين حرفهاست كه از اين بابت كمبودي احساس بشه !
    · خلاصه: اين 32 رجيستر، رجيسترهاي مهمي هستند كه ALU فقط از آنها اطلاعاتش را ميگيرد و پردازش ميكند و مي توان گفت در هر برنامه اي كه نوشته بشه عدم استفاده از آنها به نوعي محال هست، البته در زبانهاي سطح بالا تقريبا اين موارد اصلا مطرح نيست و شما فقط متغير را تعريف ميكنيد و كامپايلر خودش زحمت اين كارها را ميكشد اما اگر بخواهيد كمي حرفه اي تر به قضيه نگاه كنيد در همان زبان ها نيز براش شما مهم ميشود كه متغيري كه تعريف ميكنيد در كجا قرار ميگيرد و چگونه كدي كه مينويسيد كامپايل ميشود، يكي از فاكتورها ضعف و قدرت كامپايلر ها اين هست كه به متغيرها مكان مناسبي اختصاص بدهند تا بتوانند دستور العمل ها را به بهترين شكل انجام دهند و كد اضافي توليد نكنند. به نظر من شما اگر با زبان هاي سطح بالا كار ميكني حتما به اين نكات هم دقت كن چون اگر حالا چندان هم داراي اهميت نباشد بعدها اهميت زيادي پيدا ميكند.
    ویرایش توسط سپهر : 5th April 2010 در ساعت 00:14

  2. 9کاربر از سپهر بخاطر ارسال این پست مفید سپاسگزاری کرده اند:

    ali200009 (18th September 2010),alireza3135 (23rd February 2011),KIAN FAR (5th April 2010),m2007_mail (18th November 2011),morteza 0228 (23rd October 2011),obatoo (14th January 2014),old fixer (13th December 2011),omid0063 (15th August 2012),SURENA (9th January 2011)

  3. #2


    تاریخ عضویت
    Jan 2011
    نوشته ها
    19
    تشکر ها
    3
    153 سپاس از19 پست

    پیش فرض

    avr ها چیزای جالبی هستند اماعمرشون دیگه تمام شد است .اسمبلی به نظر من خیلی خوبه واسه کار با میکروکنترولر ها .. من خودم اسمبلی کار کردم با هاش
    ویرایش توسط alireza@ask@me : 9th January 2011 در ساعت 23:22
    وقتی بچه بودم یک تفنگ بادی خریدم.. هرشب تو خیابون همه گنجشکها را می زدم ..به حدی که هرشب تا صد تاشون پر کند رو زمین در حالی که به خون مغلتیدن سر می کردم.. یه روز که داشتم تو حیات خونه درس می خوندم یه بچه گنجشک اوفتا رو کتابم .. برش داشتم و دلم سیش سوخت.. پیش خودم نگهش داشتم .. روز اول ..دوم ..سوم .. دیگه به جای اینکه برم شبا بکشمون کتار همون جوجه موندم تا بلخره یک ماه بعد پرش خوب بزرگ شد و پرواز می کرد ..جوری که می اومد می نشست روی شونهام تا صداش می کردم.. یه روز وقتی رفت دیگه بر نگشت ..خیلی عصبی و ناراحت بودم تا اینکه چند روز بعد کنار دیوار تو کوچه در حالی که سینهاش خوبی بود دیم که مرده بود ....
    از اون روز به بعد دیگه هیچ وقت دست به تفنگم نبردم ..چون اینهمه کشتم .. اما نتونستم یکشونا بزرگ کنم..

  4. 5کاربر از alireza@ask@me بخاطر ارسال این پست مفید سپاسگزاری کرده اند:

    KIAN FAR (10th January 2011),m2007_mail (18th November 2011),obatoo (14th January 2014),old fixer (13th December 2011),omid0063 (15th August 2012)

اطلاعات موضوع

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

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  


Copyright ©2000 - 2013, Jelsoft Enterprises Ltd کیــــــــــان ستـــــــــــ ...® اولین و بزرگترین سایت فوق تخصصی الکترونیک در ایران



Cultural Forum | Study at Malaysian University