51单片机控制两相四线步进电机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

源程序如下:

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

SJMP 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

相关文档
最新文档