اطلاعیه

Collapse
No announcement yet.

کمک در مورد دستور BITWATE در بسکام

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

    کمک در مورد دستور BITWATE در بسکام

    سلام.من میخوام تو بسکام یه برنامه ی بنویسم که اگه یه پایه ورودی اگه تغییر حالت داد یعنی چه از صفر به یک یا از یک به صفر تغییر کرد مثلا فلان پایه خروجی رو ست کنه.آیا امکانش هست. :eek:
    دستور bitwaite تو برنامه وقفه ایجاد میکنه.میدونین من میخام چیکار کنم؟میخوام 3پایه بعنوان ورودی هر وقت تغییر حالت داد به ترتیب پایه های خروجی رو یک کنه.یعنی اگه پایه a.1 که وردی هست تغییر حالت داد پایه b.1 رو به مدت 2ثانیه یک کنه.همینطور اگه پایه a.2 که ورودی دومه اگه تغییر حالت داد پایه b.2 را برای مدت 2ثانیه یک کنه.برای پایه سوم هم همینطور.اگه کمکم کنید خیلی خیلی ممنون میشم. :angry:

    #2
    پاسخ : کمک در مورد دستور BITWATE در بسکام

    سلام دستور bitwaiteکلیه عملکرد میکرو رو متوقف میکنه تا حالت مورد نظر شما اتفاق بیفته حالا اگر اتفاق نیفته دیگه میکرو هیچ عملی رو انجام نمیده میتونی بجای bitwait از دستور debounce ویا وقفه استفاده کنی دستور debiunce رو تو do-loopقرار بده هروقت اتفاق افتاد میره زیر برنامه رو اجرا میکنه ولی اگه اصرار به استفاده از bitwaitهستشه در صورت برقراری شرط دستور ادامه برنامه از خط بعدی اجرا میشه وشما هر دستوری میتونی بنویسی
    MEHRENIA1366@GMAIL.COM
    مغز انسان خیلی پیچیده است و بخاطر همین همیشه دنبال راه حلهای پیچیده میگرده با کمی تامل میشه راه حلهای ساده تری رو پیدا کرد.همیشه پیچدگی وحجم بالا نشانه داشتن علم زیاد نیست.

    دیدگاه


      #3
      پاسخ : کمک در مورد دستور BITWATE در بسکام

      سلام
      می تونی از if هم استفاده کنی

      دیدگاه


        #4
        پاسخ : کمک در مورد دستور BITWATE در بسکام

        به نظر من میتونین
        این طور عمل کنین
        که:
        یه main بنویسین و اونجا چک کنین که پایه اگه یک شد بپر داخل یه زیر برنامه اونجا هم یه do-loop بزار و چک کن اگر همون پایه یک باشه کاری نکنه
        و اگه صفر شد بیاد و یه پورت رو ست کنه و به همین ترتیب...
        این راهی ککه خودم اکثرا استفاده میکنم
        اگه متوجه نشدین بگین تا بیشتر بحث کنیم

        دیدگاه


          #5
          پاسخ : کمک در مورد دستور BITWATE در بسکام

          ببین ما دو حالت بیشتر نداریم 0 یا 1 و حالت وسطی نداریم خب همون دستور if که گفتن فکر کنم خوب باشه اینطوری
          if porta.0=1 then
          portb.1=1
          wait 2
          end if
          if porta.1=1 then
          portb.1=0
          wait 2
          end if

          خب این مشکلش اینه که ما توی do loop هستیم پس مثلا اگه در حالت معمولی پول اپ باشیم همیشه 1 هستیم و if دوم همیشه خوانده میشود


          نکته : شما نوشتید "میخوام 3پایه بعنوان ورودی هر وقت تغییر حالت داد به ترتیب پایه های خروجی رو یک کنه.یعنی اگه پایه a.1 که وردی هست تغییر حالت داد پایه b.1 رو به مدت 2ثانیه یک کنه.همینطور اگه پایه a.2 که ورودی دومه اگه تغییر حالت داد پایه b.2 را برای مدت 2ثانیه یک کنه.برای پایه سوم هم همینطور."
          خب اینکه کاری نداره ولی قبلا میخواستید که یک پایه رو زمانی که تغییر حالت داد بفهمید این چیزی که شما نوشتید با سه تا if حل میشه :icon_razz:
          الکترونیک همه کاره دنیا

          دیدگاه


            #6
            پاسخ : کمک در مورد دستور BITWATE در بسکام

            تو برنامه ی که شما نوشتید مشکل من حل نمیشه.من میخوام وقتی پایه ورودی تغییر حالت داد پایه خروجی 2ثانیه 1بشه.ولی تو برنامه شما هردور که خط برنامه اجرا میشه خلاصه یبار پایه خروجی 1میشه ولی چیزی که من دنبالشم اینه که میکرو تغییر تو پایه ورودی رو مد نظر بگیره و نسبت به اون پایه خروجی رو 1 کنه.

            دیدگاه


              #7
              پاسخ : کمک در مورد دستور BITWATE در بسکام

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

              دیدگاه


                #8
                پاسخ : کمک در مورد دستور BITWATE در بسکام

                شما کلید برقی رو تصور کنید که به یه لامپ 100وصله و میخاین وقتی کلید تغییر حالت میده لامپ 3ثانیه روشن بشه و بعد خاموش بشه.حالا تصور کنید کلید 2پل هستش و وصل به دو لامپ مجزا.ببخشبد که اینقدر ابتدایی توضیح دادم چون خودمم مبتدی هستم.ازدستور bitwateچون وقفه میتدازه نمیشه استفاده کرده از دستور debounce هم نمیشه چون تو حلقه ی که قرار می دیم وقتی یکی از کلیدها تغییر حالت میده ممکنه پایه خروجی کناری رو هم یک کنه.مشکل من اینه.حالا چیکار باید بکنم

                دیدگاه


                  #9
                  پاسخ : کمک در مورد دستور BITWATE در بسکام

                  نوشته اصلی توسط venoos6772
                  شما کلید برقی رو تصور کنید که به یه لامپ 100وصله و میخاین وقتی کلید تغییر حالت میده لامپ 3ثانیه روشن بشه و بعد خاموش بشه.حالا تصور کنید کلید 2پل هستش و وصل به دو لامپ مجزا.ببخشبد که اینقدر ابتدایی توضیح دادم چون خودمم مبتدی هستم.ازدستور bitwateچون وقفه میتدازه نمیشه استفاده کرده از دستور debounce هم نمیشه چون تو حلقه ی که قرار می دیم وقتی یکی از کلیدها تغییر حالت میده ممکنه پایه خروجی کناری رو هم یک کنه.مشکل من اینه.حالا چیکار باید بکنم
                  شما اصلا درست توضیح نمیدید oo:
                  "شما کلید برقی رو تصور کنید که به یه لامپ 100وصله و میخاین وقتی کلید تغییر حالت میده لامپ 3ثانیه روشن بشه و بعد خاموش بشه.حالا تصور کنید کلید 2پل هستش و وصل به دو لامپ مجزا "
                  ناقصه!!! میشه کاملتر توضیح بدید دقیقا با همین مثال ساده میخوایید چیکار کنید

                  اگه هم درست متوجه شده باشم و صحبت دوستمون اقای mehrenia درست باشه خب از دو تا وقفه استفاده کن :read:
                  الکترونیک همه کاره دنیا

                  دیدگاه


                    #10
                    پاسخ : کمک در مورد دستور BITWATE در بسکام

                    من یه ریموت دارم.وقتی کلید فرستنده رو فشار میدی،رله گیرنده وصل میشه تا زمانیکه دوباره کلید فرستنده رو بزنی تا رله قطع بشه.حالا من میخام ریموت روبه میکرو وصل کنم که وقتی کلید رو 1بار زدی در باز بشه.حالا اینو برای دوتا درب در نظر بگیرید.
                    تو حالت عادی باید وقتی کلید رو زدی برای قطع شدن رله در بازکن باید دوباره کلید رو بزنی تا رله قطع بشه ولی من میخام جوری برنامه بنویسم که با یکبار کلیدزدن میکرو 2ثانیه رله در بازکن رو وصل کنه.همین
                    فکر کنم برم ریموتو عوض کنم بهتر باشه :angry:

                    دیدگاه


                      #11
                      پاسخ : کمک در مورد دستور BITWATE در بسکام

                      نمیخاد ریموتو عوض کنی توجه کن متوجه میشی فعال ساز یا به قول خودت خروجی ریموت رو بده به یکی از وقفه ها ی خارجی میکرو برای وقفه یه زبر برنامه بنویس که وقتی وقفه اومد بر به زیر برنامش ویه پایه برات فعال کنه بعد با دستور WAIT تاخیر مورد نیازتو بده بعد از مدت مورد نظرت مثلا 2 ثانیه پایه ای که فعال شده رو ریست کنه به هیمن سادگی
                      MEHRENIA1366@GMAIL.COM
                      مغز انسان خیلی پیچیده است و بخاطر همین همیشه دنبال راه حلهای پیچیده میگرده با کمی تامل میشه راه حلهای ساده تری رو پیدا کرد.همیشه پیچدگی وحجم بالا نشانه داشتن علم زیاد نیست.

                      دیدگاه


                        #12
                        پاسخ : کمک در مورد دستور BITWATE در بسکام

                        زمانی که میشه از سخت افزار میکرو استفاده کرد چرا ما بیایم CPU رو مشغول کنیم؟
                        شما بهتره از
                        INT0 , INT1 , INT2
                        استفاده کنی و نوع تریگر شدن اینتراپت ها رو مشخص کنی و در زیر روال وقفه عملیات مورد نطرت رو انجام بدی به اینصورت هم کارت انجام میشه و هم CPU مشغول نمیشه
                        موفق باشی . . .

                        دیدگاه


                          #13
                          پاسخ : کمک در مورد دستور BITWATE در بسکام

                          سلام دوستان

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

                          حالا من نیاز به یه دستور دارم که اگر سنسور رو قطع کردم برنامه روال عادی رو طی کنه و متوقف نشه که بخاد کل مدار از کار بیافته .ممنون میشم دوستان در این زمینه راهنمایی بفرمایند.
                          اینم برنامه ::

                          کد:
                          Declare Sub Read_timings
                          Declare Sub Humtemp_values
                          Declare Function Compare_chksum(byval Hsens_humidity As Word , Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
                          
                          
                          Do
                          Led = 1
                          Call Humtemp_values
                          
                          If Compare_chksum(humidityw , Temperaturew , Humsens_chksum) = 1 Then
                          
                          Humiditys = Str(humidityw)
                          Temperatures = Str(temperaturew)
                          
                          Strstring = "H:" + Format(humiditys , "0.0" )
                          'Strstring = Humiditys
                          Locate 1 , 9
                          Lcd Strstring
                          
                          Strstring = "T:" + Format(temperatures , "0.0")
                          'Strstring = Temperatures
                          Locate 2 , 9
                          Lcd Strstring
                          
                          Else
                          Strstring = "***ERROR***"
                          Cls
                          Locate 1 , 7
                          Lcd Strstring
                          End If
                          Waitms 100
                          Led = 0
                          Wait 1
                          Loop
                          End
                          
                          
                          Sub Read_timings
                            Count = 1
                            Config Pind.4 = Output : Portd.4 = 0
                            Waitms 20
                            Config Pind.4 = Input
                            While Count < 43
                             Bitwait Pind.4 , Set
                             Start Timer0
                             Bitwait Pind.4 , Reset
                             Stop Timer0
                             Signaltime(count) = Tcnt0
                             Tcnt0 = 0
                             Incr Count
                          
                           Wend
                          
                          End Sub
                          
                          Sub Humtemp_values
                          
                            Local X As Byte
                          
                            Humidityw = 0
                            Temperaturew = 0
                            Humsens_chksum = 0
                          
                            Call Read_timings
                          
                            For Count = 3 To 42
                          
                             Select Case Count
                          
                               Case 3 To 18
                                X = 18 - Count
                                If Signaltime(count) > Min_time Then Toggle Humidityw.x
                          
                               Case 19 To 34
                                X = 34 - Count
                                If Signaltime(count) > Min_time Then Toggle Temperaturew.x
                          
                               Case 34 To 42
                                X = 42 - Count
                                If Signaltime(count) > Min_time Then Toggle Humsens_chksum.x
                          
                             End Select
                           Next
                          End Sub
                          
                          
                          Function Compare_chksum(byval Hsens_humidity As Word , Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
                          
                          Local Chksum As Byte
                          
                          Chksum = Low(hsens_humidity ) + High(hsens_humidity )
                          Chksum = Chksum + Low(hsens_temperature)
                          Chksum = Chksum + High(hsens_temperature)
                          
                          If Chksum = Hsens_chksum Then
                          Compare_chksum = 1
                          Else
                          Compare_chksum = 0
                          End If
                          
                          End Function
                          یا به اندازه آرزوهایت تلاش میکنی یا به اندازه تلاشت ارزو میکنی

                          دیدگاه

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