步进电机的控制程序.docx

上传人:b****2 文档编号:18056718 上传时间:2023-08-07 格式:DOCX 页数:11 大小:18.07KB
下载 相关 举报
步进电机的控制程序.docx_第1页
第1页 / 共11页
步进电机的控制程序.docx_第2页
第2页 / 共11页
步进电机的控制程序.docx_第3页
第3页 / 共11页
步进电机的控制程序.docx_第4页
第4页 / 共11页
步进电机的控制程序.docx_第5页
第5页 / 共11页
步进电机的控制程序.docx_第6页
第6页 / 共11页
步进电机的控制程序.docx_第7页
第7页 / 共11页
步进电机的控制程序.docx_第8页
第8页 / 共11页
步进电机的控制程序.docx_第9页
第9页 / 共11页
步进电机的控制程序.docx_第10页
第10页 / 共11页
步进电机的控制程序.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

步进电机的控制程序.docx

《步进电机的控制程序.docx》由会员分享,可在线阅读,更多相关《步进电机的控制程序.docx(11页珍藏版)》请在冰点文库上搜索。

步进电机的控制程序.docx

步进电机的控制程序

;步进电机正转

loop:

movR3,#0FFh         ;30h送ff即-1

main:

INCR3

       mova,R3

tt:

    MOV DPTR,#TAB

       MOVC A,@A+DPTR

    MOV P1,A        ;送显示

        movr7,#5

decr7

       lcalldelay         ;延时一段时间

       cjnea,#06H,main    ;如果是最后一个数据重新开始

       ljmploop   ;   否则R3清除

       ret

TAB:

 DB03H,09H,0CH,06H;步进电机正转表

 DELAY:

;延时程序

MOV R5,#255

D3:

MOVR2,#25

D4:

DJNZR2,D4

DJNZR5,D3

RET

;步进电机控制程序p3.2正转,p3.3反转,p3.4停止 步进电机接p1.0p1.1p1.2p1.3

        org00h

stop:

orlp1,#0ffh            ; 步进电机停止

loop:

jnbp3.2,for2            ;如果p3.2按下正转

        jnbp3.3,rev2        ;如果p3.3按下反转

        jnbp3.4,stop1       ;如果p3.4按下停止

        jmploop             ;反复监测键盘

for:

movr0,#00h              ;正转到tab取码指针初值

for1:

mova,r0                 ;取码

        movdptr,#table       ;

        movca,@a+dptr

        jzfor                ;是否到了结束码00h

        cpla                 ;把acc反向

        movp1,a              ;输出到p1开始正转

        jnbp3.4,stop1        ; 如果p3.4按下停止

        jnbp3.3,rev2         ; 如果p3.3按下反转

        calldelay            ;转动的速度

        incr0                ;取下一个码

        jmpfor1              ;继续正转

rev:

movr0,#05h                ;反转到tab取码指针初值

rev1:

mova,r0

        movdptr,#table          ;取码

        movca,@a+table

        jzrev                ;是否到了结束码00h

        cpla                 ;把acc反向

        movp1,a              ;输出到p1开始反转

        jnbp3.4,stop1        ; 如果p3.4按下停止

        jnbp3.3,rev2         ; 如果p3.3按下反转

        calldelay           ;转动的速度

        incr0                ;取下一个码

        jmprev1              ;继续反转

stop1:

calldelay               ; 按p3.4的消除抖动

          jnbp3.4,$          ;p3.4放开否?

          calldelay          ;放开消除抖动

          jmpstop

for2:

calldelay                ; 按p3.2的消除抖动

         jnbp3.2,$           ;p3.2放开否?

         calldelay           ;放开消除抖动

         jmpfor

rev2:

calldelay                ; 按p3.3的消除抖动

         jnbp3.3,$          ;p3.3放开否?

         calldelay          ;放开消除抖动

         jmprev

delay:

movr1,#40              ;步进电机的转速20ms

         d1:

movr2,#248

         djnzr2,$

         djnzr1,d1

         ret

table:

     db03h,09h,0ch,06h   ;正转表

     db00                 ;正转结束

     db03h,06h,0ch,09h   ;反转

     db00                 ;反转结束

     end

;步进电机正转,反转各3圈

org00h

x1:

movr3,#250

start:

movr0,#00h

start1:

movp1,#0ffh

mova,r0

movdptr,#table

movca,@a+dptr

jzstart

cpla

movp1,a

calldelay

incr0

djnzr3,start1

movr3,#250

start2:

movp1,#0ffh

 movr0,#05

start3:

mova,r0

movdptr,#table

movca,@a+dptr

jzstart2

cpla

movp1,a

calldelay

incr0

djnzr3,start3

jmpx1

delay:

 movr5,#40;延时。

d1:

 movr6,#10

d2:

 movr7,#18

 djnzr7,$

 djnzr6,d2

 djnzr5,d1

 ret

table:

db03h,09h,0ch,06h

db00

db06h,0ch,09h,03h

db00

end

;步进电机正反快慢程序

org00h

x1:

movr3,#48  ;一圈48步

start:

movr0,#00h  ;正转取码初值

start1:

movp1,#0ffh   ;先停止

mova,r0

movdptr,#table

movca,@a+dptr

jzstart      ;是否到了结束码00?

cpla

movp1,a          ;输出运转

calldelay         ;调用慢速的延时转动

incr0             ;取码指针加1取下一个码

djnzr3,start1   ;是否走了48步?

movr3,#48        ;是则重新设定48步

start2:

movp1,#0ffh

 movr0,#05      ;逆转的取码初值

start3:

mova,r0

movdptr,#table

movca,@a+dptr

jzstart2

cpla

movp1,a

calldelay2

incr0

djnzr3,start3

jmpx1        ;重复开始

 DELAY:

;延时程序   (慢速)

MOV R7,#255

D1:

MOVR6,#50

D2:

DJNZR6,D2

DJNZR7,D1

RET

 DELAY2:

;延时程序  (快速)

MOV R5,#255

D3:

MOVR2,#25

D4:

DJNZR2,D4

DJNZR5,D3

RET

 

table:

db03h,09h,0ch,06h  ;正转表

db00

db06h,0ch,09h,03h  ;反转表

db00

end

;遥控电机程序,按遥控器0-9步进电机正转0-9步,按遥控器11-19步进电器分别反转

;0-9步,同时数码管分别显示当前的数字!

 org00h

   JMPMAIN

 ORG30H

MAIN:

   MOVP1,#0FFH

 MOVP2,#0FFH

 MOVP3,#0FFH

START:

   JBP3.7,$ ;等待遥控信号出现

SB:

   MOVR4,#8  ;8毫秒为高电平错误

SBA:

   MOVR5,#250

SBB:

   JBP3.7,SXB1

   DJNZR5,SBB

   DJNZR4,SBA

   MOVR4,#2

   JMPSBC

SXB1:

   MOVR5,#5

SXB2:

            ;去掉20US的尖峰干扰信号

   JNBP3.7,SBB

   DJNZR5,SXB2

   JMPSTART

SBC:

   MOVR5,#250

SB1:

 JBP3.7,SB2 ;2MS内不为高电平错误(监测9MS的低电平引导码)

   DJNZR5,SB1

   DJNZR4,SBC

   JMPSTART

SB2:

               ;去掉20US的尖峰干扰信号

   MOVR5,#5

SB2_A:

   JNBP3.7,SB1

   DJNZR5,SB2_A

   MOVR4,#3

SB2_1:

   MOVR5,#250

SB3:

                ;监测4.5MS高电平,如3MS内出现低电平错误

   JNBP3.7,SXC

   DJNZR5,SB3

   DJNZR4,SB2_1

   MOVR4,#2

   JMPSB3_1

SXC:

                ;去掉20US的尖峰干扰信号

   MOVR5,#5

SXC1:

   JBP3.7,SB3

   DJNZR5,SXC1

   JMPSTART

SB3_1:

               ;监测4.5MS高电平,如5MS内不为低电平错误

   MOVR5,#250

SB3_2:

   JNBP3.7,SB4

   DJNZR5,SB3_2

   DJNZR4,SB3_1

   JMPSTART

SB4:

                  ;去掉20US的尖峰干扰信号

   MOVR5,#5

SB4_1:

   JBP3.7,SB3_2

   DJNZR5,SB4_1

 MOVR1,#1AH ;设定1AH为起始RAM区

 MOVR2,#4

PP:

MOVR3,#8

JJJJ:

   MOVR5,#250

JJJJ2:

              ;1MS内不为低电平错误

   JBP3.7,JJJJ3

   DJNZR5,JJJJ2

   JMPSTART

JJJJ3:

 LCALLYS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态

 MOVC,P3.7  ;将P3.7引脚此时的电平状态0或1存入C中

 JNCUUU     ;如果为0就跳转到UUU

   MOVR5,#250

JJJJ4:

   JNBP3.7,UUU

   NOP

   DJNZR5,JJJJ4

   JMPSTART

UUU:

 MOVA,@R1 ;将R1中地址的给A

 RRCA           ;将C中的值0或1移入A中的最低位

 MOV@R1,A      ;将A中的数暂时存放在R1中

 DJNZR3,JJJJ   ;接收地址码的高8位

 INCR1      ;对R1中的值加1,换成下一个RAM

 DJNZR2,PP  ;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中

;以下对代码是否正确和定义进行识别

 MOVA,1AH ;比较高8位地址码

 XRLA,#00000000B;判断1AH的值是否等于00000000,相等的话A为0

 JNZEXIT ;如果不相等说明解码失败退出解码程序

 MOVA,1BH ;比较低8位地址

 XRLA,#11111111B;再判断高8位地址是否正确

 JNZEXIT ;如果不相等说明解码失败退出解码程序

 LCALLYS3

 MOVA,1CH ;比较数据码和数据反码是否正确?

 CPLA

 XRLA,1DH ;将1CH的值取反后和1DH比较不同则无效丢弃,核对数据是否准确

 JNZEXIT ;如果不相等说明解码失败退出解码程序

 LCALLYS3

 CLRP2.6 ;选中数码管

 CLRP3.3 ;解码成功喇叭响?

 AJMPBIJIAO

;判断在118毫秒内是否有连发码

AA:

 MOVR1,#25

XX:

 ACALLYS2

 JNBP3.7,HH ;跳转到判断连发代码是否正确的程序段

 DJNZR1,XX

EXIT:

 ;对所有端口清零

 AJMPSTART

;连发码判断程序段-----------

HH:

 MOVR6,#4

S:

 ACALLYS1 ;调用882微秒延时子程序

 JBP3.7,EXIT ;延时882微秒后判断P3.7脚是否出现高电平如果有就退出解码程序

 DJNZR6,S ;重复4次,目的是确认连发码的低电平信号波形

 JNBP3.7,$ ;等待高电?

 LCALLYS3

 AJMPAA

BIJIAO:

   MOVR0,#18;一共18个按键

   MOVDPTR,#TAB_REM;遥控键值查表

LOOKUP_1:

   MOVA,R0        ;查表偏移量

   MOVCA,@A+DPTR

   XRLA,1cH       ;比较键值

   JZREM_BAK0      ;相等转移

   DJNZR0,LOOKUP_1  ;直到18个健比较完毕

   JMPEXIT        ;都不对退出

REM_BAK0:

              ;键值处理

   MOVA,R0           ;R0

   MOVR1,A            ;

   SUBBA,#9           ;如果大于9则反转并将值减去9

   JCREM_BAK1          ;小余或等于9到正转

   INCA                ;加1

   MOVR1,A              ;查显示码表

   MOVDPTR,#TABLE1     ;

   MOVCA,@A+DPTR

   MOVP0,A             ;送显示

   CLRP2.6              ;开显示

REM_REV:

                  ;反转程序

   CALLREV

   CALLdelay            ;转速

   DJNZR1,REM_REV        ;转动的步数到了停止

   JMPAA

REM_BAK1:

                  ;正转程序

   NOP

   MOVA,R1  ;按键数值判断执

   MOVDPTR,#TABLE1    ;查显示码表

   MOVCA,@A+DPTR

   MOVP0,A                 ;送显示

   CLRP2.6                   ;开显示

REM_FOR:

                     ;正转

   CALLFOR

   CALLDELAY

   DJNZR1,REM_FOR

   JMPAA

for:

movr0,#00h              ;正转到tab取码指针初值

for1:

mova,r0                 ;取码

        movdptr,#table       ;

        movca,@a+dptr

        jzFOREXT             ;是否到了结束码00h

        cpla                 ;把acc反向

        movp1,a              ;输出到p1开始正转

        calldelay            ;转动的速度

        incr0                ;取下一个码

        jmpfor1              ;继续正转

rev:

movr0,#05h                ;反转到tab取码指针初值

rev1:

mova,r0

        movdptr,#table          ;取码

        movca,@a+table

        jzFOREXT                ;是否到了结束码00h

        cpla                 ;把acc反向

        movp1,a              ;输出到p1开始反转

        calldelay           ;转动的速度

        incr0                ;取下一个码

        jmprev1              ;继续反转

FOREXT:

        RET

         

YS1:

 MOVR4,#20 ;延时子程序1,精确延时882微秒

 D1:

MOVR5,#20

 DJNZR5,$

 DJNZR4,D1

 RET

YS2:

MOVR4,#10 ;延时子程序2,精确延时4740微秒

 D2:

MOVR5,#235

 DJNZR5,$

 DJNZR4,D2

 RET

YS3:

 MOVR4,#2 ;延时程序3,精确延时1000微秒

 D3:

MOVR5,#248

 DJNZR5,$

 DJNZR4,D3

 RET

 

TAB_REM:

  ;遥控的键值

   DB00H

   DB10H,03H,01H,06H,09H,1DH,1FH,0DH,19H

   DB11H,15H,17H,12H,16H,4CH,40H,48H,04H

   

delay:

  movr3,#40              ;步进电机的转速20ms

m3:

     movr2,#248

         djnzr2,$

         djnzr3,m3

         ret

TABLE1:

db28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h;数码管的码表

       ;0123456789

table:

     db03h,09h,0ch,06h   ;正转表

     db00                 ;正转结束

     db03h,06h,0ch,09h   ;反转

     db00                 ;反转结束

     end

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2