اطلاعیه

Collapse
No announcement yet.

عملکرد وقفه

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

    عملکرد وقفه

    ببخشید یه سوال داشتم من عملکرد وقفه خارجی رو خوب نفهمیدم مثلا اگه داشته باشیم
    یه متغیر گلوبال به نام J=0 تعریف کرده باشیم
    و وقفه مون هم رجیستراشو جوری تنظیم کردیم که با لبه پایین رونده کار کنه و تابع وقفه مون هم به صورت زیر باشه
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    j++;
    TCNT0++
    }
    الان پالس پایین رونده اول بیاد میره تو وقفه J=1 -TCNT0=1میشود و همینجوری افزایش پیدا میکنه؟؟؟؟؟ یا اینکه متوقف میشه تا پالس پایین رونده بعدی بیاد J=2 میشه؟؟؟؟؟
    :angry:
    ممنون :cry2:

    #2
    پاسخ : عملکرد وقفه

    نوشته اصلی توسط sara789
    ببخشید یه سوال داشتم من عملکرد وقفه خارجی رو خوب نفهمیدم مثلا اگه داشته باشیم
    یه متغیر گلوبال به نام J=0 تعریف کرده باشیم
    و وقفه مون هم رجیستراشو جوری تنظیم کردیم که با لبه پایین رونده کار کنه و تابع وقفه مون هم به صورت زیر باشه
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    j++;
    TCNT0++
    }
    الان پالس پایین رونده اول بیاد میره تو وقفه J=1 -TCNT0=1میشود و همینجوری افزایش پیدا میکنه؟؟؟؟؟ یا اینکه متوقف میشه تا پالس پایین رونده بعدی بیاد J=2 میشه؟؟؟؟؟
    :angry:
    ممنون :cry2:
    ببینید، دو مورد:
    1- نیازی نیست شما TCNT0 رو زیاد کنید، وقتی TCCR0 رو تنظیم کنید، T/C0 میره تو مد کانتری و با هر پالس پایین رونده یکی می شماره، حالا مقدار شمارش شده رو کجا می ریزه؟ میریزه داخل رجیستر TCNT0
    2- اون روتین وقفه هستش، یعنی چی؟
    اگر شما وقفه تایمر صفر رو فعال کرده باشید(در مورد تایمر0 میشه، بیت صفر رجیستر TIMSK)، با سرریز شدن TCNT0 (یهنی این رجیستر بشه255) یک وقفه رخ میده و اون روتین اجرا میشه.
    به طور خلاصه:
    وقتی مقدار TCNT0 به 255 برسه، برنامه به روتین نوشته شده پرش می کنه، J یک واحد افزایش پیدا می کنه، مقدار TCNT0 میشه 1 (چون بعد از سرریز شدن مقدارش خود به خود صفر میشه)
    اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

    دیدگاه


      #3
      پاسخ : عملکرد وقفه

      نوشته اصلی توسط ☺بابابرقی☺
      ببینید، دو مورد:
      1- نیازی نیست شما TCNT0 رو زیاد کنید، وقتی TCCR0 رو تنظیم کنید، T/C0 میره تو مد کانتری و با هر پالس پایین رونده یکی می شماره، حالا مقدار شمارش شده رو کجا می ریزه؟ میریزه داخل رجیستر TCNT0
      2- اون روتین وقفه هستش، یعنی چی؟
      اگر شما وقفه تایمر صفر رو فعال کرده باشید(در مورد تایمر0 میشه، بیت صفر رجیستر TIMSK)، با سرریز شدن TCNT0 (یهنی این رجیستر بشه255) یک وقفه رخ میده و اون روتین اجرا میشه.
      به طور خلاصه:
      وقتی مقدار TCNT0 به 255 برسه، برنامه به روتین نوشته شده پرش می کنه، J یک واحد افزایش پیدا می کنه، مقدار TCNT0 میشه 1 (چون بعد از سرریز شدن مقدارش خود به خود صفر میشه)
      بله ولی این برای این صادقه
      interrupt [TIM0_OVF] void timer0_ovf_isr(void)
      {
      }
      من وقفه خارجیو پرسیدم :cry2:

      دیدگاه


        #4
        پاسخ : عملکرد وقفه

        نوشته اصلی توسط sara789
        بله ولی این برای این صادقه
        interrupt [TIM0_OVF] void timer0_ovf_isr(void)
        {
        }
        من وقفه خارجیو پرسیدم :cry2:
        ببخشید، من اشتباه کردم :redface:
        پیریه و فراموشی دیگه :mrgreen:

        نوشته اصلی توسط sara789
        ببخشید یه سوال داشتم من عملکرد وقفه خارجی رو خوب نفهمیدم مثلا اگه داشته باشیم
        یه متغیر گلوبال به نام J=0 تعریف کرده باشیم
        و وقفه مون هم رجیستراشو جوری تنظیم کردیم که با لبه پایین رونده کار کنه و تابع وقفه مون هم به صورت زیر باشه
        interrupt [EXT_INT0] void ext_int0_isr(void)
        {
        j++;
        TCNT0++
        }
        الان پالس پایین رونده اول بیاد میره تو وقفه J=1 -TCNT0=1میشود و همینجوری افزایش پیدا میکنه؟؟؟؟؟ یا اینکه متوقف میشه تا پالس پایین رونده بعدی بیاد J=2 میشه؟؟؟؟؟
        :angry:
        ممنون :cry2:
        یه پالس پایین رونده میخوره، میره تو روتین وقفه، J, TCNT0 یه دونه زیاد میشن، باز میره تا پالس پایین رونده بعدی
        البته نیازی نیست شما TCNT0 رو زیاد کنید، خودش با هر پالس یه دونه زیادش می کنه، بنابراین با این دستور شما با هر پالس TCNT0 دو تا زیاد میشه
        اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

        دیدگاه


          #5
          پاسخ : عملکرد وقفه

          شما مطمئنین؟
          اخه وقتی میگن تو وقفه خارجی تایمرو روشن کن با پالس پایین رونده بعدی تایمرو خاموش کن
          اینجوری که زمان پالس (که متفاوته ) میشه مقدار tcnt یعنی 1
          همیشه 1 میشه اینکه درست نیست:angry:

          دیدگاه


            #6
            پاسخ : عملکرد وقفه

            نوشته اصلی توسط sara789
            شما مطمئنین؟
            اخه وقتی میگن تو وقفه خارجی تایمرو روشن کن با پالس پایین رونده بعدی تایمرو خاموش کن
            اینجوری که زمان پالس (که متفاوته ) میشه مقدار tcnt یعنی 1
            همیشه 1 میشه اینکه درست نیست:angry:
            آره هیمنه :nerd:

            نه دیگه، شما یا تو مد تایمری هستید که مقدار TCNT0 با توجه به فرکانس کاری تایمر که تعیین می کنید یکی-یکی زیاد میشه تا به مقدار TOP یا OCR0 برسه و...
            یا این که می ذاریدش تو مد کانتری، که با پالس ورودی مقدارش زیاد میشه
            اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

            دیدگاه

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