اطلاعیه

Collapse
No announcement yet.

مشکل با input در بسکام

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

    مشکل با input در بسکام

    سلام دوستان.
    برای اینکه وقتتون رو زیاد نگیرم، خلاصه سوالم رو همین اول مینویسم و توضیحات تکمیلی رو بعد از اون اضافه میکنم:
    بنده به دنبال یه جور اعمال محدودیت زمانی برای input در بسکام هستم.
    من برای اینکه از max 232 استفاده نکنم، ماژول SIM900 رو به میکرو(atmega 8) وصل میکنم و اطلاعات رو از طریق اون میگیرم. این کار چند مشکل داره که عرض میکنم:
    1- ماژول SIM900 هنگام روشن شدن، شروع میکنه به فرستادن چند خط اطلاعات. من برای اینکه تمام اطلاعات رو از SIM900 به کامپیوتر منتقل کنم، از کد زیر استفاده کردم:
    کد:
    do
    Input #1 , Var
    Print #3 , Var
    loop
    ولی با استفاده از این روش، اطلاعات به درستی منتقل نمیشن. برداشت خود من این بود که سرعت ارسال اطلاعات از SIM900 بیشتر از سرعت پردازش میکرو بود(از کریستال خارجی 11.0592 Mhz استفاده میکنم). برای همین baud rate مربوط به میکرو رو بالا بردم و baud rate ماژول رو روی حداقل(1200) ست کردم. باز هم مشکل حل نشد.برای حل این مشکل،راه حل زیر رو استفاده کردم و موقتا درست شد! ولی ...
    2- بعضی از دستوراتی که به SIM900 ارسال میشن، 3 خط پاسخ دارن. بنده مشکل رو اینجوری حل کردم:
    کد:
      Input #4 , Aval
      Input #4 , Dovom
      Input #4 , Sevom
    این روش اول درست کار میکرد تا اینکه به دستوراتی بر خوردم که پاسخشون از طرف SIM900 بیش از 3 خط بود. اگر تعداد input ها رو بیشتر کنم، برای دستوراتی که 3 خط پاسخ دارن کارامد نخواهد بود و تو input چهارم میکرو هنگ میکنه! یعنی منتظر میمونه که input صورت بگیره. در وقع، من دنبال یه جور اعمال محدودیت زمانی برای input در بسکام هستم.
    در ضمن اگه برای هرکدوم از مشکلات بالا راه حلی دارید لطفا بفرمایید.
    پیشاپیش ممنونم.

    #2
    پاسخ : مشکل با input در بسکام

    من واقعا فکری هستم که این دستور input که میکرو روش متوقف میمونه و هیچ کاری انجام نمیده برای چیه....
    اما راه حل هم داره.
    راه حل یک: شما باید یه قبل رسیدن برنامه به دستور input یه تایمر رو فعال کنی که مثلا اگه تا 1ثانیه توی خط بعد از دستور input ریست نشد تایمر سرریز بشه و با استفاده از وقفه تایمر از دستور input گذر کنی.
    راه حل دوم: که بهتر هم هست استفاده از دستور inkey هست که میکرو روش متوقف نمیشه و در هر بار خوندن یه کاراکتر از بافر ارتباط سریال رو خالی میکنه.

    دیدگاه


      #3
      پاسخ : مشکل با input در بسکام

      نوشته اصلی توسط Tabandokht
      من واقعا فکری هستم که این دستور input که میکرو روش متوقف میمونه و هیچ کاری انجام نمیده برای چیه....
      اما راه حل هم داره.
      راه حل یک: شما باید یه قبل رسیدن برنامه به دستور input یه تایمر رو فعال کنی که مثلا اگه تا 1ثانیه توی خط بعد از دستور input ریست نشد تایمر سرریز بشه و با استفاده از وقفه تایمر از دستور input گذر کنی.
      راه حل دوم: که بهتر هم هست استفاده از دستور inkey هست که میکرو روش متوقف نمیشه و در هر بار خوندن یه کاراکتر از بافر ارتباط سریال رو خالی میکنه.
      سلام.از پاسختون ممنونم.
      در مورد راه اول،چطور باید تایمر رو فعال کنم؟
      و در مورد راه دومتون باید بگم متاسفانه دستور inkey برای uart نرم افزاری جواب نمیده.
      ممنونم.

      دیدگاه


        #4
        پاسخ : مشکل با input در بسکام

        نوشته اصلی توسط hamid.soltani92
        سلام.از پاسختون ممنونم.
        در مورد راه اول،چطور باید تایمر رو فعال کنم؟
        و در مورد راه دومتون باید بگم متاسفانه دستور inkey برای uart نرم افزاری جواب نمیده.
        ممنونم.
        برای تایمر ابتدا باید اونو تعریف و پیکر بندی کنی و یه لیبل معرفی کنی که در صورت سرریز شدن بهش پرش کنه، حالا قبل از دستور input از دستور start timerX استفاده میکنی. و بعد از دستور input از دستور stop timerX استفاده کن.
        حالا اگه تایمر شروع به شمردن کنه و تو دستور input برنامه متوقف بشه، پس از گذشت زمان معینی که قابل تنظیمه مثلا 1 ثانیه تایمر سرریز میشه و میره به لیبل تایمر و در اونجا گفتی بره به خط بعد از input
        البته روش های دیگه ای هم میشه پیدا کرد. اما این فعلا به ذهن من رسید.
        فکر میکنمقبلا برای inkey هم نرم افزاری نوشتم. var = INKEY(#channel)

        دیدگاه


          #5
          پاسخ : مشکل با input در بسکام

          با سلام .بنده هم واقعا با این دستور مشکل دارم
          برنامه ای میخوام داشته باشم تا با دستور input یک عدد مثلا 5 رقمی رو بگیره و با توجه به مقدار اون عدد کاری رو انجام بده. و بطور مداوم هم این عدد خونده بشه.اما مشکل اینجاست که فقط یک بار عدد ورودی خونده میشه.هرچند برنامه بعد از دستور goto main میره به قبل از input. اما دستور input عدد 0 رو برمیگردونه. از دستور inkey هم نمیخوام استفاده کنم. (چند بار دستور inkey رو مینویسیم و هر بار کاراکتر ها رو جدا میخونه و بعدا به هم میچسبونیم که این کار برای اعداد ورودی 5 رقمی یا بیشتر با مشکل تاخیر مواجه هست و برنامه رو نمیتونیم درست اجرا کنیم.
          مرسی از راهنماییتون
          کد:
          $regfile = "m8def.dat"
          $crystal = 8000000
          Enable Interrupts
          $baud = 19200
          Enable Urxc
          Enable Utxc
          Enable Interrupts
          Dim S As Integer
          Main:
          Input S Noecho
          If S = 10 Then
          Print "DD"
          End If
          If S = 11 Then
          Print "GHF"
          End If
          Goto Main
          
          
          
          
          End

          دیدگاه

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