微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于电机的控制!如何延时停止!

关于电机的控制!如何延时停止!

时间:10-02 整理:3721RD 点击:

/*预处理命令*/
#include<reg52.h>    //包含单片机寄存器的头文件
#define uchar unsigned char
#define uint unsigned int
/* 函数申明 -----------------------------------------------*/
void delay(uint z);
void gundong();
/* 变量定义 -----------------------------------------------*/
sbit relay=P0^1;  //定义P0^1位为电机1的控制位
sbit relay2=P0^0;//定义P0^0位为电机2的控制位
sbit hongwai=P3^0; //定义红外接口
sbit k1=P1^1;    //定义按键1
sbit k2=P1^2;
sbit D2=P1^0;    //定义红外感应指示灯
/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
void main(void)
{
  relay=1;
relay2=0;
while(1)
   {
      gundong();
   }
}
/*
********************************************************************************
** 函数名称 : delay(uint z)
** 函数功能 : 延时函数
********************************************************************************
*/
void delay(uint z) //-----------------主延时函数1毫秒
{
uint x,y;
for(x=z;x>0;x--)
  for(y=100;y>0;y--);
  }
  
void gundong()
{
  
      
  if (hongwai==1 )
    {
      relay=1;
     D2=1;
    relay2=0;
  
  }     //未感应到红外开启旋转电机
  
  if (hongwai==0 ) //感应到红外后电机关闭
     {
    relay=0;
   D2=0;
   relay2=1;
   delay(2000);
   relay2=0;
   }
   }
当感应到红外后 电机1停止,电机2开启 2秒后电机2停止,
但是这个程序当电机2开启后延时2秒后并没有停止而是电机2一直在转!怎么办?


问题出在这里:
   relay=0;
   D2=0;
   relay2=1;
   delay(2000);
   relay2=0;
当感应到红外后,电机1转-->电机2转-->延时2秒-->电机2停(这里只停了几个机器周期,人眼看不到) ......当下一次测周期到来时重新开始  电机1转-->电机2转-->延时2秒-->电机2停
当检测到红外时,电机2的运行规律是:运行2秒钟,停几个机器周期(约为几微秒),运行2秒钟,停几个机器周期(约为几微秒)...... 因为停的时间太短,人看不到。

如果很时间延时很快跳过的话应该立即就停止
电机2 根本看不出转
但是现在是
进到延时子程序后好像没返回执行下个程序
realy2=0;

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

网站地图

Top