اطلاعیه

Collapse
No announcement yet.

برنامه نویسی TWI

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

    برنامه نویسی TWI

    سلام دوستان
    من این خط از برنامه رو که قرار دادم نمیفهمم میشه راهنماییم کنید؟؟!! :sad:

    (TWCR = (1<<TWINT)|(1<<TWSTA)| (1<<TWEN

    توی این برنامه TWCR یک رجیستره که TWINT,TWSTA,TWEN بیت های تشکیل دهنده اون رجیستر هستن.


    #2
    پاسخ : برنامه نویسی TWI

    تووی این برنامه 1 به اندازه جایگاه TWEN که عدد 2 هست در رجیستر TWCR به سمت چپ شیفت داده میشه که نتیجه اون میشه عدد 00000100 بقیه بیت های نوشته شده هم به همین ترتیب به اندازه جایگاهشون به چپ شیفت داده میشن درنهایت این اعداد با هم OR میشن که عدد 10100100 رو درست میکنن حالا این عدد در رجیستر TWCR قرارداده میشه
    ( با تشکر از جناب Hamed Gh که این مطلبو به من یاد دادن)
    اگر توضیحات کافی نبود به این لینک برید
    http://www.eca.ir/forum2/index.php?topic=57531.0

    دیدگاه


      #3
      پاسخ : برنامه نویسی TWI

      واقغا ازتون ممنونم
      خیلی لطف کردید

      دیدگاه


        #4
        پاسخ : برنامه نویسی TWI

        حالا یه سوال دیگه دارم
        توی این خط از برنامه
        ; ((( while (!(TWCR & (1<<TWINT
        نتیجه TWINT>> مقدار 10000000 را نتیجه می دهدو مقدار TWCR هم برابر با10100100 است پس نتیجه and برابر با 10000000 می شود،این مقدار باعث می شود نتیجه پرانتز while صفر باشد یا یک؟یعنی شرط while برقرار است یا نه؟
        دوستان اگه راهنمایی کنید ممنون می شم.

        دیدگاه


          #5
          پاسخ : برنامه نویسی TWI

          تا زمانی که بیت TWINT یک نشده نتیجه پرانتز صفر هست که با علامت ! که پشتش قرار گرفته تبدیل به یک میشه و حلقه سرجای خودش باقی میماند.
          زمانی که این بیت یک از حلقه خارج میشود چون درونش صفر خواهد شد
          ... و (بدانيد) گرفتن تصميمهاى محكم (براى رسيدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگين سازگار نيست و چه بسيار كه خواب شبانه تصميمهاى محكم روز را از ميان برده و تاريكيآ‌ها، خاطره همتآ‌هاى بلند را از يادها محو كرده است. (نهجآ‌البلاغه، خطبه211)

          امام علي (ع):کسي که به وقت ياري رهبرش در خواب باشد، با لگد دشمنش بيدار مي شود (غررالحکم،ص 422)

          دیدگاه


            #6
            پاسخ : برنامه نویسی TWI

            ببین دوست عزیز مشکل شما این هست که شما بیت twint رو 1 فرض کردید یعنی مقدار TWCR رو عدد 10100100 میدونید که اینطور نیست . اگر شما در حال بررسی مثال فیلم های آموزشی هستید خط قبلی این هست

            TWCR = (1<<TWINT)|(0<<TWEA)|(1<<TWSTA)| (0<<TWSTO)|(0<<TWWC)|(1<<TWEN)|( 0<<TWIE);
            مقدار بقیه بیت ها مهم نیست

            اون یکی که برای TWINT نوشته شده برای این هست که فلگ رو که قبلا" 1 شده صفر کنه . برای پاک کردن بیشتر فلگ ها باید در اون 1 نوشته بشه بنا برای مقدار رجیستر TWCR بعد از این خط این هست : 00100100

            حالا فرض کن وقفه ای اتفاق نیفتاده پس بیت TWINT هنوز صفر هست در این حالت مقدار درون پرانتز 0 بوده که NOT ان 1 میشود بنابراین حلقه WHILE مقدار 1 داشته و در حلقه باقی میمانیم

            هر گاه بیت TWINT یک شود مقدار WHILE صفر شده از حلقه خارج میشیم
            اگر لازم هست بگو تا بیشتر توضیح بدم

            دیدگاه

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