اطلاعیه

Collapse
No announcement yet.

اموزش درست کردن کتابخانه برای بسکام

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

    اموزش درست کردن کتابخانه برای بسکام

    سلام دوستان
    خیلی ها دنبال اموزش درست کردن کتابخانه برای بسکام نیاز دارند خودم هم نیاز داشتم که پیداش کردم گفتم بزارم که شما هم استفاده کنید
    مطالب این تایپ مربوط به تایپ این می باشد
    http://www.eca.ir/forum2/index.php?topic=29360.0

    نقل قول از alitaroosheh
    سلام

    من توی بحث پخش AVI یه لایبری برای بیسیک نوشتم خیلی با مزست :mrgreen: بیچاره میکنه تا راه بیافته

    1. باید کاملا به اسمبلی avr مسلط باشید
    2. یکم با نحوه کار کردن زبانهای سطح بالا از دید زبان اسمبلی آشنا باشید (یکم یعنی خیلی خیلی)

    3. برید توی help بیسکام و Creating your own LIB file رو سرچ کنید یه توضیحاتی داده که همه چیز هست ولی تا حد امکان خلاصه
    توش توضیح داده مثلا یه داده ورودی byref چطوری توی زیر برنامه در دسترسه و byval چطوری حالا اگه دو ورودی داشته باشید دومی چطوری آدرسش بدست میاد

    این آدرس لایبری منه
    http://www.electrorc.blogfa.com/post-30.aspx
    واسه sdram PC133 کامپیوتر های قدیمی

    چند تا نکته که اگه خواستید شروع کنید میگم که خیلی کمک میکنه:(من شدم خط شکن یه دو هفته ای روی این مطالب خودم سر کار بودم)

    1. فقط و فقط توی NOTEPAD کد رو بنویسید (اگه توی محیط بیسکام بنویسید موقع کامپایل با ERROR های عجیب غریب برخورد میکنید)
    2. ابتدا و انتهای توابع با [] مشخص میشن و توی اولش اسم تابع و توی آخریش END مینویسید و قبلش RET رو بنویسی
    3. فایل رو توی مسیر نصب توی فولدر LIB بذارید و از منوی بیسکام TOOLS گزینه LIB MANAGER رو بزنید و اسم فایل شما رو که با .LIB هستش رو پیدا کنید و COMPILE توی این صفحه رو بزنید اگه خطا نباشه فایل .LBX تولید میشه اگه خطا فایل .ERR

    4. اگه از پایه یا متغییری استفاده میکنید که قرار بیرون تعریف بشه باید دو کار رو همیشه انجام بدید یکی اینکه توی یه فایل که با پسوند .BAS هستش این تنظیمات رو بنویسی
    مثلا:

    LCD_CS ALIAS PORTB.0

    و بعد توی کد نویسی هر جا خواستید از این نام مستعار استفاده کنید باید قبلش یه * بذارید

    مثلا:

    *SBI LCD_CS

    از توابع خود بیسکام هم میشه به شکل خیلی محدود و گنگی استفاده کرد
    برای این کار باید توی کد برنامه لایبری از کلید واژه *BASIC:

    استفاده کنید

    مثلا

    *BASIC: A=A+B

    دقت کنید که باید BASIC با حروف بزرگ باشه وگرنه ERROR دریافت میکنید

    توی اون فایل پیکره بندی باید توابع در دسترس رو هم بنویسید که میشه اینطوری:

    مثلا دو تا تابع دارید یکی هست RESET_GSM و دیگری هست SEND_GSM

    برای اینکه بیسکام بدونه دو تا تابع با این نامها توی LIB در دسترس هستن باید اینطوری نوشت:

    $EXTERNAL RESET_GSM,SEND_GSM

    بعد باید تابع ها رو DECLARE کرد

    مثلا:

    DECLARE SUB RESET_GSM(BYREF A AS STRING)

    راستی یه سری دستورات اسمبلی بدلیل نا معلومی توی بیسکام در دسترس نیستن پس اگه مثلا LD کار نکرد با دستورهای دیگه راهش بندازید

    اینو نفهمیدم

    مثلا اولش میتونید یکم توضیحات بذارید که کامپایل نشه

    www = http://www.ElectroRC.blogfa.com
    email = ali.taroosheh@gmail.com.com
    libversion = 1.01
    date = 23 march 2009
    history = No known bugs.
    comment = Synchronous DRAM , Design by Ali Taroosheh

    بعد برای شروع تابع این شکلی شروع و پایان میدید مثلا

    [SD_init]
    SD_init:
    .
    .
    .
    ret
    [end]


    من برای توابع خودم اینا رو ذخیره میکردم شما هم بکنید

    Push R12
    Push R13
    Push R14
    Push R15
    push r26
    push r27
    push r28
    push r29
    push r30
    push r31

    اینکار باید اول تابع انجام بشه و بعد از تابع قبل از ret بازیابی بشن اینطوری:


    pop r31
    pop r30
    pop r29
    pop r28
    pop r27
    pop r26
    Pop R15
    Pop R14
    Pop R13
    Pop R12

    یادتون نره که استک lifo هستش یعنی اولین داده آخرین دادست پس به ترتیب push و pop های بالا دقت کنید

    برای ارسال متغیر به تابع هم بهتره برید خود help رو کامل بخونید ... توضیح داده ولی فقط میگم که

    من توی اون لایبری sdram که بالا لینکشو دادم یه فایل config_sdram.bas بود که توش نوشتم

    $lib "SDRAM.lbx"
    $external Sd_init , Sd_write , Sd_read
    Declare Sub Sd_init()
    Declare Sub Sd_write(array_pointer() As Byte , Byval Sd_position As Long , Byval Sd_length As Word)
    Declare Sub Sd_read(array_pointer() As Byte , Byval Sd_position As Long , Byval Sd_length As Word)

    پس سه تا تابع دارم یکی init یکی Read و دیگری write
    اولی که ورودی نداره

    دومی و سومی ورودی دارن اولی از جنس byref یا قابل تغییر (این نوع متغییر ها معمولا بعنوان خروجی اصلی تابع استفاده میشه یا فرستادن یک آرایه)
    در اصل این نوع متغییر آدرسش ارسال میشه به تابع یا بقول c کارها پوینتر

    دومی و سومین متغییر هم از نوع byval هستن یعنی یه کپی از اون متغییر به تابع ارسال میشه و مقدار اون متغییر بعد از فراخوانی ثابته و مقدار خودشو در تابع حفظ میکنه

    حالا ... به ترتیب ورودی ها از آخر به اول میشه مقدار ورودی یا آدرسشو پیدا کرد

    مثلا متغییر sd_length که آخریه اینطوری توی لایبری دیده میشه:

    ldd Zl,Y+0
    ldd Zh,Y+1
    ld temp,Z

    اگه temp رو مثلا r16 بدونیم مقدار اولین بایت sd_length توی Temp قرار داره

    و اگه بنویسیم

    adiw Zl,1
    ld temp,Z

    مقدار دومین بایت یا همون msb متغییر sd_length در دسترسه (توی temp کپی میشه)

    متغییر دوم توی توابع بالا sd_position یه متغییر از جنس long که یعنی 4 بایتی

    اینجوری با این ترتیب میتونید اولین بایت این متغییر رو پیدا کنید یا همون lsb

    ldd Zl,Y+2
    ldd Zh,Y+3
    ld temp,Z

    که اینجا هم lsb اون متغییر در temp قرار داره

    به همین ترتیب میتونید با اضافه کردن عدد جمع شده به y بایتهای بعدی رو بدست بیارید

    یعنی ldd temp,Z+1 میشه بایت دوم متغییر sd_position
    و ldd temp,Z+2 میشه بایت سوم والی آخر...

    برای اون متغییر اولی که پوینتری یا byref بود هم میتونید بنویسید

    ldd Zl,Y+4
    ldd Zh,Y+5

    اینجا آدرس اولین بایت از آرایه array_pointer توی Z قرار داره (یادتون نره آدرس قرار داره نه داده)

    در مورد متغییرهایی که بیرون توی config تعریف شدن هم باید با {} نشون بدید

    مثلا برای اون آرایه بالا

    ldd Zl,Y+4
    ldd Zh,Y+5
    *sts {Sd_pointer},zl

    که بطور مثال sd_pointer توی فایل config_sdram به این شکل تعریف شده dim sd_pointer as word



    دیگه مطلب زیادی در مورد لایبری زدن نیست فقط خروجی function که خودتون بخونید

    و اینکه توابع بیسکام همشون درست کار نمیکنن (توی برنامه های بالا مشخص حرفه ای ها میتونن تشخیص بدن یکم برنامه کج و ماوج نوشته شده)

    در مورد دستورات اسمبلی هم باید Avrstudio رو باز کنید که توی help قسمت avr toolt user guide قسمت Assembler رو انتخاب کنید داخل user's guide روی instruction کلیک کنید همه دستورات هستن با یه مثال توضیح داده دنبال کتاب و چیز دیگه هم نرید که این رفرنس بهترین و بهترین و بهترین رفرنسه

    حالا مطالب مربوط به هلپ بسکام که باید یکی ترجمه کنه
    Action

    Informs the compiler about the used libraries.





    Syntax

    $LIB "libname1" [, "libname2"]





    Remarks

    Libname1 is the name of the library that holds ASM routines that are used by your program. More filenames can be specified by separating the names by a comma.



    The specified libraries will be searched when you specify the routines to use with the $EXTERNAL directive.



    The search order is the same as the order you specify the library names.



    The MCS.LBX will be searched last and is always included so you don't need to specify it with the $LIB directive.



    Because the MCS.LBX is searched last you can include duplicate routines in your own library. These routines will be used instead of the ones from the default MCS.LBX library. This is a good way when you want to enhance the MCS.LBX routines. Just copy the MCS.LIB to a new file and make the changes in this new file. When we make changes to the library your changes will be preserved.





    Creating your own LIB file



    A library file is a simple ASCII file. It can be created with the BASCOM editor, notepad or any other ASCII editor.

    When you use BASCOM, make sure that the LIB extension is added to the Options, Environment, Editor, "No reformat extension".

    This will prevent the editor to reformat the LIB file when you open it.





    The file must include the following header information. It is not used yet but will be later.

    copyright = Your name

    www = optional location where people can find the latest source

    email = your email address

    comment = AVR compiler library

    libversion = the version of the library in the format : 1.00

    date = date of last modification

    statement = A statement with copyright and usage information



    The routine must start with the name in brackets and must end with the [END].



    The following ASM routine example is from the MYLIB.LIB library.



    [test]

    Test:

    ldd r26,y+2 ; load address of X

    ldd r27,y+3

    ld r24,x ; get value into r24

    Inc r24 ; value + 1

    St x,r24 ; put back

    ldd r26,y+0 ; address of Y

    ldd r27,y+1

    st x,r24 ; store

    ret ; ready

    [END]





    After you have saved your library in the LIB subdirectory you must compile it with the LIB Manager. Or you can include it with the LIB extension in which case you don’t have to compile it.





    About the assembler.

    When you reference constants that are declared in your basic program you need to put a star(*) before the line.



    'basic program

    CONST myconst = 7





    'asm lib

    * sbi portb, myconst





    By adding the *, the line will be compiled when the basic program is compiled. It will not be changed into object code in the LBX file.

    When you use constants you need to use valid BASIC constants:



    Ldi r24,12

    Ldi r24, 1+1

    Ldi r24, &B001

    Ldi r24,0b001

    Ldi r24,&HFF

    Ldi r24,$FF

    Ldi r24,0xFF



    Other syntax is NOT supported.





    See also

    $EXTERNAL







    Example

    $regfile = "m48def.dat"

    $crystal = 4000000

    $baud = 19200

    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0





    'In order to let this work you must put the mylib.lib file in the LIB dir

    'And compile it to a LBX

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

    'define the used library

    $lib"mylib.lbx"

    'you can also use the original ASM :

    '$LIB "mylib.LIB"



    'also define the used routines

    $external Test



    'this is needed so the parameters will be placed correct on the stack

    Declare Sub Test(byval X Asbyte , Y Asbyte)





    'reserve some space

    Dim Z As Byte





    'call our own sub routine

    Call Test(1 , Z)



    'z will be 2 in the used example

    End

    حالا یکی از دوستان یه کتابخانه درست کنه بزاره به عنوان مثال




    #2
    پاسخ : اموزش درست کردن کتابخانه برای بسکام

    سلام
    حالا مطالب بالا رو این جا یکی یکی توضیح میدم
    اصلا کتابخانه چی هست ؟ برای این که حجم برنامه کاهش پیدا کنه میان کتابخانه می سازن که خود بسکم موقعی که نصب می کنیم یه سری کتابخانه می ریزه که هر یه از این کتابخانه ها با ترکیب زبان اسمبلی و بیسیک ساخته شده اند که می تونید این کتابخانه های بسکام رو خودتون باز کنید و ببینید البته از بعضی از خود دستور های بسکام هم میشه استفاده کرد مثلا X=Y+Q که یه محاسبه ریاضی هست مثلا کتابخانه همین lcd یه کتابخانه هست که دستور های دیتاشیت رو بصورت نوشته در اورده مثلا ما وقتی می نویسم CLS این دستور توی کتابخانه قبلا تعریف شده که در کتابخانه مثلا این جوری تعریف شده که می نویسم cls خود میکرو این رو میفرسه 0101011 به پایه های DB ال سی دی و... اگه کتابخانه نبود ما برای این که ال سی دی پاک شه باید می نوشتیم مثلا SET PORTB.7 و...
    که خیلی از برنامه رو سنگین می کنه اگر بخواد یه حرف رو بنویسه باید چند با از این SET و RESET استفاده کنیم که برنامه ای قدر شلوغ میشه که از برنامه هی چی نمی نهمیم
    موفق باشید

    دیدگاه


      #3
      پاسخ : اموزش درست کردن کتابخانه برای بسکام

      سلام
      اینم یه مرجع برای اموزش زبان اسمبلی زیاد سخت نیست به راحتی میشه مطالب رو درک کرد البته من خودم هنوز نخوندم
      اینم لینک
      http://www.parsbook.org/1388/02/assembly-learning-book.html

      دیدگاه


        #4
        پاسخ : اموزش درست کردن کتابخانه برای بسکام

        آقا ممنون شما اینجا شما تو انجمن صوتی شما تو همه جا این یه کارت مفید بود من که استفاده کردم :mrgreen:

        خواستم بگم دستت دردنکنه همین >-
        AV Maziton 100
        Render By Artlantis Studio
        [img width=346 height=100]http://maziyar123.persiangig.com/View.jpg[/img]

        دیدگاه


          #5
          پاسخ : اموزش درست کردن کتابخانه برای بسکام

          سلام
          این کتابخانه LCD PCF8833 هست که می خوام به عنوان مثال بزارم اینجا و دونه دونه به توضیح می پردازیم :mrgreen:

          [tt]Comment = Compiled Lib File , No Comment Included

          Copyright = Mcs Electronics
          Www = Http : / / Www.mcselec.com
          Email = Avr@mcselec.com
          Comment = Pcf8833 Color Display Driver
          Libversion = 1.11.9.3
          Date = 2006 - 2008
          Statement = No Source Code From The Library May Be Distributed In Any Form
          Statement = Of Course This Does Not Apply For The Compiled Code When You Have A Bascom -avr License
          History = No Known Bugs.
          [_glcd]
          $external _mul8 , _box
          _set_display:
          Lcd_init:
          * cbi _glcd_portm,_glcd_RS
          .obj E08a
          .obj 2799
          * Call _Waitms
          * sbi _glcd_portm,_glcd_RS
          * sbi _glcd_portm,_glcd_CS
          * sbi _glcd_portm,_glcd_sda
          * sbi _glcd_portm,_glcd_scl
          .obj E081
          rcall _Gwrite_Cmd
          .obj E08a
          .obj 2799
          * Call _Waitms
          .obj E181
          rcall _Gwrite_Cmd
          .obj E288
          .obj 2799
          * Call _Waitms
          .obj E289
          rcall _Gwrite_Cmd
          .obj E288
          .obj 2799
          * Call _Waitms
          .obj E38a
          rcall _gwrite_cmd
          .obj E082
          rcall _gwrite_data
          .obj E280
          rcall _gwrite_cmd
          .obj E386
          rcall _gwrite_cmd
          .obj 2788
          rcall _gwrite_data
          .obj E28d
          rcall _gwrite_cmd
          * ldi r30,low(_lcd_init_data * 2)
          * ldi r31,high(_lcd_init_data * 2)
          *#IF _ROMSIZE>65536
          *call _SET_RAMPZ
          *#ENDIF
          .obj E114
          _lcd_init_lp:
          Call _lpmbyte
          .obj 2d80
          rcall _gwrite_data
          .obj 951a
          brne _Lcd_init_lp
          .obj 9508
          _lcd_init_data:
          .db &H00 , &H02 , &H04 , &H06 , &H09 , &H0B , &H0D , &H0F , &H00 , &H02 , &H04 , &H06 , &H09 , &H0B , &H0D , &H0F , &H00 , &H04 , &H0B , &H0F
          _gwrite_data:
          * Cbi _glcd_portm, _glcd_cs
          * Cbi _glcd_portm, _glcd_scl
          * Sbi _glcd_portm, _GLCD_SDA
          _gwrite_datamisc:
          * Sbi _glcd_portm, _glcd_scl
          .obj 932f
          .obj E028
          _gwrite_datamisc3:
          .obj 1f88
          brcc Gwrite_DataMisc1
          * Sbi _glcd_portm, _glcd_sda
          Rjmp Gwrite_DataMisc2
          Gwrite_datamisc1:
          * Cbi _glcd_portm, _glcd_sda
          Gwrite_datamisc2:
          * Cbi _glcd_portm, _glcd_scl
          * Sbi _glcd_portm, _glcd_scl
          .obj 952a
          Brne _Gwrite_DataMisc3
          * Sbi _glcd_portm, _glcd_cs
          .obj 912f
          .obj 9508
          _gwrite_cmd:
          * Cbi _glcd_portm, _glcd_cs
          * Cbi _glcd_portm, _glcd_scl
          * cbi _glcd_portm,_GLCD_SDA
          Rjmp _Gwrite_DataMisc
          _window:
          .obj E28a
          rcall _gwrite_cmd
          .obj 9189
          rcall _gwrite_data
          .obj 9189
          rcall _gwrite_data
          .obj E28b
          rcall _gwrite_cmd
          .obj 9189
          rcall _gwrite_data
          .obj 9189
          rcall _gwrite_data
          .obj E28c
          rjmp _gwrite_cmd
          _clear_graph:
          _clear_text:
          .obj 2788
          .obj 938a
          .obj 938a
          .obj E884
          .obj 938a
          .obj 938a
          .obj Ef8f
          .obj 938a
          Rjmp _Box
          _gwrite_lcdchar:
          $external _lpmbyte , _mul8
          .obj 93ef
          .obj 93ff
          *#IF _ROMSIZE>65536
          * In R1, RAMPZ
          .obj 921f
          *#ENDIF
          * Lds r30 ,{___fonttable}
          * Lds r31 ,{___fonttable +1}
          *#IF _ROMSIZE>65536
          * Lds r0,{___fonttable +2}
          * Out RampZ,r0
          *#ENDIF
          * Lds r2,{___FGCOLOR}
          * Lds r3,{___BGCOLOR}
          Call _lpmbyte
          .obj 2d20
          Call _lpmbyte
          .obj 2d30
          Call _lpmbyte
          .obj 2d00
          .obj 930a
          .obj 9631
          .obj 5280
          .obj 2f48
          Call _mul8
          .obj Fe4
          .obj 1ff5
          *#IF _ROMSIZE>65536
          rcall _glcd_rampcheck_inc
          *#ENDIF
          .obj E008
          .obj 2f42
          Call _mul8
          * lds r24,{___lcdrow}
          .obj F48
          .obj 954a
          .obj 934a
          .obj 938a
          * lds r24,{___lcdcol}
          .obj 2f08
          .obj F03
          * sts {___lcdcol},r16
          .obj F38
          .obj 953a
          .obj 933a
          .obj 938a
          rcall _window
          .obj 9149
          _gwrite_lcdchar1:
          Call _lpmbyte
          .obj E008
          Kllp:
          .obj 9406
          .obj 2d83
          brcc _gwrite_lcdchar2
          .obj 2d82
          _gwrite_lcdchar2:
          rcall _GWrite_data
          .obj 950a
          brne kllp
          .obj 954a
          brne _gwrite_lcdchar1
          *#IF _ROMSIZE>65536
          .obj 901f
          * Out RAMPZ,R1
          *#ENDIF
          .obj 91ff
          .obj 91ef
          .obj 9508
          #if _romsize > 65536
          _glcd_rampcheck_inc:
          Brcc _glcd_rampcheck_inc1
          In R2,RAMPZ
          .obj 9423
          Out Rampz , R2
          _glcd_rampcheck_inc1:
          .obj 9508
          _glcd_rampcheck_dec:
          Brcc _glcd_rampcheck_dec1
          In R2,RAMPZ
          .obj 942a
          Out Rampz , R2
          _glcd_rampcheck_dec1:
          .obj 9508
          #endif
          [end]
          [_gpixel]
          $external _div8 , _mul8
          _gpixel:
          .obj 9543
          .obj 9553
          .obj 935a
          .obj 935a
          .obj 934a
          .obj 934a
          rcall _window
          .obj 2f89
          rjmp _gwrite_data
          [end]
          [_getbytefromrom_eprom]
          $external _readeeprom , _lpmbyte
          _getbytefromrom:
          .obj 2377
          Breq _GetByteFromROM1
          .obj 27aa
          .obj 27bb
          jmp _ReadEEPROM1
          _getbytefromrom1:
          jmp _LpmByte
          [end]
          [_showpicture]
          $external _getbytefromrom_eprom
          _showpicture:
          .obj 2411
          .obj 2422
          .obj 2433
          .obj 9179
          .obj 9109
          .obj 9119
          Call _getbytefromrom
          .obj E00
          .obj 920a
          .obj 9503
          .obj 930a
          Call _getbytefromrom
          .obj E01
          .obj 920a
          .obj 9513
          .obj 931a
          rcall _window
          Call _getbytefromrom
          .obj 2d00
          Call _getbytefromrom
          .obj 2d10
          _showpicture2:
          .obj 1413
          brne _ShowPicture8
          Call _getbytefromrom
          .obj 2c20
          .obj 2d80
          .obj 3a8a
          breq _ShowPicture9
          Call _getbytefromrom
          .obj 2d80
          .obj 3a8a
          breq _ShowPicture10
          .obj 9731
          *#IF _ROMSIZE>65536
          * brcc _ShowPicture2c
          * In r24, RAMPZ
          * Dec R24
          * Out RAMPZ, R24
          _showpicture2c:
          *#ENDIF
          rjmp _ShowPicture11
          _showpicture9:
          .obj 9631
          rjmp _ShowPicture11
          _showpicture8:
          .obj 941a
          breq _showpicture2
          rjmp _ShowPicture11
          _showpicture10:
          Call _getbytefromrom
          .obj 2d80
          .obj 2388
          Brne _showpicture15
          .obj 9732
          #if _romsize > 65536
          brcc _ShowPicture10c
          * In r24, RAMPZ
          .obj 958a
          * Out RAMPZ, R24
          _showpicture10c:
          #endif
          Rjmp _showpicture11
          _showpicture15:
          .obj 2c10
          _showpicture11:
          .obj 2d82
          rcall _Gwrite_Data
          .obj 5001
          .obj 4010
          brne _ShowPicture2
          .obj 9508
          [end]
          [_gline]
          $external _gpixel
          _gline:
          .obj 24aa
          .obj 24bb
          .obj 24ff
          .obj 81ec
          .obj 80ea
          .obj 1aee
          .obj 8ff
          .obj 81fb
          .obj 8029
          .obj 2433
          .obj 1a2f
          .obj 833
          .obj E081
          .obj 14ea
          .obj 4fa
          brge _line1
          .obj Ef2f
          .obj Ef3f
          .obj 94e0
          .obj 94f0
          .obj Ee8
          .obj 1cfa
          rjmp _line1a
          _line1:
          .obj E021
          .obj 2733
          _line1a:
          .obj 142a
          .obj 43a
          brge _line2
          .obj Ef6f
          .obj Ef7f
          .obj 9420
          .obj 9430
          .obj E28
          .obj 1c3a
          rjmp _line2a
          _line2:
          .obj E061
          .obj 2777
          _line2a:
          rcall _line10
          .obj 142e
          .obj 43f
          brlt _line3
          breq _line3
          rjmp _line4
          _line3:
          .obj 2cce
          .obj 2cdf
          .obj Ccc
          .obj 1cdd
          .obj 2c02
          .obj 2c13
          .obj C00
          .obj 1c11
          _line4a:
          .obj 819a
          .obj 17e9
          breq _line4
          _line5:
          .obj Fe2
          .obj Ca0
          .obj 1cb1
          .obj 14ae
          .obj 4bf
          brlt _line6
          breq _line6
          .obj Ff6
          .obj 18ac
          .obj 8bd
          _line6:
          rcall _line10
          rjmp _line4a
          _line4:
          .obj 2cc2
          .obj 2cd3
          .obj Ccc
          .obj 1cdd
          .obj 2c0e
          .obj 2c1f
          .obj C00
          .obj 1c11
          _line9:
          .obj 8199
          .obj 17f9
          brne _LINE7
          .obj 9625
          .obj 9508
          _line7:
          .obj Ff6
          .obj Ca0
          .obj 1cb1
          .obj 14a2
          .obj 4b3
          brlt _line8
          breq _line8
          .obj Fe2
          .obj 18ac
          .obj 8bd
          _line8:
          rcall _line10
          rjmp _line9
          _line10:
          .obj 2f4e
          .obj 2f5f
          .obj 8198
          rjmp _gpixel
          [end]
          [_bcos]
          $external _lpmbyte , _mul8
          _bcos:
          .obj 9541
          breq _bsin9a
          _bsin:
          .obj 2f84
          .obj 7f80
          .obj 2f98
          .obj 9592
          * ldi zl, low(_bsin_table*2)
          * ldi zh, high(_bsin_table*2)
          .obj Fe9
          .obj 2799
          .obj 1ff9
          Call _lpmbyte
          .obj 2d90
          .obj 1784
          breq _bsin9
          Call _lpmbyte
          .obj 2d00
          .obj 1b09
          .obj 1b48
          .obj 9542
          Call _mul8
          .obj 1f44
          .obj 1f95
          _bsin9:
          .obj 9508
          _bsin9a:
          .obj Ef9f
          .obj 9508
          _bsin_table:
          .db 0 , 25 , 50 , 74 , 98 , 120 , 142 , 162 , 180 , 197 , 212 , 225 , 236 , 244 , 250 , 254 , 255
          [end]
          [_circle]
          _circle:
          $external _bcos , _mul8 , _gpixel
          .obj 2722
          _circle1:
          .obj 8138
          .obj 8149
          .obj 815a
          .obj 9533
          .obj 2ec4
          .obj 2ed4
          .obj 2ee5
          .obj 2ef5
          .obj 2f42
          rcall _bcos
          .obj 2f49
          .obj 2f03
          Call _mul8
          .obj 1ac5
          .obj Ed5
          .obj 2f42
          rcall _bsin
          .obj 2f49
          .obj 2f03
          Call _mul8
          .obj 1ae5
          .obj Ef5
          .obj 819b
          .obj 2d4d
          .obj 2d5e
          rcall _GPixel
          .obj 819b
          .obj 2d4c
          .obj 2d5e
          rcall _Gpixel
          .obj 819b
          .obj 2d4c
          .obj 2d5f
          rcall _Gpixel
          .obj 819b
          .obj 2d5f
          .obj 2d4d
          rcall _Gpixel
          .obj 5f2e
          .obj 3f2e
          brlo _circle1
          .obj 9624
          .obj 9508
          [end]
          [_box]
          _box:
          .obj 8189
          .obj 2f48
          .obj 938a
          .obj 818c
          .obj 938a
          .obj 1b48
          .obj 9543
          .obj 818c
          .obj 2f08
          .obj 938a
          .obj 818f
          .obj 938a
          .obj 1b08
          .obj 9503
          rcall _window
          Call _mul8
          _box_lp:
          .obj 8188
          rcall _gwrite_data
          .obj 5041
          .obj 4050
          brne _box_lp
          .obj 9625
          .obj 9508
          [end][/tt]
          همون طور که مشاهده می کنید
          و بعد توی کد نویسی هر جا خواستید از این نام مستعار استفاده کنید باید قبلش یه * بذارید
          مانند
          * sbi _glcd_portm,_glcd_RS
          و
          * ldi r30,low(_lcd_init_data * 2)
          و...
          و برای این که از دستور خود بیسیک استفاده می کنیم باید این طوری بنویسیم
          مانند
          *BASIC: A=A+B

          دیدگاه


            #6
            پاسخ : اموزش درست کردن کتابخانه برای بسکام

            نوشته اصلی توسط erfan m
            سلام من یه برنامه دارم که ارور میده میشه یه نگاهی بهش بندازید؟فکر میکنم واسه کتابخانه ال سی دی گرافیکیه.فونت 8*8 رو ارور میگیره
            میشه به هگز تبدیل کنید برنامه رو؟
            برنامه gps.تو تاپیک زیر گذاشتمش
            ممنون
            http://www.eca.ir/forum2/index.php?topic=62998.45
            **** k i n j ****

            دیدگاه

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