ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





  1. #1
    تاریخ عضویت
    2008/03/28
    38
    1

    تکرار یک وقفه

    سلام.
    قصد دارم که هروقت وقفه 0 در ای وی ار 1 می شه برنامه به وقفه بره و 10 ثانیه صبر کند و بعد بیرون بیاید و به ادامه برنامه بپردازه اما اگر در حین همان 10 ثانیه مجددا پالسی به پایه وقفه رسید از همان لحظه مجدد شمارش شروع شود. ( اما با استفاده از وقفه نمی توانم این کار را بکنم یعنی وقتی که به وقفه می رود اگر در طی ان 10 ثانیه پالس جدیدی به وقفه برسد تاثیری نخواهد داشت و برنامه به ان پالس بی توجه خواهد بود )

    ممنون میشم اگر اساتید بفرمایند که چکار کنم بهتره ؟

    ممنون

    راستی با مگا 8 و بسکام کار می کنم.

    ممنون
    • تبلیغات
      .

  2. #2
    تاریخ عضویت
    2008/09/02
    اصفهان
    1,897
    49

    پاسخ : تکرار یک وقفه

    اگر منظورت اینه که بعد از وقفه اول مادامی که 10 ثانیه بگذره یا وقفه دوم بیاد که راه حل خیلی راحته. در داخل روال وقفه؛ با استفاده از یک متغیر چک کن آیا این دفعه اول هست که وارد وقفه میشی یا نه. اگر دفعه اول هست وقفه ها رو مجددا فعال کن. از یک تایمر برای 10 ثانیه استفاده کن. و همونجا بمون تا وقفه بعدی بیاد. در صورت سپری شدن 10 ثانیه یا بروز وقفه دوم بیا بیرون. همین. اما مسلما در طی این زمان میکروی شما غیر از عملیاتی که داخل وقفه انجام میده کار دیگه ای نمیکنه. یک چیزی مثل این:
    (من بسکام بلد نیستم. یک کد فرضی نوشتم برای درک بهتر مطلب)

    Dim IrqCallState As Byte

    IrqCallState = 0
    On Interrupt Int0 IRQ0


    .... place your main code here....


    IRQ0:
    If IrqCallState = 0 Then
    ' This is 1st Time IRQ invoked
    IrqCallState = 1
    Enable Interrupts
    For i = 1 to 10000
    WaitMs 1
    If IrqCallState = 0 Then
    ' IRQ Inoked during 10seconds Wait...
    Return
    End If
    Next i
    Else
    ' This is 2nd Time IRQ invoked
    End If
    IrqCallState = 0
    Return

  3. #3
    تاریخ عضویت
    2008/03/28
    38
    1

    پاسخ : تکرار یک وقفه

    از کمکتون ممنون اما این کار هم جواب نمی ده حتی تو پروتیوس. ببینی این میشه روال برنامه :

    اجرای برنامه اصلی
    -رفتن به وقفه و یک کردن یک پایه تا 10 ثانیه
    -خروج از وقفه در صورت پایان یافتن 10 ثانیه
    - ادامه برنامه اصلی تا رسیدن فرمان وقفه
    -حالا اگر هم 9 ثانیه از 10 ثانیه مذکور گذشته بود و فرمان وقفه مجددا به پایه رسید از این وقفه خارج نشود و مجددا از صفر ثانیه بشمرد و همین صورت الی اخر.

    $regfile = "m8def.dat"
    $crystal = 8000000
    Enable Interrupts
    Enable Int0
    On Int0 Int_test
    Dim F As Byte
    Config Int0 = Rising
    Config Portc = Output
    Config Pind.2 = Input

    Main:
    Do


    Loop


    End
    Int_test:

    Enable Int0
    Set Portc.1
    Waitms 100

    Reset Portc.1
    Return

    منتظر راهنمایی شما هستم.
    ممنون
  4. #4
    تاریخ عضویت
    2008/09/02
    اصفهان
    1,897
    49

    پاسخ : تکرار یک وقفه

    آقای عزیز. اصلا حرف من رو نگرفتی. اولین مسئله در روال وقفه اینه که کلیه وقفه ها رو دوباره با Enable Interrupts فعال کنی. شما فقط امکان بروز وقفه صفر رو فعال کردی. اینکه از قبل فعال بوده منتهی وقتی یک وقفه حادث میشه کلیه وقفه ها غیر فعال میشن تا پردازش اون وقفه تموم بشه. فعال شدن یک وقفه بخصوص به دو مورد بستگی داره. اول اینکه امکان بروز وقفه توسط تجهیز مربوطه در میکرو امکانپذیر باشه. که برای وقفه صفر با Enable Int0 اینکار رو میکنی. و بعد به میکرو اطلاع بدی که کلا وقفه ها میتونن اجرا بشن. که اینم با Enable Interrupts کار میکنه.
  5. #5
    تاریخ عضویت
    2008/03/28
    38
    1

    پاسخ : تکرار یک وقفه

    جناب اقازاده من همه ی اون کار ها را که فرموده بودین را هم انجام دادم . حتی کل روال وقفه را هم در زیرروال irq0 گذاشتم اما جواب نمیده . اصلا فقط یکبار اجرا می شه وقفه و دیگر وقفه اجرا نمی شه. .. :cry:

  6. #6
    تاریخ عضویت
    2007/11/25
    1,142
    18

    پاسخ : تکرار یک وقفه

    بهتره استک را در اول برنامه مقدار دهی کنید مثل hwstack و بقیه
  7. #7
    تاریخ عضویت
    2008/09/02
    اصفهان
    1,897
    49

    پاسخ : تکرار یک وقفه

    این منطقی که شما شرح دادی یه کوچولو با اون چیزی که در ابتدا گفتی فرق فوکوله!!
    من بسکام ندارم. ببین این کد جواب میده یا نه (همون کد قبلی ولی با فرم جدید.) فرض رو بر این میذارم که میکروی شما مگا هشت هست و با سرعت 8 مگا هرتز.


    $regfile = "m8def.dat"
    $crystal = 8000000

    Enable Int0
    On Interrupt Int0 Int_test
    Config Int0 = Rising
    Config Portc = Output
    Config Pind.2 = Input
    Config Timer0 = Timer, Prescale = 64 ' 8000 / 64 => 125 KHz
    On Ovf0 Tim0_isr

    Dim F As Byte
    Dim RemainTime As Word

    RemainTime = 0
    Tcnt0 = 255 - 125
    Start Timer0
    Enable Interrupts

    Main:
    Do


    Loop
    End

    Tim0_isr:
    Tcnt0 = 255 - 125
    If RemainTime = 0 Then
    Reset Portc.1
    Else
    RemainTime = RemainTime - 1
    EndIf
    Return

    Int_test:
    RemainTime = 10000
    Set Portc.1
    Return


    تایمر صفر برای سرعت 125 کیلو هرتز ست شده. و هر بار پس از 125 مرحله شمارش یکبار وقفه میده. در حین وقفه تایمر رو ریست میکنه و چک میکنه اگه زمانی برای صبر کردن هست از این زمان یکی کم میکنه. اگر زمان سپری شده باشه پورت خروجی رو صفر میکنه. از طرفی با بروز وقفه IRQ0 زمان 10 ثانیه یا همون 10000 میلی ثانیه ست میشه.

    به این صورت مادامی که قبل از 10 ثانیه دوباره وقفه فعال بشه باز پورت مربوطه ست میشه و زمان باقی مانده به 10 ثانیه افزایش پیدا میکنه. اما در انتهای 10 ثانیه پورت مربوطه صفر میشه.
نمایش نتایج: از 1 به 7 از 7

موضوعات مشابه

  1. جلوگیری از تکرار اینتراپت
    توسط mania59 در انجمن XMEGA
    پاسخ: 7
    آخرين نوشته: 2015/10/01, 07:59
  2. مدار میکروفن با تاخیر و تکرار با آی سی ES56033E
    توسط سام سیروس در انجمن مدارات صوتی
    پاسخ: 13
    آخرين نوشته: 2013/09/17, 18:48
  3. تکرار طراحی
    توسط gbg در انجمن نرم افزار Protel
    پاسخ: 5
    آخرين نوشته: 2013/06/16, 23:05
  4. برنامه حلقه با تکرار معین در بسکام
    توسط مهران چمنی در انجمن برنامه نویسی و اینترفیس
    پاسخ: 3
    آخرين نوشته: 2013/03/03, 16:02

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •