اطلاعیه

Collapse
No announcement yet.

وقفه چموش!!

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

    وقفه چموش!!

    سلام دوستان. نمیدونم چرا همیشه از این وقفه بدم میومد. فکر کنم این حس یادگار دوران Z80 باشه.
    به هر حال همچنان با وقفه ها مشکل دارم و تاجایی که بتونم سراغش نمیرم. حالا مشکل کجاست؟
    مشکل: دارم روی یه برنامه*ای توی کدویژن کار میکنم که از وقفه*های صفر و یک استفاده میشه. با فعال شدن وقفه صفر تایمر شروع به شمارش میکنه و با فعال شدن وقفه یک تایمر از شمارش می ایسته. بعدش توی همون زیر روال وقفه یک، وقفه سراسری رو غیر فعال میکنم با دستور cli تا بتونم به بقیه محاسباتم بپردازم. بعد از اتمام محاسباتم، دوباره وقفه سراسری رو با دستور sei فعال میکنم. مشکل اینجاست که وقفه سراسری تحت هیچ شرایطی در این برنامه غیر فعال نمیشه و همیشه محاسباتم نیمه تموم رها میشه چون وقفه بعدی رسیده. حالا اگه تجربه مشابه ای دارید یا راه حل مشکل منو میدونید لطفا کمک کنید که بدجوری دارم از این وقفه متنفر میشم
    ثباتهای وقفه مثل GICR و GIFR و MCUCR رو هم بطور همزمان صفر کردم اما باز هم غیر فعال نمیشه.

    #2
    پاسخ : وقفه چموش!!

    سلام
    یه با از دستور SREG|=0x80 برای روشن شده وقفه سراسری و از SREG &=0x7F برای خاموش شدنش استفاده کنید اگه باز جواب نداد شاید مورد از این باشه که وقفه رو تو خود تابع وقفه خاموش مکنید به هر حال عالی میشه اگه کدتون رو بزارید
    اشکهایی که پس از هر شکست میریزیم همان عرقیست که برای پیروزی نریخته ایم.
    هیتلر

    دیدگاه


      #3
      پاسخ : وقفه چموش!!

      سلام تو روتین وقفه ها فکر کنم از دستور push و pop استفاده میشه برا همین در هنگام برگشت از وقفه به برنامه اصلی وقفه ها به حالت قبلیشون بر میگردند یعنی اگر فعال بودند دوباره فعال میشن حتی اگر در هنگام اجرای روتین وقفه وقفه سراسری رو غیر فعال کنید(تا زمانی که در حال اجرای روتین وقفه هست غیر فعال میمونه و در هنگام برگشت به برنامه اصلی دوباره فعال میشه)
      شما کار محاسباتت رو تو همون زیر روال وقفه انجام میدید؟ اگر اینطور باشه که احتمالاً نباید مشکلی پیش بیاد اما اگر بعد از برگشت از وقفه محاسبات رو انجام میدید تو برنامه اصلیتون وقفه سراسری رو قبل محاسبات غیر فعال کنید و بعد از انجام محاسبات دوباره فعالش کنید
      امیدوارم اشتباه نکرده باشم
      [آموزشی] کنترل رله با پیامک توسط sim800l
      [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
      [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
      [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
      صفحه اینستاگرام : ecdco_ir

      دیدگاه


        #4
        پاسخ : وقفه چموش!!

        سلام
        البته استفاده از push و pop برای نگه داری مقدار program counter قبل از ورود به وقفه است وربطی به نگهداشتن تنظیمات وقفه نداره...در حالت کلی با ورود به روتین وقفه ، وقفه سراسری غیر فعال میشه و با برگشت به برنامه اصلی دوباره فعال میشه...
        اینکه برنامه شما دائما به روتین وقفه ها سرک میکشه شاید به خاطر برنامه نویسی نا مناسب باشه...بهتره تا کدهاتون رو یک بازبینی کلی کنید یا درصورتی که مشکلی دارید در همین انجمن مطرح کنید...
        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

        www.intelart.ir


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

        دیدگاه


          #5
          پاسخ : وقفه چموش!!

          نوشته اصلی توسط Mahdi.Faani نمایش پست ها
          سلام
          البته استفاده از push و pop برای نگه داری مقدار program counter قبل از ورود به وقفه است وربطی به نگهداشتن تنظیمات وقفه نداره...در حالت کلی با ورود به روتین وقفه ، وقفه سراسری غیر فعال میشه و با برگشت به برنامه اصلی دوباره فعال میشه...
          اینکه برنامه شما دائما به روتین وقفه ها سرک میکشه شاید به خاطر برنامه نویسی نا مناسب باشه...بهتره تا کدهاتون رو یک بازبینی کلی کنید یا درصورتی که مشکلی دارید در همین انجمن مطرح کنید...
          با توجه به حرفاتون من یه نمونه کد برای وقفه با کد ویژن نوشتم و کد اسمبلی تولید شده رو بررسی کردم:
          تو روتین وقفه ابتدا sreg رو تو یه رجیستر ذخیره سازی میکنه و در پایان روتین وقفه هم sreg رو دوباره به مقدار قبلی بر میگردونه،این یعنی همون چیزی که گفتم،وقفه سراسری دوباره فعال میشه حتی اگر در روتین وقفه، وقفه سراسری رو غیر فعال کنید باز هم در هنگام برگشت فعال میشه
          جدیدترین ویرایش توسط سید رضا باباتبار; ۲۱:۵۴ ۱۳۹۵/۰۵/۳۰.
          [آموزشی] کنترل رله با پیامک توسط sim800l
          [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
          [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
          [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
          صفحه اینستاگرام : ecdco_ir

          دیدگاه


            #6
            پاسخ : وقفه چموش!!

            نوشته اصلی توسط reza0506 نمایش پست ها
            با توجه به حرفاتون من یه نمونه کد برای وقفه با کد ویژن نوشتم و کد اسمبلی تولید شده رو بررسی کردم:
            تو روتین وقفه ابتدا sreg رو تو یه رجیستر ذخیره سازی میکنه و در پایان روتین وقفه هم sreg رو دوباره به مقدار قبلی بر میگردونه،این یعنی همون چیزی که گفتم،وقفه سراسری دوباره فعال میشه حتی اگر در روتین وقفه، وقفه سراسری رو غیر فعال کنید باز هم در هنگام برگشت فعال میشه
            آهان منظورتون وقفه جنرال هست...چون گفته بودید "وقفه ها" من اینطور برداشت کردم ک منظورتون تنظیمات اختصاصی وقفه هر پریفرال هست...
            بله رجیستر sreg هم درون رجیستر دیگه ای کپی میشه ولی نه درون استک!

            Sent from my E2333 using Tapatalk
            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

            www.intelart.ir


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

            دیدگاه

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