标题: 请问大家,C语言怎么做上升沿触发呢。类似PLC常开触点加上升沿 [打印本页]

作者: 芯菲    时间: 2023-10-7 12:05
标题: 请问大家,C语言怎么做上升沿触发呢。类似PLC常开触点加上升沿
请问大家,C语言怎么做上升沿触发呢。类似PLC常开触点加上升沿。代码怎么写比较简洁简单的,用的是51单片机。
不是用外部输入触发中断,不用这个。



作者: xuyaqi    时间: 2023-10-7 13:53
循环测输入电平,当测到低电平后第一次测到高电平就是上升沿。
作者: Hephaestus    时间: 2023-10-7 14:17
不用中断就只能用轮询,端口上次轮询为0,这次轮询为1就是上升沿。
作者: ppcbug    时间: 2023-10-7 16:07
轮询电平 判断上升沿 不可靠, 尤其是 像 51 这样的 低速MCU。
这样判断,窄脉冲 触发 很大概率会被漏掉,这样的程序不能工业用,只能业余玩玩。
一定要用,那也要前级先用硬件做 跳变->电平 的转换,还要延时到确保MCU会收到。
当然这功能 ( 跳变->电平延时 ) 只要一个555就可以轻松实现了。
作者: Hephaestus    时间: 2023-10-7 18:54
ppcbug 发表于 2023-10-7 16:07
轮询电平 判断上升沿 不可靠, 尤其是 像 51 这样的 低速MCU。
这样判断,窄脉冲 触发 很大概率会被漏掉 ...

不要凭空想象人家的信号类型,能放弃外中断一定是有原因的。
作者: npn    时间: 2023-10-7 21:32
ppcbug 发表于 2023-10-7 16:07
轮询电平 判断上升沿 不可靠, 尤其是 像 51 这样的 低速MCU。
这样判断,窄脉冲 触发 很大概率会被漏掉 ...

窄脉冲宽度小于晶振时钟周期,可能就触发不了外部中断,具体需实物验证。
作者: 量子工业    时间: 2023-10-8 13:31
上升沿触发易被干扰,做野外工作灯的教训
作者: Hephaestus    时间: 2023-10-8 14:21
量子工业 发表于 2023-10-8 13:31
上升沿触发易被干扰,做野外工作灯的教训

这种情况更应该用轮询了,轮询n次一直为1才认为是上升沿,否则是干扰重新轮询。
作者: 大漠落日    时间: 2023-10-8 16:34
两个变量来实现,一直读,每次读时,先把上次的变时转存,再读出新值比较
作者: lkc8210    时间: 2023-10-8 17:26
  1. bit Key_Old = 0;
  2. sbit Key = P3^4;

  3. if(!Key_Old && Key)
  4. {
  5.         //上升沿
  6. }
  7. if(Key_Old && !Key)
  8. {
  9.         //下降沿
  10. }
  11. if(Key_Old != Key){
  12.         //跳变
  13. }
  14. Key_Old = Key;
复制代码

作者: 小飞飞呀呀    时间: 2023-10-8 20:26
1、获得一个上升沿,是很容易的,将一个IO口先置低,再置高,就获得了一个上升沿。  2、上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。  3、你只能写一个while循环,然后时刻判断IO电平。上一次循环是低电平,下次变成高电平了,就可以判断来了一个上升沿。注意信号上升时间和你的单片机时钟周期的关系,也就是说,信号上升沿要小于你查询两次所用的时间。  4、上升沿和下降沿一般是硬件处理,程序只能判断是否已出现。计数器一般会自动计数,如果是程序模拟计数器,先置状,如被外部改变,就认为已出现跳变。
作者: 沧兴电子    时间: 2023-10-9 05:41
C语言是一种高级语言,主要处理逻辑问题,无法上升沿触发。
作者: coody_sz    时间: 2023-10-9 10:31
比如51的P1口8个IO检测上升沿:
i = P1tmp;
P1tmp = P1;
i = (i ^ P1tmp) & P1tmp;




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1