Assembler: please kick me in the right direction


Closed Thread
Results 1 to 27 of 27

Hybrid View

  1. #1
    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

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


    Did you find this post helpful? Yes | No

    Default MUL conversion

    What type of variables are the variables a, b and c considered? My first quess would have been a work register, but I'd like to be sure.

    Since there are only 2 variables in the equation, the new command should be MUL?xx, right?

    (available letters seen in your reply to PIC Beginner in other thread)

    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
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    This page describes the 8051 registers, but the whole site is pretty good too.
    http://www.8052.com/tutbregs.phtml#R%20Registers

    The MUL?xxx macro usually has 3 paramaters, the third one is the result of multiplying the first two.

    For instance, if you had the following variables ...
    Code:
    A  VAR  BYTE
    B  VAR  BYTE
    Y  VAR  BYTE
    Z  VAR  WORD
    THEN ...
    Code:
      this ASM macro              is same as this PBP statement
      ---------------------       -------------------------
        MUL?BBB   _A, _B, _Y          Y = A * B
        MUL?BBW   _A, _B, _Z          Z = A * B
        MUL?BWW   _A, _Z, _Z          Z = A * Z
    And, you can see that often it's easier to just jump out of ASM and handle it in Basic.

    ------------------
    If you do use the MUL? macros, there's something else you have to do to get them to work. Since, they are from the PBPPIC14.MAC file, they don't automaticaly get included with the project. So you have to Trick PBP into thinking it needs those macros.

    This bit of code doesn't use any Program space since the ifdef keeps it from being compiled. But PBP sees the statements and includes any macros that are associated with them.
    Code:
    @  ifdef DoNotCompile                        ' Macro to include
           R0.LowByte = R0.LowByte * R0.LowByte  ' MUL?BBB
           R0 = R0.LowByte * R0.LowByte          ' MUL?BBW
           R0 = R0.LowByte * R0                  ' MUL?BWW
    @  endif
    But then, If you do it in Basic, you don't have to worry about it.

    Merry X-Mas,
    Darrel
    Last edited by Darrel Taylor; - 25th December 2005 at 21:52.

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


    Did you find this post helpful? Yes | No

    Default

    I'm going with basic for the multiplication. Only problem is that table 4.1 in this document is confusing:
    http://xess.com/manuals/asm51.pdf

    The entry for MUL is:

    B x A --> B,A

    Ok, so what does that mean? The result is placed in both A and B? In addition, the result is accumulated in the first variable. I expected something similar, either in the first, or in the second, but not both. Obviously I'm misunderstanding something here.

    I tried finding Note 7, but I can't see it anywhere.

    Robert
    Attached Images Attached Images  
    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
    Oct 2004
    Location
    Italy
    Posts
    695


    Did you find this post helpful? Yes | No

    Default

    Intel 8051

    (The result is sixteen-bit)

    Multiplies the unsigned value of the Accumulator by the unsigned value of
    the "B" register. The least significant byte of the result is placed in the
    Accumulator and the most-significant-byte is placed in the "B" register.


    ---------------------------------------------


    MCS 51 Microcontroller Family User's manual. (15 MB file).
    (Original data-book scanned).
    See PDF page 90
    ftp://download.intel.com/design/MCS5...S/27238302.pdf

    * * *

    8051 Instruction Set (300K file).
    See PDF page 50
    http://batronix.com/pdf/befehle.pdf

    * * *

    80C51 family programmer’s guide and instruction set. (270K file)
    See PDF page 43
    http://www.logiccell.com/~jean/8051/3082.pdf

    * * *
    Last edited by Luciano; - 26th December 2005 at 10:18.

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


    Did you find this post helpful? Yes | No

    Default

    Thanks for all the replies.

    I still have to control individual characters, contrast and the touch screen, but I got it to work. I printed xF0 across the entire LCD, to make it easy to see output. I have the LCD on inverse in this example, the top of the line should be high, not the bottom.

    The Hantronix code is incomplete for an Optrex LCD, you have to scour through the Optrex code and add missing control codes. Once I get the characters to come out properly, I'll see about putting out a bitmap.

    One idea I'm toying with is rotating the LCD and printing in portrait instead of landscape mode. There are applications where I want a vertical LCD instead of horizontal (like a list of single-word commands).

    I'll post the code once I've sufficiently changed it and made it my own. I don't want to be bothered with Hantronix and copyright laws.

    Robert
    Attached Images Attached Images  
    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,154


    Did you find this post helpful? Yes | No

    Default

    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!

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