اطلاعیه

Collapse
No announcement yet.

مشکل با رجیستر ICR1 در کدویژن

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

    مشکل با رجیستر ICR1 در کدویژن

    سلام به همه دوستان
    من توی برنامم میخام مقدار رجیستر ICR1 رو بخونم و توی یه متغیر بریزم ،مثلا اینجوری:
    کد:
    unsigned int t;
    t=ICR1;
    ولی کامپایلر خطای زیر رو میگیره:
    'undefined symbol 'ICR1
    مگه نمیشه رجیستر ICR1 رو مثل رجیستر TCNT1 به صورت 16 بیتی خوند!؟ oo:

    #2
    پاسخ : مشکل با رجیستر ICR1 در کدویژن

    مشکل سر اینه که این رجیستر واسه کامپایلر ناشناخته ست...
    قبلنا ک با کدویژن کار میکردم یادمه یه بار خاستم توی ICR1 بنویسم که میگفت اصلا همچین رجیستری نیست! :biggrin:
    شما بهتره دیتاشیت رو نگاه کنید ببینید آدرس نسبی ICR چیه...از ادرسش استفاده کنید...
    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

    www.intelart.ir


    ساخت کنترلر دما PID فازي با AVR [آموزشی]

    دیدگاه


      #3
      پاسخ : مشکل با رجیستر ICR1 در کدویژن

      کدویژن ICR1 را نمیشناسه
      شما از ICR1L و ICR1H استفاده کن
      کد:
      unsigned int t;
      t=(ICR1H<<8)|ICR1L;
      امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

      دیدگاه


        #4
        پاسخ : مشکل با رجیستر ICR1 در کدویژن

        وقتی این رجیستر رو به صورت 8 بیتی ( ICR1L و ICR1H ) میخونم مشکلی نیست،اما من میخام به صورت 16 بیتی بخونم که کار راحت تر باشه،مثل رجیسترهای TCNT1 و یا OCR1A یا OCR1B که 16 بیتی اند!
        توی دیتا شیتش یه نمونه کد برای خوندن رجیستر TCNT1 اورده و نوشته برای رجیستر های ICR1 و OCR1 هم به همین صورت است ولی کامپایلر فقط برای ICR1 خطا میگیره!!!

        دیدگاه


          #5
          پاسخ : مشکل با رجیستر ICR1 در کدویژن

          دوستان خیلی ممنون برای جواب هاتون
          آقای Abbas Sarami میشه بی زحمت یه توضیح مختصر درباره خط دوم کدی که نوشتین بدین؟ممنون میشم.

          دیدگاه


            #6
            پاسخ : مشکل با رجیستر ICR1 در کدویژن

            کد:
            t=(ICR1H<<8)|ICR1L;
            ICR1H هشت بیت هست که شامل 8 بیت پر ارزش(MSB) رجیستر ICR1 است . حرف H آخرش بیانگر همین موضوعه (High) و
            ICR1L هشت بیت هست که شامل 8 بیت کم ارزش(LSB) رجیستر ICR1 است . حرف L آخرش بیانگر همین موضوعه (Low)

            حالا با یک دستور شیفت ساده ICR1H را 8 بیت میبریم به چپ تا در 8 بیت پرارزش متغیرمون قرار بگیره و ICR1L را باهاش جمع (OR) میکنیم (چون خودش در 8 بیت اول هست نیازی به شیفت نداره) تا کل مقدار ICR1 شکل بگیره

            موفق باشید
            امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

            دیدگاه


              #7
              پاسخ : مشکل با رجیستر ICR1 در کدویژن

              خیلی ممنون آقای Abbas Sarami به خاطر توضیحتون
              اما ببخشید یه سوال!
              اگه ICR1H رو که 8 بیت است،8 بار به سمت چپ شیفتش بدیم مقدارش صفر نمیشه!؟
              چون برنامه اول دستورات داخل پرانتز رو اجرا میکنه،و بعد این مقدار صفر با مقدار ICR1L جمع میشه و به عبارتی مقدار متغیر t میشه همون مقدار ICR1L !
              اگر اشتباه میکنم منو تصحیح کنید،ممنون.

              دیدگاه


                #8
                پاسخ : مشکل با رجیستر ICR1 در کدویژن

                آقای Abbas Sarami من کدی که نوشته بودینو امتحان کردم درست جواب میده!
                من اشتباه فکر میکردم! :redface:
                خیلی ممنون میشم برام توضیح بدین که چرا کدی که نوشتین به صورتی که من فکر میکردم اجرا نمیشه؟ :smile:

                دیدگاه


                  #9
                  پاسخ : مشکل با رجیستر ICR1 در کدویژن

                  نوشته اصلی توسط halford
                  آقای Abbas Sarami من کدی که نوشته بودینو امتحان کردم درست جواب میده!
                  من اشتباه فکر میکردم! :redface:
                  خیلی ممنون میشم برام توضیح بدین که چرا کدی که نوشتین به صورتی که من فکر میکردم اجرا نمیشه؟ :smile:
                  به خاطر اینه که خود کامپایلر تشخیص داده که تبدیل کنه به unsigned int بعد شیفتش بده ...
                  موفق باشید
                  [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                  معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                  معرفی نرم افزار Codewizard PWM
                  با من بیشتر آشنا شوید

                  دیدگاه


                    #10
                    پاسخ : مشکل با رجیستر ICR1 در کدویژن

                    آقا سامان منظورتون اینه که کامپایلر رجیستر ICR1H رو که 8 بیت هست تبدیل میکنه به unsigned int ؟

                    دیدگاه


                      #11
                      پاسخ : مشکل با رجیستر ICR1 در کدویژن

                      نوشته اصلی توسط halford
                      آقا سامان منظورتون اینه که کامپایلر رجیستر ICR1H رو که 8 بیت هست تبدیل میکنه به unsigned int ؟
                      نه جانم
                      اول جواب این رو میکنه 16 بیت
                      کد:
                      (ICR1H<<8)
                      بعدا" چون این رو میخواد با 16 بیتی OR کنه باید این رو هم 16 بیتی در نظر بگیره
                      کد:
                      ICR1L
                      و بعد OR کنه ...

                      درسته عباس جان؟؟
                      موفق باشید
                      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                      معرفی نرم افزار Codewizard PWM
                      با من بیشتر آشنا شوید

                      دیدگاه


                        #12
                        پاسخ : مشکل با رجیستر ICR1 در کدویژن

                        آهان،خیلی ممنون :agree:

                        دیدگاه

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