Assembler: please kick me in the right direction


Closed Thread
Results 1 to 27 of 27

Hybrid View

  1. #1
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,159


    Did you find this post helpful? Yes | No

    Default

    Luciano, I have that document. That is the one I am using to manage the 4-wire touch screen circuit.

    I am using the schematic for the Optrex demo board from Apollo Display as a base for the LCD circuit. The charge pump circuitry is probably identical, I didn't bother comparing. Since I got the gLCDs from Apollo, I'm going to use their schematic, I also find it a bit easier to read.

    I have no doubt that writing a library for a gLCD is complex, but I'm not doing that, I'm just modifying a working example. If I was able to progam software for banks, credit cards and utility companies for 20 years, it's not unrealistic to believe that I can convert an assembler program. As it is, I understand 90% of what is happening within this code.

    As for the complexity of using all the functions of a graphic LCD, I never said I was going to use them.


    Thanks for answering my question Darrel, much appreciated!
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  2. #2
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,159


    Did you find this post helpful? Yes | No

    Default

    I've Googled, but I can't find a place with nice PM assembler code. I'm particularly interested in how the I/O pins are addressed.

    How to move a byte to a port:
    mov P1,a ;set output data

    How to reset a particular pin:
    clr P3.2 ;CS = 0

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  3. #3
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,159


    Did you find this post helpful? Yes | No

    Default

    I finally found a nice example here:
    http://picbasic.com/resources/articles/brainart.htm


    setb rp0 ;change to register page 1
    mov trisb,#00001111b ;make the bottom 4 bits on PortB inputs and the top 4 outputs
    clrb rp0 ;change back to register page 0
    ;
    clrb portb.4 ;start with output low and LED off
    ;
    loop jnb portb.0,loop ;jump to loop if switch on PortB.0 is low
    jnb portb.1,loop ;jump to loop if switch on PortB.1 is low
    ;
    ; if we got here then both switches are high
    ;
    setb portb.4 ;set output high to turn on LED


    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  4. #4
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,159


    Did you find this post helpful? Yes | No

    Default

    Ok, I've researched each instruction and these 5 have no direct translations:

    PUSH, push direct byte onto stack
    POP, pop direct byte from stack
    MUL, multiply
    ADDC, add into accumulator
    MOVC, move code byte to accumulator

    I wouldn't be surprised if the equivalent PIC Macro instructions are staring me in the face, but I don't want to start guessing. Here is some code to show the context the commands are used in:

    ; write an ASCII character to the display
    ; The font file starts at ascii 32 (blank). The default font is 8x8 pixels
    ; INPUTS - character in register A
    write_char:
    push dph
    push dpl
    clr c
    subb a,#32 ;ascii font with blank
    mov b,#8 ;multiply by 8 (8 bytes/char)
    mul ab
    add a,#low(font) ;add to font table address
    mov dpl,a
    mov a,b
    addc a,#high(font)
    mov dph,a
    mov r0,#8 ;8 bytes/char
    wbyte: clr a
    movc a,@a+dptr
    acall write_data
    inc dptr
    djnz r0,wbyte
    pop dpl
    pop dph
    ret

    8051 assembler reference here:
    http://www.ece.umr.edu/computing/uni...e/tasking/asm/

    PIC Macro assembler reference:

    Robert
    Attached Files Attached Files
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  5. #5
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Robert,

    The PUSH and POP were apparently used to save 2 variables that were used in the write_char: routine. You can just use separate variables to temporarily store the two bytes, instead of trying to use the stack.

    MUL can be replaced with the MUL?BBB or MUL?BBW macro.

    For the addc and movc, you can either manipulate the EEADDR, EECON and EEDATA registers manually, or you could break out of ASM and use the READCODE statement to get the byte first, then do the ADDWF or MOVWF.

    HTH,
    Darrel
    Last edited by Darrel Taylor; - 24th December 2005 at 19:36.

  6. #6
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,159


    Did you find this post helpful? Yes | No

    Default PUSH & POP conversion

    Like this?


    dph data 42h <--- add this line with existing DATA statement
    dpl data 43h <--- add this line with existing DATA statement


    write_char:
    push dph <--- delete this line
    push dpl <--- delete this line
    ...
    mov dpl,a
    ...
    mov dph,a
    ...
    pop dpl <--- delete this line
    pop dph <--- delete this line
    ret

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  7. #7
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,159


    Did you find this post helpful? Yes | No

    Default

    "MUL can be replaced with the MUL?BBB or MUL?BBW macro."

    Darrel, can you point me to some reference on macros? I Googled but did not find anything relevant (that I could see).

    The MeLabs PM manual didn't have any mention for 'mul' or 'bbb'.

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  8. #8
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    I was thinking something more like this...
    Code:
    dph_save VAR BYTE
    dpl_save  VAR BYTE
    
    ASM
    write_char:
        MOVE?BB  dph, _dph_save
        MOVE?BB  dpl, _dpl_save
    
        push dph <--- delete this line
        push dpl <--- delete this line
    ...
    
    ...
        pop dpl <--- delete this line
        pop dph <--- delete this line
    
        MOVE?BB  _dph_save, dph 
        MOVE?BB  _dpl_save, dpl 
    return
    
    ...
    
    ENDASM
    And, here's a little more info on the MOVE macro's
    http://www.picbasic.co.uk/forum/showthread.php?p=2009

    .
    DT

Similar Threads

  1. decoding quadrature encoders
    By ice in forum mel PIC BASIC Pro
    Replies: 93
    Last Post: - 28th February 2017, 09:02
  2. PIC assembler forum?
    By Lajko in forum Off Topic
    Replies: 1
    Last Post: - 29th September 2008, 05:34
  3. Assembler problem
    By om3bc in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 25th March 2008, 19:12
  4. Am I reading this assembler correctly?
    By crhomberg in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 13th November 2007, 12:20
  5. Which assembler are you using?
    By picnaut in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 1st November 2005, 20:34

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts