اطلاعیه

Collapse
No announcement yet.

اجرای دوبرنامه به صورت همزمان با بسکام

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

    اجرای دوبرنامه به صورت همزمان با بسکام

    سلام دوستان، عبادات قبول
    در برنامه ای که براتون میزارم میخوام که بصورت همزمان رطوبت کنترل بشه و به صورت همزمان یک موتور گیربکس دار 12 ولت طی زمان بندی دلخواه چپ گرد راست گرد کار کنه، مشکل من اینه که وقتی اول برنامه موتور رو مینویسم بعدش برنامه رطوبت فقط موتور اجرا میشه و رطوبت اجرا نمیشه و بالعکس اگر برنامه رطوبت اول باشه برنامه مونور اجرا نمیشه، نمیدونم اشکال از کجاست، موتور رو جداگانه راه اندازی میکنم و اشکالی نداره منظور نوبز نمیندازه.ممنون میشم راهنماییم کنید دوستان گل

    $regfile = "m32def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , _
    Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.2 , Rs = Portd.3
    Config Timer0 = Timer , Prescale = 256
    Config Timer1 = Counter , Edge = Rising
    Config Portc = Output
    Start Adc
    Cursor Off
    Enable Interrupts
    Enable Timer0
    Dim M As Word
    Dim L As Single
    Dim K As Word
    Dim C As Single
    Dim I As Single
    Dim X As Single
    Tcnt0 = 0
    On Ovf0 A
    Cls

    Do
    Portc.0 = 0
    Portc.1 = 1
    Wait 1.5
    Portc.0 = 0
    Portc.1 = 0
    Wait 15
    Portc.0 = 1
    Portc.1 = 0
    Wait 1.5
    Portc.0 = 0
    Portc.1 = 0
    Wait 15
    Loop

    Do
    K = 7351 - M
    C = K / 1000000
    L = C * 75872
    Home

    Locate 1 , 3 : Lcd "rotoobat= " ; L
    If L > 66 Then Reset Portc.2
    If L < 60 Then Set Portc.2
    Loop
    A:
    I = I + 1
    If I = 123 Then
    I = 0
    M = Timer1

    Timer1 = 0
    Tcnt0 = 0
    End If
    Return
    End

    #2
    پاسخ : اجرای دوبرنامه به صورت همزمان با بسکام

    مثلا در این برنامه فقط چرخش موتور اجرا میشه و رطوبت محاسبه و نمایش داده نمیشه

    اضافه شده در تاریخ :
    دوستان اگر راهنمایی کنید خیلی لطف میکنید هاااا

    دیدگاه


      #3
      پاسخ : اجرای دوبرنامه به صورت همزمان با بسکام

      نوشته اصلی توسط qaem
      سلام دوستان، عبادات قبول
      در برنامه ای که براتون میزارم میخوام که بصورت همزمان رطوبت کنترل بشه و به صورت همزمان یک موتور گیربکس دار 12 ولت طی زمان بندی دلخواه چپ گرد راست گرد کار کنه، مشکل من اینه که وقتی اول برنامه موتور رو مینویسم بعدش برنامه رطوبت فقط موتور اجرا میشه و رطوبت اجرا نمیشه و بالعکس اگر برنامه رطوبت اول باشه برنامه مونور اجرا نمیشه، نمیدونم اشکال از کجاست، موتور رو جداگانه راه اندازی میکنم و اشکالی نداره منظور نوبز نمیندازه.ممنون میشم راهنماییم کنید دوستان گل

      $regfile = "m32def.dat"
      $crystal = 8000000
      Config Lcd = 16 * 2
      Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , _
      Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.2 , Rs = Portd.3
      Config Timer0 = Timer , Prescale = 256
      Config Timer1 = Counter , Edge = Rising
      Config Portc = Output
      Start Adc
      Cursor Off
      Enable Interrupts
      Enable Timer0
      Dim M As Word
      Dim L As Single
      Dim K As Word
      Dim C As Single
      Dim I As Single
      Dim X As Single
      Tcnt0 = 0
      On Ovf0 A
      Cls

      Do
      Portc.0 = 0
      Portc.1 = 1
      Wait 1.5
      Portc.0 = 0
      Portc.1 = 0
      Wait 15
      Portc.0 = 1
      Portc.1 = 0
      Wait 1.5
      Portc.0 = 0
      Portc.1 = 0
      Wait 15
      Loop

      Do
      K = 7351 - M
      C = K / 1000000
      L = C * 75872
      Home

      Locate 1 , 3 : Lcd "rotoobat= " ; L
      If L > 66 Then Reset Portc.2
      If L < 60 Then Set Portc.2
      Loop
      A:
      I = I + 1
      If I = 123 Then
      I = 0
      M = Timer1

      Timer1 = 0
      Tcnt0 = 0
      End If
      Return
      End
      سلام

      اون حلقه ی دوم رو حذف کن و تبدیل به زیر برنامه کن بعد تو حلقه ی اولی فراخوانی کن ببین حل میشه؟
      من یه تغییر دادم ببین کار میکنه؟

      $regfile = "m32def.dat"
      $crystal = 8000000
      Config Lcd = 16 * 2
      Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , _
      Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.2 , Rs = Portd.3
      Config Timer0 = Timer , Prescale = 256
      Config Timer1 = Counter , Edge = Rising
      Config Portc = Output
      Start Adc
      Cursor Off
      Enable Interrupts
      Enable Timer0
      Dim M As Word
      Dim L As Single
      Dim K As Word
      Dim C As Single
      Dim I As Single
      Dim X As Single
      Tcnt0 = 0
      On Ovf0 A
      Cls

      Do
      gosub hu
      Portc.0 = 0
      Portc.1 = 1
      Wait 1.5
      Portc.0 = 0
      Portc.1 = 0
      Wait 15
      Portc.0 = 1
      Portc.1 = 0
      Wait 1.5
      Portc.0 = 0
      Portc.1 = 0
      Wait 15
      Loop

      hu:
      K = 7351 - M
      C = K / 1000000
      L = C * 75872
      Home

      Locate 1 , 3 : Lcd "rotoobat= " ; L
      If L > 66 Then Reset Portc.2
      If L < 60 Then Set Portc.2
      return
      A:
      I = I + 1
      If I = 123 Then
      I = 0
      M = Timer1

      Timer1 = 0
      Tcnt0 = 0
      End If
      Return
      End
      { خلاف قوانین - پاک شد }

      دیدگاه


        #4
        پاسخ : اجرای دوبرنامه به صورت همزمان با بسکام

        وقتی برنامه وارد یک حلقه می شود، این چرخش تا ابد تکرار می شود مگر اینکه با دستور Exit Do از آن خارج شوید و یا اینکه وقفه ای رخ دهد و ISR مربوطه، زیر روالهائی را فراخوانی کند. بنابراین همانطور که دوستمون هم اشاره کردند، برای رعایت آنچه که «اصول کدنویسی ساخت یافته» نامیده می شود؛ بهتر است برنامه مشتمل بر یک Main Loop و تعدادی ساب روتین باشد که به صورت نوبه ای فراخوانی شوند. قطعا اگر در زیر روال، برنامه وارد یک حلقه دیگر می شود، یک دستور شرطی در نظر بگیرید (مثلا فعال شدن یک تایمر و اتمام مدت زمان مشخصی) که با تحقق آن، برنامه بتواند از حلقه خارج شود و به حلقه اصلی برنامه باز گردد.

        دیدگاه


          #5
          پاسخ : اجرای دوبرنامه به صورت همزمان با بسکام

          نوشته اصلی توسط mostafaserial
          سلام

          اون حلقه ی دوم رو حذف کن و تبدیل به زیر برنامه کن بعد تو حلقه ی اولی فراخوانی کن ببین حل میشه؟
          من یه تغییر دادم ببین کار میکنه؟

          $regfile = "m32def.dat"
          $crystal = 8000000
          Config Lcd = 16 * 2
          Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , _
          Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.2 , Rs = Portd.3
          Config Timer0 = Timer , Prescale = 256
          Config Timer1 = Counter , Edge = Rising
          Config Portc = Output
          Start Adc
          Cursor Off
          Enable Interrupts
          Enable Timer0
          Dim M As Word
          Dim L As Single
          Dim K As Word
          Dim C As Single
          Dim I As Single
          Dim X As Single
          Tcnt0 = 0
          On Ovf0 A
          Cls

          Do
          gosub hu
          Portc.0 = 0
          Portc.1 = 1
          Wait 1.5
          Portc.0 = 0
          Portc.1 = 0
          Wait 15
          Portc.0 = 1
          Portc.1 = 0
          Wait 1.5
          Portc.0 = 0
          Portc.1 = 0
          Wait 15
          Loop

          hu:
          K = 7351 - M
          C = K / 1000000
          L = C * 75872
          Home

          Locate 1 , 3 : Lcd "rotoobat= " ; L
          If L > 66 Then Reset Portc.2
          If L < 60 Then Set Portc.2
          return
          A:
          I = I + 1
          If I = 123 Then
          I = 0
          M = Timer1

          Timer1 = 0
          Tcnt0 = 0
          End If
          Return
          End
          اوون دستور gosub دقیقا چجوری عمل میکنه، آیا مدام انجام میشه؟

          دیدگاه


            #6
            پاسخ : اجرای دوبرنامه به صورت همزمان با بسکام

            نوشته اصلی توسط qaem
            سلام دوستان، عبادات قبول
            در برنامه ای که براتون میزارم میخوام که بصورت همزمان رطوبت کنترل بشه و به صورت همزمان یک موتور گیربکس دار 12 ولت طی زمان بندی دلخواه چپ گرد راست گرد کار کنه، مشکل من اینه که وقتی اول برنامه موتور رو مینویسم بعدش برنامه رطوبت فقط موتور اجرا میشه و رطوبت اجرا نمیشه و بالعکس اگر برنامه رطوبت اول باشه برنامه مونور اجرا نمیشه، نمیدونم اشکال از کجاست، موتور رو جداگانه راه اندازی میکنم و اشکالی نداره منظور نوبز نمیندازه.ممنون میشم راهنماییم کنید دوستان گل

            End
            من اگه جای شما بودم به جای استفاده از دستور Wait میومدم یه تابع درست میکردم و داخل اون یه حلقه میزاشتم که که هزار برابر زمان وقفه لازم تکرار بشه وتوش شرایط و کارهای مورد نظر رو میزاشتم و برای این که زمان مورد نظرم ایجاد بشه با استفاده از 1 witms با اجرای اون تو هر بار زمان وقفه مورد نظرم رو ایجاد میکردم این جوری میشه راحت چند کار رو تقریبا هم زمان انجام داد
            به سایت ما هم یه سری بزنید
            http://www.amirsad.ir

            دیدگاه

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