打印

步进电机控制程序

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


;功能: 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
沙发
juventus9554|  楼主 | 2013-12-29 13:14 | 只看该作者
现在的问题是:正转延时调用的是DELAY,而反转延时调用的是DELAY1,当我实际运行的时候,反转为什么比正传快很多

使用特权

评论回复
板凳
小小猫咪| | 2013-12-29 13:16 | 只看该作者
是啊,DELAY1是明显比DELAY要长的啊

使用特权

评论回复
地板
juventus9554|  楼主 | 2013-12-29 13:17 | 只看该作者
所以,应该反转比正传要来的慢才对

使用特权

评论回复
5
llljh| | 2013-12-29 13:18 | 只看该作者
你DELAY1的数字已近溢出了

使用特权

评论回复
6
juventus9554|  楼主 | 2013-12-29 13:20 | 只看该作者
llljh 发表于 2013-12-29 13:18
你DELAY1的数字已近溢出了

使用特权

评论回复
7
llljh| | 2013-12-29 13:43 | 只看该作者
大于0xff

使用特权

评论回复
8
chuxh| | 2013-12-29 13:44 | 只看该作者
DELAY1比DELAY时间短,一般编译器会有提示警告的

使用特权

评论回复
9
houcs| | 2013-12-29 13:45 | 只看该作者
对,楼主留意下

使用特权

评论回复
10
zwll| | 2013-12-29 13:46 | 只看该作者
DELAY1:  MOV   R1,#350       ;步进电机的转速2
D2:     MOV   R2,#348

装不下350 348呀

使用特权

评论回复
11
juventus9554|  楼主 | 2013-12-29 13:47 | 只看该作者
非常感谢,忽略一个很弱智的问题

使用特权

评论回复
12
morrisk| | 2013-12-29 13:47 | 只看该作者
lz还用汇编呀,好牛啊

使用特权

评论回复
13
juventus9554|  楼主 | 2013-12-29 13:48 | 只看该作者
morrisk 发表于 2013-12-29 13:47
lz还用汇编呀,好牛啊

牛啥,这么弱智的问题。。。

使用特权

评论回复
14
kangzj| | 2013-12-29 13:50 | 只看该作者
以前读书的时候也写过控制电机的简单程序,呵呵

使用特权

评论回复
15
juventus9554|  楼主 | 2013-12-29 13:52 | 只看该作者
算了,结贴了

使用特权

评论回复
16
juventus9554|  楼主 | 2013-12-29 13:52 | 只看该作者
多谢大家啊。周末愉快

使用特权

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

本版积分规则

900

主题

12190

帖子

3

粉丝