اطلاعیه

Collapse
No announcement yet.

مشکل تکرار دستور در bascom

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

    مشکل تکرار دستور در bascom

    درود دوستان
    در برنامه زیر وقتی شرط برقراره دستور ch1 به صورت مداوم تکرار میشه
    میخواستم بدونم برای اینکه با هر بار برقراری شرط فقط یک بار برنامه اجرا بشه باید چکار کنم
    اگر تاپیک تکراری بود ببخشید سرچ کردم متاسفانع به نتیجه نرسیدم
    با تشکر
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Input
    Config Portb = Output
    Reset Portd.0
    Reset Portd.1
    Config Debounce = 20
    '========================================'
    Do
    If Pind.0 = 1 And Pind.1 = 0 Then Goto Ch1
    Loop
    '======================================='
    Ch1:
    Toggle Portb.0
    Waitms 30
    Return
    '================'
    طوری زندگی کن انگار امروز اخرین روز زندگیته!!!
    امروز رو کامل زندگی کن...
    (یه روز یعنی هیچوقت!)

    #2
    پاسخ : مشکل تکرار دستور در bascom

    نوشته اصلی توسط gh.kh نمایش پست ها
    درود دوستان
    در برنامه زیر وقتی شرط برقراره دستور ch1 به صورت مداوم تکرار میشه
    میخواستم بدونم برای اینکه با هر بار برقراری شرط فقط یک بار برنامه اجرا بشه باید چکار کنم
    اگر تاپیک تکراری بود ببخشید سرچ کردم متاسفانع به نتیجه نرسیدم
    با تشکر
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Input
    Config Portb = Output
    Reset Portd.0
    Reset Portd.1
    Config Debounce = 20
    '========================================'
    Do
    If Pind.0 = 1 And Pind.1 = 0 Then Goto Ch1
    Loop
    '======================================='
    Ch1:
    Toggle Portb.0
    Waitms 30
    Return
    '================'
    سلام دوست عزیز

    یکی از راه ها اینه
    1_ یه متغیر ( ترجیحا از نوع بیت که حجمش یک بیت هست ) تعریف کنید ( مثلا b ) و مقدار اولیه مثلا 0 رو بهش بدید
    2_ دستور IF رو به این شکل تغییر بدید If Pind.0 = 1 And Pind.1 = 0 And b==0 Then Goto Ch1
    3_ در داخل لیبل CH1 مقدار متغیر b رو 1 کنید

    در این صورت تنها و تنها محتوای دستور IF یک بار اجرا خواهد شد

    با تشکر از سوال خوب و کاربردی شما
    موفق باشید
    جدیدترین ویرایش توسط rezamajdi; ۱۶:۰۰ ۱۳۹۵/۰۶/۱۸.
    آرزوی سرافرازی برای ایران عزیز . . .


    دیدگاه


      #3
      پاسخ : مشکل تکرار دستور در bascom

      If Pind.0 = 1 And Pind.1 = 0 and bit=0 then goto ch1
      If Pind.0 = 0 And Pind.1 = 1 then bit=0

      ch1:
      bit=1
      .....
      .....



      الهم صل علی محمد و آل محمد و عجل فرجهم

      دیدگاه


        #4
        پاسخ : مشکل تکرار دستور در bascom

        یه متغییر تعریف کن و کنار Pind.0 = 1 And Pind.1 = 0 بررسیش کن که اگه 1 بود اجرا بشه بعد توی همین شرط صفرش بکن. بعد دوباره توی همین حلقه یه دستور شرطی دیگه بنویس که اگه این دوپایه وضعیت مورد نظر رو داشتند(مخالف وضعیت بالا) این متغییر یک بشه.

        دیدگاه


          #5
          پاسخ : مشکل تکرار دستور در bascom

          ممنون از دوستانهنوز مشکل پا برجاست
          مشکل اینه که زمانی که شرط برقراه خروجی رو چشمک زن میکنه
          من میخوام در صورتی که شرط برقرار شد و شستی رو نگه داشتیم خروجی رو یک کنه دیگه کاری نکنه یعنی چشمک زن نشه و زمانی که دوباره شرط برقرار شد خروجی رو صفر کنه
          یعنی با هر بار فشردن شستی خروجی یک بار یک و بار دیگر صفر و اگر شستی رو نگه داشتیم چشمک زن نشه تا زمانی که دوباره شستی رو فشرده و خروجی رو تغییر بده
          طوری زندگی کن انگار امروز اخرین روز زندگیته!!!
          امروز رو کامل زندگی کن...
          (یه روز یعنی هیچوقت!)

          دیدگاه


            #6
            پاسخ : مشکل تکرار دستور در bascom

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

            شما باید این کارو انجام بدی
            داخل if یه while قرار بده
            که تا زمانی که شرط برقرار هست هیچ کاری نکن ( یعنی تازمانی که شما همینطور دستت رو روی باتون گذاشتی توی این حلقه میمونه )
            همین که دستت رو روی باتون برداشتی از حلقه میاد بیرون و ادامه برنامه
            ضمنا تاخیرهایی رو برای فشردن و رهاکردن باتون در نظر بگیر

            $regfile = "m8def.dat"
            $crystal = 8000000
            Config Portd = Input
            Config Portb = Output
            Reset Portd.0
            Reset Portd.1
            Config Debounce = 20
            '========================================'
            Do
            If Pind.0 = 1 And Pind.1 = 0 Then Goto Ch1
            Loop
            '======================================='
            Ch1:
            Waitms 30
            Toggle Portb.0
            while Pind.0 = 1 And Pind.1 = 0
            wend
            Waitms 30
            Return


            موفق باشید
            جدیدترین ویرایش توسط rezamajdi; ۱۶:۴۵ ۱۳۹۵/۰۶/۱۸.
            آرزوی سرافرازی برای ایران عزیز . . .


            دیدگاه


              #7
              پاسخ : مشکل تکرار دستور در bascom

              ممنون دوست عزیز
              مشکل حل شد
              طوری زندگی کن انگار امروز اخرین روز زندگیته!!!
              امروز رو کامل زندگی کن...
              (یه روز یعنی هیچوقت!)

              دیدگاه


                #8
                پاسخ : مشکل تکرار دستور در bascom

                یه سوال دیگه
                اگر بخوایم خروجی رو با یه پین دیگه هم کنترل کنیم
                مثلا If Pinb.0 = 1 Then Goto Ch1 و شرایط قبل رو داشته باشه چکار کنیم
                برنامه رو که اینطوری بزنیم با شرط اول درسته اما با شرط دوم دوباره چشنمک زنه
                ایا باید یه لیبل دیگه بزنیم یا راه دیگه ای داره
                regfile = "m8def.dat"
                $crystal = 8000000
                Config Portd = Input
                Config Portb = Output
                Reset Portd.0
                Reset Portd.1
                Config Debounce = 20
                '========================================'
                Do
                If Pind.0 = 1 And Pind.1 = 0 Then Goto Ch1
                If Pinb.0 = 1 Then Goto Ch1
                Loop
                '======================================='
                Ch1:
                Waitms 30
                Toggle Portb.0
                while Pind.0 = 1 And Pind.1 = 0
                wend
                Waitms 30
                Return

                طوری زندگی کن انگار امروز اخرین روز زندگیته!!!
                امروز رو کامل زندگی کن...
                (یه روز یعنی هیچوقت!)

                دیدگاه


                  #9
                  پاسخ : مشکل تکرار دستور در bascom

                  نوشته اصلی توسط gh.kh نمایش پست ها
                  یه سوال دیگه
                  اگر بخوایم خروجی رو با یه پین دیگه هم کنترل کنیم
                  مثلا If Pinb.0 = 1 Then Goto Ch1 و شرایط قبل رو داشته باشه چکار کنیم
                  برنامه رو که اینطوری بزنیم با شرط اول درسته اما با شرط دوم دوباره چشنمک زنه
                  ایا باید یه لیبل دیگه بزنیم یا راه دیگه ای داره
                  regfile = "m8def.dat"
                  $crystal = 8000000
                  Config Portd = Input
                  Config Portb = Output
                  Reset Portd.0
                  Reset Portd.1
                  Config Debounce = 20
                  '========================================'
                  Do
                  If Pind.0 = 1 And Pind.1 = 0 Then Goto Ch1
                  If Pinb.0 = 1 Then Goto Ch1
                  Loop
                  '======================================='
                  Ch1:
                  Waitms 30
                  Toggle Portb.0
                  while Pind.0 = 1 And Pind.1 = 0
                  wend
                  Waitms 30
                  Return

                  سلام به شما

                  خوب دلیلش اینه که شما در لیبل ch1 نوشتید
                  while Pind.0 = 1 And Pind.1 = 0
                  wend
                  معنیش اینه که تازمانی که Pind.1 = 0 و Pind.0 = 1 ( هر دو باهم ) وجود داره هیچ کاری نکن
                  بنابر این پردازنده میاد میبینه که وجود هر دوشرط ( Pind.1 = 0 و Pind.0 = 1 ) الزامی هست و وقتی میبینه تنها یکی از شرط ها وجود داره ( Pinb.0 = 1 ) بنابر این پردازنده حلقه ی while رو اجرا
                  انگار که نیست

                  به نظر من برای if دوم باید یه لیبل دیگه بزنی

                  البته اگه داخل لیبل ch1 بعد از

                  while Pind.0 = 1 And Pind.1 = 0 wend
                  این عبارت رو قرار بدید
                  while Pinb.1 = 0 wend

                  اونوقت چه اون دو کلید باهم صفر بشه ( *
                  Pind.0 = 1 And Pind.1 = 0 ) و چه تنها اون یک کلید صفر بشه ( Pinb.1 = 0) هیچ فرقی نمیکنه و دیگه چشمک هم نمیزنه

                  پیروز و سربلند باشید
                  جدیدترین ویرایش توسط rezamajdi; ۲۱:۲۳ ۱۳۹۵/۰۶/۱۸.
                  آرزوی سرافرازی برای ایران عزیز . . .


                  دیدگاه


                    #10
                    پاسخ : مشکل تکرار دستور در bascom

                    من بسکام بلد نیستم ولی اگه فرض کنم با C یکی هستش شما باید بتونی اون دو شرط if اولی رو توی یه پرانتز بذاری و با شرط اون یکی پین که در if دوم نوشتین or کنید. فقط برای حلقه توقف باید این پین رو هم اضافه کنید. کدهاتون رو روی یه برگ کاغذ اول بنویسید و بررسی کنید. مداد/خودکار و کاغذ! همین طوری ننویسید.

                    دیدگاه


                      #11
                      پاسخ : مشکل تکرار دستور در bascom

                      ممنون دوست عزیز
                      با این حساب برای اینکه شرط دوم هم مثل شرط اول اجرا بشه باید چکار کرد
                      یا به قول دوستمون چطوری دوتا شرط رو orکنیم
                      ایا میشه برنامه رو طوری دیکه نوشت که ch2 حذف بشه
                      regfile = "m8def.dat"
                      $crystal = 8000000
                      Config Portd = Input
                      Config Portb = Output
                      Reset Portd.0
                      Reset Portd.1
                      Config Debounce = 20
                      '========================================'
                      Do
                      If Pind.0 = 1 And Pind.1 = 0 Then Goto Ch1
                      If Pind.4 = 1 Then Goto Ch2
                      Loop
                      '======================================='
                      Ch1:
                      Waitms 30
                      Toggle Portb.0
                      while Pind.0 = 1 And Pind.1 = 0
                      wend
                      Waitms 30
                      Return
                      '======================================='
                      Ch2:

                      Waitms 30
                      Toggle Portb.0
                      while Pind.4 = 1
                      wend
                      Waitms 30
                      Return




                      دلیل: ادغام دو پست برای جلوگیری از اسپم

                      نوشته اصلی توسط روح الامین نمایش پست ها
                      من بسکام بلد نیستم ولی اگه فرض کنم با C یکی هستش شما باید بتونی اون دو شرط if اولی رو توی یه پرانتز بذاری و با شرط اون یکی پین که در if دوم نوشتین or کنید. فقط برای حلقه توقف باید این پین رو هم اضافه کنید. کدهاتون رو روی یه برگ کاغذ اول بنویسید و بررسی کنید. مداد/خودکار و کاغذ! همین طوری ننویسید.
                      اره اما or رو نتونستم پیدا کنم
                      طوری زندگی کن انگار امروز اخرین روز زندگیته!!!
                      امروز رو کامل زندگی کن...
                      (یه روز یعنی هیچوقت!)

                      دیدگاه


                        #12
                        پاسخ : مشکل تکرار دستور در bascom

                        نوشته اصلی توسط rezamajdi نمایش پست ها
                        سلام به شما

                        خوب دلیلش اینه که شما در لیبل ch1 نوشتید
                        while Pind.0 = 1 And Pind.1 = 0
                        wend
                        معنیش اینه که تازمانی که Pind.1 = 0 و Pind.0 = 1 ( هر دو باهم ) وجود داره هیچ کاری نکن
                        بنابر این پردازنده میاد میبینه که وجود هر دوشرط ( Pind.1 = 0 و Pind.0 = 1 ) الزامی هست و وقتی میبینه تنها یکی از شرط ها وجود داره ( Pinb.0 = 1 ) بنابر این پردازنده حلقه ی while رو اجرا
                        انگار که نیست

                        به نظر من برای if دوم باید یه لیبل دیگه بزنی

                        البته اگه داخل لیبل ch1 بعد از

                        while Pind.0 = 1 And Pind.1 = 0 wend
                        این عبارت رو قرار بدید
                        while Pinb.1 = 0 wend

                        اونوقت چه اون دو کلید باهم صفر بشه ( *
                        Pind.0 = 1 And Pind.1 = 0 ) و چه تنها اون یک کلید صفر بشه ( Pinb.1 = 0) هیچ فرقی نمیکنه و دیگه چشمک هم نمیزنه

                        پیروز و سربلند باشید
                        تشکر دوست عزیز درست شد موفق و سربلند باشید
                        جدیدترین ویرایش توسط Mehrdad khosravi; ۲۲:۱۲ ۱۳۹۵/۰۶/۱۸.
                        طوری زندگی کن انگار امروز اخرین روز زندگیته!!!
                        امروز رو کامل زندگی کن...
                        (یه روز یعنی هیچوقت!)

                        دیدگاه


                          #13
                          پاسخ : مشکل تکرار دستور در bascom

                          سلام
                          برا قسمت اولتون یه کد نوشتم شاید بدردتون بخوره ،کمیوقت بزارید میتونید تحلیلش کنید
                          امااااا قسمت دوم رو متوجه منظورتون نشدم لطفا کامل توضیح بدید
                          کد:
                          $regfile = "m8adef.dat"
                          $crystal = 8000000
                          $hwstack = 40
                          $swstack = 16
                          $framesize = 32
                          
                          Config Pind.0 = Input
                          Config Pind.1 = Input
                          Config Portb = Output
                          Dim Main As Byte
                          
                          Main = 1
                          
                           Portb.0 = 0
                           Portb.2 = 1
                           Waitms 2000
                           Portb.2 = 0
                          '========================================'
                          Do
                          While Main = 1
                          
                          If Pind.0 = 0 And Pind.1 = 0 Then : Toggle Portb.0 : Main = 2 : : Waitms 30 : End If
                          
                          Wend
                          
                          While Main = 2
                            If Pind.0 = 1 Or Pind.1 = 1 Then : Main = 1 : Waitms 30 : End If
                          
                          Wend
                          Loop
                          End

                          دیدگاه


                            #14
                            پاسخ : مشکل تکرار دستور در bascom

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

                            دیدگاه


                              #15
                              پاسخ : مشکل تکرار دستور در bascom

                              درود دوستان میخوام در برنامه زیر
                              با یک شدن ورودی خروجی به مدت 5 دقیقه یک باشه بعد صفر بشه و در مدت تایم گیری بقیه برنامه هم بدون مشکل اجرا بسه
                              $regfile = "m8def.dat"
                              $crystal = 8000000
                              Config Portd = Input
                              Config Portb = Output
                              Reset Portd.0
                              Reset Portd.1
                              Config Debounce = 20
                              '========================================'
                              Do
                              If Pind.0 = 1 And Pind.1 = 0 Then Goto Ch1
                              Loop
                              '======================================='
                              Ch1:

                              Waitms 30
                              Toggle Portb.0
                              while Pind.0 = 1 And Pind.1 = 0
                              wend
                              Waitms 30
                              Return
                              طوری زندگی کن انگار امروز اخرین روز زندگیته!!!
                              امروز رو کامل زندگی کن...
                              (یه روز یعنی هیچوقت!)

                              دیدگاه

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