AT89C52记脉冲个数(C语言)

2019-07-15 11:13发布

P1.4采集信号,信号0,1,0,1,0,1,时P2.4输出1,下一个0,1,0,1,0,1时P2.4输出0,然后循环往复。
我本来计P1.4的脉冲个数,将个数模除12以此来决定输出,不过脉冲计数会溢出,这个长时间工作就会不准确,不知道能不能将记P1.4的个数,然后这个个数以12循环,这样就应该可以实现我的功能。如果可以,这个程序该怎么写?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
zxn1314520
1楼-- · 2019-07-15 18:52
wulinwl 发表于 2017-4-22 20:05
6分频,循环计数清0这么会溢出?

谢谢你的帮助,由于外部输入端口0和1持续时间都在十几二十秒左右,所以我现在想记外部输入端口下降沿个数,然后这个个数6循环,不过参考了网上的下降沿判断大多用计时器对于我的不适用,我想就端口的值判断,不过具体的不知道怎么写,刚学单片机,不是很懂。
wulinwl
2楼-- · 2019-07-15 20:03
zxn1314520 发表于 2017-4-22 20:19
谢谢你的帮助,由于外部输入端口0和1持续时间都在十几二十秒左右,所以我现在想记外部输入端口下降沿个数,然后这个个数6循环,不过参考了网上的下降沿判断大多用计时器对于我的不适用,我想就端口的值判断,不过具体的不知道怎么写,刚学单片机,不是很懂。 ...

你就把输入信号当做按键或开关信号接I/O口,程序不断扫描此I/O口,对高或低电平计数,计满6次令输出端口置高或低电平并清0计数变量,如此循环。
人中狼
3楼-- · 2019-07-15 22:43
 精彩回答 2  元偷偷看……
zxn1314520
4楼-- · 2019-07-16 03:54
wulinwl 发表于 2017-4-22 21:27
你就把输入信号当做按键或开关信号接I/O口,程序不断扫描此I/O口,对高或低电平计数,计满6次令输出端口置高或低电平并清0计数变量,如此循环。

谢谢你的建议,下面是我编的程序,编译后不出错,不过有警告,位置是主函数里,调用子函数后,对于flag的判断哪里,显示方向控制.C(29): warning C276: constant in condition expression,然后就无法生成hex文件,麻烦看一下,不好意思,谢谢了。
#include<reg52.h>
sbit IN3=P1^4;
sbit OUT2=P2^4;
bit old_bit;
unsigned char flag;
void io_rest()
{
  if(old_bit!=IN3)
  {
    old_bit=IN3;
        if(IN3!=1)
        {
          flag=1;
        }
        else
        {
           flag=2;
        }
  }
}
void main()
{
  old_bit=IN3;
  while(1)
  {
    int num=0;
         flag=0;
        io_rest();
        if(flag=1)
        num++;
        if(num==6)
        num=0;
        if(0<num<=3)
     OUT2=1;
         else
         OUT2=0;
  }
}
zxn1314520
5楼-- · 2019-07-16 04:47
zxn1314520 发表于 2017-4-23 09:19
谢谢你的建议,下面是我编的程序,编译后不出错,不过有警告,位置是主函数里,调用子函数后,对于flag的判断哪里,显示方向控制.C(29): warning C276: constant in condition expression,然后就无法生成hex文件,麻烦看一下,不好意思,谢谢了。
#include
sbit IN3=P1^4;

警告是由于少打了一个=,不过仿真并没有出现预期结果,输出端一直只会输出高电平,不知道程序哪里写错了?
zxn1314520
6楼-- · 2019-07-16 08:26
wulinwl 发表于 2017-4-23 14:43
/*已经实验验证通过*/
#include
sbit IN3=P1^4;

非常感谢你的帮助,我刚刚试着操作并看了一下代码,那输入信号为时钟信号来说,250这个数字的选取确定了判断输入端口的最大频率,由于我外部0,1都持续十几二十几秒所以不会影响我的使用,但外部信号如果变化比较快这个就不适用了,请问我这样理解对不对,真的很谢谢你。

一周热门 更多>