使用的单片机型号STC15F2K60S2
利用 P1.0~P1.3 实现步进电机的正转;以及固定的圈数
/* 步进电机程序
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV SP,#60H
ACALL DELAY ;ULN2003 反相
MOV P1,#00H;
SMRUN: ; 电机控制方式为单双八拍
MOV P1,#08H ;A 1 0 0 0
ACALL DELAY
MOV P1,#0CH ;AB 1 1 0 0
ACALL DELAY
MOV P1,#04H ;B 0 1 0 0
ACALL DELAY
MOV P1,#06H ;BC 0 1 1 0
ACALL DELAY
MOV P1,#02H ;C 0 0 1 0
ACALL DELAY
MOV P1,#03H ;CD 0 0 1 1
ACALL DELAY
MOV P1,#01H ;D 0 0 0 1
ACALL DELAY
MOV P1,#09H ;DA 1 0 0 1
ACALL DELAY
SJMP SMRUN ;循环转动
DELAY: ;单步延时程序
NOP ;采用由 STC 给出的 2ms 的延时
NOP
NOP
NOP
PUSH 30H
PUSH 31H
MOV 30H,#18
MOV 31H,#48
NEXT:
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
END
/* 步进电机程序 一圈
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV SP,#60H
MOV R0,#10H;
MOV R1,#20H
ACALL DELAY ;ULN2003 反相
MOV P1,#00H;
SMRUN: ; 电机控制方式为单双八拍
MOV P1,#08H ;A 1 0 0 0
ACALL DELAY
MOV P1,#0CH ;AB 1 1 0 0
ACALL DELAY
MOV P1,#04H ;B 0 1 0 0
ACALL DELAY
MOV P1,#06H ;BC 0 1 1 0
ACALL DELAY
MOV P1,#02H ;C 0 0 1 0
ACALL DELAY
MOV P1,#03H ;CD 0 0 1 1
ACALL DELAY
MOV P1,#01H ;D 0 0 0 1
ACALL DELAY
MOV P1,#09H ;DA 1 0 0 1
ACALL DELAY
DJNZ R1,SMRUN;
MOV R1,#20H
DJNZ R0,SMRUN;
LJMP STOP; ;循环转动至 4096 个节拍
DELAY: ;单步延时程序
NOP ;采用由 STC 给出的 2ms 的延时
NOP
NOP
NOP
PUSH 30H
PUSH 31H
MOV 30H,#18
MOV 31H,#48
NEXT:
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
STOP:
SJMP $;
END
|