home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / robot / robotasm.new < prev   
Text File  |  1991-07-09  |  20KB  |  323 lines

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; ROBOT MOTION PROGRAM 1.00.01                                                ;
  3. ;                                                                             ;
  4. ; REVISION 7-8-90                                                             ;
  5. ;                                                                             ;
  6. ; CHANGED LAST ON 3-7-91                                                      ;
  7. ; 7-09-91 ADDED TURNDIST TO ALLOW CONTROL OF ROTATION ON TURNS                ;
  8. ; 3-7-91 CHANGED SPEEDCOR TO REFLECT 6 MHZ CRYSTAL                            ;
  9. ;                                                                             ;
  10. ;                                                                             ;
  11. ;                                                                             ;
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13.  
  14.  
  15. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  16. ;                                                                             ;
  17. ;   INITIALIZE MEMORY LOCATIONS                                               ;
  18. ;                                                                             ;
  19. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  20.  
  21. HEAD       .EQU 32H              ;HEAD VALUE OF FORWARD TABLE
  22. TAIL       .EQU 35H              ;TAIL VALUE OF FORWARD TABLE
  23. RIGHTHEAD  .EQU 36H              ;HEAD VALUE OF RIGHT STOPPED TABLE
  24. RIGHTTAIL  .EQU 39H              ;TAIL VALUE OF RIGHT STOPPED TABLE
  25. LEFTHEAD   .EQU 3AH              ;HEAD VALUE OF LEFT STOPPED TABLE
  26. LEFTTAIL   .EQU 3DH              ;TAIL VALUE OF LEFT STOPPED TABLE
  27. STEPRIGHT  .EQU 3EH              ;RIGHT MOTOR STEP COUNT
  28. STEPLEFT   .EQU 3FH              ;LEFT MOTOR STEP COUNT
  29.  
  30. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  31. ;                                                                             ;
  32. ;   UNIVERSAL CONSTANTS                                                       ;
  33. ;                                                                             ;
  34. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  35.  
  36. ;SPEEDCOR   .EQU 48H              ;COARSE SPEED ADJUSTMENT FOR 8 MHZ
  37. SPEEDCOR   .EQU 36H              ;COARSE SPEED ADJUSTMENT FOR 6 MHZ
  38. SPEEDFIN   .EQU 0FFH             ;FINE SPEED ADJUSTMENT
  39. REVDIST    .EQU 30H              ;DISTANCE COUNT TO BACKUP
  40. TURNDIST   .EQU 18H              ;DISTANCE TO TURN
  41. STEPCOUNT  .EQU 18H              ;STEPS BETWEEN SENSOR TOGGLES
  42.  
  43. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  44. ;                                                                             ;
  45. ;   PROGRAM START                                                             ;
  46. ;                                                                             ;
  47. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  48.  
  49.            .ORG 000H
  50.  
  51. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  52. ;                                                                             ;
  53. ;   INITIALIZE PORT 2 FOR INPUT                                               ;
  54. ;                                                                             ;
  55. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  56.  
  57.            MOV  A,#0FFH          ;MAKE PORT 2 AN INPUT PORT
  58.            OUTL P2,A             ;INITIALIZE PORT 2 FOR INPUT
  59.  
  60. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  61. ;                                                                             ;
  62. ;   BUILD THE FORWARD ROTATE TABLE IN MEMORY                                  ;
  63. ;                                                                             ;
  64. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  65.  
  66.            MOV  R0,#HEAD         ;POINT TO HEAD OF ROTATE TABLE
  67.            MOV  A,#01010101B     ;LOAD ACCUMULATOR WITH HEAD ENTRY
  68.            MOV  @R0,A            ;STORE THE HEAD ENTRY
  69.            INC  R0               ;POINT TO HEAD + 1
  70.            MOV  A,#10011001B     ;LOAD ACCUMULATOR WITH HEAD + 1 ENTRY
  71.            MOV  @R0,A            ;STORE THE ENTRY
  72.            INC  R0               ;POINT TO HEAD + 2
  73.            MOV  A,#10101010B     ;LOAD ACC WITH HEAD + 2 ENTRY
  74.            MOV  @R0,A            ;STORE THE ENTRY
  75.            INC  R0               ;POINT TO TAIL
  76.            MOV  A,#01100110B     ;LOAD ACC WITH TAIL ENTRY
  77.            MOV  @R0,A            ;STORE THE ENTRY
  78.  
  79. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  80. ;                                                                             ;
  81. ;   BUILD THE RIGHT STOPPED ROTATE TABLE IN MEMORY                            ;
  82. ;                                                                             ;
  83. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  84.  
  85.            MOV  R0,#RIGHTHEAD    ;POINT TO HEAD OF RIGHT STOPPED ROTATE TABLE
  86.            MOV  A,#01010101B     ;LOAD ACCUMULATOR WITH HEAD ENTRY
  87.            MOV  @R0,A            ;STORE THE HEAD ENTRY
  88.            INC  R0               ;POINT TO HEAD + 1
  89.            MOV  A,#01101001B     ;LOAD ACCUMULATOR WITH HEAD + 1 ENTRY
  90.            MOV  @R0,A            ;STORE THE ENTRY
  91.            INC  R0               ;POINT TO HEAD + 2
  92.            MOV  A,#10101010B     ;LOAD ACC WITH HEAD + 2 ENTRY
  93.            MOV  @R0,A            ;STORE THE ENTRY
  94.            INC  R0               ;POINT TO TAIL
  95.            MOV  A,#10010110B     ;LOAD ACC WITH TAIL ENTRY
  96.            MOV  @R0,A            ;STORE THE ENTRY
  97.  
  98. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  99. ;                                                                             ;
  100. ;   BUILD THE LEFT STOPPED ROTATE TABLE IN MEMORY                             ;
  101. ;                                                                             ;
  102. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  103.  
  104.            MOV  R0,#LEFTHEAD     ;POINT TO HEAD OF LEFT STOPPED ROTATE TABLE
  105.            MOV  A,#01010101B     ;LOAD ACCUMULATOR WITH HEAD ENTRY
  106.            MOV  @R0,A            ;STORE THE HEAD ENTRY
  107.            INC  R0               ;POINT TO HEAD + 1
  108.            MOV  A,#10010110B     ;LOAD ACCUMULATOR WITH HEAD + 1 ENTRY
  109.            MOV  @R0,A            ;STORE THE ENTRY
  110.            INC  R0               ;POINT TO HEAD + 2
  111.            MOV  A,#10101010B     ;LOAD ACC WITH HEAD + 2 ENTRY
  112.            MOV  @R0,A            ;STORE THE ENTRY
  113.            INC  R0               ;POINT TO TAIL
  114.            MOV  A,#01101001B     ;LOAD ACC WITH TAIL ENTRY
  115.            MOV  @R0,A            ;STORE THE ENTRY
  116.  
  117. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  118. ;                                                                             ;
  119. ;   INITIALIZE FORWARD ROTATE TABLE POINTER                                   ;
  120. ;   INITIALIZE MOTOR STEP COUNTS                                              ;
  121. ;   INITIALIZE LEFT AND RIGHT MOTOR STATUS                                    ;
  122. ;                                                                             ;
  123. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  124.  
  125.            MOV  R0,#HEAD         ;POINT TO HEAD OF ROTATE TABLE
  126.            CALL SETRIGHT         ;INITIALIZE LEFT AND RIGHT MOTOR STEP COUNTS
  127.            CALL SETLEFT          ;
  128.            IN   A,P2             ;GET INITIAL MOTOR STATUS
  129.            MOV  R5,A             ;TEMPORARILY STORE ACC IN R5
  130.            ANL  A,#00000001B     ;MASK FOR RIGHT MOTOR STATUS
  131.            MOV  R4,A             ;LOAD R4 WITH RIGHT INITIAL MOTOR STATUS
  132.            MOV  A,R5             ;RESTORE RIGHT AND LEFT MOTOR STATUS READINGS
  133.            ANL  A,#00000010B     ;MASK FOR LEFT MOTOR STATUS
  134.            MOV  R3,A             ;LOAD R3 WITH LEFT INITIAL MOTOR STATUS
  135.  
  136. SEEK       MOV  A,@R0            ;LOAD ACC WITH HEAD VALUE
  137.            OUTL P1,A             ;LOAD THE TABLE VALUE TO THE MOTOR DRIVER
  138.            CALL STATUS           ;LOAD MOTOR DRIVER WITH HEAD VALUE
  139.            INC  R0               ;POINT THE HEAD + 1 VALUE
  140.            MOV  A,#TAIL+1        ;CHECK R0 FOR END OF TABLE
  141.            XRL  A,R0             ;COMPARE R0 WITH VALUE IN ACC
  142.            JNZ  SEEK             ;NOT BEYOND THE TAIL CONTINUE TO MOVE FORWARD
  143.            MOV  R0,#HEAD         ;RESET R0 TO HEAD VALUE
  144.            JMP  SEEK
  145.  
  146. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  147. ;                                                                             ;
  148. ;   SUBROUTINES                                                               ;
  149. ;                                                                             ;
  150. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  151.  
  152.            .ORG 100H
  153.  
  154. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  155. ;                                                                             ;
  156. ;  MOVE STATUS SUBROUTINE                                                     ;
  157. ;                                                                             ;
  158. ;  CHANGE VALUES FOR R5 AND R7 TO AFFECT SPEED OF STEPPER MOTORS...           ;
  159. ;  R0 = FORWARD TABLE POINTER                                                 ;
  160. ;  R1 = STEP COUNTER POINTER                                                  ;
  161. ;  R2 = REVERSE ROTATION COUNTER                                              ;
  162. ;  R3 = PREVIOUS MOTOR STATUS LEFT MOTOR                                      ;
  163. ;  R4 = PREVIOUS MOTOR STATUS RIGHT MOTOR                                     ;
  164. ;  R5 = SCRATCH REGISTER                                                      ;
  165. ;  R6 = OUTER LOOP COUNT VALUE (COARSE ADJUSTMENT)                            ;
  166. ;  R7 = INNER LOOP COUNT VALUE (FINE ADJUSTMENT)                              ;
  167. ;  P1 = STEPPER MOTOR PORT    BITS 7-4 = LEFT MOTOR  BITS 3-0 = RIGHT MOTOR   ;
  168. ;  P2 = MOTOR STATUS                                                          ;
  169. ;  F0 = RIGHT MOTION FLAG  -  SET WHEN RIGHT WHEEL IS STOPPED                 ;
  170. ;  F1 = LEFT MOTION FLAG   -  SET WHEN LEFT WHEEL IS STOPPED                  ;
  171. ;                                                                             ;
  172. ;  P2 BIT  7      6      5      4      3      2        1           0          ;
  173. ;         N/A    N/A    N/A    N/A    N/A    N/A   LEFT MOTOR  RIGHT MOTOR    ;
  174. ;                                                                             ;
  175. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  176.  
  177. STATUS     IN   A,P2             ;GET CURRENT MOTOR STATUS
  178.  
  179. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  180. ;                                                                             ;
  181. ;   CHECK THE RIGHT WHEEL MOTION                                              ;
  182. ;                                                                             ;
  183. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  184.  
  185. CHECKRIGHT CLR  F0               ;CLEAR THE FLAGS
  186.            CLR  F1               ;
  187.            CPL  F0               ;SET THE FLAGS
  188.            CPL  F1               ;ROUTINE MUST CLEAR FLAGS TO SHOW MOVEMENT
  189.            MOV  R5,A             ;TEMPORARILY STORE CURRENT MOTOR STATUS
  190.            ANL  A,#00000001B     ;MASK OUT LEFT MOTOR STATUS VALUE
  191.            XRL  A,R4             ;COMPARE RIGHT MOTOR STATUS
  192.            JNZ  RESETRIGHT       ;IF NOT SAME AS PREVIOUS THEN RESET STEP COUNT
  193. DECRIGHT   MOV  R1,#STEPRIGHT    ;POINT TO RIGHT MOTOR STEP COUNT
  194.            MOV  A,@R1            ;GET THE STEPRIGHT VALUE FOR DECREMENT
  195.            DEC  A                ;DECREMENT THE STEPLEFT VALUE
  196.            MOV  @R1,A            ;STORE THE NEW RIGHT MOTOR STEP COUNT
  197.            MOV  A,#00H           ;LOAD ACC WITH 0
  198.            XRL  A,@R1            ;CHECK STEPRIGHT VALUE FOR 0
  199.            JZ   REVERSE          ;IF STEP COUNT = 0 THEN BACK UP
  200.            JMP  CHECKLEFT        ;GO CHECK THE LEFT MOTOR STATUS
  201. RESETRIGHT MOV  A,R5             ;RESTORE THE PREVIOUS RIGHT AND LEFT STATUS
  202.            ANL  A,#00000001B     ;MASK OUT LEFT MOTOR STATUS
  203.            MOV  R4,A             ;STORE THE NEW RIGHT MOTOR STATUS
  204.            CALL SETRIGHT         ;GO RESET THE RIGHT MOTOR COUNT
  205.  
  206. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  207. ;                                                                             ;
  208. ;   CHECK THE LEFT WHEEL MOTION                                               ;
  209. ;                                                                             ;
  210. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  211.  
  212. CHECKLEFT  CLR  F0               ;CLEAR FLAG 0 TO SHOW RIGHT WHEEL WAS OK
  213.            MOV  A,R5             ;RESTORE THE CURRENT MOTOR STATUS
  214.            ANL  A,#00000010B     ;MASK OUT RIGHT MOTOR STATUS VALUE
  215.            XRL  A,R3             ;COMPARE LEFT MOTOR STATUS
  216.            JNZ  RESETLEFT        ;IF NOT SAME AS PREVIOUS THEN RESET STEP COUNT
  217. DECLEFT    MOV  R1,#STEPLEFT     ;POINT TO LEFT MOTOR STEP COUNT
  218.            MOV  A,@R1            ;GET THE STEPLEFT VALUE FOR DECREMENT
  219.            DEC  A                ;DECREMENT THE STEPLEFT VALUE
  220.            MOV  @R1,A            ;STORE THE NEW LEFT MOTOR STEP COUNT
  221.            MOV  A,#00H           ;LOAD ACC WITH 0
  222.            XRL  A,@R1            ;CHECK STEPLEFT VALUE FOR 0
  223.            JZ   REVERSE          ;IF STEP COUNT = 0 THEN BACK UP
  224.            JMP  STEPWAIT         ;GO WAIT UNTIL TIME FOR THE NEXT STEP
  225. RESETLEFT  MOV  A,R5             ;RESTORE THE PREVIOUS RIGHT AND LEFT STATUS
  226.            ANL  A,#00000010B     ;MASK OUT RIGHT MOTOR STATUS
  227.            MOV  R3,A             ;STORE THE NEW LEFT MOTOR STATUS
  228.            CALL SETLEFT          ;GO RESET THE LEFT MOTOR COUNT
  229.  
  230. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  231. ;                                                                             ;
  232. ;   DELAY BETWEEN STEPPER MOTOR STEPS                                         ;
  233. ;                                                                             ;
  234. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  235.  
  236. STEPWAIT   CLR  F1               ;CLEAR FLAG TO SHOW LEFT WHEEL WAS MOVING
  237.            MOV  R7,#SPEEDCOR     ;WAIT BETWEEN STEPS (OUTER LOOP COUNTER)
  238. WAITING    MOV  R5,#SPEEDFIN     ;WAIT BETWEEN STEPS (INNER LOOP COUNTER)
  239.            DJNZ R5,$             ;DECREMENT THE INNER LOOP COUNTER
  240.            DJNZ R7,WAITING       ;DECREMENT THE OUTER LOOP COUNTER
  241. MOVEDONE   RET
  242.  
  243. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  244. ;                                                                             ;
  245. ;   REVERSE AND TURN ROUTINES                                                 ;
  246. ;                                                                             ;
  247. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  248.  
  249. REVERSE    CALL BACKITUP         ;A WHEEL HAS STOPPED SO BACK IT UP
  250.            JF1  LEFTSTOP         ;IF FLAG 1 IS SET, LEFT WHEEL HAS STOPPED
  251.            JF0  RIGHTSTOP        ;IF FLAG 0 IS SET, RIGHT WHEEL HAS STOPPED
  252. LEFTSTOP   MOV  R0,#LEFTHEAD     ;POINT TO START OF LEFT STOPPED ROTATE TABLE
  253.            JMP  TURN
  254. RIGHTSTOP  MOV  R0,#RIGHTHEAD    ;POINT TO BEGINNING OF RIGHT STOPPED ROTATE TABLE
  255. TURN       MOV  R2,#TURNDIST     ;LOAD R2 WITH TURN DISTANCE COUNT
  256. BEGINTURN  MOV  A,@R0            ;LOAD ACC WITH HEAD VALUE
  257.            OUTL P1,A             ;LOAD THE TABLE VALUE TO THE MOTOR DRIVER
  258.            MOV  R7,#SPEEDCOR     ;WAIT BETWEEN STEPS (OUTER LOOP COUNTER)
  259. TURNING    MOV  R5,#SPEEDFIN     ;WAIT BETWEEN STEPS (INNER LOOP COUNTER)
  260.            DJNZ R5,$             ;DECREMENT THE INNER LOOP COUNTER
  261.            DJNZ R7,TURNING       ;DECREMENT THE OUTER LOOP COUNTER
  262.            INC  R0               ;POINT THE HEAD + 1 VALUE
  263.            DEC  R2               ;DECREMENT THE TURN DISTANCE COUNT
  264.            MOV  A,R2             ;IS TURN DONE?
  265.            JZ   TURNDONE         ;YES..TURN IS DONE
  266.            JF1  TAILLEFT         ;NO..DETERMINE WHICH TURN TABLE WE ARE IN
  267.            MOV  A,#RIGHTTAIL+1   ;WE ARE IN RIGHT STOPPED TABLE
  268.            JMP  COMPARE          ;GO FIND OUR LOCATION IN THE TURN TABLE
  269. TAILLEFT   MOV  A,#LEFTTAIL+1    ;WE ARE IN LEFT STOPPED TABLE
  270. COMPARE    XRL  A,R0             ;DETERMINE POSITION IN OUR TURN TABLE
  271.            JNZ  BEGINTURN        ;NOT BEYOND THE TAIL CONTINUE TO TURN
  272.            JF1  HEADLEFT         ;BEYOND TAIL..DETERMINE WHICH POINTER TO RESET
  273.            MOV  R0,#RIGHTHEAD    ;RESET THE RIGHT STOPPED TABLE POINTER
  274.            JMP  BEGINTURN        ;CONTINUE TO TURN
  275. HEADLEFT   MOV  R0,#LEFTHEAD     ;RESET THE LEFT STOPPED TABLE POINTER
  276.            JMP  BEGINTURN        ;CONTINUE TO TURN
  277. TURNDONE   MOV  R0,#HEAD         ;RESET THE POINTER TO FORWARD ROTATE TABLE
  278.            JMP  MOVEDONE         ;GET OUT OF THIS SUBROUTINE
  279.  
  280. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  281. ;                                                                             ;
  282. ;   REVERSE SUBROUTINE                                                        ;
  283. ;                                                                             ;
  284. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  285.  
  286. BACKITUP   CALL SETRIGHT         ;RESET THE MOTOR COUNTERS
  287.            CALL SETLEFT
  288.            MOV  R2,#REVDIST      ;LOAD THE REVERSE DISTANCE VALUE
  289. GOBACK     DEC  R0               ;REVERSE MODE - MOVE BACKWARDS IN ROTATE TABLE
  290.            MOV  A,#HEAD-1        ;CHECK R0 FOR END OF TABLE
  291.            XRL  A,R0             ;COMPARE R0 WITH VALUE IN ACC
  292.            JNZ  BACKUP           ;NOT BEYOND TABLE LIMITS-CONTINUE TO MOVE
  293.            MOV  A,#TAIL          ;RESET R0 TO TAIL VALUE
  294.            MOV  R0,A
  295. BACKUP     MOV  A,@R0            ;LOAD ACC WITH TABLE VALUE
  296.            OUTL P1,A             ;LOAD TABLE VALUE TO STEPPER MOTORS
  297. BACKWAIT   MOV  R7,#SPEEDCOR     ;WAIT BETWEEN STEPS (COARSE VALUE)
  298. WAITBACK   MOV  R5,#SPEEDFIN     ;WAIT BETWEEN STEPS (FINE VALUE)
  299.            DJNZ R5,$             ;DECREMENT THE INNER LOOP COUNTER
  300.            DJNZ R7,WAITBACK      ;DECREMENT THE OUTER LOOP COUNTER
  301.            DEC  R2
  302.            MOV  A,R2
  303.            JZ   BACKUPDONE
  304.            JMP  GOBACK
  305. BACKUPDONE RET
  306.  
  307. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  308. ;                                                                             ;
  309. ;   MOTOR SWITCH TOGGLE RATE INITIALIZATION SUBROUTINE                        ;
  310. ;                                                                             ;
  311. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  312.  
  313. SETRIGHT   MOV  R1,#STEPRIGHT    ;POINT TO RIGHT MOTOR STEP COUNTER
  314.            MOV  A,#STEPCOUNT     ;LOAD A WITH 24 STEPS
  315.            MOV  @R1,A            ;RELOAD RIGHT MOTOR STEP COUNTER TO 24 STEPS
  316.            RET
  317. SETLEFT    MOV  R1,#STEPLEFT     ;POINT TO LEFT MOTOR STEP COUNTER
  318.            MOV  A,#STEPCOUNT     ;LOAD A WITH 24 STEPS
  319.            MOV  @R1,A            ;RELOAD LEFT MOTOR STEP COUNTER TO 24 STEPS
  320.            RET
  321.            .END
  322.  
  323.