اطلاعیه

Collapse
No announcement yet.

خروج از حلقه

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

    خروج از حلقه

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

    #2
    پاسخ : خروج از حلقه

    سلام.

    هم میتونی از
    Debounce Pind.0 , 0 , loop1
    استفاده کنی و هم میتونی از دستور if استفاده کنی. ولی Debounce Pind.0 , 0 , loop1 بهتره .

    هر موقع پین d.0 صفر شد به برچسب loop1 میپره. اگه جای اون صفر یک بذاری هر موقع پین 1 شد میپره به برچسب loop1 .
    فقط باید از مقاومت های pull up , pull down هم استفاده کنی.(بهتره)

    در حالت پیش فزض با تاخیر 25 میلی ثانیه بانس کلید رو میگیره که میتونی خودت عوض کنی با دستور config Debounce=45 مقدار 25 به 45 میلی ثانیه تبدیل شد.
    www.icesi.ir

    دیدگاه


      #3
      پاسخ : خروج از حلقه

      در کل برای خروج غیر عادی از حلقه (یعنی بدون اینکه توسط شرط حلقه ازش خارج بشی ) کافیه از دستور Exit استفاده کنی.
      مثلا برای خروج از حلقه For باید تو جایی که می خوای بنویسی Exit For

      دیدگاه


        #4
        پاسخ : خروج از حلقه

        سلام

        اگه از کیبورد 4*4 استفاده میکنی بهتره که از مدار زیر برای اتصال به میکرو کنترلر استفاده کنی

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

        یعنی برنامه ی شما عملا از حلقه ی اصلی خارج شده و به زیر برنامه ی وقفه پرش میکند
        ِِDie for Life, Not Live to Die
        Freedom Fighter
        " ناخود گاه، هريك از ما ، از ناميرائي خود يقين دارد " . فروید

        دیدگاه


          #5
          پاسخ : خروج از حلقه

          در حالت پیش فزض با تاخیر 25 میلی ثانیه بانس کلید رو میگیره که میتونی خودت عوض کنی با دستور config Debounce=45 مقدار 25 به 45 میلی ثانیه تبدیل شد.
          این یعنی اینکه هر 45 میلی ثانیه یکبار کلید رو اسکن میکنه؟ یعنی اگر کلید رو نگه داریم هر 45میلی ثانیه یکبار اون رو میفرسته به میکرو؟ توی مشخص کردن این زمان محدودیت هم داریم؟
          ممنون
          از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
          هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
          اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
          اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
          شاد و موفق باشید

          دیدگاه


            #6
            پاسخ : خروج از حلقه

            وقتی شما کلید رو بزنی برای مثال پین مورد نظر 0 میشه میکرو بعد از 25 میلی ثانیه بعد دوباره چک میکنه که آیا همون پین هنوز صفره اگه صفر بود اونه به منزله فشار دادن قبول میکنه.
            این فقط برای گرفتن بانس کلیده احتما داره نویز روی خط بشینه.این زمان باعث میشه که لرزش های کلی گرفته بشه.

            یادمه اولین پروژه ای که من عملی بستم یه شمارنده 0 تا 99 با 7 سگمنت بود که بانس کلید رو نگرفته بودم تا دستمو گذاشتم روی کلید تا 99 سرع رفت.
            من تا 70 گذاشتم .بیشتر از این دیگه به نظر من فایده ای نداره.(البته 70 هم زیاده ولی چون من از کلید های کله قارچی استفاده کرده بودم)
            www.icesi.ir

            دیدگاه


              #7
              پاسخ : خروج از حلقه

              یعنی در واقع اگر دستت رو روی کلید نگه داری مثل این میمونه که هر 25 میلی یکبار کلید رو فشار دادی درسته؟ میشه این زمان رو به مقدار های زیاد هم تغییر داد؟ مثلا 3 ثانیه یا بیشتر؟ یا اینکه جوری تعریفش کنید که اگر همینطور کلید رو نگه داشتید هیچ اتفاقی نیوفته تا اینکه کلید رها بشه و دوباره فشرده بشه؟ میشه با همین دستور تنها این کار رو کرد یا باید از دستورات دیگه کمک بگیریم؟
              تشکر
              از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
              هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
              اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
              اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
              شاد و موفق باشید

              دیدگاه


                #8
                پاسخ : خروج از حلقه

                نوشته اصلی توسط Study
                یعنی در واقع اگر دستت رو روی کلید نگه داری مثل این میمونه که هر 25 میلی یکبار کلید رو فشار دادی درسته؟ میشه این زمان رو به مقدار های زیاد هم تغییر داد؟ مثلا 3 ثانیه یا بیشتر؟ یا اینکه جوری تعریفش کنید که اگر همینطور کلید رو نگه داشتید هیچ اتفاقی نیوفته تا اینکه کلید رها بشه و دوباره فشرده بشه؟ میشه با همین دستور تنها این کار رو کرد یا باید از دستورات دیگه کمک بگیریم؟
                تشکر
                خیر اینجوری نیست که شما فکر می کنید ولی میشه با برنامه نویسی این کارو کرد :smile:
                ِِDie for Life, Not Live to Die
                Freedom Fighter
                " ناخود گاه، هريك از ما ، از ناميرائي خود يقين دارد " . فروید

                دیدگاه


                  #9
                  پاسخ : خروج از حلقه

                  ممنون دوستان ظاهرا من اینجوری درست 2 زاریم نمیوفته باید برنامه رو بنویسم امتحان کنم. :smile:
                  از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                  هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                  اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                  اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                  شاد و موفق باشید

                  دیدگاه


                    #10
                    پاسخ : خروج از حلقه

                    تو اسمبلی در 8051 به این صورت برای بانس گیری استفاده میکردیم.: ساید این طوری بهتر متوجه بشی:


                    loop1:JB P2.0,loop1
                    call delay-20ms
                    JB p2.0,loop1
                    INC A
                    loop2:JNB P2.0,loop2

                    اگه پین 2.0 صفر شده باشه(یعنی کلید فشار داده شده است) از خط اول عبور میکنیم(و اگر کلید فشار داده نشده باشه روی خط اول که loop1 باشه برنامه میمونه)
                    20 میلی ثانیه تاخیر میدیم و دوباره چک میکنیم که اگه پین یکه برگرد به loop1 در غیر این صورت ادامه برنامه انجام میشه و در آخر توسط دستور JNB چک میکنیم که پین 2.0 هنوز صفره ؟
                    اگه صفر باشه یعنی اینکه دست هنوز روی کلیده و دوباره برنامه روی loop2 ممونه.

                    دستور Debounce هم تقریبا همه این مراحل رو به طور اتوماتیک انجام میده و با دستور config Debounce=45 مقدار 20 میلی ثانیه رو تغییر میده.
                    www.icesi.ir

                    دیدگاه


                      #11
                      پاسخ : خروج از حلقه

                      نوشته اصلی توسط میلاد موسوی
                      تو اسمبلی در 8051 به این صورت برای بانس گیری استفاده میکردیم.: ساید این طوری بهتر متوجه بشی:


                      loop1:JB P2.0,loop1
                      call delay-20ms
                      JB p2.0,loop1
                      INC A
                      loop2:JNB P2.0,loop2

                      اگه پین 2.0 صفر شده باشه(یعنی کلید فشار داده شده است) از خط اول عبور میکنیم(و اگر کلید فشار داده نشده باشه روی خط اول که loop1 باشه برنامه میمونه)
                      20 میلی ثانیه تاخیر میدیم و دوباره چک میکنیم که اگه پین یکه برگرد به loop1 در غیر این صورت ادامه برنامه انجام میشه و در آخر توسط دستور JNB چک میکنیم که پین 2.0 هنوز صفره ؟
                      اگه صفر باشه یعنی اینکه دست هنوز روی کلیده و دوباره برنامه روی loop2 ممونه.

                      دستور Debounce هم تقریبا همه این مراحل رو به طور اتوماتیک انجام میده و با دستور config Debounce=45 مقدار 20 میلی ثانیه رو تغییر میده.
                      ممنون میلاد جان روی اسمبلی که توضیح دادی کاملا متوجه شدم، تو اسمبلی AVR هم تقریبا به همین شکل هست فقط چون نوع دستورات فرق میکنه دستورش سه خط بیشتر از این برنامه 8051 میشه اگر بخوایم طوری بنویسم که بعد از مدت مشخصی که دست روی کلید نگاه داشته میشه دوباره کلید رو فشار داده شده حساب کنه کدش کوتاه تر میشه !! :smile:
                      از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                      هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                      اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                      اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                      شاد و موفق باشید

                      دیدگاه


                        #12
                        پاسخ : خروج از حلقه

                        نوشته اصلی توسط Study
                        اگر بخوایم طوری بنویسم که بعد از مدت مشخصی که دست روی کلید نگاه داشته میشه دوباره کلید رو فشار داده شده حساب کنه کدش کوتاه تر میشه !! :smile:
                        متوجه منظورت نشدم
                        www.icesi.ir

                        دیدگاه


                          #13
                          پاسخ : خروج از حلقه

                          توی این حلقه که شما بالا نوشتی اگر ما دستمون رو روی کلید همینطور نگه داریم یکبار بیشتر A رو افزایش نمیده چون اگر دستمون روی کلید مونده باشه توی حلقه آخری همینطور میمونه تا ما کلید رو رها کنیم. در این حالت شما 5 تا کد نوشتی که البته در AVR برای همچین کاری 8 تا کد نیاز داریم، حالا میشه جور دیگه ای این کد رو نوشت که اگر ما دستمون رو روی کلید نگه داشتیم به جای اینکه توی حلقه آخری دور بزنه تا ما کلید رو رها کنیم مثلا هر ثانیه یکبار A رو اضافه کنه ، یعنی در واقع هر ثانیه یکبار کلید رو اسکن کنه، در این حالت کد شما کوتاه تر میشه اما عیبی که داره اینه که شما برای اینکه دوباره کلید رو فشار بدی باید 1 ثانیه صبر کنی، فکر نکنم اینجوری درست متوجه بشی، اگر متوجه منظورم نشدی بگو تا در اولین فرصت برنامه اسکن کلید رو به این حالت که شما نوشتی و چیزی که توضیح دادم بنویسم و فایل Proteus رو بزارم بعد شما با دوتا کلید ها کار کن متوجه فرقشون میشی. حالا در کل منظور من این بود که در برنامه نویسی اسمبلی AVR اگر کلید رو به حالت دوم که من گفتم اسکن کنیم به تعداد کمتری کد نیاز داریم تا اینکه به اون فرمتی که شما نوشتی اسکن کنیم، اما این دوتا روش اسکن کردن کلید جواب های متفاوتی میدن. این روشی که شما نوشتی اصولی تر هست و معمولا هم همین برای کلید به کار میره ولی اون یکی روش هم بعضی مواقع لازم میشه مثلا برای یک سیستم امنیتی به جای اینکه یک کد مثلا 8 رقمی بزاریم میتونیم با همین یک کلید و با توجه به زمانی که کلید نگه داشته میشه کد رو متوجه بشیم بدون اینکه از تایمر استفاده کنیم. ( چون اگر مثلا شما کلید رو 10 ثانیه نگه داری برای میکرو مثل این میمونه که شما 10 بار کلید رو فشار دادی )
                          از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                          هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                          اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                          اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                          شاد و موفق باشید

                          دیدگاه


                            #14
                            پاسخ : خروج از حلقه

                            سلام.
                            دقیقا متوجه منظورت شدم.

                            من اون کدی که نوشتم فقط میخواستم کاربرد دستور Debounce رو به شما بگم. که دقیقا این دستور مانند اون 4 5 خط عمل میکنه/

                            اونی هم که شما میگی تقریبا مانند تست کلید موبایل هستش موقعی که می خوای sms بدی. بعد از هر بار فشار دادن هر کلید یه زمان مشخصی باید صبر کنی تا بتونی با همون کلید یه حرف دیگه رو انتخاب کنی. :NO:
                            www.icesi.ir

                            دیدگاه


                              #15
                              پاسخ : خروج از حلقه

                              نوشته اصلی توسط میلاد موسوی
                              سلام.
                              دقیقا متوجه منظورت شدم.

                              من اون کدی که نوشتم فقط میخواستم کاربرد دستور Debounce رو به شما بگم. که دقیقا این دستور مانند اون 4 5 خط عمل میکنه/

                              اونی هم که شما میگی تقریبا مانند تست کلید موبایل هستش موقعی که می خوای sms بدی. بعد از هر بار فشار دادن هر کلید یه زمان مشخصی باید صبر کنی تا بتونی با همون کلید یه حرف دیگه رو انتخاب کنی. :NO:
                              درسته میلاد جان، حالا که این بحث انجام شد دوباره برام این سوال پیش اومد که توی بیسیک برای تعریف اون نوع کلید هم دستور آماده هست یا اینکه خودتون یکم دستکاری میکنید و میسازیدش؟
                              از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                              هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                              اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                              اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                              شاد و موفق باشید

                              دیدگاه

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