2019-07-15 11:13发布
zxn1314520 发表于 2017-4-23 15:51 非常感谢你的帮助,我刚刚试着操作并看了一下代码,那输入信号为时钟信号来说,250这个数字的选取确定了判断输入端口的最大频率,由于我外部0,1都持续十几二十几秒所以不会影响我的使用,但外部信号如果变化比较快这个就不适用了,请问我这样理解对不对,真的很谢谢你。 ...
zxn1314520 发表于 2017-4-23 17:36 刚刚调试发现一个问题就是如果一开始就输入的低电平的话,0,1,0,1输出信号就会变,这之后的会变为正常的6循环
zxn1314520 发表于 2017-4-23 18:04 把初始sum+=-1就行了,不好意思啊。
zxn1314520 发表于 2017-4-23 18:06 错了,是count1=-1
wulinwl 发表于 2017-4-23 18:28 这样改一下就可以解决初始计数问题 void io_rest() {
最多设置5个标签!
这样理解是可以的,250这个数字是以主循环速度设定的,对于12T单片机也就是大约2ms,大于一般干扰持续时间,如果用1T单片机,这个数字还要扩大10倍,如果主循环任务多就要减小这个数字,如果输入是TTL信号,这一部分代码可以不要。总之由具体需求确定,不是一成不变的。
把初始sum+=-1就行了,不好意思啊。
错了,是count1=-1
这样改一下就可以解决初始计数问题
void io_rest()
{
if(IN3==0)
{
count++;
if(count>=250)
{
count=250;
if(flag==0)
{
flag=1;
count1++;
if(count1>=4)
{
count1=1;
OUT2=~OUT2;
}
}
}
}
else
{
flag=0;
count=0;
}
}
谢谢,不好意思麻烦你了,我现在在这个基础上再加一个功能,就是p2.3端口输出,p2.3一直输出脉冲,当p1.4口为低电平时,延时20s,然后继续输出脉冲,单个的我会写,就是一直输出脉冲,判断p1.4的值,如果为0,延时程序使用,不过在两个叠加后发现往往只能实现一个功能
这是单个p2.3端口程序
#include<reg52.h>
sbit IN3=P1^4;
sbit OUT1=P2^3;
void delay_ms(unsigned int ms)
{
unsigned int a,b;
for(a=ms;a>0;a--)
for(b=124;b>0;b--);
}
void delayms(void)
{
unsigned char a,b;
for(b=71;b>0;b--)
for(a=2;a>0;a--);
}
void io_mc()
{
while(1)
{
OUT1=1;
delayms();
OUT1=0;
delayms();
if(IN3==0)
delay_ms(20000);
}
}
void main()
{
io_mc();
}
这是我尝试两个共同作用的程序
void main
{
while(1)
{
OUT1=1;
delayms();
OUT1=0;
delayms();
if(IN3==0)
{
count++;
if(count>=250)
{
count=250;
if(flag==0)
{
flag=1;
count1++;
if(count1>=3)
{
count1=0;
OUT2=~OUT2;
}
}
}
delay_ms(20000);
}
else
{
flag=0;
count=0;
}
}
}
}
一周热门 更多>