标题:
51单片机+步进马达延时程序问题
[打印本页]
作者:
dj3365191
时间:
2023-3-5 13:41
标题:
51单片机+步进马达延时程序问题
下面程序是上电马达转动45度后延时10秒再转动45度,往复循环,我想在马达停止后延时60秒,我把100000这个值改多大也不能延时60秒,请问这程序该怎么改,请各位给个提示,谢谢!
单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint i,j,k ;
uint N=128; //角度范围调节,对应于45度,512对应于360度
uchar code single_pos[4]={0x04,0x08,0x10,0x20}; /*单四拍正转表*/
//uchar code single_rev[4]={0x20,0x10,0x08,0x04}; /*单四拍反转表*/
void delay(uint z);
void m_single_pos();
//void m_single_rev();
void main()
{
while(1)
{
m_single_pos(); //单四拍正转45度
delay(100000);
m_single_pos(); //单四拍正转45度
delay(100000);
}
}
void delay(uint z) /*延时z毫秒*/
{
uint x,y;
for(x=z;x>0;x--)
for(y=300;y>0;y--) ; //转速调节,数值越大马达越慢
}
/******************************单四拍驱动正转(N*45/16)*************************************/
void m_single_pos()
{
for(k=0;k<N;k++)
{
for(i=0;i<4;i++) //单四拍一个脉冲转子转动5.625*2=11.625度,四拍共45度
{
P3=single_pos[ i] ;
delay(10) ; //适当延时,保证转子转动时间,延时过短会丢拍
}
}
}
作者:
qsssuv
时间:
2023-3-5 15:56
uint在这里最大也只能是65535,超过这个值反而会变小
作者:
人中狼
时间:
2023-3-5 16:21
使用定时器吧
作者:
lkc8210
时间:
2023-3-5 23:11
void main()
{
uchar delay_Cnt = 0;
while(1)
{
if(delay_Cnt==0)
{
m_single_pos(); //单四拍正转45度
}
delay_Cnt++;
if(delay_Cnt>=60)delay_Cnt=0;
delay(1000);
}
}
复制代码
作者:
yzwzfyz
时间:
2023-3-6 14:13
很易想到的,将10秒延时,做6次。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1