اطلاعیه

Collapse
No announcement yet.

مشکل با اسمبلی

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

    مشکل با اسمبلی

    سلام دوستان
    من چند خط برناممو مجبور شدم با اسمبلی بنویسم که پالس کمتری مصرف کنه
    این چند خط رو با یه سری تعریفام میذارم
    میشه بگین جاییش مشکل داره یا نه؟ مرسی
    وقتی که کامپایل میکنم error اسمبلی میده
    میگه OCR3AH و OCR3AL و TCNT3H و TCNT3L تعریف نشده هستن
    ولی تو datasheet مگا128 که نگاه میکنم دقیقا همینجوری مقدار دهی کرده

    کد:
    register char r16,r17;
    .
    .
    .
          r16=tens_pi_ocr[tens_pi-1];
          r17=tens_pi_ocr[tens_pi-1]>>8;
          #asm
            out OCR3AL,r16
            out OCR3AH,r17
            ldi r16,0x00
            out TCNT3L,r16
            ldi r16,0x00
            out TCNT3H,r16 
          #endasm
    این برنامه قرار بوده این کارو انجام بده :

    کد:
          OCR3AH=tens_pi_ocr[tens_pi-1]>>8;
          OCR3AL=tens_pi_ocr[tens_pi-1];
          TCNT3H=0x00;
          TCNT3L=0x00;

    #2
    پاسخ : مشکل با اسمبلی

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

    دیدگاه


      #3
      پاسخ : مشکل با اسمبلی

      کد:
      #asm
       sts OCR3AL, r16
       sts OCR3AH, r17
       ldi r16, 0x00
       sts TCNT3L, r16
       sts TCNT3H, r16 
      #endasm
      گذشت خصلت مردان است

      دیدگاه


        #4
        پاسخ : مشکل با اسمبلی

        نوشته اصلی توسط Saman.Asadi
        سلام
        حالا چه اصراری داری که حتما با اسمبلی بنویسی ؟؟
        مگه پردازش کم دارید ؟؟؟
        شما با همون سی بنویس اگر پردازش کم آوردید بعدا بروید سراغ اسمبلی ....
        البته خوبه هاااا
        اگر من هم مثل شما وقتم آزاد بود میرفتم سراغ اسمبلی ...
        برنامه رو با c نوشتم.اصن من اسمبلی بلد نیستم :biggrin:
        ولی این یه تیکه پالس ساعت زیادی تو c مصرف میکنه (112 پالس)
        من برا ساخت یه زمان 6 میکروثانیه احتیاج به 96 پالس دارم
        پس اگه این چندتا دستور با اسمبلی برسن به زیر 60 پالس، زمان بندی هام خیلی دقیق در میاد
        ای بابا وقتم آزاد نیست :biggrin: کارمه
        ولی باز دمت گرم مرسی از راهنماییت

        نوشته اصلی توسط tohid041
        کد:
        #asm
         sts OCR3AL, r16
         sts OCR3AH, r17
         ldi r16, 0x00
         sts TCNT3L, r16
         sts TCNT3H, r16 
        #endasm
        مهندس جان تشکر فراوان ولی اینم همون error رو میده :angry: :cry2:

        دیدگاه


          #5
          پاسخ : مشکل با اسمبلی

          در مورد صورت مسئله شما چند مورد قابل اشاره است:

          1- برای خواندن مقادیر 16 بیتی یک آرایه و ریختن بایت های بالا و پائین آن در دو رجیستر باید آن را یکبار در متغیر 16 بیتی کپی کنید و عملیات خود را روی آن متغیر انجام دهید. در غیر اینصورت دو بار خواندن متغیر از یک آرایه 16 بیتی به زمان بیشتری نیاز دارد.

          2- برای نوشتن در رجیسترهای 16 بیتی تایمر باید حتما در ابتدا به رجیستر با ارزش بالاتر مقداردهی کنید و بعد به رجیستر با ارزش کمتر که این مسئله در نمونه کدهای بالا رعایت نشده است.

          3- مطابق Help کدویژن تنها رجیسترهای R0 و R1 و R22 و R23 و R24 و R25 و R26 و R27 و R30 و R31 برای استفاده آزاد هستند. روش استفاده از رجیسترها هم بصورتی نیست که در بالا نوشته اید و نیاز به توضیحاتی دارد که در مرحله اول در همان برنامه نویسی c به روشی که گفته شد (و در تاپیک دیگر هم یکی از دوستان نمونه کدی برای آن قرار دادند) عمل کنید و به احتمال زیاد مسئله برطرف خواهد شد.

          (ضمنا دو تاپیک مشابه را برای یک صورت مسئله ایجاد کرده اید که تاپیک جاری به دلیل پاسخی که توسط دوستان دیگر داده شده، قفل نشد و در آینده از ایجاد تاپیک های مشابه خودداری کنید.)
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


            #6
            پاسخ : مشکل با اسمبلی

            کدوم کامپایلره؟
            من کدویژن کار نمیکنم، این کد هارو هم فقط اصلاح کردم
            گذشت خصلت مردان است

            دیدگاه


              #7
              پاسخ : پاسخ : مشکل با اسمبلی

              نوشته اصلی توسط tohid041
              کدوم کامپایلره؟
              من کدویژن کار نمیکنم، این کد هارو هم فقط اصلاح کردم
              کدویژن :biggrin:
              دستت درد نکنه مهندس :smile:

              دیدگاه

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