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

📄 完好自适应转速的检测128_32hz.asm

📁 开发平台,任一MCS-51单片机上,很多程序,如键盘,显示,液晶驱动
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;电机驱动
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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过了
ASESS_4   EQU  40H              ;设定的转速


OUT_PUT_1 EQU P1.5
OUT_PUT_2 EQU P1.6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H
  LJMP MAIN_1
;;;;;;;;;;
ORG 00BH
LJMP TIME_0
ORG 0013H
LJMP INT_1
ORG 01BH
LJMP  TIME_T1
ORG 50H
MAIN_1: CLR   POINT     ;测试用的
        MOV SP,#50H     ;测试用的
        MOV IE,#0FFH
        ;SETB PT0
        ;SETB  IT1
;;;;;;;;;;;;;;;;;;;
        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,#0D0H
MOV R4,#8AH
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  OUT_PUT_1      ;初始化
SETB  OUT_PUT_2      ;初始化
 MOV ASESS_4,#0fH   ;测试用的                                                  ;;;;;;;;;;;;MOV TL0,#DCH;;;;;;;;;;;;

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

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

LOGO: JB  SIGN_6,LOGO_1
      MOV R3,#02BH
      MOV R4,#1EH
      RETI

LOGO_1:JNB SIGN,STEUP
      ACALL CHANGE_1
      ACALL TIME_1

;;;;;;;;;;;;;;;;;;周期自动转换程序:周期2
STEUP:  ACALL CHANGE_2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        JB SIGN_2,SETUP_6
        JNB SIGN_4,SETUP_6                  ;;;;;;;;;;;待电机启动1S过后自动进行数据比较,添装
        CLR C
        MOV A,ASESS_4
        CJNE  A,ASESS_1,SETUP_4
        AJMP SETUP_6
                             ;;;;;;;;;;;数据比较添装区
SETUP_4:
         SUBB A,ASESS_1
         JC  SETUP_5
         MOV ASESS_2,A     ;要加速
         CJNE A,#01H,SETUP_10 ;二级微调
         CLR C
         MOV A,#40H
         ADD A,R3
         MOV R3,A
         JC SETUP_11
         AJMP SETUP_6
SETUP_11:INC R4
         AJMP SETUP_6
SETUP_10:MOV B,ASESS_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    ;电机步进参数
         CJNE A,#01H,SETUP_12
         CLR C
         MOV A,R3
         SUBB A,#40H
         MOV R3,A
         JC SETUP_13
         AJMP SETUP_6
SETUP_13:DEC R4
         AJMP SETUP_6
SETUP_12:MOV B,ASESS_2     ;;;;
         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:
         ;;LCALL ??  ;调用键盘扫描 /////////////
          ;LCALL LCM
         JB SIGN_1,SETUP_1 ;用来识别TIME-0结束
         AJMP SETUP_6  ;;;;;;;;;;;;;
SETUP_1:AJMP LOGO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;基准时钟                  ;;;;左转为正转,右转为反转,
TIME_0: JB SIGN,TIME_3
        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
         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
        INC R7
        CJNE R7,#10H,T_4 ;转到时钟程序(要记得加返回指令噢!)
        LCALL CLOCK
T_4:    CPL SIGN_1
        MOV TMOD,#51H
        CLR SIGN_2    ;指示1S过了
        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
      AJMP TIME_X
OUT_X: CPL  OUT_PUT_2
      MOV TL0,R3
      MOV TH0,R4

;======================软件定时31.25ms
TIME_X:MOV R5,#125
DEL_X:MOV R6,#123
     NOP
DEL_X1:DJNZ R6,DEL_X1
      DJNZ R5,DEL_X
;===================
      INC R7
      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: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
        RET




       ; 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



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;双字节与单字节相乘
;;;;;;;;;;;;;;;;;;;;;;;
CPU_1:MOV CASE_2,#00H
      MOV CASE_1,#7CH
      MOV B,ASESS_2
      MOV A,CASE_1
      MUL AB
      MOV CASE_3,A
      MOV CASE_4,B
      MOV A,CASE_2
      MOV B,ASESS_2
      MUL AB
      ADD A,CASE_4
      MOV CASE_4,A
RET
;;;;;;;;;;;;;;;;;;;;;;;中断1
INT_1:CLR EX1  ;关闭中断1
      CLR SIGN_5
      MOV ASESS_4,#0AH
      LCALL MAIN_2
      SETB SIGN_5
      CLR IE1
      SETB EX1
      SETB OUT_PUT_1
      SETB OUT_PUT_2

RETI
;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;
;单字节十六进制整数转换成单字节BCD码整数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HBCD: MOV B,#100
DIV AB
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
RET
;;:::::::::::
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                               ;;;
;;重新分配地址                                                                   ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HANG     EQU     76H  ;指定行的位置
LIE      EQU     77H  ;指定列的位置
DEL1     EQU     78H  ;用于延时
DEL2     EQU     79H  ;用于延时
YE       EQU     7AH  ;页地址
LIEH     EQU     7BH  ;列地址高位
LIEL     EQU     7CH  ;列地址低位
DATAPAGE EQU     7DH  ;送字数据计数
LOOPNUM  EQU  	 7EH  ;送显示列计数
CSPIN    EQU     P2.7 ;片选端
REST     EQU     P2.6 ;复位端
RSPIN    EQU     P2.5 ;命令/数据选择端
SCLPIN   EQU     P2.4 ;时钟端
SIDPIN   EQU     P2.3 ;数据输入端
SSH EQU 6BH;设定速度高位
SSL EQU 6CH;设定速度低位
SJH EQU 6DH;实际速度高位
SJL EQU 6EH;实际速度低位
TIMEH1 EQU 6FH;时间千位
TIMEH2 EQU 70H;时间百位
TIMEL1 EQU 71H;时间十位
TIMEL2 EQU 72H;时间个位
JICHUN1 EQU 73H;3个寄存地址
JICHUN2 EQU 74H
JICHUN3 EQU 75H
WEIEN_1 EQU 6AH
WEIEN_2 EQU 69H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCM:
MOV A,ASESS_1
LCALL HBCD
MOV B,A
ANL A,#00001111B
MOV SJL,A
MOV A,B
SWAP A
ANL A,#00001111B
MOV  SJH,A
;________________________
MOV A,ASESS_3
LCALL HBCD
MOV B,A
ANL A,#00001111B
MOV TIMEL2,A
MOV A,B
SWAP A
ANL A,#00001111B
MOV TIMEL1,A

;;;;;;;;;;;;;;;;;;;;;;;;;;; 显示
;===============================================

SHUJU:
       MOV      A,TIMEL1
       LCALL    INCADDR0
       MOV      HANG,#2
       MOV      LIE,#10
       LCALL    SHANGXIABYTE
       MOV      A,TIMEL2
       LCALL    INCADDR0
       INC      LIE
       LCALL    SHANGXIABYTE

       MOV      A,SSH
       LCALL    INCADDR0
       MOV      HANG,#3
       MOV      LIE,#10
       LCALL    SHANGXIABYTE

⌨️ 快捷键说明

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