📄 完好自适应转速的检测128_32hz.asm
字号:
;电机驱动
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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 + -