jwd 发表于 2024-2-9 16:24:51

请教一下各位大佬,PLC的沿信号检测是怎么实现的?

如题,用函数表达的话如何实现上升沿,下降沿的检测,请各位大佬指点指点?

kksk 发表于 2024-2-9 21:30:34

STC的IO中断可以设置为沿触发和电平触发,硬件上可以通过触发器或锁存器实现。
如果您想使用软件实现可以考虑设置一个变量记录IO电平,当读取到的IO电平与上一次不一致时表示遇到了边沿,此时可以通过电平状态确定是上升沿或下降沿。

jwd 发表于 2024-2-9 21:46:06

kksk 发表于 2024-2-9 21:30
STC的IO中断可以设置为沿触发和电平触发,硬件上可以通过触发器或锁存器实现。
如果您想使用软件实现可以考 ...

谢谢,我考虑下,新年快乐!

神农鼎 发表于 2024-2-9 21:49:16

STC15/STC8/STC32的 INT0/INT1 都支持 边沿变化中断
STC8/STC32的 PWM 都支持 边沿变化中断
STC12/STC15的 CCP 都支持 边沿变化中断

边沿变化中断:上升沿 或 下降沿 都会支持中断
===进了中断服务程序,软件读对应的I/O口
      高:上升沿
      低:下降沿

神农鼎 发表于 2024-2-9 21:51:24

另外现在 STC8H8K64U的D版本,支持所有的I/O都支持中断



神农鼎 发表于 2024-2-9 21:51:56


神农鼎 发表于 2024-2-9 21:52:21


jwd 发表于 2024-2-9 22:45:49

祝坛友们新年快乐,万事顺遂!

10086001 发表于 2024-2-9 23:41:43

{:4_166:}

DebugLab 发表于 2024-2-10 15:02:48

本帖最后由 DebugLab 于 2024-2-10 15:08 编辑

优先使用硬件方式,见4、5、6楼。
软件方式如下:
#define KEY Pxx

void scan_key(void)
{
      static bit key_flag;
      
      if(KEY==0)
      {
                if(key_flag==1)
                {
                        key_flag=0;
                        //下降沿
                }
      }
      else
      {
                if(key_flag==0)
                {
                        key_flag=1;
                        //上升沿
                }
      }
}放在主循环或定时器中断里以10~1000Hz扫描即可,可以直接接按键,使用中断周期或执行其他程序的时间来消抖,不使用延时函数消抖,简单高效
页: [1] 2
查看完整版本: 请教一下各位大佬,PLC的沿信号检测是怎么实现的?