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

📄 完好自适应转速的检测128_32hz—键盘——微调.asm

📁 开发平台,任一MCS-51单片机上,很多程序,如键盘,显示,液晶驱动
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;电机驱动
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
POINT EQU  20H.0             ;用到20H位寻址位的20.0H作为控制正转和反转的标志位
SIGN  EQU   20H.1            ;周期CHANGE
SIGN_1  EQU  20H.2           ;用来指示TIME-0结束
SIGN_2  EQU  20H.3           ;指示1S过了
SIGN_3  EQU  20H.4           ;指示5S过了

SIGN_4  EQU   20H.5          ;指示10S过了
SIGN_5  EQU   20H.6          ;指示机器处在自动控制中
SIGN_6  EQU   20H.7          ;指示35S过了

ASESS_1   EQU  21H           ;用来放置T时间内的转速
ASESS_2   EQU  22H           ;存放差植
CASE_1    EQU  23H
CASE_2    EQU  24H
CASE_3    EQU  25H
CASE_4    EQU  26H
ASESS_3   EQU  27H             ;用来存放CLOCK
SIGN_7  EQU    28H.0         ;指示T0过了
SIGN_8  EQU    28H.1         ;周期切换
SIGN_9  EQU     28H.2
SIGN_10  EQU    28H.3
ASESS_4   EQU  44H              ;设定的转速
CHANGE_X1  EQU  34H
CHANGE_X2  EQU  35H


OUT_PUT_1 EQU P1.5
OUT_PUT_2 EQU P1.6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H
LJMP MAIN_1
ORG 03H
LJMP INT_0
;;;;;;;;;;
ORG 00BH
LJMP TIME_0
ORG 0013H
LJMP LOOP1
ORG 01BH
LJMP  TIME_T1
ORG 50H
MAIN_1: ;CLR   POINT     ;测试用的
        MOV SP,#48H     ;测试用的
        MOV IE,#0FFH
        ;SETB PT0
        SETB  IT1
        SETB  IT0
;;;;;;;;;;;;;;;;;;;
        MOV     R0,#7FH
CLEAR:  MOV     @R0,#0
        DJNZ    R0,CLEAR

        CLR     REST       ;复位
        LCALL   LDELAY
        SETB    REST
        LCALL   LDELAY
        LCALL   RESET      ;初始化
        LCALL   CLEARALL   ;清屏
        LCALL   JIEMIAN
;;;;;;;;;;;;;;;;;;;;
       ;AJMP $ ;测试用的
;;;;;;;;;;;;;;;;;;;;;
MAIN_2: CLR RS1  ;采用的工作寄存器组1
         SETB RS0
;;;;;;;;;;;;;;;;;;;;;;;;;
MOV TMOD,#51H ;;;;
MOV TL1,#00H
MOV TH1,#00H
MOV R7,#00H
MOV R3,#046H
MOV R4,#0A3H
MOV ASESS_3,#00H
MOV ASESS_2,#00H
MOV ASESS_1,#00H
SETB SIGN
SETB  SIGN_1
SETB SIGN_2
SETB SIGN_3
SETB SIGN_4
SETB SIGN_5
SETB  SIGN_6
SETB  SIGN_7
SETB  SIGN_8
SETB SIGN_9
SETB SIGN_10
SETB  OUT_PUT_1      ;初始化
SETB  OUT_PUT_2      ;初始化
  MOV ASESS_4,#10   ;测试用的                                                  ;;;;;;;;;;;;MOV TL0,#DCH;;;;;;;;;;;;

                                                    ;;;;;;;;;MOV TH0,#0BH;;;;;;;;;;
SETB TR0
SETB TR1

;;;;;;;;;;;;;;;;;周期自动转换程序 :周期1

LOGO:JB SIGN_10,LOGO2
     MOV ASESS_4,#10 
      
LOGO2:JB  SIGN_6,LOGO_1
      MOV R3,#02BH
      MOV R4,#1EH
      AJMP $

LOGO_1:JNB SIGN,STEUP
      ACALL CHANGE_1
      ACALL TIME_1

;;;;;;;;;;;;;;;;;;周期自动转换程序:周期2
STEUP:  ACALL CHANGE_2
;;;;;;;;
        JB SIGN_2,SETUP_61
        JNB SIGN_4,SETUP_61                  ;;;;;;;;;;;待电机启动1S过后自动进行数据比较,添装
        CLR C
        MOV A,ASESS_4
        CJNE  A,ASESS_1,SETUP_4
        AJMP SETUP_6
                             ;;;;;;;;;;;数据比较添装区
SETUP_61:LJMP SETUP_6

SETUP_4:
         SUBB A,ASESS_1
         JC  SETUP_5
          MOV ASESS_2,A     ;要加速
          CLR C
          CJNE A,#20H,FAST_0
FAST_0:   JC  FAST_1     ;<32
          MOV  CASE_2,#00H            ;>32 ;一级调速
          MOV  CASE_1,#7CH
          LJMP CPU_2

FAST_1:   CLR C
          MOV A,ASESS_2
          CJNE A,#10H,FAST_2
FAST_2:   JC   FAST_3      ;<16
          MOV  CASE_2,#00H            ;>16/////;二级调速
          MOV  CASE_1,#3EH
          LJMP CPU_2

FAST_3:   CLR C
          MOV A,ASESS_2
          CJNE A,#08H,FAST_4
FAST_4:   JC FAST_5  ;<8      ;三级调速
          MOV  CASE_2,#00H    ;>8          ;要加速
          MOV  CASE_1,#5DH
          LJMP CPU_2

FAST_5:  CLR C
         MOV A,ASESS_2
         CJNE A,#03H,FAST_6

FAST_6:  JC  FAST_7 ;<2
         MOV  CASE_2,#00H    ;>=3   ;四级调速
         MOV  CASE_1,#7cH
         LJMP CPU_2
FAST_7:  MOV  CASE_2,#00H    ;>3
         MOV  CASE_1,#3eH             ;要加速
         LJMP CPU_2


CPU_2:    LCALL CPU_1
          CLR C
          MOV A,R3
          ADD A,CASE_3
          MOV R3,A
          MOV A,R4
          ADDC A,CASE_4
          MOV R4,A
          AJMP SETUP_6
SETUP_5: CLR C
         MOV A,ASESS_1   ;要减速
         SUBB A,ASESS_4
         MOV ASESS_2,A    ;电机步进参数
          CLR C
          CJNE A,#20H,FASTX_0
FASTX_0:  JC  FASTX_1     ;<32
          MOV  CASE_2,#00H            ;>32
          MOV  CASE_1,#7CH
          LJMP CPU_3

FASTX_1:   CLR C
          MOV A,ASESS_2
          CJNE A,#10H,FASTX_2
FASTX_2:  JC   FASTX_3      ;<16
          MOV  CASE_2,#00H            ;>16
          MOV  CASE_1,#3EH
          LJMP CPU_3

FASTX_3:   CLR C
          MOV A,ASESS_2
          CJNE A,#08H,FASTX_4
FASTX_4:  JC FASTX_5  ;<8
          MOV  CASE_2,#00H    ;>8          ;要减速
          MOV  CASE_1,#5DH
          LJMP CPU_3

FASTX_5:  CLR C
         MOV A,ASESS_2
         CJNE A,#03H,FASTX_6

FASTX_6:  JC  FASTX_7 ;<2
         MOV  CASE_2,#00H    ;>=2
         MOV  CASE_1,#7cH
         LJMP CPU_3
FASTX_7: MOV  CASE_2,#00H    ;>2
         MOV  CASE_1,#3eH             ;要减速
         LJMP CPU_3

CPU_3:   LCALL CPU_1
         CLR C
         MOV A,R3
         SUBB A,CASE_3
         MOV R3,A
         MOV A,R4
         SUBB A,CASE_4
         MOV R4,A
         AJMP SETUP_6











;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SETUP_6:CJNE R7,#10H,SETUP_D ;转到时钟程序(要记得加返回指令噢!)
        LCALL CLOCK

SETUP_D: JNB SIGN_8,SETUP_E
         ;;LCALL ??  ;调用键盘扫描 /////////////
         AJMP SETUP_F
SETUP_E:  LCALL LCM
SETUP_F: JB SIGN_1,SETUP_1 ;用来识别TIME-0结束
         AJMP SETUP_F  ;;;;;;;;;;;;;
SETUP_1:AJMP LOGO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;基准时钟                  ;;;;左转为正转,右转为反转,
TIME_0: JB SIGN,TIME_3
        CLR TR0 ; ??????
        JB POINT,OUT_1
        CPL OUT_PUT_1
        RETI
OUT_1:  CPL  OUT_PUT_2
        RETI


TIME_3:  JNB SIGN_7,T_3
         MOV TL1,R3
         MOV TH1,R4

         MOV TL0,#0EEH ;定时器0初始化
         MOV TH0,#85H ;定时器0初始化
         CPL  SIGN_7
         SETB TR1  ;????
         JB POINT,OUT
         CPL OUT_PUT_1     ;PWM脉宽输出32HZ                    ;;;正转是POINT为0,反转是POIN为1
         RETI
OUT:     CPL  OUT_PUT_2
         RETI


T_3:    JB POINT,OUT_E
        CPL OUT_PUT_1
        AJMP T_R
OUT_E:  CPL  OUT_PUT_2

T_R:    CPL  SIGN_7
         CLR SIGN_9 ;;????
        INC R7
        ;CJNE R7,#10H,T_4 ;转到时钟程序(要记得加返回指令噢!)
        ;LCALL CLOCK
T_4:    CPL SIGN_1
        MOV TMOD,#51H
        CLR SIGN_2    ;指示1S过了
        SETB TR1  ;????????
        RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;驱动程序    ;;;;左转为正转,右转为反转,
                                            ;;;正转是POINT为0,反转是POIN为1
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;转速的检测程序


IN_PUT:MOV A,TL1
       MOV ASESS_1,A
       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;软件定时31.25ms
TIME_1:MOV R5,#125
DEL:  MOV R6,#123
      NOP
DEL_1:DJNZ R6,DEL_1
      DJNZ R5,DEL
;===================

      JB POINT,OUT_X
      CPL OUT_PUT_1
      MOV TL0,R3
      MOV TH0,R4
      SETB TR0 ;???????
      AJMP TIME_X
OUT_X:CPL  OUT_PUT_2
      MOV TL0,R3
      MOV TH0,R4
      SETB TR0  ;???????

;======================软件定时31.25ms
TIME_X:MOV R5,#125
DEL_X:MOV R6,#123
      NOP
DEL_X1:DJNZ R6,DEL_X1
      DJNZ R5,DEL_X
;===================
      MOV TL0,#00H ;;防止T0定时器益出
      MOV TH0,#00H
      SETB TR0 ;???????
      JB SIGN_9,DEL_Y
       CPL SIGN_8
       INC R7
DEL_Y: CPL SIGN_1
      ACALL IN_PUT ;M法测速TC=62.5ms
      MOV TMOD,#11H
      JB POINT,OUT_3
      CPL OUT_PUT_1
RET
OUT_3:CPL  OUT_PUT_2
RET

;;;;;;;;;;;;;;;;;;;;周期自动转换子程序
CHANGE_1: CPL SIGN
          MOV TL0,R3
          MOV TH0,R4
          MOV TL1,#00H
          MOV TH1,#00H
          RET
CHANGE_2:CPL SIGN
         MOV TL1,R3
         MOV TH1,R4
         MOV TL0,#0EEH ;定时器0初始化
         MOV TH0,#85H ;定时器0初始化
         RET
;;;;;;;;;;;;;;;;;;;;;;;;定时器1中断
TIME_T1:CLR TR1 ;?????
       JB POINT,OUT_2
        CPL OUT_PUT_1
        RETI
OUT_2: CPL  OUT_PUT_2
        RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;; 时钟显示1S调用
CLOCK: MOV R7,#00H
       INC ASESS_3
       JB  SIGN_5,CLOCK_1
       MOV A,ASESS_3
       CJNE A,#5H,CLOCK_2

       CLR  SIGN_3
       MOV ASESS_4,#03H
       AJMP  CLOCK_1
CLOCK_2:MOV A,ASESS_3
        CJNE A,#0AH,CLOCK_3
        CLR SIGN_4
        MOV R3,#0DEH
        MOV R4,#0FFH
        AJMP CLOCK_1

CLOCK_3:MOV A,ASESS_3
        CJNE A,#23H,CLOCK_1
        CLR SIGN_6
        LCALL LCM ;调用LCD
        SETB SIGN_5
        AJMP $




        ;LCALL LCM ;调用LCD
        ;CLR TR0  ;测试用的
        ;CLR TR1  ;测试用的
       ; AJMP $  ;测试用的

CLOCK_1:MOV A,ASESS_3
       CJNE A,#64H,LCD_1
       MOV ASESS_3,#00H
       RET
LCD_1: LCALL LCM  ;调用LCD
       RET


⌨️ 快捷键说明

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