自己用仿真器做实验,是一个关于步进电机的简单控制,程序如下:
;功能: P1口控制电机产生脉冲,P2.0,P2.1,P2.3口接查询式键盘控制电机的
; 反转,正转,停止控制。
;接线:P1口接步进电机的P1口,最小系统的p2口接查询式键盘的JD13。
;//****************************************************************
ORG 0000
STOP: ORL P1, #00H ; 步进电机停止
LOOP: MOV P1, #00H
JNB P2.0,FOR2 ; 如果p2.0按下正转
JNB P2.1,REV2 ; 如果p2.1按下反转
JNB P2.2,STOP1 ; 如果p2.2按下停止
JMP LOOP ;反复监测键盘
FOR: MOV R0, #00H ;正转到tab取码指针初值
for1: MOV A,R0 ;取码
MOV DPTR,#TABLE ;
MOVC A,@A+DPTR
JZ FOR ;是否到了结束码00h
CPL A ;把acc反向
MOV P1,A ;输出到p1开始正转
JNB P2.2,STOP1 ;如果p2.2按下停止
JNB P2.1,REV2 ;如果p2.1按下正转
JNB P2.0,FOR2 ;如果p2.0按下反转
CALL DELAY ;转动的速度1
INC R0 ;取下一个码
JMP FOR1 ;继续正转
rev: MOV R0,#05H ;反转到tab取码指针初值
rev1: MOV A,R0
MOV DPTR,#TABLE ;取码
MOVC A,@A+DPTR
JZ REV ;是否到了结束码00h
CPL A ;把acc反向
MOV P1,A ;输出到p1开始反转
JNB P2.2,STOP1 ;如果p2.2按下停止
JNB P2.1,REV2 ;如果p2.1按下正转
JNB P2.0,FOR2 ;如果p2.0按下反转
CALL DELAY1 ;转动的速度2
INC R0 ;取下一个码
JMP REV1 ;继续反转
stop1: CALL DELAY ;按p3.4的消除抖动
JNB P2.2,$ ;p2.2放开否?
MOV P1, #00H
CALL DELAY ;放开消除抖动
JMP STOP
for2: CALL DELAY ;按p2.0的消除抖动
JNB P2.0,$ ;p2.0放开否?
CALL DELAY ;放开消除抖动
JMP FOR
rev2: CALL DELAY ;按p2.1的消除抖动
JNB P2.1,$ ;p3.3放开否?
CALL DELAY ;放开消除抖动
JMP REV
DELAY: MOV R1,#150 ;键盘消抖和步进电机转速1
D1: MOV R2,#248
DJNZ R2,$
DJNZ R1,D1
RET
DELAY1: MOV R1,#350 ;步进电机的转速2
D2: MOV R2,#348
DJNZ R2,$
DJNZ R1,D2
RET
TABLE:
db 01h,02h,04h,08h ;正转表
db 00 ;正转结束
db 01h,08h,04h,02h ;反转
db 00 ;反转结束
END
现在的问题是:正转延时调用的是DELAY,而反转延时调用的是DELAY1,而DELAY1是明显比DELAY要长的,所以,应该反转比正传要来的慢才对,但是事实相反,当我实际运行的时候,反转却比正传快很多,我试着把参数调了一下,还是一样,请问这是为什么? |
|