wdshuang09 发表于 2018-12-29 22:02:10

方波波形,用IO模拟上升沿中断检测程序

一个方波波形,单片机一个IO口PA0去检测方波的上升沿,立刻控制PB0口输出高电平,上升沿只能用IO判断高低变化,不能用中断;
程序设计如下,用示波器观察,有时候会发现下降沿时PB0输出高电平,大部分都是上升沿PB0输出高电平的,请问上升沿检测程序是哪里不对造成的?
void ZeroCross_Task(void)
{      
      u16 timerout_cnt=0;
      LightCONTL.ZeroCross_flag=0;
      while(ZeroCross==1)//先检测0
      {
                if((timerout_cnt++)>(u16)47000)//超时时间
                {
                        LightCONTL.ZeroCross_flag=0;
                        return;
                }
      }
      timerout_cnt=0;
      while((ZeroCross==0))//检测1,即上升沿
      {
                if((timerout_cnt++)>(u16)47000)//超时时间
                {
                        LightCONTL.ZeroCross_flag=0;
                        return;
                }
      }
      LightCONTL.ZeroCross_flag=1;
}

toofree 发表于 2018-12-30 12:57:40

没有去抖,
方波是从哪来的?

mmuuss586 发表于 2018-12-30 13:24:27

while里面最好也加判断

五哥1 发表于 2018-12-31 01:33:08

这个是有干扰,你要仔细地观察,出现问题的时候,各种硬件是否产生干扰,不用的管脚是否设为上拉输入?

wdshuang09 发表于 2018-12-31 21:46:46

五哥1 发表于 2018-12-31 01:33
这个是有干扰,你要仔细地观察,出现问题的时候,各种硬件是否产生干扰,不用的管脚是否设为上拉输入? ...

在检测电平IO口上加一个小电容102,还是一样,会出现检测到下降沿触发,如果是干扰的话,不应该出现异常的时候每次都是在下降沿,不知道我程序设计逻辑是否有问题
页: [1]
查看完整版本: 方波波形,用IO模拟上升沿中断检测程序