自己写的步进电机程序

 ;步进电机程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

          Z45   EQU   16

          Z5    EQU   1

          ZY    EQU   2

          K1 EQU P0.0           ; 正转

          K2 EQU P0.1           ; 反转

          K3 EQU P0.2           ; 停止

          K4 EQU P0.3           ; 加速

          K5 EQU P0.4           ; 减速

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        ORG   0000H

        JMP   MAIN

        ORG   0003H

        LJMP   INT0

        ORG   0013H

        LJMP   INT1

        ORG   0030H

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 MAIN:  SETB EA                 ;开中断

        SETB EX0

        SETB EX1

STOP:  MOV P1,#0F0H             ;步进电机停止

LOOP:  JNB K1,Z_M2              ;是否按K1,是则正转

       JNB K2,F_M2              ;是否按K2,是则反转

       JNB K3,STOP1             ;是否按K3,是则停止

       JMP LOOP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

INT0:

        MOV R0, #00H

        MOV R7, #Z5

        LCALL LP1

        RETI

 

INT1:

        MOV R0, #00H

        MOV R7, #Z45

        LCALL LP1

        RETI

 

LP1:

        MOV R0, #00H

        MOV R1, #ZY

LP2:

        MOV A, R0

        MOV DPTR, #TABLE_F

        MOVC A,@A+DPTR

        MOV P1, A

        LCALL DELAY

        INC R0

        JNZ LP2

 

        MOV R0, #00H

        DJNZ R1, LP2

        MOV R1, #ZY

        DJNZ R7, LP2

        MOV P1, #0F0H

        RET

 STOP1: ACALL DELAY             ;按K3消抖

       JNB K3, $

       ACALL DELAY

       JMP STOP

 

Z_M2:  ACALL DELAY              ;按K1消抖

       JNB K1, $

       ACALL DELAY

       JMP Z_M

F_M2:  ACALL DELAY              ;按K2消抖

       JNB K2, $

       ACALL DELAY

       JMP F_M

;----------正转子程序

Z_M:   MOV R0,#00H              ;正转常速

Z_M1:  MOV A, R0

       MOV DPTR, #TABLE_Z

       MOVC A,@A+DPTR

       MOV P1, A

       ACALL DELAY

       INC R0

       JNZ Z_M1

       JNB K3,STOP1             ;判断K3是否按下,是则停止

       JNB K2,F_M2              ;判断K2是否按下,是则反转常速

       JNB K4,JIA_Z             ;正转加速

       JNB K5,JIAN_Z            ;正转减速

       JMP Z_M

JIA_Z:  MOV R0,#00H             ;正转加速

Z_JIA:  MOV A, R0

       MOV DPTR, #TABLE_Z

       MOVC A,@A+DPTR

       MOV P1, A

       ACALL DELAY1

       INC R0

       JNZ Z_JIA

       JNB K3,STOP1             ;判断K3是否按下,是则停止

       JNB K2,F_M2              ;判断K2是否按下,是则反转常速

       JNB K5,JIAN_Z            ;正转减速

       JNB K1,Z_M2              ;判断K1是否按下,是则正转转常速

       JMP JIA_Z

JIAN_Z:  MOV R0,#00H            ;正转减速

Z_JIAN:  MOV A, R0

       MOV DPTR, #TABLE_Z

       MOVC A,@A+DPTR

       MOV P1, A

       ACALL DELAY2

       INC R0

       JNZ Z_JIAN

       JNB K3,STOP1             ;判断K3是否按下,是则停止

       JNB K2,F_M2              ;判断K2是否按下,是则反转常速

       JNB K4,JIA_Z             ;正转加速

       JNB K1,Z_M2              ;判断K1是否按下,是则正转转常速

       JMP JIAN_Z

       RET

STOP2: ACALL DELAY              ;按K3消抖

       JNB K3, $

       ACALL DELAY

       JMP STOP

Z_M3:  ACALL DELAY              ;按K1消抖

       JNB K1, $

       ACALL DELAY

       JMP Z_M

F_M3:  ACALL DELAY              ;按K2消抖

       JNB K2, $

       ACALL DELAY

       JMP F_M

;----------反转子程

F_M:   MOV R0, #00

       MOV R1, #01

F_M1:  MOV A, R0

       MOV DPTR, #TABLE_F

       MOVC A,@A+DPTR

       MOV P1, A

       ACALL DELAY

       INC R0

       JNZ F_M1

       JNB K3,STOP2             ;判断K3是否按下,是则停止

       JNB K1,Z_M3              ;判断K1是否按下,是则正转常速

       JNB K4,JIA_F             ;反转加速

       JNB K5,JIAN_F            ;反转减速

       JMP F_M

JIA_F:   MOV R0, #00H

F_JIA:  MOV A, R0

       MOV DPTR, #TABLE_F

       MOVC A,@A+DPTR

       MOV P1, A

       ACALL DELAY1

       INC R0

       JNZ F_JIA

       JNB K3,STOP2             ;判断K3是否按下,是则停止

       JNB K2,F_M3              ;判断K2是否按下,是则反转常速

       JNB K5,JIAN_F            ;反转减速

       JNB K1,Z_M3              ;判断K1是否按下,是则正转常速

       JMP JIA_F

JIAN_F:   MOV R0, #00H

F_JIAN:  MOV A, R0

       MOV DPTR, #TABLE_F

       MOVC A,@A+DPTR

       MOV P1, A

       ACALL DELAY2

       INC R0

       JNZ F_JIAN

       JNB K3,STOP2             ;判断K3是否按下,是则停止

       JNB K2,F_M3              ;判断K2是否按下,是则反转常速

       JNB K4,JIA_F             ;反转加速

       JNB K1,Z_M3              ;判断K1是否按下,是则正转常速

       JMP JIAN_F

       RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

 

DELAY: MOV 30H,#8                  ;延时 4ms

D0:    MOV 31H, #250

       DJNZ 31H, $

       DJNZ 30H, D0

       RET

 

DELAY1: MOV 30H,#5                 ;延时 2.5ms

D1:    MOV 31H, #250

       DJNZ 31H, $

       DJNZ 30H, D1

       RET

 

DELAY2:MOV 30H,#15                 ;延时 7.5ms

D2:    MOV 31H, #250

       DJNZ 31H, $

       DJNZ 30H, D2

       RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TABLE_Z:                                  ;反转运行时序表

       DB 0F8H, 0FCH, 0F4H, 0F6H, 0F2H, 0F3H, 0F1H, 0F9H

       DB 00H                             ;反转结束标记

TABLE_F:                                  ;正转运行时序表

       DB 0F9H, 0F1H, 0F3H, 0F2H, 0F6H, 0F4H, 0FCH, 0F8H

       DB 00H                             ;正转结束标记

 

       END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值