您现在所在的是:

单片机论坛

回帖:12个,阅读:1331 [上一页] [1] [2] [下一页]
* 帖子主题:

请教编程

948
dshplc
文章数:66
年度积分:50
历史总积分:948
注册时间:2010/5/24
发站内信
发表于:2011/4/13 20:01:22
#0楼
想编个小程序,但是做到这里就不会了  请教高手指点
1 当我按下第一个按钮p1^1时对应输出一个脉冲同时我在按下第二个按钮p1^2时应该输出两个脉冲,如果我按下复位按钮p1^3的时候怎样才能复位第二个按钮返回到第一个按钮让他输出一个脉冲,请高手指教 画出程序给我看看   dshplc@163.com
758
hDragon
文章数:19
年度积分:50
历史总积分:758
注册时间:2011/3/30
发站内信
发表于:2011/4/13 22:37:04
#1楼
?????
画个波形图出来,表明你的逻辑关系。
40351
tigermu 版主
文章数:14903
年度积分:1309
历史总积分:40351
注册时间:2004/8/12
发站内信
2018论坛优秀版主
2018春节活动(二)
2017论坛优秀版主
2017国庆活动(一)
2016论坛优秀版主
2016国庆活动(一)
2015论坛优秀版主
西门子logo体验(三)
英威腾PLC体验(三)
2015春节活动
2014论坛优秀版主
2013论坛优秀版主
2012论坛优秀版主
2010年度论坛贡献奖
发表于:2011/4/14 8:36:08
#2楼
做标志位就可以啊。
清泉石上,明月松间。
4030
sankyo_feng
文章数:730
年度积分:56
历史总积分:4030
注册时间:2006/11/8
发站内信
发表于:2011/4/14 9:27:55
#3楼
以下是引用dshplc在2011/4/13 20:01:22的发言:
想编个小程序,但是做到这里就不会了请教高手指点
1当我按下第一个按钮p1^1时对应输出一个脉冲同时我在按下第二个按钮p1^2时应该输出两个脉冲,如果我按下复位按钮p1^3的时候怎样才能复位第二个按钮返回到第一个按钮让他输出一个脉冲,请高手指教画出程序给我看看dshplc@163.com
#include <reg51.h>
sbit p11=P1^1;//对P14输出一个脉冲
sbit p12=P1^2;//对P14输出两个脉冲
sbit p13=P1^3;//复位
sbit p14=P1^4;//输出脉冲位
delayms(unsigned int x2)//us*2 max~65535
{
    while(x2) x2--;
}

one()
{
 p14=0;
  delayms(50);
  p14=1;
 delayms(50);
}
two()
{
  char xx=2;
 while(xx--)
  {
     one();
  }
}

main()
{
 
 bit x1=0;
 bit x2=0;
 P1=0XFF;
 while(1)
   
    {
     if((0==p11)&(0==x1)) {one();x1=1;} else if(1==p11) x1=0;
     if((0==p12)&(0==x2)) {two();x2=1;} else if(1==p12) x2=0;
     if(0==p13) {p11=p12=p13=p14=1;}
    }
}
p11、p12、p13输入需做延时去抖动,如果你的输入开关是电子式的可以不用!
p13复位最好用中断!因为程序里有延时不一定能及时复位!

小小的程序竟然被我改了几次才运行通过,还需多多努力啊!表情
[此贴子已经被作者于2011/4/14 14:56:45编辑过]
948
dshplc
文章数:66
年度积分:50
历史总积分:948
注册时间:2010/5/24
发站内信
发表于:2011/4/15 20:42:29
#4楼
程序我试了一下  不好用啊、首先第一个脉冲是对的  第二个脉冲就不对了只输出一个脉冲,还有复位不好用
按下去的时候不能输出第一个脉冲
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/4/17 19:48:55
#5楼
设定脉冲范围0-65535个,脉冲间隔时间范围:0.1-6553.5秒
附件为程序工程文件,在keil V4下编译;
void PLC_Task(void)
{
/* X0按下:Y0输出1个脉冲
X1按下:Y0输出2个脉冲
X2按下:紧急停止,复位功能
D[0]是输出脉冲数;
D[1]是定时器设定时间
*/
D[1]=10;//10=1秒,如果要脉冲间隔3秒,设定30;
if((X0==1||X1==1) && M0==0 && M1==0) //X0或者X1按下输出脉冲
{
M0=1; //脉冲输出起动
if(X0==1)D[0]=1; //X0按下输出1个脉冲
if(X1==1)D[0]=2; //X0按下输出2个脉冲
}
if(X0==0 && X1==0 && M0==1){M0=0;M1=1;} //X0或者X1按下松开后起动输出脉冲  
//起动脉冲
if((M1==1 || M2==1) && Y0==0 && T_100MS_Bit[0]==0)
{
T100MS_Set(0,D[1]); //打开定时器0,定时值为D[1]值
SET(Y0); //Y0为低,输出脉冲
C_T(0, D[0]); //计数器0计数一次,设定值为D[0];
}
   if(T_100MS_Bit[0]==1) //定时器0时间到
{
M1=0;
T100MS_Rst(0); //复位定时器0
RST(Y0); //脉冲为高,停止;
M2=0; //二次脉冲起动复位
if(C_Bit[0]==1)     //判断输出脉冲是否等于设定数量  ,
{C_T_Rst(0);} //脉冲输出达设定量,清计数器,清起动标志
else T100MS_Set(1,D[1]);//脉冲没有到,打开定时器1,设定二次脉冲间隔时间
}
   if(T_100MS_Bit[1]==1)   //二次脉冲间隔时间到
{
T100MS_Rst(1);   //复位定时器1
M2=1;   //二次脉二次脉冲驱动标志
}
//紧急停止,按下脉冲停止,复位定时器、计数器与各标志
if(X2==1)
{
M0=0;M1=0;M2=0;RST(Y0); //复位起动标志与脉冲停止
T100MS_Rst(0); //复位定时器0
T100MS_Rst(1); //复位定时器1
C_T_Rst(0);
}
}

附件
附件

附件:
[本地下载]

[此贴子已经被作者于2011/4/18 9:33:35编辑过]
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/4/17 19:54:14
#6楼
如果需要脉冲0.01间隔,可用10毫秒定时器;把下面3个代替T100MS定时器;
T_10MS_Bit[0]
T10MS_Set(0,10);
T10MS_Rst(0);
详细使用参考:
简单使用C语言写梯形图控制V11
http://bbs.gkong.com/dispbbs.asp?ID=281055
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
948
dshplc
文章数:66
年度积分:50
历史总积分:948
注册时间:2010/5/24
发站内信
发表于:2011/4/18 17:49:06
#7楼
你用的语言方式跟我学的不一样啊   我只能看懂一点   ,唉  我还要努力啊
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/4/18 21:20:53
#8楼
呵呵 ,难道我用的是外星语。。。
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
4030
sankyo_feng
文章数:730
年度积分:56
历史总积分:4030
注册时间:2006/11/8
发站内信
发表于:2011/4/19 15:52:08
#9楼
呵呵!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005