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

📄 1.asm

📁 微步动作,有正反转,有加减速,可以分步全自动
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 ;##################################################################
 ;                                                                 #
 ;                  位移电机左右动作    步进电机控制  (1-2相励磁) #
 ;                 可以调步数                                      #
 ;                                                                 #
 ;         P3.0启动试验
 ;                                                 李斌            #
 ;                                                                 #
 ;##################################################################


;            p1.3为跨度开关,为低时允许P3.3口的负沿脉冲触发中断,
;     并对P1.1   P1.0的脉冲做两种不同的状记录,如,P1.0做加处理工作,
;     P1.1做减处理工作,以完成内部两个存储单元的内容的调节.

     ddL EQU  59H
     ddH EQU  58H
         ORG 00H
         LJMP CHUSHI
         ORG 13H
          LJMP INT1INTER
;##################     开机动  位移电机动作步数初置100步 ##################
         ORG 100h
  CHUSHI:mov ddl,#00h  ;脉冲数据调节区初始置零
         mov ddh,#00h  ;脉冲数据调节区初始置零
         mov 40h,#00H  ;1段
         mov 41h,#64H
         mov 42h,#00H  ;2段      ;反转(由右往中心点)
         mov 43h,#64H
         mov 44h,#00H  ;3段      ;反转(由中心点往左)
         mov 45h,#64H
         mov 46h,#00H  ;4段       ;正转(由左往中心点)
         mov 47h,#64H               ;正转(由左往中心点)
         mov 48h,#00H  ;5段           ;正转(由左往中心点)
         mov 49h,#64H                 ;正转(由左往中心点)
         mov 4Ah,#00H   ;6段
         mov 4Bh,#64H
         mov 4Ch,#00H   ;7段
         mov 4Dh,#64H
         mov 4Eh,#00H   ;8段
         mov 4Fh,#64H

;######################   复位到中间点    ##################################
  START:JNB P3.5,TOZ                ;开始检测位移传感原位
    TOF:mov r0,#00h                 ;反转到tab取码指针初值
   TOF1:mov a,r0
        mov dptr,#tablez            ;取码
        movc a,@a+dptr
        jz TOF                  ;是否到了结束码00h
        ANL a,#11110000B     ;取码的高4位
        ANL P1,#00001111B     ;取P1口的低4位
        ORL A,P1            ;调整后的P1口的高4位与低4位合并
        MOV P1,A            ;P1口回送
        MOV P1,A            ;P1口输出
        SETB P1.2           ;开位移电机电源控制
        call delay3         ;电机速度(通电间断时间)
        jnb P3.5,stopp      ;断后是否到位,若到位,则进入停机
        mov p1,#0bh         ;相断电
        inc r0                ;没到位,取下一个码
        ljmp TOF1              ;继续反转
  stopp:dec r0                ;反转的下个相序,将要由这反转
        ljmp TOZ1
    TOZ:mov r0,#00h                 ;反转到tab取码指针初值
   TOZ1:mov a,r0                    ;取码
        mov dptr,#tablef             ;
        movc a,@a+dptr
        jz TOZ                   ;是否到了结束码00h
        ANL a,#11110000B  ;取码的高4位
        ANL p1,#00001111B    ;取P1口的低4位
        ORL A,P1            ;调整后的P1口的高4位与低4位合并
        MOV P1,A            ;P1口输出
        SETB P1.2           ;开电机电源控制
        call delay3
        jb P3.5,stop        ;判断正转是否到位
        mov p1,#0bh       ;断相电源
        inc r0              ;取下一个码
        ljmp TOZ1             ;继续正转
    stop:mov p1,#0fbh                ;步进电机停止,关电机电源

;#################    与主芯片的通信子程  ####################################
    ;
                ; (预设1#为此芯片的地址)
       ; RS:
       ;    ORG  0000H
   ; RSMAIN:MOV  TMOD,#20H    ;设置波特率
    ;       MOV  TL1,#0FAH
    ;       MOV  TH1,#0FAH
     ;      SETB  TR1
     ;      MOV  SCON,#0F8H     ;从机工作于方式3,REN=1,SM2=1,TB8=1
     ;      MOV  PCON,#00H
     ;      CLR  EA               ;关中断
     ;      CLR  RI                ;清接收标志
  ; RSWAIT:JBC  RI,JSDZ          ;接收等待
  ;        AJMP  RSWAIT
  ;   JSDZ:MOV  A ,SBUF        ;读接收地址
  ;        XRL  A,#01H           ;与本机地址比较
  ;        JNZ  RSWAIT             ;不是呼叫本机返回
  ;        CLR  SM2              ;若呼叫本机,打开数据接收
  ;        MOV  SBUF,#02H       ;回送本机地址
  ; WAIT1:JBC  RI,CONT1        ;等待主机回应
  ;        AJMP  WAIT1
  ; CONT1:JNB  RB8,CONT2    ;联络失败,1#从机复位,置位SM2,等待接收地址
  ;       SETB  SM2
  ;       AJMP  RSWAIT
  ; CONT2:MOV A,SBUF        ;联络成功,读主机命令(数据)
  ;       CPL  A
   ;      MOV  P1,A            ;驱动发光二极管显示本机地址号
   ;;      SETB  SM2           ;重置地址接收状态
   ;      AJMP  RSWAIT          ;返回
   ;
   ;

;###########    合并(调节的步数与以前的步数整合)   #########
       ZH:MOV 40H,60H
           MOV 41H,61H
           MOV 42H,62H
           MOV 43H,63H
           MOV 44H,64H
           MOV 45H,65H
           MOV 46H,66H
           MOV 47H,67H
           MOV 48H,68H
           MOV 49H,69H
           MOV 4AH,6AH
           MOV 4BH,6BH
           MOV 4CH,6CH
           MOV 4DH,6DH
           MOV 4EH,6EH
           MOV 4FH,6FH




;##################    等待动作(转, 送脉冲)     ################################
         MOV SP,#70H
   WAIT:;jnb P0.x5,                ;某动作
         ;jnb P0.x,
         ;P3.4                  ;试做为自动/手动开关
         jnb p1.3, oninter
         MOV IE,#00000000B
     OOO:jnb p3.0 ,hui00    ;有操作
         LJMP IN1
     IN1:ljmp ZH                ;反复监测键盘
  oninter:MOV IE,#10010100B
          SETB IT1
          LJMP OOO

;##################   正转  反转  ###################################################
;############   正转1    ##################################

   hui00:SETB 20H.0       ; 本次的标志位置1
         inc r0            ;换向时,相序调到对应相
         mov a,r0
         ljmp for1
     for:mov r0,#00h      ;正转到tab取码指针初值
    for1:mov a,r0              ;取码
         mov dptr,#tablef           ;
         movc a,@a+dptr
         jz for             ;是否到了结束码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        ;相断电

         mov a,41h
         jz g1             ;判断正转步数是否完成
         dec 41h
         ljmp n1
      g1:mov a,40h
         jz hui1
         mov 41h,#0FFH
         DEC 40H
      n1:lcall delay1        ;转动的辅助速度(时间间隔)
         inc r0               ;没走完总步数,则取下一个码
         ljmp for1              ;继续正转
    hui1:lcall delay2          ;转完后停会后再转
         JNB p1.3,h2
                             ; jb p3.4 ,h3 (将来与自动状态接口用)
         ljmp PP10            ;设步数完成后,若有调节步数,则完成调节步数
     h2: MOV A,41H
         CJNE A,#00H,PP1
         MOV A,40H
         CJNE A,#00H,PP1
         LJMP PP10
     PP1:INC R0
         LJMP FOR1             ;完成调节步数后,将等第二次的启动信号
    PP10:JNB P3.0, hui202
         LJMP h2               ;若没有启动,则再次问有否要再走的步数
    hui202:clr 20h.0           ;清本次标志位


;#########################   反转1     ##############################

   hui22:SETB 20H.1        ; 本次的标志位置1
         inc r0            ;换相序时,指向对应的下一相
         mov a,r0
         ljmp rev1
     rev:mov r0,#00h         ;反转到tab取码指针初值
    rev1:mov a,r0
         mov dptr,#tablez    ;取码
         movc a,@a+dptr
         jz rev              ;是否到了结束码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,43h
         jz g2
         dec 43h
         ljmp n2
      g2:mov a,42h
         jz   hui2
         mov 43h,#0ffh
         dec 42h
                     ;判断正转步数是否完成
      n2:lcall delay1         ;转动的速度
         inc r0               ;没走完,则取下一个码
         ljmp rev1              ;继续反转
    hui2:lcall delay2          ;转完后停会后再转
         JNB p1.3,h3
                                 ; jb p3.4 ,h3 (将来与自动状态接口用)
         ljmp  PP20            ;设定的步数完成后,若有调节步数,则完成调节步数
     h3: MOV A,43H
         CJNE A, #00H,PP2
         MOV A,42H
         CJNE A,#00H,PP2
         LJMP PP20
     PP2:INC R0
         LJMP rev1                ;
    pp20:
         JNB P3.0, hui303        ;完成调节步数后,将等第三次的启动信号
         LJMP h3                ;若没有启动,则再次问有否要再走的步数
  hui303:CLR 20H.1          ;清本次标志位


;#########################   反转2     ##############################

    hui33:CLR 20H.1        ; 清上次动作的标志位
          SETB 20H.2        ; 本次的标志位置1

          inc r0            ;换相序时,指向对应的下一相
          mov a,r0
          ljmp rev11
     revv:mov r0,#00h         ;反转到tab取码指针初值
    rev11:mov a,r0
          mov dptr,#tablez    ;取码
          movc a,@a+dptr
          jz revv              ;是否到了结束码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         ;相断电
          mov a,45h
          jz g3
          dec 45h               ;每走一步,总步数减1
          ljmp n3
       g3:mov a,44h
          jz hui3
          mov 45h,#0ffh
          dec 44h
                          ;判断正转步数是否完成
       n3:lcall delay1         ;转动的速度
          inc r0               ;没走完,则取下一个码
          ljmp rev11          ;继续反转

⌨️ 快捷键说明

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