اطلاعیه

Collapse
No announcement yet.

سوال برنامه نویسی در بسکام.

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

    سوال برنامه نویسی در بسکام.

    سلام و درود به همه.
    برنامه زیر رو تو محیط بسکام نوشتم ولی جواب نمیده . برنامه شامل یه زیر برنامه به نام main هست که مدام دو پایه c.0 , و c.1 چک میشه و میخام اگه پایه c.0 صفر شد متغیر k برابر 20 و در صورتی که پایه c.1 صفر شد متغیر k برابر 25 بشه و بعد به برچسب label پرش کنه و... ولی نمیدونم کجای برنامه غلطه . :redface: لطفا راهنمایی کنید. :bye
    باتشکر.
    $regfile = "m16def.dat"
    $crystal = 16000000
    Config Porta = Output ,
    Config Portc = Input

    Dim B As Long
    Dim K As Long

    Main:
    Do

    If Pinc.0 = 0 Then
    k = 20
    Goto Label
    End If

    If Pinc.1 = 0 Then
    k = 25
    Goto Label
    End If

    Loop
    End

    '-------------------------------------------
    Label:
    For B = 0 To 6
    Porta = Lookup(b , Ali
    Waitus K

    Next B

    Goto Main

    End
    End
    '---------------------------------------
    Ali:
    Data 216
    Data 181
    Data 147
    Data 216
    Data 181
    Data 147
    Data 145

    #2
    پاسخ : سوال برنامه نویسی در بسکام.

    سلام
    این دوتا end آخر مال چیه ؟
    چرا متغیر byte نیست ؟

    دیدگاه


      #3
      پاسخ : سوال برنامه نویسی در بسکام.

      سلام در اتمگا 16 برای استفاده از پورت c باید فیوز بیت jtag را برنامه ریزی کنید ( غیر فعال شود)
      بعدا یه جمله قشنگ مینویسم

      دیدگاه


        #4
        پاسخ : سوال برنامه نویسی در بسکام.

        نوشته اصلی توسط حمید عباس زاده
        سلام
        این دوتا end آخر مال چیه ؟
        چرا متغیر byte نیست ؟
        k میتونه از نوع بایت باشه ( مهم نیست . با تغییر نوع متغیر k هم به جواب نرسیدم. :sad:.)
        ولی چون تعداد نمونه های جدول look up بیشتر از 256 هست ،باید متغیر b از نوع long باشه.
        end اول مربوط به label و end دوم مربوط به کل برنامه هست.
        نوشته اصلی توسط شهرام کشت پور
        سلام در اتمگا 16 برای استفاده از پورت c باید فیوز بیت jtag را برنامه ریزی کنید ( غیر فعال شود)

        لطفا بیشتر راهنمایی کنید. چون موقع استفاده از پورت c قبلا هیچ مشکلی نداشتم و هیچ فیوزبیتی رو تغییر نمیدادم. احتمالا به طور پیشفرض jtag مربوطه برنامه ریزی شده بوده.

        --------------------------------------------------
        در مورد اینکه چطور متغیر k رو یه بار 20 و یه بار 25 کنم و مقدار waitus در label برابر k باشه بیشتر راهنمایی کنید
        با تشکر.





        دیدگاه


          #5
          پاسخ : سوال برنامه نویسی در بسکام.

          احتمالا goto main رو باید وسط اون دو end ها بذاری . چون هر بار قبل از اینکه حلقه ی for تموم بشه ، در اولین مرحلش به main برمیگرده . end اول مربوط به حلقه فور هستش و دومی مربوط به لیبل

          دیدگاه


            #6
            پاسخ : سوال برنامه نویسی در بسکام.

            نوشته اصلی توسط hadi_hashemi_85
            احتمالا goto main رو باید وسط اون دو end ها بذاری . چون هر بار قبل از اینکه حلقه ی for تموم بشه ، در اولین مرحلش به main برمیگرده . end اول مربوط به حلقه فور هستش و دومی مربوط به لیبل
            تو این قسمت مشکلی نداره.
            مشکلی که هس تو قسمت متغیر k هست. من میخام وقتی کلید c.0 رو زدم فاصله بین ازسال داده ها برابر 20 و وقتی کلید c.1 رو زدم برابر 25 (یا یه چیز خیلی بیشتر که با پروتئوس قابل رویت باشه)باشه. و از این روش استفاده کردم. مسئله اینه که: توی اون قسمت که نوشتم waitus k انگار اصلا مقدار k رو تشخیص نمیده. و موقع زدن هر کدوم از کلیدهای مذکور دتای مربوطه با یه فاصله ثابت ارسال میشن. :eek:

            دیدگاه


              #7
              پاسخ : سوال برنامه نویسی در بسکام.

              آقا پویا شما اون تفاوت 5 میکرو ثانیه رو چه جوری تشخیص میدین . اسیلوسکوپ دارین یا هنوز تو پروتیوس تست میکنین .
              به جای میکرو ثانیه میلی ثانیه هم کردین ببینین چی میشه ؟
              من بسکام بلد نیستم . نکنه با متغیر تو تابع دیلی مشکل داره ؟

              یه کاریم میتونین بکنین . اون k رو 1 و 0 کنین و بیاین تو لیبل شرط بذارین ببینی اگه یکه فلان قدر و اگه صفره فلان قدر wait کنه .

              دیدگاه


                #8
                پاسخ : سوال برنامه نویسی در بسکام.

                end اول مربوط به label و end دوم مربوط به کل برنامه هست.
                end پایان برنامه زیر loop هست پس end دوم اضافه هست. در ضمن lable هم میتونه end نداشته باشه.
                Example

                Dim A As Byte
                Start:
                A = A + 1
                If A < 10 Then ?
                Goto Start
                End If
                Print "Ready" 'that is it

                در ضمن برای فرکانس 16مگا باید از کریستال خارجی استفاده کنی و فیوز بیتش رو عوض کنی ولی پیش فرض فرکانس اتمگا 16 مقدارش 1 مگا هرتز هست

                خوب این برنامه رو هم من توی سیمولاتور بیسکام تست کردم فقط یه پرانتز بسته lookup ارور داد که درستش کردم و هر دو تا end رو پاک کردم.

                :question: حالا سوال من اینه که برنامه توی عملی جواب نمیده یا توی پروتئوس جواب نمیده یا اصلا کامپایل نمیشه . در ضمن pc0 , pc1 ربطی به jtag نداره و pc2 تا pc5 مال jtag هست.
                الکترونیک همه کاره دنیا

                دیدگاه


                  #9
                  پاسخ : سوال برنامه نویسی در بسکام.

                  نوشته اصلی توسط hadi_hashemi_85
                  آقا پویا شما اون تفاوت 5 میکرو ثانیه رو چه جوری تشخیص میدین . اسیلوسکوپ دارین یا هنوز تو پروتیوس تست میکنین .
                  به جای میکرو ثانیه میلی ثانیه هم کردین ببینین چی میشه ؟
                  من بسکام بلد نیستم . نکنه با متغیر تو تابع دیلی مشکل داره ؟

                  یه کاریم میتونین بکنین . اون k رو 1 و 0 کنین و بیاین تو لیبل شرط بذارین ببینی اگه یکه فلان قدر و اگه صفره فلان قدر wait کنه .
                  ممنون اقا هادی بابت راهنماییتون.
                  هم با پروتئوس امتحان کردم هم با اسیلسکوپ ،برای درک تفاوت هم یکی از عددا رو خیلی بزرگتر از دیگری میذارم ولی بازم نمیشه؟؟؟؟؟؟؟ :angry:


                  نوشته اصلی توسط alielec
                  end پایان برنامه زیر loop هست پس end دوم اضافه هست. در ضمن lable هم میتونه end نداشته باشه.
                  Example

                  Dim A As Byte
                  Start:
                  A = A + 1
                  If A < 10 Then ?
                  Goto Start
                  End If
                  Print "Ready" 'that is it

                  در ضمن برای فرکانس 16مگا باید از کریستال خارجی استفاده کنی و فیوز بیتش رو عوض کنی ولی پیش فرض فرکانس اتمگا 16 مقدارش 1 مگا هرتز هست

                  خوب این برنامه رو هم من توی سیمولاتور بیسکام تست کردم فقط یه پرانتز بسته lookup ارور داد که درستش کردم و هر دو تا end رو پاک کردم.

                  :question: حالا سوال من اینه که برنامه توی عملی جواب نمیده یا توی پروتئوس جواب نمیده یا اصلا کامپایل نمیشه . در ضمن pc0 , pc1 ربطی به jtag نداره و pc2 تا pc5 مال jtag هست.
                  کامپایل میشه بدون هیچ اروری.
                  راستش این دیتا ها مربوط به یه صدا هست. که اگر بتونیم این متغیر k رو تغییر بدیم میتونیم ، نت های مختلف رو ایجاد کنیم. قبل از این یه برنامه نوشتم که به ازای فشار هر کلید به یه label مجزا پرش میشد و نت مربوطه شنیده میشد. فرق این label ها فقط تو میزان wait اونا بود.که خیلی خوب هم جواب میداد.

                  ولی حالا فقط یه نوع صدا شنیده میشه. و این یعنی متغیر k اصلا بی معنا بوده.
                  حالا من میخام حجم برنامه رو کم کنم و فقط یه label داشته باشم و متغیر k یا همون مقدار wait رو کنار همون شرط فشرده شدن پایه c.0 و c.1 و c.2 و ... بذارم بعد توی تنها تو یه label از k مربوطه استفاده کنم. :nice:

                  بازم ممنون بابت وقتی که گذاشتید. :smile:


                  دیدگاه


                    #10
                    پاسخ : سوال برنامه نویسی در بسکام.

                    فرکانس اسلاتور رو چیکار کردی؟

                    باید 16 مگا باشه یا 1 مگا

                    اگه 16 مگا هست کریستال خارجی گذاشتی ؟ فیوز بیت ها رو تنظیم کردی؟ :read:
                    الکترونیک همه کاره دنیا

                    دیدگاه


                      #11
                      پاسخ : سوال برنامه نویسی در بسکام.

                      سلام. به help بسکام نگاه کنید.
                      نوشته نمی تونید از متغیر استفاده کنید و فقط باید ثابت بزارید. مقدارش هم از 1-65535 میتونه باشه یعنی از نوع word. شما از long استفاده کردید. ولی احتمالا اگه از متغیر نوع word استفاده کنید جواب میده.

                      دیدگاه


                        #12
                        پاسخ : سوال برنامه نویسی در بسکام.

                        نوشته اصلی توسط alielec
                        فرکانس اسلاتور رو چیکار کردی؟

                        باید 16 مگا باشه یا 1 مگا

                        اگه 16 مگا هست کریستال خارجی گذاشتی ؟ فیوز بیت ها رو تنظیم کردی؟ :read:
                        فعلا هیچ کدوم رو تغییر ندادم. نه اسیلاتور و نه فیوز بیت .چون به نظرم مشکل از اونا نیست.
                        به محض اینکه جواب گرفتم ، توضیحاتشو کامل میدم.

                        دیدگاه


                          #13
                          پاسخ : سوال برنامه نویسی در بسکام.

                          اگه فیوز بیت ها رو اصلا دست نزاشتی
                          $crystal = 1000000
                          کریستال رو مقدار 1 مگا بزار . مقدار پیش فرض میکرو :nerd:
                          الکترونیک همه کاره دنیا

                          دیدگاه

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