اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام دوستان من تازه شروع به یادگیری avr با زبان **** کردم ..یه برنامه نوشتم که از دستور if توش استفاده شده ..کارشم اینه که سه تا کلید پوش باتون داریم هر کلید را که فشار بدیم 8 led متصل به میکرو به یک حالت خاص چشمک بزنند ..همه چی درست کار میکنه بجز اینکه اگر کلید اول زده بشه led ها شروع به چشمک میکنند همون موقع اگر کلید دوم را بزنیم حالت دوم در حالی اجرا میشه که حالت اول به کار خودش داره ادامه میده....حالا اگه میشه بگید چی کار کنم که بعد از اینکه هر کلید را زدیم حالت قبل متوقف بشه ..ممنون...اینم برنامه .

    $regfile = "m32def.dat"
    $crystal = 8000000
    Config Pina.0 = Input
    Config Pina.1 = Input
    Config Pina.2 = Input
    Config Portb = Output

    Do
    If Pina.0 = 1 Then
    Set Portb.0
    Waitms 200
    Reset Portb.0
    Waitms 200
    Reset Portb.1
    Waitms 200
    Set Portb.2
    Waitms 200
    Reset Portb.2
    Waitms 200
    Reset Portb.3
    Waitms 200
    Set Portb.4
    Waitms 200
    Reset Portb.4
    Waitms 200
    Reset Portb.5
    Waitms 200
    Set Portb.6
    Waitms 200
    Reset Portb.6
    Waitms 200
    Reset Portb.7
    Waitms 200
    End If
    If Pina.1 = 1 Then
    Set Portb.0
    Set Portb.1
    Set Portb.2
    Set Portb.3
    Waitms 200
    End If
    If Pina.2 = 1 Then
    Set Portb.4
    Waitms 200
    Reset Portb.4
    Waitms 200
    Reset Portb.5
    Waitms 200
    Set Portb.6
    Waitms 200
    Reset Portb.6
    Waitms 200
    Reset Portb.7
    End If
    Loop
    End





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

    با درود . . .

    برنامت خیلی پیچیده شده
    یه مدل ساده برات نوشتم
    سعی کن از این استفاده کنی:
    $regfile = "m32def.dat"
    $crystal = 8000000

    Ddra.0 = 0 : Porta.0 = 1
    Ddra.1 = 0 : Porta.1 = 1
    Ddra.2 = 0 : Porta.2 = 1

    S1 Alias Pina.0
    S2 Alias Pina.2
    S3 Alias Pina.3

    Config Portb = Output

    Do

    If Pina.0 = 0 Then ' OR if s1=0 then
    Do
    Portb = &B10101010
    Waitms 200
    Portb = &B01010101
    Waitms 200
    Loop
    End If


    If Pina.1 = 0 Then ' OR if s2=0 then
    Do
    Portb = &B11110000
    Waitms 200
    Portb = &B00001111
    Waitms 200
    Loop
    End If


    If Pina.2 = 0 Then ' OR if s2=0 then
    Portb = &B10000000
    Do
    Waitms 200
    Rotate Portb , Right
    Loop
    End If

    Loop

    End


    بدرود . . .

    درد من تنهایی نیست؛ بلكه مرگ ملتی است كه گدایی را قناعت، بی‏عرضگی را صبر، و با تبسمی بر لب این حماقت را حكمت خداوند می‏ نامند! "گاندی"

    به دلیل وجود برخی مشکلات و بی احترامی ها این اکانت رو غیر فعال کردم. همیشه سر بلند باشید.
    بدرود . . .

    دیدگاه


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

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

      دیدگاه


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

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


        Do

        If Pina.0 = 0 Then ' OR if s1=0 then
        Do
        Portb = &B10101010
        Waitms 200
        Portb = &B01010101
        Waitms 200
        Loop Until Pina.1 = 0
        End If


        If Pina.1 = 0 Then ' OR if s2=0 then
        Do
        Portb = &B11110000
        Waitms 200
        Portb = &B00001111
        Waitms 200
        Loop Until Pina.2 = 0
        End If


        If Pina.2 = 0 Then ' OR if s2=0 then
        Portb = &B10000000
        Do
        Waitms 200
        Rotate Portb , Right
        Loop Until Pina.0 = 0
        End If

        Loop

        End

        :wow:

        دیدگاه


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

          سلام
          البته میتونستی با دستور
          goto Lable هم مشکل برنامتو برطرف کنی
          اگه زمانی خواستی بگو برات برنامشو بنویسم
          mer30

          دیدگاه


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


            مرسی از راهنمایی شما ....اگه میشه یه توضیح بدید چطوری میشه با این دستور کار کرد..

            دیدگاه


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

              سلام ببین این چطوره؟
              config port a =input
              config port b=output

              main:
              do
              if porta.1=1 then: goto a1 : end if
              if porta.2=1 then : goto a2 :end if
              if porta.3=1 then : goto a3: end if
              waitms 100
              loop

              a1:
              portb=&B10101010 :goto main

              a2:
              portb=&B10100011 :goto main

              a3:
              portb=&B11101011 :goto main
              end
              mer30

              دیدگاه


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

                سلام دوست عزیز من این روشی که شما گفتید رو امتحان کردم...باز هم مشکلی که در بالا گفتم وجود داشت یعنی برنامه فقط یک کلید را قبول میکرد ..ولی یکم جستو جو کردم فهمیدم که باید از دستور or بعد از loop until استفاده کنم به این شکل:
                Porta.0 = 1
                Porta.1 = 1
                Porta.2 = 1



                Config Portb = Output

                Do

                If Pina.0 = 0 Then
                Do
                Portb = &B10101010
                Waitms 200
                Portb = &B01010101
                Waitms 200
                Loop Until Pina.1 = 0 Or Pina.2 = 0
                End If


                If Pina.1 = 0 Then
                Do
                Portb = &B11110000
                Waitms 200
                Portb = &B00001111
                Waitms 200
                Loop Until Pina.2 = 0 Or Pina.0 = 0
                End If


                If Pina.2 = 0 Then
                Portb = &B10000000
                Do
                Waitms 200
                Rotate Portb , Right
                Waitms 200
                Loop Until Pina.0 = 0 Or Pina.1 = 0
                End If

                Loop

                End

                این قسمت Loop Until Pina.0 = 0 Or Pina.1 = 0 باعث میشه که در صورتی که کاربر هر کلید را هر زمانی بزنه برنامه عمل بکنه......بازم ممنون.

                دیدگاه


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

                  برادر میشه لطفا یه شماتیک از همین مداری که درست میکنی رو ببینم؟؟؟؟؟؟؟ :agree: :agree: :agree: :agree: :agree: :agree:
                  mer30

                  دیدگاه

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