Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
05/04/09 00:17
Modified:
  05/04/09 00:19

Read: times


 
#165028 - Give this a try...
Responding to: ???'s previous message
I have quickly coded the scheme that I have suggested earlier. The code isn't tested, but good enough to experiment with.

To avoid the use of negative and fractional numbers the original scheme was modified: In the calculation of error term all relevant numbers were multiplied by a factor of "2" and an offset equal to "STEPS" was added.

Take care that "STEPS" is in the range of "1...64" and that V_INIT <= V_END.


;This code snippet generates a value "V" that runs from "V_INIT" to
;"V_END" in equal steps (V_INIT <= V_END). The number of steps is
;"STEPS" ("STEPS"=1...64). "V" appears at Port P1.
;The code isn't tested!


                $NOMOD51
                $INCLUDE (89s52.mcu)


                ERR_ADD         DATA    30H
                ERR_COMP        DATA    31H
                ERR_SUM         DATA    32H
                WIDTH           DATA    33H
                STEPS           DATA    34H
                V               DATA    35H
                V_INIT          DATA    36H
                V_END           DATA    37H


                ORG 0
            
                SJMP Start

                ORG 002BH

Start:          MOV A,STEPS
                MOV R7,A              ;Prepare Steps_loop
                MOV ERR_SUM,A         ;Initialize ERR_SUM
                RL A                  ;Calculate ERR_COMP
                MOV ERR_COMP,A

                MOV A,V_END           ;Calculate WIDTH:
                CLR C                 ;WIDTH = (V_END-V_INIT)/STEPS
                SUBB A,V_INIT
                MOV B,STEPS
                DIV AB
                MOV WIDTH,A
                MOV A,B               ;Calculate ERR_ADD by the help
                RL A                  ;of remainder
                MOV ERR_ADD,A

                MOV V,V_INIT          ;Initialize V
                MOV P1,V              ;Send V_INIT to P1

Steps_loop:     MOV A,V               ;Calculate new V:
                ADD A,WIDTH           ;V = V + WIDTH
                MOV V,A

                MOV A,ERR_SUM         ;Calculate new ERR_SUM
                ADD A,ERR_ADD
                CJNE A,ERR_COMP,Cont1 ;ERR_SUM >= ERR_COMP?
Cont1:          JC Cont2              ;No, so nothing to correct
                SUBB A,ERR_COMP       ;Yes, so increment V
                INC V                 ;and correct ERR_SUM
Cont2:          MOV ERR_SUM,A         ;Store the new ERR_SUM

                MOV P1,V              ;Send V to P1
                
                DJNZ R7,Steps_loop    ;Do all the steps 

                END                   ;End of code snippet


Kai

List of 19 messages in thread
TopicAuthorDate
Values interpolation            01/01/70 00:00      
   A possible start            01/01/70 00:00      
      The Brezingham Line Drawing algorithm            01/01/70 00:00      
         http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm ?            01/01/70 00:00      
            Good method            01/01/70 00:00      
               Integer Digital Differential Analyzer            01/01/70 00:00      
   Simple scheme...            01/01/70 00:00      
      Further optimization            01/01/70 00:00      
         You are absolutely right, of course,...            01/01/70 00:00      
   Having a hard time trying to understand :(            01/01/70 00:00      
      Clarification Needed            01/01/70 00:00      
         Even more confused now            01/01/70 00:00      
            Another Shot            01/01/70 00:00      
               code            01/01/70 00:00      
                  Provided Code            01/01/70 00:00      
                     Maybe this            01/01/70 00:00      
                        Give this a try...            01/01/70 00:00      
            Look it up            01/01/70 00:00      
      Now, we have a hard time to understand...            01/01/70 00:00      

Back to Subject List