⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.asm

📁 微步动作,有正反转,有加减速,可以分步全自动
💻 ASM
📖 第 1 页 / 共 2 页
字号:
     hui3:lcall delay2          ;转完后停会后再转
          JNB p1.3,h4
                             ;jb p3.4 ,h3 (将来与自动状态接口用)
          ljmp PP30
      h4: MOV A,45H
          CJNE A,#00H,PP3
          MOV A,44H
          CJNE A,#00H,PP3
          LJMP PP30
      PP3:INC R0
          Ljmp  rev11
     PP30:JNB P3.0,hui404     ;完成调节步数后,将等第三次的启动信号
          LJMP h4          ;若没有启动,则再次问有否要再走的步数
   hui404:CLR 20H.2  ;清本次标志位

;############   正转2    ##################################

   hui44:SETB 20H.3        ; 本次的标志位置1
         inc r0            ;换向时,相序调到对应相
         mov a,r0
         ljmp for11
    forr:mov r0,#00h      ;正转到tab取码指针初值
   for11:mov a,r0              ;取码
         mov dptr,#tablef           ;
         movc a,@a+dptr
         jz forr                  ;是否到了结束码00h
         ANL A,#11110000B  ;取码的高4位
         ANL P1,#00001111B    ;取P1口的低4位
         ORL A,P1            ;调整后的P1口的高4位与低4位合并
         MOV P1,A            ;P1口输出
         SETB P1.2           ;开电机电源控制
         lcall delay0          ;电机速度(时间间断)
         mov p1,#0bh        ;相断电
                ;每走一步,总步数减1
         mov a,47h
         jz g4
         dec 47h
         ljmp n4
      g4:
         mov a,46h
         jz hui4
         mov 47h,#0ffh
         dec 46h
                             ;判断正转步数是否完成
      n4:lcall delay1        ;转动的辅助速度(时间间隔)
         inc r0               ;没走完总步数,则取下一个码
         ljmp for11              ;继续正转
    hui4:lcall delay2          ;转完后停会后再转
         JNB p1.3,h5
                               ;jb p3.4 ,h3 (将来与自动状态接口用)
         LJMP PP40
     h5: MOV A,47H
         CJNE A,#00H,PP4
         MOV A,46H
         CJNE A,#00H,PP4
         LJMP PP40
     PP4:INC R0
         Ljmp  for11
    PP40:JNB P3.0,STOPPP
         LJMP  h5
  STOPPP:CLR 20H.3   ;清本次标志位
         LJMP ZH    ;完成了一个周期,回到待机状态

;###################    脉冲加减输入中断程序    #######################


INT1INTER:PUSH PSW
          PUSH ACC
          SETB RS0
PULSEIN:JB P1.3,XX0     ;三个位均为低时,为加操作,否则查看是不是减操作
        JB P1.0,XX0
        JB P3.3,XX0
        LJMP XXX0
      XX0:LJMP XXXX0
   XXX0:JB 20H.0 ,C0    ;判断是哪部分
        JB 20H.1 ,C1
        JB 20H.2 ,C2
        JB 20H.3 ,C3
        JB 20H.4 ,C4
        JB 20H.5 ,C5
        JB 20H.6 ,C6
        JB 20H.7 ,C7
    C0:MOV DDL,61H     ;将要调节部分的原步数送回来加
       MOV DDH,60H
       LJMP JIA
    C1:MOV DDL,63H
       MOV DDH,62H
       LJMP JIA
    C2:MOV DDL,65H
       MOV DDH,64H
       LJMP JIA
    C3:MOV DDL,67H
       MOV DDH,65H
       LJMP JIA
    C4:MOV DDL,69H
       MOV DDH,68H
       LJMP JIA
    C5:MOV DDL,6BH
       MOV DDH,6AH
       LJMP JIA
    C6:MOV DDL,6DH
       MOV DDH,6CH
       LJMP JIA
    C7:MOV DDL,6FH
       MOV DDH,6EH

    JIA:MOV A,DDL         ;加到上限后,不再加,以0FFH为准
        CJNE A,#0FFH,JJ
        MOV A,DDH
        CJNE A,#0FFH,JJ
        LJMP KK
     JJ:MOV A,DDL        ;加处理
        INC A
        JZ RRR
        INC DDL
        LJMP H0
    RRR:MOV A,DDH
        INC A
        JZ KK
        MOV DDL,#00H
        INC DDH
        LJMP H0
     KK:MOV DDL,#0FFH
        MOV DDH,#0FFH
     H0:LJMP HH   ;加处理总退出

  XXXX0:JB P1.3 ,XX1    ;三个位均为低时,为减操作,否则退出
        JB P1.1 ,XX1
        JB P3.3 ,XX1
        LJMP XX2
    XX1:LJMP HH
   XX2:JB 20H.0 ,CC0     ;判断是哪部分
       JB 20H.1 ,CC1
       JB 20H.2 ,CC2
       JB 20H.3 ,CC3
       JB 20H.4 ,CC4
       JB 20H.5 ,CC5
       JB 20H.6 ,CC6
       JB 20H.7 ,CC7
   CC0:MOV DDL,61H         ;将要调节部分的原步数送回来加
       MOV DDH,60H
       LJMP JIAN
   CC1:MOV DDL,63H
       MOV DDH,62H
       LJMP JIAN
   CC2:MOV DDL,65H
       MOV DDH,64H
       LJMP JIAN
   CC3:MOV DDL,67H
       MOV DDH,65H
       LJMP JIAN
   CC4:MOV DDL,69H
       MOV DDH,68H
       LJMP JIAN
   CC5:MOV DDL,6BH
       MOV DDH,6AH
       LJMP JIAN
   CC6:MOV DDL,6DH
       MOV DDH,6CH
       LJMP JIAN
   CC7:MOV DDL,6FH
       MOV DDH,6EH
 JIAN: MOV A,DDL        ;减到底限后,不再减,以#00H 为准
       CJNE A,#00H,JJJ
       MOV A,DDH
       CJNE A,#00H,JJJ
       LJMP MM
   JJJ:MOV A,DDL       ;减处理
       JNZ PP
       MOV A,DDH
       JNZ LL
       LJMP MM
    PP:DEC DDL
       LJMP HH
    LL:MOV DDL,#0FFH
       DEC DDH
       LJMP HH
    MM:MOV DDL,#00H
       MOV DDH,#00H     ;减退出
    HH:JB 20H.0 ,CCC0    ;退出,判断是哪部分的
       JB 20H.1 ,CCC1
       JB 20H.2 ,CCC2
       JB 20H.3 ,CCC3
       JB 20H.4 ,CCC4
       JB 20H.5 ,CCC5
       JB 20H.6 ,CCC6
       JB 20H.7 ,CCC7
  CCC0:MOV 61H,DDL    ;将调节的步数送出
       MOV 60H,DDH
       LJMP HHH
  CCC1:MOV 63H,DDL
       MOV 62H,DDH
       LJMP HHH
  CCC2:MOV 65H,DDL
       MOV 64H,DDH
       LJMP HHH
  CCC3:MOV 67H,DDL
       MOV 65H,DDH
       LJMP HHH
  CCC4:MOV 69H,DDL
       MOV 68H,DDH
       LJMP HHH
  CCC5:MOV 6BH,DDL
       MOV 6AH,DDH
       LJMP HHH
  CCC6:MOV 6DH,DDL
       MOV 6CH,DDH
       LJMP HHH
  CCC7:MOV 6FH,DDL
       MOV 6EH,DDH
   HHH:POP PSW         ;总退出
       POP ACC
       RETI


 ;######################  延时时间   #########################

delay0: MOV TMOD,#00000001B     ;定时0设为方式1
       MOV TL0,#060H            ;11.0592M的晶振,定时0.5MS
       MOV TH0,#0FEH
       SETB TR0
       SETB EA
    DE:JBC TF0,D0
       SJMP DE
    D0:RETI

delay1:push psw
       push acc
       setb psw.7
   de2:mov r6,#7
   de3:mov r5,#3
       djnz r5,$
       djnz r6,de3
       clr psw.7
       pop acc
       pop psw
       ret

delay2:push psw
       push acc
       setb psw.7
   d2:mov r6,#250
   d3:mov r5,#250
   d4:mov r4,#1
       djnz r4,$
       djnz r5,d4
       djnz r6,d3
       clr psw.7
       pop acc
       pop psw
       ret

delay3:push psw
       push acc
       setb psw.7
   d22:mov r6,#60
   d33:mov r5,#10
       djnz r5,$
       djnz r6,d33
       clr psw.7
       pop acc
       pop psw
       ret

;#################    相序通电表   #################################################
tablef: DB 94h,14h,34h,24h,64h,44h,0C4h,84h       ;电机反转表 A-AB-B-BC-C-CD-D-DA
        DB 00H
tablez: DB 94h,84h,0C4h,44h,64h,24h,34h,14h       ;电机正转表 A-AD-D-DC-C-CB-B-BA
        DB 00H
       END


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -