اطلاعیه

Collapse
No announcement yet.

مشکل در مورد دستور حلقه

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

    مشکل در مورد دستور حلقه

    سلام
    من یه برنامه برای مداری نوشتم که توسط LM35 دما را اندازه گیری و نشان میده.ولی برای بالا بردن دقت اندازه گیری اومدم .تعداد نمونه گیری را افزایش دادم توسط دستور زیر
    for b=0 to 20
    a= getadc(0)
    a=a+a
    next
    a=a/20
    .
    .
    .
    یعنی در بالا با یه حلقه For میخوام تعداد نمونه را تا 20 عدد بالا ببرم.ولی تو بسکام که نوشتم از حلقه ام ایراد میگیره .با دستور while-wend نیز نوشتم ولی با ایراد گرفت
    مجبور شدم تا 10 عدد متغییر تعریف کنم و به صورت زیر برنامه را تغییر بدم
    a=getadc(0)
    b=getadc(0)
    c=getadc(0)
    d=getadc(0)
    e=getadc(0)
    .
    .
    .
    .
    بعد هم اومدم از کل اونها میانگین گرفتم/.حالا میشه درمورد اینکه چرا حلقه های For و While که در بالا استفاده کردم جواب نداد.راهنماییم کنید لطفا

    #2
    پاسخ : مشکل در مورد دستور حلقه

    سلام
    این خط:
    a=a+a
    20بار مقدار ورودیها رو با هم جمع نمیکنه، بلکه فقط دفه بیستم رو با خودش جمع میکنه و خروجی میده.
    نوع متغیرها رو از چی گرفتی؟
    ;()((void (*)(void))0x0000))

    دیدگاه


      #3
      پاسخ : مشکل در مورد دستور حلقه

      من که متوجه نشدم .مگه دستور a=a+a هردفعه مقدار A را با مقدار قبلی خودش جمع نمیکنه؟؟؟؟؟؟؟؟
      میشه بیشتر توضیح بدین.یا اینکه بگین پس چه جور میتونم عیبشو را رفع کنم
      درضمن متغییر ها از نوع Word میباشند

      دیدگاه


        #4
        پاسخ : مشکل در مورد دستور حلقه

        وقتی حلقه برای بار اول اجرا میشه:
        اول مقدار ADC تو a قرار میگیره
        بعد a میشه خودش+خودش ، یعنی 2برابر مقدار آنالوگ.
        بار بیستم هم که اجرا بشه فقط 2برابر مقدار بیستمین بار گرفتن انالوگ رو بدست میاره، با قبلیا کاری نداره.
        درستش اینه:
        کد:
        Dim B As Byte
        Dim W As Word
        For B = 0 To 20
        W = W + Getadc(0)
        Next
        W = W / 20
        ارور هم نداره
        ;()((void (*)(void))0x0000))

        دیدگاه


          #5
          پاسخ : مشکل در مورد دستور حلقه

          ممنونم ازت دوست عزیز.ولی باز بابت اون برنامه ای که خودم نوشتم عیبشو نفهمیدم.برنامه ایی که من نوشتم هر دفعه که حلقه تکرار میشه با دستور GEtadc داریم ورودی را میگیریم و با مقدار قبلیش داریم جمع میکنیم پس چه فرقی با برنامه شما داره
          for b=0 to 20
          a= getadc(0)
          a=a+a
          next
          در بالا قبل از اینکه a را باخودش جمع کنیم من دستور Getadc را نوشتم پس a یه مقدار جدیدی را میگیره و با مقدار قبلیش جمع میکنه پس مشکل چیه

          دیدگاه


            #6
            پاسخ : مشکل در مورد دستور حلقه

            تریس میکنیم تا متوجه بشی:
            حلقه رو به جای 20 بار میزاریم 3بار اجرا بشه
            شروع:
            مقدار حلقه=0
            a الان 0 هست
            مقدار آنالوگ رو می خونیم و تو a میریزیم
            بعد a=a+a یعنی a+خودش رو بریز تو خودش

            حلقه=1
            a الان مقدار داره
            مقدار آنالوگ رو می خونیم و تو a میریزیم، اینجا a مقدار قبلیش رو از دست میده و مقدار فعلی آنالوگ رو میگیره!
            بعد a=a+a یعنی a+خودش رو بریز تو خودش

            حلقه=2
            .
            .
            (مثل حلقه=1)
            .
            .

            حله؟
            ;()((void (*)(void))0x0000))

            دیدگاه


              #7
              پاسخ : مشکل در مورد دستور حلقه

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

              دیدگاه


                #8
                پاسخ : مشکل در مورد دستور حلقه

                سلام دوستان
                من یه مشکل کوچیک با دستور حلقه while دارم. ممنون میشم اگه کسی بتونه کمک کنه
                من یه برنامه نوشتم که تمام کارها رو از طریق زیربرنامه هاش انجام میده.به عبارتی داخل while اصلی برنامه فقط مقدار یک متغیر چک میشه اون هم با یه if ساده. راه وارد شدن و اجرای زیر برنامه ها دریافت یک لبه پایین رونده از طریق وقفه خارجی هستش.
                مشکل اینجاست که برنامه چند دقیقه اول خوب کار میکنه و بدونه مشکل بواسطه ورودی وقفه خارجی وارد زیر برنامه ها میشه و کارش رو صحیح انجام میده. ولی وقتی برای یه مدتی میکرو ورودی از وقفه خارجی نداشته باشه انگار توی حلقه while اصلی برنامه گیر میکنه و به وقفه خارجی جواب نمیده.این نکته رو هم اضافه کنم که اون شرطی که توی حلقه اصلی با if چک میشه چیزی نداره که برنامه رو متوقف کنه. برای رفع این مشکل مجبور شدم یه چند خط اضافه تر از اون شرط if به بدنه اصلی برنامه یعنی همون while اضافه کنم. این اتفاق قبلا" هم برام افتاده و با همین ترفند حل شده.
                سوالم اینه که
                چرا اگر بدنه اصلی برنامه که همون while هستش، خالی باشه یا چند خط بیشتر نباشه برنامه بعد از مدتی هنگ میکنه و دیگه به وقفه خارجی یا هر نوع وقفه ای جواب نمیده؟؟!!
                جدیدترین ویرایش توسط hamid reza_1364; ۱۲:۳۱ ۱۳۹۶/۰۹/۰۶.
                حاصلظرب توان در ادعا مقداری ثابت است.هرچه توان انسان کمتر باشد ادعای او بیشتر است و هرچه توان انسان بیشتر شود ادعایش کمتر میگردد.(دکتر حسابی)

                دیدگاه


                  #9
                  پاسخ : مشکل در مورد دستور حلقه

                  نوشته اصلی توسط hamid reza_1364 نمایش پست ها
                  چرا اگر بدنه اصلی برنامه که همون while هستش، خالی باشه یا چند خط بیشتر نباشه برنامه بعد از مدتی هنگ میکنه و دیگه به وقفه خارجی یا هر نوع وقفه ای جواب نمیده؟؟!!
                  این اتفاق که هیچوقت نمیاوفته . ولی من فکر میکنم داری با حافظه یه کارایی میکنی که نهایت به سرریز شدن حافظه یا پرشدن حافظه کلا با حافظه انگار درگیری . ولی باید کدتو بزارید تا بچه ها ببینن و بفهمن مشکل کجاست .
                  به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
                  (پيش به سوي هدف)

                  دیدگاه

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