اطلاعیه

Collapse
No announcement yet.

سوالات مربوط به برنامه نویسی Bascom

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

    سوالات مربوط به برنامه نویسی Bascom


    با سلام
    چند تا سوال داشتم در ضمینه برنامه نویسی AVR از اساتید برنامه نویس بسکام
    سوال اول:
    چطوری میشه از یک آدرس RAM شروع به پر کردن خانهای حافظه کرد(به بالا یا به پایین)؟
    مثلاً ما در اسمبلی اینطور مینویسیم:
    MOV R0,#30H
    MOV R1,#50
    LOOP:MOV @R0,P1
    INC R0
    DJNZ R1,LOOP
    در مثال بالا دیتای ورودی از پورت 1 خوانده شده و بترتیب از آدرس 30H تا 62H ازخانهای حافظه RAM قرار میگیرد.
    حالا همین کار رو درAVR با زبون بیسیک چطوری میشه انجام داد؟

    سوال دوم:
    آیا بیسیک دستوری داره که بشه کد اسکی در مبنای هگز رو مستقیماً به عدد ده دهی تبدیل کرد؟
    منظورم اعداد اسکی { 30-31-32-33-34-35-36-37-38-39 } هستش که معادل
    ده دهی شون میشن { 0 -1 -2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 }

    از دوستان دیگه هم خواهش میکنم هر کی سوالی داره در مورد برنامه نویسی بسکام ، همین جا مطرح کنند تا همه استفاده کنند.
    متشکرم
    یا حق
    گیرم گلاب ناب شما اصل قمصر است/اما چه سود، حاصل گلآ‌های پرپر است!-از آن زمان که آیینهآ‌گردان شب شُدید*آیینه دل از دَم دوران مکدر است-وقتی بهار، وصله ناجور فصلآ‌هاست*وقتی تبر، مدافع حق صنوبر است-وقتی به دادگاه عدالت، طناب دار*بر صدر میآ‌نشیند و قاضی و داور است-از من مخواه شعرِ تر، ای بیآ‌خبر ز درد!*شعری که خون از آن نچکد ننگ دفتر است!-ای از تبار هرچه سیاهی، سرشتآ‌تان*رنگ جهنم است تمام بهشتآ‌تان
    "گزیده ابیاتی چند از بیداد خراسانی"

    #2
    پاسخ : سوالات مربوط به برنامه نویسی Bascom

    سلام

    1:

    مطمئن نیستم که بیسکام نداشته باشه اما
    شما خیلی راحت میتونید از دستورات اسمبلی در بیسکام استفاده کنید

    Asm
    کد اسمبلی
    End Asm

    2:
    میتونید خودتون عدد 30 رو از مقدار اسکی کم کنید و عدد رو بدست بیارید

    ِِDie for Life, Not Live to Die
    Freedom Fighter
    " ناخود گاه، هريك از ما ، از ناميرائي خود يقين دارد " . فروید

    دیدگاه


      #3
      پاسخ : سوالات مربوط به برنامه نویسی Bascom

      سلام

      با دستور Writeeeprom می تونی آدرس شروع حافظه رو مشخص کنی .

      دیدگاه


        #4
        پاسخ : سوالات مربوط به برنامه نویسی Bascom

        سلام. ببین اینا بدردت می خورن...




        INP

        Action

        Returns a byte read from a hardware port or any internal or external memory location.




        Syntax

        var = INP(address)

        var
        Numeric variable that receives the value.

        address
        The address where to read the value from. (0- &HFFFF)


        The PEEK() function will read only the lowest 32 memory locations (registers).

        The INP() function can read from any memory location since the AVR has a linear memory model.




        When you want to read from XRAM memory you must enable external memory access in the Compiler Chip Options.

        Example

        '-----------------------------------------------------------------------------------------

        'name : peek.bas

        'copyright : (c) 1995-2005, MCS Electronics

        'purpose : demonstrates PEEk, POKE, CPEEK, INP and OUT

        'micro : Mega162

        'suited for demo : yes

        'commercial addon needed : no

        '-----------------------------------------------------------------------------------------




        $regfile = "m162def.dat" ' specify the used micro

        $crystal = 4000000 ' used crystal frequency

        $baud = 19200 ' use baud rate

        $hwstack = 32 ' default use 32 for the hardware stack

        $swstack = 10 ' default use 10 for the SW stack

        $framesize = 40 ' default use 40 for the frame space




        Dim I As Integer , B1 As Byte

        'dump internal memory

        For I = 0 To 31 'only 32 registers in AVR

        B1 = Peek(i) 'get byte from internal memory

        Print Hex(b1) ; " ";

        'Poke I , 1 'write a value into memory

        Next

        Print 'new line

        'be careful when writing into internal memory !!




        'now dump a part ofthe code-memory(program)

        For I = 0 To 255

        B1 = Cpeek(i) 'get byte from internal memory

        Print Hex(b1) ; " ";

        Next

        'note that you can not write into codememory!!




        Out &H8000 , 1 'write 1 into XRAM at address 8000

        B1 = Inp(&H8000) 'return value from XRAM

        Print B1




        End
        ----------------------------------------------------------------------------------------------------------------------------------------------------------

        OUT

        Sends a byte to a hardware port or internal or external memory address.

        Syntax

        OUT address, value

        Address
        The address where to send the byte to in the range of 0-FFFF hex.

        Value
        The variable or value to output.

        The OUT statement can write a value to any AVR memory location.


        It is advised to use Words for the address. An integer might have a negative value and will write of course to a word address. So it will be 32767 higher as supposed. This because an integer has it's most significant bit set when it is negative.


        To write to XRAM locations you must enable the External RAM access in the Compiler Chip Options.

        You do not need to use OUT when setting a port variable. Port variables and other registers of the micro can be set like this : PORTB = value , where PORTB is the name of the register.

        Example

        Out &H8000 , 1 'send 1 to the databus(d0-d7) at hex address 8000

        End


        دیدگاه


          #5
          پاسخ : سوالات مربوط به برنامه نویسی Bascom

          خوب دیگه فرق زبان های برنامه نویسی سطح بالا مانند بیسیک و سطح پایین مثل اسمبلی در اینه .

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

          در مورد سوال دوم هم حرف آقا چیا تائیید میشه ولی بهترین راه استفاده از زیر رول string to hex و کم کردن مقدار 30 از اوننه . این زیر رول آماده هست با دستور $extenal میتونی لینک بدی

          همین :redface:

          دیدگاه


            #6
            پاسخ : سوالات مربوط به برنامه نویسی Bascom

            با اجازه از پیشکسوتان
            فکر میکنم دستور romstart=address$ برای همین منظوره . میتونید با این دستور برنامتونو از ادرس دلخواهی در flashrom قرار بدید اگر از این دستور استفاده نشه بطور پیشفرض از ادرس h0000& شروع به پر کردن میکنه
            چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

            دیدگاه


              #7
              پاسخ : سوالات مربوط به برنامه نویسی Bascom

              با سلام
              با تشکر از افشین جان وراهنماییش کارم راه افتاد با همون دستورات { INP , OUT }دقیقاً همون کاری رو که میخواستم انجام بدم ، انجام شد. :applause: :wow:
              از میکلای عزیز هم ممنونم ولی باید ببینم چطوری میشه کار کرد با دستوری که شما معرفی کردین.
              از همه متشکرم وهمچنین از مدیران سایت
              موفق باشید
              یا حق
              گیرم گلاب ناب شما اصل قمصر است/اما چه سود، حاصل گلآ‌های پرپر است!-از آن زمان که آیینهآ‌گردان شب شُدید*آیینه دل از دَم دوران مکدر است-وقتی بهار، وصله ناجور فصلآ‌هاست*وقتی تبر، مدافع حق صنوبر است-وقتی به دادگاه عدالت، طناب دار*بر صدر میآ‌نشیند و قاضی و داور است-از من مخواه شعرِ تر، ای بیآ‌خبر ز درد!*شعری که خون از آن نچکد ننگ دفتر است!-ای از تبار هرچه سیاهی، سرشتآ‌تان*رنگ جهنم است تمام بهشتآ‌تان
              "گزیده ابیاتی چند از بیداد خراسانی"

              دیدگاه


                #8
                پاسخ : سوالات مربوط به برنامه نویسی Bascom

                با سلام حضور مهندسین
                من میخواستم با یک مگا32 ،50تا لامپ دوازده ولتو فرمان بدم!که مثلا کد یک هگز را نشون بدهند(یعنی در آن واحد همه یک فرمان را اجرا کنند)
                مثلا برای هشتا داریم 00110011 یعنی دوتا در میان روشن خاموش...درسته؟
                برای 50 تا لامپ چیکار باید کرد؟؟
                از دیکدر میشه؟چون میخوام همه در یک لحظه روشن شوند حتی تاخیر یک نانو ثانیه هم برای دسته ای از لامپها جایز نیست

                دیدگاه


                  #9
                  پاسخ : سوالات مربوط به برنامه نویسی Bascom

                  نوشته اصلی توسط a23723m
                  با سلام حضور مهندسین
                  من میخواستم با یک مگا32 ،50تا لامپ دوازده ولتو فرمان بدم!که مثلا کد یک هگز را نشون بدهند(یعنی در آن واحد همه یک فرمان را اجرا کنند)
                  مثلا برای هشتا داریم 00110011 یعنی دوتا در میان روشن خاموش...درسته؟
                  برای 50 تا لامپ چیکار باید کرد؟؟
                  از دیکدر میشه؟چون میخوام همه در یک لحظه روشن شوند حتی تاخیر یک نانو ثانیه هم برای دسته ای از لامپها جایز نیست
                  سلام
                  می تونید از آی سی های لچ استفاده کنید .

                  دیدگاه


                    #10
                    پاسخ : سوالات مربوط به برنامه نویسی Bascom

                    ممنون ولی آقا یکم توضیح :read:
                    نحوه اتصال
                    نحوه کارکردش
                    اسمش
                    و
                    وو
                    ووو
                    ؟؟؟؟

                    دیدگاه


                      #11
                      پاسخ : سوالات مربوط به برنامه نویسی Bascom

                      سلام
                      دوست عزیز 74373 دیتا شیتش رو از لینک زیر بگیر کاملا متوجه می شوید باید چی کار کنید:
                      http://www.datasheetcatalog.com/datasheets_pdf/7/4/L/S/74LS373.shtml

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

                      دیدگاه


                        #12
                        پاسخ : سوالات مربوط به برنامه نویسی Bascom

                        gggبا سلام
                        میشه بگین اولیت برنامه نویسی در بسکام رو چه جوری تعیین می کنن؟

                        دیدگاه


                          #13
                          پاسخ : سوالات مربوط به برنامه نویسی Bascom

                          نوشته اصلی توسط mamal18
                          gggبا سلام
                          میشه بگین اولیت برنامه نویسی در بسکام رو چه جوری تعیین می کنن؟
                          اولویت چی دوست عزیز؟شما بگید میخواید چیکار کنید؟ منظور شما وقفه ها و تایمرها هستند؟

                          دیدگاه


                            #14
                            پاسخ : سوالات مربوط به برنامه نویسی Bascom

                            سلام
                            من دارم یه ربات ماز می سازم ببیند وقتی ربات را روی مسیر میزارم با توجه به الگوریتمس که براش نوشتم به پایان مسیر میره ولی برای اینکه بار دوم ریست کردم و مسیرهای اشتباه رو نره باید چیکار کنم ممنون میشم راهنمائیم کنین

                            دیدگاه


                              #15
                              پاسخ : سوالات مربوط به برنامه نویسی Bascom

                              سلام بچه ها کمک کنید من دارم یه الگوریتم می نویسیم با توجه به شکل زیر دچار مشکل شدم ممنون می شم کمکم کنید
                              با توجه به شکل زیر البته شکل فرضیه من می خوام که اولویت چپ رو داشته باشه نه راست
                              حالا میخوام یه برنامه بنویسم که و قتی به نقطه x1 یعنی چهار راه اول رسید به متغیر a یه واحد اضافه کنه و وقتی به نقطه x2 چهار راه دوم رسید یه واحد به متغیر b اضافه کنه
                              اگه دقت کنید برای اینکه ربات به خط پایان برسه از x1 سه بار عبور می کنه و متغیر x2 چهار بار یعنی متغیر a=3 و متغیر b=4
                              حالا می خوام بدون استفاده از انکودر ربات تشخیص بده که به چه متغیری باید یک واحد اضافه کنه که مثلا بشه 50 تا متغیر جداگانه تعریف کرد واسه هر نقطه
                              من با بیسیک برنامه می نویسم
                              کمک کنید لطفا
                              با تشکر
                              http://mamal18.persiangig.com/untitled.JPG

                              دیدگاه

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