اطلاعیه

Collapse
No announcement yet.

غیر فعال کردن وقفه خارجی

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

    غیر فعال کردن وقفه خارجی

    سلام به برنامه ساده زیر نگاه کنید
    کد:
    $regfile = "m161def.dat"
    $crystal = 1000000
    Dim A As Byte
    Config Int1 = Rising
    Enable Interrupts
    Enable Int1
    On Int1 Ali
    
    
    Main:
    Toggle Porta.0
    Waitms 1000
    
    
    S:
    A = 0
    Do
    Incr A
    Toggle Porta.1
    Waitms 1000
    If A = 30 Then Goto Main
    Loop
    
    
    Ali:
    Toggle Porta.2
    Wait 2
    Return
    1-حالا اگر int1 فعال بشه میره به زیر برنامه ali حالا اومدیم هنوز توی زیر برنامه بودیم و زیر برنامه به طور کامل اجرا نشده بود یه بار دیگه int1 فعال شد چه اتفاقی میوفته(به نظرم یه بار زیر برنامه رو اجرا میکنه و یه بار دیگه هم تکرار میکنه حالا چکار کنم که دو باره زیر برنامه اجرا نشه؟)

    2-می خوام در تمام قسمت های برنامه وقفه خارجی فعال باشه ولی توی s غیر فعال باشه و دیگه به ali نره چکار کنم؟(یعنی وقفه اصلا اجرا نشه نه اینکه بعد از s بره به ali)
    دعا کنید برای من

    چی شد پس لطفا همین حالا!

    #2
    پاسخ : غیر فعال کردن وقفه خارجی

    جناب علی زرد عزیز
    اون دستور تاخیر 2 ثانیه کار تو خراب کرده
    باید بجای اون از تایمر ها استفاده کنی
    به این صورت که فرض کن تاخیر 0.1 ثانیه ایجاد کن و یه متغیر که 200 بار بشمره توی اون بزار
    هر بار که وقفه خارجی اتفاق افتاد مقدار متغیر صفر بشه
    این جوری اگه 199 هم باشه فقط متغیرت صفر می شه و 2 فقط ثانیه (200 شمارش ) اتفاق می افته

    توی برنامه ای که نوشتی یکمی پیچ و تاب الکی دادی مثلا در قسمت s 130 نانو ثانیه طول می کشه دستور بعد اجرا می شه و بعد که حلقه بینهایت است اجرا می شه و بنابر این برنامه با خواسته شما تفریبا هر 30 ثانیه فقط 1 ثانیه دارای وقفه خواهد بود

    یکمی روی خواسته ای که نوشتی دقت کن

    اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

    دیدگاه

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