步进电机调速控制程序

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

;本程序为步进电机调速控制实验
;实验要求:
;利用P0口输出脉冲序列,使用P1口接K0-K7,开关K0-K5控制步进电机转速(分六档),
;K6、K7控制步进电机转向,必需要K0-K5中一开关和K6-K7中一开关同时闭合,步进电机才能工作
;本实验采用11.059M晶振

;K7正转 K6反转
;K0K1K2K3K4K5 K0最慢 K5最快

;R0记录工作步序;
;R1
;R2 记录电机两次步序之间TH1的大小
;R3 记录电机正反转 1正转 0反转
;R4 键盘消抖 + P1口电平分析
;R5 记录P1口电平
;R6 延时函数
;R7 延时函数

ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1INT ;T1定时器溢出中断
ORG 0100H

MAIN:MOV R3,#01H ;正转
MOV R0,#08H ;步进电机工作步序初始化
MOV DPTR,#L2 ;指针指向励磁顺序数组
MOV P0,#0FFH ;P0口初始化
MOV TMOD,#10H ;T1工作模式初始化 0001 0000
MOV TL1,#00H
MOV TH1,#00H ;T1定时器装载
MOV IE,#88H ;允许中断
MOV DPTR,#L0
mov r2,#0a0h
;setb tr1
;初始化完成,等待按键
HERE:MOV R5,P1 ;记录P1口的电平
CJNE R5,#0FFH,KEYPRESS ;如果有键盘按下则进行跳转
LJMP HERE ;继续等待键盘按下
KEYPRESS:MOV R4,#0AH ;延时计数
DELAY: LCALL DL1 ;调用延时函数消抖
DJNZ R4,DELAY ;延时10ms消抖
MOV R5,P1 ;读取P1口电平信号
CJNE R5,#0FFH,KEYSCAN ;重新判断是否有按键按下
LJMP HERE
KEYSCAN: MOV A,R5 ;R5送至A 保留R5原始数据
ANL A,#0C0H ;1100 0000屏蔽低六位
MOV R4,A
CJNE R4,#0C0H,K6ANDK7 ;1100 0000 判断K6K7是否被按下
LJMP HERE ;没有被按下,返回等待按键处
K6ANDK7: CJNE R4,#0,K6ORK7 ;判断K6K7是否是全按下
LJMP HERE ;全部被按下,返回等待按键处
K6ORK7: CJNE R4,#080H,K6 ; 1000 0000
MOV R3,#1 ;K7按下,正转
LJMP SPEED
K6: MOV R3,#0
SPEED: MOV A,R5;重新给R4原始数据
ANL A,#3FH ;0011 1111屏蔽高两位
MOV R4,A
K5: CJNE R4,#01fH,K4 ;0001 1111 ;寻找速度档位
MOV R2,#0D0H
LJMP KEYFREE
K4: CJNE R4,#02FH,K3;0010 1111
MOV R2,#0A0H
LJMP KEYFREE
K3: CJNE R4,#037H,K2;0011 0111
MOV R2,#080H
LJMP KE

YFREE
K2: CJNE R4,#03BH,K1;0011 1011
MOV R2,#060H
LJMP KEYFREE
K1: CJNE R4,#03DH,K0;0011 1101
MOV R2,#040H
LJMP KEYFREE
K0: CJNE R4,#03EH,HERE;0011 1110 若未寻找到档位则返回等待处
MOV R2,#00H
LJMP KEYFREE
KEYFREE: SETB TR1 ;开启定时器溢出中断
LOOP1: MOV A,P1
MOV R5,A
CJNE R5,#0FFH,LOOP1
CLR TR1
LJMP HERE


L0: DB 0FFH
L1: DB 0EH,0CH,0DH,09H,0BH,03H,07H
L2: DB 06H
L3: DB 0FFH
T1INT:
MOV Tl1,#00H
MOV A,R2
MOV Th1,A
MOV A,R0
MOVC A,@A+DPTR ;读取数组
cpl a ;!!!!!!!!!!!!!!!!!!!!!
MOV P3,A ;P0口输出赋值

CJNE R3,#01H,fan ; 判断正反转
INC R0 ;正转
CJNE R0,#09H,L4 ;判断是否超出数组边界
MOV R0,#01H ;重新赋初值
LJMP L4
fan: DEC R0
CJNE R0,#00H,L4
MOV R0,#08H
LJMP L4
L4: RETI


;1ms延时函数

DL1MS: MOV R7,#01H
DL1: MOV R6,080H
DL0: DJNZ R7,DL1
RET
END

相关文档
最新文档