اطلاعیه

Collapse
No announcement yet.

مشکل جمع و ضرب چند متغیر (بیسکام AVR)

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

    مشکل جمع و ضرب چند متغیر (بیسکام AVR)

    با سلام

    من برنامه ای نوشتم که یک صفحه کلید 4X4 (کیپد) را اسکن میکنه و مقدار هگز ورودی (خوانده شده از دکمه کیپد) رو برابر با متغییرهای E الی N قرار می دهد من می خواهم این 11 متغیر را داخل یک متغیر قرار بدم و انرا توسط دستور lcd روی lcd نمایش دهم
    قسمتی از برنامه که مربوط به معرفی متغیرها و جمع و ضرب برای تبدیل 11 عدد موجود در 11 متغییر به یک 11 رقمی و قرار دادن داخل یک متغیر بنام Number را در زیر گذاشتم

    حال اینکه مشکل من در کامپایل این برنامه هست و در خطوط ضرب و جمع نرم افزار بیسکام خطا میده از نظر شما مشکل چیست؟؟ (البته قسمت اسکن کیپد بخاطر طولانی بودنش در زیر نگذاشتم)

    کد:
    Dim Ab As Single
    Dim Ac As Single
    Dim Ad As Single
    Dim Ae As Single
    Dim Af As Single
    Dim Ag As Single
    Dim Ah As Single
    Dim Ai As Single
    Dim Aj As Single
    Dim Ak As Single
    Dim Al As Single
    Dim Number As Single
     
    Dim E As Byte
    Dim F As Byte
    Dim G As Byte
    Dim H As Byte
    Dim I As Byte
    Dim J As Byte
    Dim K As Byte
    Dim L As Byte
    Dim M As Byte
    Dim N As Byte
    Dim X1 As Single
    Dim X2 As Single
    Dim X3 As Single
    Dim X4 As Single
    Dim X5 As Single
    Dim X6 As Single
    Dim X7 As Single
    Dim X8 As Single
    Dim X9 As Single
    Dim Xx As Single
    
     Main1:
      Xx = E * 10000000000
      X9 = F * 1000000000
      X8 = G * 100000000
      X7 = H * 10000000
      X6 = I * 1000000
      X5 = J * 100000
      X4 = K * 10000
      X3 = L * 1000
      X2 = M * 100
      X1 = N * 10
      Ab = Xx + X9
      Ac = X8 + X7
      Ad = X6 + X5
      Ae = X4 + X3
      Af = X2 + X1
      Ag = X1 + O
      Ah = Ab + Ac
      Ai = Ah + Ad
      Aj = Ai + Ae
      Ak = Aj + Af
      Al = Ak + Ag
      Number = Aj + O

    #2
    پاسخ : مشکل جمع و ضرب چند متغیر (بیسکام AVR)

    سلام
    متغیرها رو به نوع Double تغییر بده ببین درست می شه.
    موفق باشی

    دیدگاه


      #3
      پاسخ : مشکل جمع و ضرب چند متغیر (بیسکام AVR)

      من تست کردم خطا نداد
      فقط این خط رو یادت رفته بود
      dim o as byte
      اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

      دیدگاه


        #4
        پاسخ : مشکل جمع و ضرب چند متغیر (بیسکام AVR)

        نوشته اصلی توسط saeed bagherani
        من تست کردم خطا نداد
        فقط این خط رو یادت رفته بود
        dim o as byte
        من در برنامه متغیر O رو تعریف کرده بودم
        چون برنامه رو خلاصه کردم و در این تاپیک ارسال کرده بودم از قلم افتاده بود
        در ضمن شما عینا همین برنامه منو کمپایل کردید که خطا نداشت یا چیزی به ان افزودید؟
        در صورت تغییر دادن برنامه، برنامه رو در اینجا ارسال کنید

        نوشته اصلی توسط _e_
        سلام
        متغیرها رو به نوع Double تغییر بده ببین درست می شه.
        موفق باشی
        منظورتون رو از Double متوجه نمیشم لطفا واضح تر بفرمایید

        دیدگاه


          #5
          پاسخ : مشکل جمع و ضرب چند متغیر (بیسکام AVR)

          کد برنامه درست هست


          کد:
               $regfile = "m8def.dat"                   'ATMega 8, change if using different processors
          $crystal = 800000
          Dim Ab As Single
          Dim O As Single
          Dim Ac As Single
          Dim Ad As Single
          Dim Ae As Single
          Dim Af As Single
          Dim Ag As Single
          Dim Ah As Single
          Dim Ai As Single
          Dim Aj As Single
          Dim Ak As Single
          Dim Al As Single
          Dim Number As Single
          
          Dim E As Byte
          Dim F As Byte
          Dim G As Byte
          Dim H As Byte
          Dim I As Byte
          Dim J As Byte
          Dim K As Byte
          Dim L As Byte
          Dim M As Byte
          Dim N As Byte
          Dim X1 As Single
          Dim X2 As Single
          Dim X3 As Single
          Dim X4 As Single
          Dim X5 As Single
          Dim X6 As Single
          Dim X7 As Single
          Dim X8 As Single
          Dim X9 As Single
          Dim Xx As Single
              Do
          
           Main1:
           Xx = E * 10000000000
           X9 = F * 1000000000
           X8 = G * 100000000
           X7 = H * 10000000
           X6 = I * 1000000
           X5 = J * 100000
           X4 = K * 10000
           X3 = L * 1000
           X2 = M * 100
           X1 = N * 10
           Ab = Xx + X9
           Ac = X8 + X7
           Ad = X6 + X5
           Ae = X4 + X3
           Af = X2 + X1
           Ag = X1 + O
           Ah = Ab + Ac
           Ai = Ah + Ad
           Aj = Ai + Ae
           Ak = Aj + Af
           Al = Ak + Ag
           Number = Aj + O
           Loop : End


          منظورتون رو از Double متوجه نمیشم لطفا واضح تر بفرمایید
          دابل هم یک نوع از متقیر هاست که میتونه اعداد رو به همراه مقدار زیادی دنباله اعشاری تو خودش ذخیره کنه .
          مثلا
          dim a as double
          10.123456789

          دیدگاه


            #6
            پاسخ : مشکل جمع و ضرب چند متغیر (بیسکام AVR)

            من متغیرها رو به Double تغییر دادم و خواستم کامپایلش کنم که خطا داد

            من برنامه رو به طور کامل در زیر میگذارم لطفا بررسی کنید که مشکلش چیه
            فقط اینکه باید میکرو مگا8 باشه و کیپد و ال سی دی 2*16 به پورت های C و D متصل شوند پورت B برای کارهای دیگه اشغاله

            کد:
            $regfile = "m8def.dat"
            $crystal = 8000000
            Config Kbd = Portd
            Config Lcd = 16 * 2
            
            Dim Ab As Single
            Dim Ac As Single
            Dim Ad As Single
            Dim Ae As Single
            Dim Af As Single
            Dim Ag As Single
            Dim Ah As Single
            Dim Ai As Single
            Dim Aj As Single
            Dim Ak As Single
            Dim Al As Single
            Dim Number As Single
            
            Dim A As Byte
            Dim B As Byte
            Dim C As Byte
            Dim Shi As Byte
            Dim E As Byte
            Dim F As Byte
            Dim G As Byte
            Dim H As Byte
            Dim I As Byte
            Dim J As Byte
            Dim K As Byte
            Dim L As Byte
            Dim M As Byte
            Dim N As Byte
            Dim O As Byte
            Dim P As Byte
            
            Dim X1 As Single
            Dim X2 As Single
            Dim X3 As Single
            Dim X4 As Single
            Dim X5 As Single
            Dim X6 As Single
            Dim X7 As Single
            Dim X8 As Single
            Dim X9 As Single
            Dim Xx As Single
            
            Shi = 10
            
             Maine:
             Cls
             Lcd "Dial Number:"
             Locate 2 , 1
             Cursor Blink
             Mmain:
             Do
             Waitms 50
             B = Getkbd()
              If B < 16 Then
               Goto Main
              End If
             Loop
             Main:
             Do
              If B = 0 Then
              Reset B
              C = 1
              Goto Main2
              End If
              If B = 4 Then
              Reset B
              C = 2
              Goto Main2
              End If
              If B = 8 Then
              Reset B
              C = 3
              Goto Main2
              End If
              If B = 1 Then
              Reset B
              C = 4
              Goto Main2
              End If
              If B = 5 Then
              Reset B
              C = 5
              Goto Main2
              End If
              If B = 9 Then
              Reset B
              C = 6
              Goto Main2
              End If
              If B = 2 Then
              Reset B
              C = 7
              Goto Main2
              End If
              If B = 6 Then
              Reset B
              C = 8
              Goto Main2
              End If
              If B = 10 Then
              Reset B
              C = 9
              Goto Main2
              End If
              If B = 11 Then
              Reset B
              C = 12
              Goto Main2
              End If
              If B = 7 Then
              Reset B
              C = 0
              Goto Main2
              End If
              If B = 3 Then
              Reset B
              C = 11
              Goto Main2
              End If
              If B = 12 Then
              Reset B
              C = 13
              Goto F1
              End If
              If B = 13 Then
              Reset B
              C = 14
              Goto F2
              End If
              If B = 14 Then
              Reset B
              C = 15
              Goto F3
              End If
              If B = 15 Then
              Reset B
              C = 16
              Goto F4
              End If
             Loop
            
             Main2:
              If C = 11 Then
              Goto Main11
              End If
              If C = 12 Then
              Goto Main12
              End If
              If C = 13 Then
              Goto F1
              End If
              If C = 14 Then
              Goto F2
              End If
              If C = 15 Then
              Goto F3
              End If
              If C = 16 Then
              Goto F4
              End If
              If C < 11 Then
              Goto Main3
              End If
            
             Main3:
              If C < 11 And C <> 3 And Shi = 10 Then
              E = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 1
              Lcd E
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 9 Then
              F = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 2
              Lcd F
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 8 Then
              G = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 3
              Lcd G
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 7 Then
              H = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 4
              Lcd H
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 6 Then
              I = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 5
              Lcd I
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 5 Then
              J = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 6
              Lcd J
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 4 Then
              K = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 7
              Lcd K
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 3 Then
              L = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 8
              Lcd L
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 2 Then
              M = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 9
              Lcd M
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 1 Then
              N = C
              Reset C
              Decr Shi
              Cls
              Locate 2 , 10
              Lcd N
              Goto Mmain
            
              If C < 11 And C <> 3 And Shi = 0 Then
              O = C
              Reset C
              Shi = 10
              Cls
              Locate 2 , 11
              Lcd O
              Goto Mmain
            
             Main4:
              Xx = E * 10000000000
              X9 = F * 1000000000
              X8 = G * 100000000
              X7 = H * 10000000
              X6 = I * 1000000
              X5 = J * 100000
              X4 = K * 10000
              X3 = L * 1000
              X2 = M * 100
              X1 = N * 10
            
              Ab = Xx + X9
              Ac = X8 + X7
              Ad = X6 + X5
              Ae = X4 + X3
              Af = X2 + X1
              Ag = X1 + O
            
              Ah = Ab + Ac
              Ai = Ah + Ad
              Aj = Ai + Ae
              Ak = Aj + Af
              Al = Ak + Ag
              Number = Aj + O
             Main11:
             Cls
             Reset E
             Reset F
             Reset G
             Reset H
             Reset I
             Reset J
             Reset K
             Reset L
             Reset M
             Reset N
             Reset O
            Goto Maine
            
            Main12:
            Locate 2 , 1
            Lcd Number
            End Sub
            
            F1:
            Cls
            Lcd "F1"
            Locate 2 , 1
            Lcd "12345678998"
            Gosub Maine
            F2:
            Cls
            Lcd "F2"
            Locate 2 , 1
            Lcd "12345678998"
            Gosub Maine
            F3:
            Cls
            Lcd "F3"
            Locate 2 , 1
            Lcd "12345678998"
            Gosub Maine
            
            F4:
            Cls
            Lcd "F4"
            Locate 2 , 1
            Lcd "12345678998"
            Gosub Maine
            
            End

            دیدگاه


              #7
              پاسخ : مشکل جمع و ضرب چند متغیر (بیسکام AVR)

              من برنامه رو نخوندم. فقط کامپایل کردم. یه جا END SUB گذاشته بودی در حالی که اصلا هیچ زیر برنامه ای تعریف نکردی .
              و خیلی جاها IF گذاشتی ولی براشون END IF آ‌در نظر نگرفتی .
              دوباره چک کن برنامتو

              دیدگاه


                #8
                پاسخ : مشکل جمع و ضرب چند متغیر (بیسکام AVR)

                من برنامه شما رو چک کردم
                همون طور که آقا حامد گفتند ایرادات if زیاد داشت
                و در سمت های زیر برنامه از دستور return استفاده نکردی
                ولی فکر می کنم ایراد کلی زیاد داشته باشه
                اینم متن برنامه تصحیح شده که کامپایلر خطا نمیگیره . . . .


                ' in the name of god
                $regfile = "m8def.dat"
                $crystal = 8000000

                $hwstack = 64
                $swstack = 32
                $framesize = 64

                Config Kbd = Portd , Debounce = 20 , Delay = 30
                ' Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
                Config Lcd = 16 * 2
                Display On
                Cursor Off

                Dim Ab As Single
                Dim Ac As Single
                Dim Ad As Single
                Dim Ae As Single
                Dim Af As Single
                Dim Ag As Single
                Dim Ah As Single
                Dim Ai As Single
                Dim Aj As Single
                Dim Ak As Single
                Dim Al As Single
                Dim Number As Single

                Dim A As Byte
                Dim B As Byte
                Dim C As Byte
                Dim Shi As Byte
                Dim E As Byte
                Dim F As Byte
                Dim G As Byte
                Dim H As Byte
                Dim I As Byte
                Dim J As Byte
                Dim K As Byte
                Dim L As Byte
                Dim M As Byte
                Dim N As Byte
                Dim O As Byte
                Dim P As Byte

                Dim X1 As Single
                Dim X2 As Single
                Dim X3 As Single
                Dim X4 As Single
                Dim X5 As Single
                Dim X6 As Single
                Dim X7 As Single
                Dim X8 As Single
                Dim X9 As Single
                Dim Xx As Single

                Shi = 10

                Maine:
                Cls
                Lcd "Dial Number:"
                Locate 2 , 1
                Cursor Blink
                Mmain:
                Do
                B = Getkbd()
                If B < 16 Then
                Goto Main
                End If
                Loop
                Main:
                Do
                If B = 0 Then
                Reset B
                C = 1
                Goto Main2
                End If
                If B = 4 Then
                Reset B
                C = 2
                Goto Main2
                End If
                If B = 8 Then
                Reset B
                C = 3
                Goto Main2
                End If
                If B = 1 Then
                Reset B
                C = 4
                Goto Main2
                End If
                If B = 5 Then
                Reset B
                C = 5
                Goto Main2
                End If
                If B = 9 Then
                Reset B
                C = 6
                Goto Main2
                End If
                If B = 2 Then
                Reset B
                C = 7
                Goto Main2
                End If
                If B = 6 Then
                Reset B
                C = 8
                Goto Main2
                End If
                If B = 10 Then
                Reset B
                C = 9
                Goto Main2
                End If
                If B = 11 Then
                Reset B
                C = 12
                Goto Main2
                End If
                If B = 7 Then
                Reset B
                C = 0
                Goto Main2
                End If
                If B = 3 Then
                Reset B
                C = 11
                Goto Main2
                End If
                If B = 12 Then
                Reset B
                C = 13
                Goto F1
                End If
                If B = 13 Then
                Reset B
                C = 14
                Goto F2
                End If
                If B = 14 Then
                Reset B
                C = 15
                Goto F3
                End If
                If B = 15 Then
                Reset B
                C = 16
                Goto F4
                End If
                Loop

                Main2:
                If C = 11 Then
                Goto Main11
                End If
                If C = 12 Then
                Goto Main12
                End If
                If C = 13 Then
                Goto F1
                End If
                If C = 14 Then
                Goto F2
                End If
                If C = 15 Then
                Goto F3
                End If
                If C = 16 Then
                Goto F4
                End If
                If C < 11 Then
                Goto Main3
                End If

                Main3:
                If C < 11 And C <> 3 And Shi = 10 Then
                E = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 1
                Lcd E
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 9 Then
                F = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 2
                Lcd F
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 8 Then
                G = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 3
                Lcd G
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 7 Then
                H = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 4
                Lcd H
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 6 Then
                I = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 5
                Lcd I
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 5 Then
                J = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 6
                Lcd J
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 4 Then
                K = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 7
                Lcd K
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 3 Then
                L = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 8
                Lcd L
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 2 Then
                M = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 9
                Lcd M
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 1 Then
                N = C
                Reset C
                Decr Shi
                Cls
                Locate 2 , 10
                Lcd N
                Goto Mmain
                End If
                If C < 11 And C <> 3 And Shi = 0 Then
                O = C
                Reset C
                Shi = 10
                Cls
                Locate 2 , 11
                Lcd O
                Goto Mmain
                End If
                Main4:
                Xx = E * 10000000000
                X9 = F * 1000000000
                X8 = G * 100000000
                X7 = H * 10000000
                X6 = I * 1000000
                X5 = J * 100000
                X4 = K * 10000
                X3 = L * 1000
                X2 = M * 100
                X1 = N * 10

                Ab = Xx + X9
                Ac = X8 + X7
                Ad = X6 + X5
                Ae = X4 + X3
                Af = X2 + X1
                Ag = X1 + O

                Ah = Ab + Ac
                Ai = Ah + Ad
                Aj = Ai + Ae
                Ak = Aj + Af
                Al = Ak + Ag
                Number = Aj + O
                Main11:
                Cls
                Reset E
                Reset F
                Reset G
                Reset H
                Reset I
                Reset J
                Reset K
                Reset L
                Reset M
                Reset N
                Reset O
                Goto Maine

                Main12:
                Locate 2 , 1
                Lcd Number

                F1:
                Cls
                Lcd "F1"
                Locate 2 , 1
                Lcd "12345678998"
                Gosub Maine
                F2:
                Cls
                Lcd "F2"
                Locate 2 , 1
                Lcd "12345678998"
                Gosub Maine
                F3:
                Cls
                Lcd "F3"
                Locate 2 , 1
                Lcd "12345678998"
                Gosub Maine

                F4:
                Cls
                Lcd "F4"
                Locate 2 , 1
                Lcd "12345678998"
                Gosub Maine

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

                دیدگاه


                  #9
                  پاسخ : مشکل جمع و ضرب چند متغیر (بیسکام AVR)

                  شما بایدنوع عددها رو تغییر بدید
                  منظورم اینه که نباید single تعریف بشن چون عدد 10 یا 11 رقمی رو نمیگیره
                  behi

                  دیدگاه

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