想让这个程序产生有限个脉冲,可它一直产生
{ CLK=!CLK;
DelayMS(1) ;
i++;
}
想让这个程序产生有限个脉冲,可它一直产生。我用它给L297产生脉冲, 就一直转。真是想不通
unsigned char i;
for(i = 0; i < 10; i++)
{
CLK = !CLK;
}
嗯,试一下!谢谢!
额,不行还是一直转。这是全部程序:
#include<reg51.h>
#include<stdio.h>
#define unit unsigned int
#define uchar unsigned char
sbit CW=P1^0;
sbit CLK=P1^1;
int n;
unit ms;
unsigned char i;
DelayMS(unit ms)
{
uchar k;
while(ms--)
{
for(k=0;k<120;k++);
}
}
main()
{ CW=0;
CLK=0;
n=4;
i=1;
for(i = 0; i < 1000; i++)
{
CLK = !CLK;
DelayMS(1) ;
}
}
你的延时时间不够吧 CW是干什么的 CLK是什么?
你这个主程序怎么没有循环啊 结构有问题 刚才没看见
int main(void)
{
unsigned char i;
while(1)
{
for(i = 0; i < 5; i++)
{
CLK = !CLK;
DelayMS(1) ;
}
}
return 0;
}
我是L97L298驱动步进电机,CW是方向,CLK是脉冲,延时时间多少都一样的现象呀!
额,还是不变!
把这个:if(i<10)
{
CLK=!CLK;
DelayMS(1) ;
i++;
}
改为:if(i<10)
{
CLK=!CLK;
DelayMS(1) ;
i++;
}
CLK=0;//如果你的电机是低电平关闭的话
你这个不行啊,for循环一直在产生!
i = 5后,程序停止了啊?CLK等于什么没关系啊!不满足for循环后 在while里停止了啊
把for(i = 0; i < 5; i++)
改为for(; i < 5; i++)
就不会在while(1)中重复执行了
我试试啊
都试过了,还是不行,
CLK=0电机停止还是CLK=1电机停止?
你再把i的值设为0~200试试,你把i设为10,总共就延时了10ms,你能感觉得到吗?
这个程序可以,但是我不会让他跳出死循环
while (1)
{ if(i<=1080)
{
CLK2=!CLK2;
for(m=0;m<120;m++)
{
;
}
CLK2=!CLK2;
DelayMS(1);
i++;
}
}
问题出在程序的结束处,当程序输出有限个脉冲之后,程序结束,运行到main函数的结束,那么就要返回,这时候能返回到哪去?
如果是51的片子,那么很多公司的芯片都是继续从头再运行程序,于是继续输出有限个脉冲,看起来就是没有结束了
如果在程序的最后假山while(1); 不让程序结束,那么就可以了
最后一种方式就是不结束的方式,实际是可行的,但是小编说要跳出while,如果是main函数,跳出之后又回到原来的问题了
51单片机的裸机C程序还是不要跳出main函数,这样才是可控的,否则就是人为的跑飞
关键是我要控制两个电机,他们都要转动一定的圈数,这只是我控制的第一个,第一个执行完后要跳到第二个电机该怎么办呢?
i<1000(unsigned char 不适最大255)?