步进电机如想设成一步一步反转,程序应怎样修改 (续集)
有些楼主说程序没办法看出你的控制细节,本人修改了程序,现在按照同样的电路原理图<br /><br />在89C51 P2.1 端接按键脚,另一端接地. 按键名为CCW<br /> P2.0 端接按键脚,另一脚接地,按键名为CW<br /><br /> 此程序的功能为按一下CW开关,马达顺时针转60度,按一下CCW开关,则反时钟循环60度<br /><br />本程序使用20H.0与20H.1存放CW与CCW两开关新输入的数据,而使用21H.0与21H.1存放旧数据,用于检查是否有按键.<br /><br />ACTION子程序的前半部做正转控制,后半部则做反转控制.程序首先检查21H.0,若21H.0=0,则表示已按正转开关,所以将R5的低4位取出左循环1位,并自P1输出.而若21H.1=0,则表示已按反转开关,所以将R5的低4位取出右循环1位,并自P1输出.<br /><br />步进马达数据表<br />输入 CCW CW<br />新 20H.1 20H.0<br />旧 21H.1 21H.0<br /> <br />本人从仿真器调试过程序,当按下CCW键,步进电机反转一步,再按CW电机正转一步,但本人重复按正转或反按键,电动机都是向前向后原地踏步,请大家给点指示,我应怎样修改程序,我想按正转或反按键时电动机一步一步转动,可以转360度<br /><br />CW EQU P2.0 ;CW=0表示按下正转开关<br />CCW EQU P2.1 ;CCW=0表示按下反转开关<br />;--------R5: P1值暂存用---------------------<br />MAIN: MOV R5,#0FEH ;设置R5的初值<br /> MOV 20H,#00H ;设置地址20H的初值<br /> MOV 31H,#00H ;设置地址21H的初值<br />CHEKSW: ACALL SWIN ;输入按键值至20H<br /> MOV A,20H ;检查键值至20H<br /> XRL A,21H ;<br /> JZ CHEKSW ;若无键被按,则跳回CHEKSW<br /> ACALL DELAY ;等待抖动时间<br /> ACALL SWIN ;再输入按键值至20H<br /> MOV A,20H ;检查键值是否改变<br /> XRL A,21H<br /> JZ CHEKSW ;若无按键,则跳回CHEKSW<br /> MOV 21H,20H ;更新旧数据<br /> ACALL ACTION ;调用主控制子程序:ACTION<br /> SJMP CHEKSW<br />;--------------输入按键值子程序:SWIN--------------------<br />SWIN: MOV C,CW ;CW为正转开关<br /> MOV 20H.0,C<br /> MOV C,CCW ;CCW为反转开关<br /> MOV 20H.1,C<br /> RET<br />;-------------主控制子程序ACTION---------------------------<br />ACTION: JB 21H.0,REVERSE ;若未按CW开关,则至REVERSE<br />FORWARD:MOV A,R5 ;取出R5的低4位左循环1位<br /> RL A<br /> JB ACC.4,SKIP1<br /> MOV A,#0FEH<br />SKIP1: MOV R5,A<br /> MOV P0,A<br /> SJMP RETURN<br />REVERSE:JB 21H.1,RETURN ;若未按CCW开关,则至RETURN<br /> MOV A,R5 ;取出R5的低4位右循环1位<br /> RR A ;并自P1输出<br /> JB ACC.7,SKIP2<br /> MOV A,#0F7H<br />SKIP2: MOV R5,A<br /> MOV P0,A<br />RETURN: RET<br />DELAY: MOV R0,#00H<br />XL2: MOV R1,#00H<br />DL1: NOP<br /> DJNZ R1,DL1<br /> DJNZ R0,XL2<br /> RET<br /> END<br />
|
|