اطلاعیه

Collapse
No announcement yet.

مشکل در دستور if

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

    مشکل در دستور if

    سلام دوستان من این برنامه رو نوشتم و ارور هم نمیده ولی مقادیر پین های وردی رو در متغییر نمیریزه و فقط دستور اولین شرط رو اجرا میکنه و دیگه شرطهای دیگه رو چک نمیکنه و دستوراتشون رو هم انجام نمیده لازم به ذکر هست برای فعال کردن موتور دو سیمه dc می خوام از این برنامه استفاده بکنم.ممنون میشم بگید مشکل چیه یا یک برنامه بیزحمت پیشنهاد بدید که پین 4 پین هرکدام کدام صفر شد مثلا یک پایه رو یک کنه .ممنون

    $regfile "M32def.dat"
    $crystal = 8000000
    '*********************
    Config Portd = Input
    Config Portb = Output

    Config Lcd = 16 * 2
    Config Lcdbus = 4
    Config Lcdpin = Pin , Rs = Porta.5 , E = Porta.4 , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0

    '*********************
    Dim A1 As Byte , A2 As Byte , A3 As Byte , A4 As Byte
    Pind.0 = A1
    Pind.1 = A2
    Pind.2 = A3
    Pind.3 = A4

    Do
    If A1 = 0 Then
    Set Portb.4 : Waitms 180
    Reset Portb.4
    Waitms 300
    Elseif A2 = 0 Then
    Set Portb.5
    Waitms 300
    Reset Portb.5
    Elseif A3 = 0 Then
    Set Portb.6
    Waitms 300
    Reset Portb.5
    Elseif A4 = 0 Then
    Set Portb.7
    Waitms 300
    Reset Portb.7

    End If
    loop
    اگر دين نداري حداقل آزاده باش <امام حسين (ع)>

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

    سلام
    این خطوط رو تصحیح کنین
    Pind.0 = A1
    Pind.1 = A2
    Pind.2 = A3
    Pind.3 = A4

    تصحیح شده:

    A1=Pind.0
    A2=Pind.1
    A3=Pind.2
    A4=Pind.3
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

    دیدگاه


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

      سلام
      البته باید شکل کلی برنامه به این صورت باشه چون برنامه شما یکبار در ابتدا بیشتر پورت رو نمی خونه

      کد:
      $regfile "M32def.dat"
      $crystal = 8000000
      '*********************
      Config Portd = Input
      Config Portb = Output
      
      Config Lcd = 16 * 2
      Config Lcdbus = 4
      Config Lcdpin = Pin , Rs = Porta.5 , E = Porta.4 , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0
      
      '*********************
      Dim A1 As Byte , A2 As Byte , A3 As Byte , A4 As Byte
      
      Do
      
      A1=Pind.0
      A2=Pind.1
      A3=Pind.2
      A4=Pind.3
      
      If A1 = 0 Then
      Set Portb.4 : Waitms 180
      Reset Portb.4
      Waitms 300
      Elseif A2 = 0 Then
      Set Portb.5
      Waitms 300
      Reset Portb.5
      Elseif A3 = 0 Then
      Set Portb.6
      Waitms 300
      Reset Portb.5
      Elseif A4 = 0 Then
      Set Portb.7
      Waitms 300
      Reset Portb.7
      
      End If
      loop
      در ضمن بهتره برای خواندن یک بیت از بایت استفاده نکنین بلکه از bit
      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

      دیدگاه


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

        خیلی ممنون از کمکتون این کارها که فرمودید انجام میدم نتیجه رو اطلاع میدم .فقط در این مورد که فرمودید a1 تا a4 باید در حلقه اصلی باشه می خواستم بدونم مصلا بعد از هر بار اجرای حلفه مثلا نباید مقادیر متغیر ها صفر بشه یا خالی از مقدار قبلی بشه ؟ممنون
        اگر دين نداري حداقل آزاده باش <امام حسين (ع)>

        دیدگاه


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

          سلام
          شما به ازای هر بار خواندن پورتتون و ریختن مقدار داخل متغییر هاتون داده قبلیتون پاک می شه یعنی هر وقت شما به عملکر انتساب = به متغییری مقداری رو دادین مقدار قبلی پاک می شه و مقدار جدیدی داخل اون وارد می شه چه صفر باشه چه عدد دیگه ای به جز در حالت شرطی مثلا دستور if که فقط می گه "اگر مقدار متغییر برابر فلان مقدار بود" پس مقدارش رو پاک نمی کنه و با مقدار بعد از = چک می کنه

          شما این دستورات مثل هم هستن
          a1=0
          a2=0
          a3=0
          a4=0
          A1=Pind.0
          A2=Pind.1
          A3=Pind.2
          A4=Pind.3

          با
          A1=Pind.0
          A2=Pind.1
          A3=Pind.2
          A4=Pind.3

          اما در دستور ات اولی در حد میکرو ثانیه مقدار متغییر های a1 تا a4 صفر می شن و مقدار جدید رو بعد می گیرن اما در دستورات دوم مقدار قبلی با دریافت مقدار جدید پاک می شه و علاوه بر اینکه در دستورات اول 4 سیکل ماشین کار اضافی انجام شده.
          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

          دیدگاه


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

            با تشکر .فقط یک سوال اگر ما به صورت a1=0 مقدار دهی کنیم میکرو از کجا متوجه میشه ما کدوم پینها رو میخوایم در متغییر بریزیم ؟ و سوال دیگه اینکه استفاده من برای ربات صدا یاب هستش توسط یک مدار ترانزیستورب وقتی میکروفن صدا رو هس میکنه خروجی مدار صفر میشه حالا باید میکرو چک کنه کدوم یکی از میکروفن ها خروجی صفر رو روی یکی از پین ها ایجاد میکنه پس این اسفاده باید a1 تا a4 رو درون حلقه اصلی بزارم دیگه؟ممنون
            اگر دين نداري حداقل آزاده باش <امام حسين (ع)>

            دیدگاه


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

              با تشکر از کمکتون تقریبا درست شد .فقط زمان ها زیاد درست نیست مثلا 3 ثانیه یک بار میشه 1 ثانیه یک بار میشه 4 ثانیه یا مثلا portb.7 روشن میشه و اصلا reset نمیشه یا بعضی وقتا یه پایه که نباید جریان بدیه جریان کم به حالت قطع و وصل سریع میده و متور به طور ناخواسته یکم میچرخه .میشه راهنماییم کنید مشکل کجاست؟ مقاومت در خروجی پینها قرار بدم که جریان های کم رو بگیره؟ممنون
              اگر دين نداري حداقل آزاده باش <امام حسين (ع)>

              دیدگاه

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