微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 想让这个程序产生有限个脉冲,可它一直产生

想让这个程序产生有限个脉冲,可它一直产生

时间:10-02 整理:3721RD 点击:
  if(i<10)                     
         
               { 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)?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top