打印
[疑难问答]

反转却比正传快很多,这是为什么?

[复制链接]
1909|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangwo|  楼主 | 2010-5-15 12:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己用仿真器做实验,是一个关于步进电机的简单控制,程序如下:


;功能: 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要长的,所以,应该反转比正传要来的慢才对,但是事实相反,当我实际运行的时候,反转却比正传快很多,我试着把参数调了一下,还是一样,请问这是为什么?
沙发
tiger2010| | 2010-5-15 20:39 | 只看该作者
看不懂汇编~~~~

使用特权

评论回复
板凳
liliang9554| | 2010-5-15 21:35 | 只看该作者
同楼上

使用特权

评论回复
地板
megawin| | 2010-5-16 16:21 | 只看该作者
自己用仿真器做实验,是一个关于步进电机的简单控制,程序如下:


;功能: P1口控制电机产生脉冲,P2.0,P2.1,P2.3口接查询式键盘控制电机的
;       反转,正转,停止控制。

;接线:P1口接步进电机的P1口,最小 ...
wangwo 发表于 2010-5-15 12:45


很明显,你DELAY1的数字已近溢出了(即大于0xff)那么DELAY1就比DELAY时间短了,一般编译器会有提示警告的,楼主留意下:)

使用特权

评论回复
5
suixiwutang| | 2010-5-16 16:44 | 只看该作者
汇编不怎么懂

使用特权

评论回复
6
48327702| | 2010-5-16 16:55 | 只看该作者
DELAY1:  MOV   R1,#350       ;步进电机的转速2
D2:     MOV   R2,#348

装不下350 348呀

使用特权

评论回复
7
qfengbj| | 2010-5-16 22:35 | 只看该作者
我也明白了

使用特权

评论回复
8
wangwo|  楼主 | 2010-5-19 21:58 | 只看该作者
非常感谢,忽略一个很弱智的问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

806

帖子

2

粉丝