اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

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


    سلام دوستان
    یه سوال داشتم . من خیلی جاها دیدم برای مقدار دادن به یه رجیستر میان به جای برابر قرار دادنش با مقدار یا استفاده از and , or ، از شیفت به شکل زیر استفاده میکنن . میشه یه توضیح بدید در مورد نحوه ی عملکرد این نوع مقدار دهی ؟
    PORTB=(1<<PORTB2)|(1<<PORTB1)|(1<&l t;PORTB0);
    TCCR0=(1<<WGM01)|(1<< CS01);
    اگه میشه نحوه ی استفاده از این روش رو بهم یاد بدید و یه مرجع که این جور نکات توش باشه بهم معرفی کنید .
    با تشکر

    #2
    پاسخ : سوال در مورد یه نکته ی برنامه نویسی


    PORTB=( 1 << PORTB2 ) | ( 1 << PORTB1 ) | ( 1 << PORTB0 );
    TCCR0 = ( 1 << WGM01 ) | ( 1 << CS01 );
    این روش برای خوانایی بیشتر برنامه می باشد بدین معنی که برنامه نویس در مرجعات بعدی آسانتر بتواند کد نوشته شده را بررسی کند .

    در فیلم آموزشی زیر جناب استاد کی نژاد از دقیقه 3 درباره این نوع کد نویسی توضیحاتی ارائه داده اند:

    http://host10.aparat.com//public/use...a082378103.mp4

    همچنین در پست زیر نیز توضیحاتی ارائه کرده اند:

    [quote author=طراح link=topic=41476.msg227946#msg227946 date=1287482881]

    دیدگاه


      #3
      پاسخ : سوال در مورد یه نکته ی برنامه نویسی

      همونطور که دوستمون گفتن، هم برای خوانایی بیشتر برنامه و هم پویایی برنامه از این روش استفاده میشه.
      بذار با یه مثال ساده توضیح بدم:
      فرض کن داخل برنامه، میخوای یکی از رجیسترها رو مقداردهی کنی و فقط میخوای یکی از بیتآ‌های اون رو دستکاری کنیدر حالی که بقیهآ‌ی بیت ها دستکاری نشن و همون مقدار قبلیشون رو داشته باشن! مثلا میخوای بیت پنجم از یک رجیستر 8 بیتی (یا هرچیز دیگه) رو در وسط برنامه 0 کنی یا 1 کنی!
      یک راهش اینه که بیای بشینی محاسبه کنی که مقدار رجیستر الان باید چه مقداری باشه؟ (توجه داشته باش که نمیخوای بیتآ‌های دیگه تغییری کنن!) و بعدش محاسبات لازم رو انجام بدی و مقدار جدید رو در رجیستر بنویسیس، اما راه دیگه ش که خیلی کارت رو ساده تر میکنه، استفاده از همین تکنیکه! خب قرار بود بیت پنجم از یک رجیستر رو 0 یا 1 کنیم. فرض کن اسم رجیسترش، REG باشه. میخوایم بیت پنجم اون رو 1 کنیم بدون اینکه بقیه ی بیت ها تغییری کنن. از دستور زیر استفاده میکنیم:
      REG|=1<<4;
      خب این دستور چیکار میکنه؟ اینکار رو میکنه: اول 00000001 رو 4 تا شیفت میده به راست که میشه 00010000 (یعنی بیت پنجم از سمت چپ برابر با یک شد) بعدش این مقدار رو با REG به صورت بیتی or میکنه (بیت ها رو متناظرا، or میکنه) و در همون REG ذخیره می کنه. بنابراین بیت پنجم REG برابر میشه با 1.
      حالا برای صفر کردن همون بیت پنجم، از دستور زیر استفاده میشه:
      REG&=~(1<<4);
      خب این دستور چیکار میکنه؟ ابتدا 00000001 رو به 00010000 تبدیل میکنه، بعد با دستور ~، تبدیل میشه به 11101111 و در نهایت، مقدار رجیستر REG رو با این مقدار and بیتی میکنه.
      دراین مثال، ما میدونستیم که میخوایم بیت 5 رو دستکاری کنیم، از اونجایی که در میکرو، تک تک بیت های رجیسترها، نام هایی دارن برای خودشون، در برنامه نویسی به کمک دستور define، مقادیری رو به اون نام ها اختصاص میدن.
      ...
      :read:
      1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
      2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
      3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

      دیدگاه

      لطفا صبر کنید...
      X