...$INCLUDE(p8052X2.PDF)

SWITCH1     EQU P0.3    ;SWITCH 1 INPUT
SWITCH2     EQU P0.4    ;SWITCH 2 INPUT
MODE        EQU P0.5    ;MODE SWITCH INPUT
DIROUT      EQU P2.7    ;DIRECTION OUT TO l297
STEPOUT     EQU P1.4    ;STEP OUT TO LM297
ENABLE      EQU P1.1    ;ENABLE TO LM297

XTAL        EQU 9600*2
TENMS       EQU -24576

MAIN:       JNB MODE,CONT100RPM ; JUMP IF MODE IS CONT

STEPW50:    JNB SWITCH1,STEPW100
            JNB SWITCH2,STEPW100
            LJMP STEPLOOP ;CODE HERE TO STEP
            CALL DELAY
            SJMP MAIN

STEPW100:   JB SWITCH2,STEPW150
            JNB SWITCH1,STEPW150
            lJMP STEPLOOP ;CODE HERE TO STEP
            CALL DELAY
            CALL DELAY
            ljmp MAIN

STEPW150:  JNB SWITCH1,STEPW200
            JB SWITCH2,STEPW200
            ljmp STEPLOOP ;CODE HERE TO STEP
            CALL DELAY
            CALL DELAY
            CALL DELAY
            ljmp MAIN

STEPW200:
            ljmp STEPLOOP
            CALL DELAY
            CALL DELAY
            CALL DELAY
            CALL DELAY
            ljmp MAIN

CONT100RPM:  ;667 1/2 steps/sec
            JNB SWITCH1,CONT150RPM
            JNB SWITCH2,CONT150RPM
            setb STEPOUT ; TURN ON STEP OUTPUT PIN
            CALL STEPON       ; LEAVE PIN ON 1uSEC
            clr STEPOUT  ; TURN OFF STEP OUTPUT PIN
                               ; NEED TO LEAVE PULS OFF FOR .001499 SEC
C100LOOP:   MOV R5,#07H        ; OUTER LOOP SET TO 7 TIMES
            MOV R6,#00H        ; INNER LOOP SET TO 256
C100LOOP4:  DJNZ R6,C100LOOP4  ; LOOP 256 TIMES
            DJNZ R5,C100LOOP4  ; LOOP 7 TIMES
            ljmp MAIN


CONT150RPM:  ;1000 1/2 steps/sec
            JB SWITCH2,CONT200RPM
            JNB SWITCH1,CONT200RPM
            setb STEPOUT ; TURN ON STEP OUTPUT PIN
            CALL STEPON       ; LEAVE PIN ON 1uSEC
            clr STEPOUT  ; TURN OFF STEP OUTPUT PIN
                               ; NEED TO LEAVE PULS OFF FOR .000999 SEC
C150LOOP:   MOV R5,#04H        ; OUTER LOOP SET TO 4 TIMES
            MOV R6,#00H        ; INNER LOOP SET TO 256
C150LOOP4:  DJNZ R6,C150LOOP4  ; LOOP 256 TIMES
            DJNZ R5,C150LOOP4  ; LOOP 4 TIMES
            ljmp MAIN

CONT200RPM:   ;1334 1/2 steps/sec
            JNB SWITCH1,CONT250RPM
            JB SWITCH2,CONT250RPM
            setb STEPOUT ; TURN ON STEP OUTPUT PIN
            CALL STEPON       ; LEAVE PIN ON 1uSEC
            clr STEPOUT  ; TURN OFF STEP OUTPUT PIN
                               ; NEED TO LEAVE PULS OFF FOR .000749 SEC
C200LOOP:   MOV R5,#03H        ; OUTER LOOP SET TO 3 TIMES
            MOV R6,#00H        ; INNER LOOP SET TO 256
C200LOOP4:  DJNZ R6,C200LOOP4  ; LOOP 256 TIMES
            DJNZ R5,C200LOOP4  ; LOOP 3 TIMES
            ljmp MAIN

CONT250RPM:   ;1667 1/2 steps/sec
            setb STEPOUT ; TURN ON STEP OUTPUT PIN
            CALL STEPON       ; LEAVE PIN ON 1uSEC
            clr STEPOUT  ; TURN OFF STEP OUTPUT PIN
                               ; NEED TO LEAVE PULS OFF FOR .000599 SEC
C250LOOP:   MOV R5,#02H        ; OUTER LOOP SET TO 2 TIMES
            MOV R6,#00H        ; INNER LOOP SET TO 256
C250LOOP4:  DJNZ R6,C250LOOP4  ; LOOP 256 TIMES
            DJNZ R5,C250LOOP4  ; LOOP 2 TIMES
            ljmp MAIN

;***************************************
STEPLOOP:    MOV R1,#200         ;LOOP COUNTER SET TO 200 TIMES
STEPLOOPER:  setb STEPOUT ; TURN ON STEP OUTPUT PIN
             CALL STEPON       ; LEAVE PIN ON 1uSEC
             clr STEPOUT  ; TURN OFF STEP OUTPUT PIN
             CALL STEPOFF
             DJNZ R1,STEPLOOPER
;***************************************
;***************************************
; .5 SEC DELAY ROUTINE
DELAY:      MOV R7,#0AH  ;OUTER LOOP COUNTER SET TO 10 TIMES
            MOV R5,#236  ;INNER LOOP COUNT SET TO 236 TIMES
LOOP2:      MOV R6,#00H  ;MIDDLE LOOP SET TO 256 TIMES
LOOP1:      DJNZ R5,LOOP1;LOOP 256 TIMES
            DJNZ R6,LOOP1;LOOP 236 TIMES
            DJNZ R7,LOOP2;LOOP 10 TIMES
            RET          ;RETURN PROGRAM
;***************************************
;***************************************
;         1 uSEC DELAY WHILE STEP PUSE OUTPUTTED
STEPON:     MOV R5,#02H ;LOOP SET TO 2 TIMES
LOOP3:      DJNZ R5,LOOP3;LOOP 2 TIMES
            RET
;***************************************
;***************************************
;          TIME OFF BETWEEN EACH STEP PULSE

STEPOFF:   MOV R5,#04H     ; OUTER LOOP SET TO 4 TIMES
            MOV R6,#00H     ; INNER LOOP SET TO 256
LOOP4:      DJNZ R6,LOOP4   ; LOOP 256 TIMES
            DJNZ R5,LOOP4   ; LOOP 4 TIMES
            RET
;***************************************


end

...