打印

请教版主和各位高人看看这个程序

[复制链接]
1301|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suizhou|  楼主 | 2008-2-26 18:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题是按开关后,气缸动作的时间有时正常,有时快,有时慢,延时时间不稳定,延时时间能不能采用定时器实现。谢谢
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
bit startend=0;
void mdelay(uint delay)
 { uint i;
    for(;delay>0;delay--)
     {for(i=0;i<124;i++)
        {;}
}
}
void kproce(uchar kvalue)
  {if((kvalue&0x20)==0)
     startend=1;
     }
 uchar key1()
 { uchar kvalue;
    uchar tmp;
    P3|=0x3c;
    kvalue=P3;
      kvalue|=0xc3;
      if(kvalue==0xff)
      return(0);
      mdelay(5);
      kvalue=P3;
      kvalue|=0xc3;
      if(kvalue==0xff)
      return(0);
      for(;;)
      { tmp=P3;
      if((tmp|0xc3)==0xff)
      break;
      }
      return(kvalue);
      }
void main()
  { uchar kvalue;
    P2=0xff;
    for(;;)
   { kvalue=key1();
  if(kvalue)
    {kproce(kvalue);}
    if(startend)
   {  startend=0;
     P2_0=0;//第一个气缸工作
     P2_4=0;//第二个气缸工作
  mdelay(100);//延时
    P2_1=0;//第三个气缸工作
    P2_4=1;//第二个气缸停止
  mdelay(260);//延时
    P2_1=1;//第三个气缸停止
  P2_2=0;//第四个气缸工作
  mdelay(160);延时
   P2_0=1;//第一个气缸停止
   mdelay(50);延时
    P2_3=0;//第五个气缸工作
  mdelay(210);延时
    P2_3=1;//第五个气缸停止
    mdelay(100);
    P2_2=1;//第四个气缸停止
   P2=0xff;
   mdelay(200);
}
 else
 P2=0xff;
  }}

相关帖子

沙发
hotpower| | 2008-2-26 18:39 | 只看该作者

肯定定时器好了~~~软件研时玩玩还行...

使用特权

评论回复
板凳
兰天白云| | 2008-2-26 18:54 | 只看该作者

一定要用定时器,而且要准(如果发动机上用)

使用特权

评论回复
地板
古道热肠| | 2008-2-27 10:13 | 只看该作者

一个循环到底

没有中断干扰,延时相对值应该还是准确的呀。自己查查吧,这个程序不难。

使用特权

评论回复
5
ljh2269| | 2008-2-27 11:01 | 只看该作者

for(;delay>0;delay--)

uint i,j;
    for(j=delay;delay>0;delay--)
     {for(i=0;i<124;i++)
        {;}
改一下试试吧

使用特权

评论回复
6
suizhou|  楼主 | 2008-2-27 18:55 | 只看该作者

谢谢各位前辈

谢谢,我再试试看。

使用特权

评论回复
7
suizhou|  楼主 | 2008-3-1 18:32 | 只看该作者

再请教各位前辈

这种情况用定时器如何实现,请各位前辈给个思路。谢谢!5楼的前辈提出的我也试过,再次向各位前辈表示感谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

27

帖子

0

粉丝