基于51单片机的两相四线步进电机控制系统(汇编版)

基于51单片机的两相四线步进电机控制系统(汇编版)

关于步进电机的工作原理大家可以在网上查查,这里主要介绍的是两相四线的步进电机控制,采用的是四拍方式。

要求如下:

1、有开机停止键。按第奇数次时为开机,第偶数次为停止。此例选择P3.3口。

2、有加速键。加速范围为1~9档。

3、有减速键。减速范围为1~9档。



源程序如下:

ENA EQU P1.0
ENB EQU P1.1
IN1 EQU P1.2
IN2 EQU P1.3
IN3 EQU P1.4
IN4 EQU P1.5
SWITCH EQU P3.3
FAST EQU P3.6
SLOW EQU P3.5
CYCLENUM EQU 50H ;存放对应定时循环次数
TEMP EQU 53H ;存放按键次数。初值为5,每按加速叠加1,按减速递减
MARK EQU 56H ;启动停止标识
LEDBUF EQU 57H

ORG 0
AJMP START

;*****************检测是否开启启动电机键***************************
START:
MOV P0,#0 ;清显示
SETB MARK ;预启动电机工作,标识为1
MOV TEMP,#5 ;开始工作于5Hz
MOV CYCLENUM,#01H ;循环1次
JNB SWITCH,NEXT ;按键按下?
SJMP START ;没有返回继续检测
NEXT:
CALL DELAY ;消抖确认
JNB SWITCH,MAIN ;再次确认按键,不为1说明按键按下
SJMP START ;没有按下,继续检测

;*****************开始运行电机***************************************
MAIN:
MOV A,TEMP
MOV DPTR,#TAB4
MOVC A,@A+DPTR
MOV LEDBUF,A ;送显示
CALL DISPLAY
LOOP:
JB MARK,WORK ;检测运行标识是否为1,为1则继续运行,为0则停止运行
NOTWORK:
CLR ENA
CLR ENB
SJMP START
WORK:
MOV P1,#000010111B ;步进电机运行方式为两相四拍
CALL TIMER
CALL TESTSTOP

MOV P1,#000011011B ;第二拍
CALL TIMER
CALL TESTSTOP

MOV P1,#000101011B ;第三拍
CALL TIMER
CALL TESTSTOP

MOV P1,#000100111B ;第四拍
CALL TIMER
CALL TESTSTOP
CALL TESTKEY
SJMP MAIN
;***************************检测是否有按键按下************************
TESTKEY:
SETB FAST
SETB SLOW

NEXT1:
JNB FAST,YES2
NEXT2:
JNB SLOW,YES3
SJMP RETURN ;都没有键按下,则返回

YES2:
MOV A,TEMP ;FAST按下,若此时temp等于9,则保持速度不变,若小于则加1
CJNE A,#9,CANFAST
DEC A

CANFAST:
INC A
MOV TEMP,A
SJMP RETURN

YES3:
MOV A,TEMP
CJNE A,#1,CANSLOW
INC A
CANSLOW:
DEC A
MOV TEMP,A

RETURN:
RET

TESTSTOP:
SETB SWITCH
JNB SWITCH,GO
SJM

P ENND
GO:
CALL DELAY
JNB SWITCH,YESSTOP
SJMP ENND
YESSTOP:
CPL MARK

ENND:
RET
;***********************定时器设置*******************
TIMER:
MOV TMOD,#10H ;T1工作于定时方式1
CALL TIMERSET
SETB TR1
SETB EA
SETB ET1 ;启动定时器工作
WAIT:
JBC TF1,HERE
SJMP WAIT ;定时未到继续等待
HERE:
DJNZ CYCLENUM,TIMER ;循环次数未满继续定时
MOV A,TEMP
MOV DPTR,#TAB3
MOVC A,@A+DPTR
MOV CYCLENUM,A
RET

TIMERSET:
MOV A,TEMP
MOV DPTR,#TAB1 ;获取定时器高位
MOVC A,@A+DPTR
MOV TH1,A ;存放至定时器高位

MOV A,TEMP
MOV DPTR,#TAB2
MOVC A,@A+DPTR ;获取定时器定位
MOV TL1,A ;存放至定时器低位


RET
;***********************50ms延时**********************
DELAY:
MOV R0,#100
DL1:
MOV R1,#10
DJNZ R1,$
DJNZ R0,DL1
RET


;************显示子程序****************************
DISPLAY:
CLR P2.7
CLR P2.6
CLR P2.5
SETB P2.4 ;关闭高三位,保留个位
MOV P0,LEDBUF
RET

TAB1: DB 15H,0AH,07H,05H,04H,03H,03H,02H,02H ;定时器高位TH1
TAB2: DB 0B3H,0D9H,3BH,6CH,57H,0A5H,19H,0B6H,69H ;定时器地位TL1
TAB3: DB 01H,01H,01H,01H,01H,01H,01H,01H,01H ;循环次数CYCLENUM
TAB4: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码显示0~9


相关文档
最新文档