找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1911|回复: 12
收起左侧

请问大家,C语言怎么做上升沿触发呢。类似PLC常开触点加上升沿

  [复制链接]
ID:1063563 发表于 2023-10-7 12:05 | 显示全部楼层 |阅读模式
请问大家,C语言怎么做上升沿触发呢。类似PLC常开触点加上升沿。代码怎么写比较简洁简单的,用的是51单片机。
不是用外部输入触发中断,不用这个。


回复

使用道具 举报

ID:94031 发表于 2023-10-7 13:53 | 显示全部楼层
循环测输入电平,当测到低电平后第一次测到高电平就是上升沿。
回复

使用道具 举报

ID:883242 发表于 2023-10-7 14:17 | 显示全部楼层
不用中断就只能用轮询,端口上次轮询为0,这次轮询为1就是上升沿。
回复

使用道具 举报

ID:628113 发表于 2023-10-7 16:07 | 显示全部楼层
轮询电平 判断上升沿 不可靠, 尤其是 像 51 这样的 低速MCU。
这样判断,窄脉冲 触发 很大概率会被漏掉,这样的程序不能工业用,只能业余玩玩。
一定要用,那也要前级先用硬件做 跳变->电平 的转换,还要延时到确保MCU会收到。
当然这功能 ( 跳变->电平延时 ) 只要一个555就可以轻松实现了。
回复

使用道具 举报

ID:883242 发表于 2023-10-7 18:54 | 显示全部楼层
ppcbug 发表于 2023-10-7 16:07
轮询电平 判断上升沿 不可靠, 尤其是 像 51 这样的 低速MCU。
这样判断,窄脉冲 触发 很大概率会被漏掉 ...

不要凭空想象人家的信号类型,能放弃外中断一定是有原因的。
回复

使用道具 举报

ID:57657 发表于 2023-10-7 21:32 | 显示全部楼层
ppcbug 发表于 2023-10-7 16:07
轮询电平 判断上升沿 不可靠, 尤其是 像 51 这样的 低速MCU。
这样判断,窄脉冲 触发 很大概率会被漏掉 ...

窄脉冲宽度小于晶振时钟周期,可能就触发不了外部中断,具体需实物验证。
回复

使用道具 举报

ID:1083996 发表于 2023-10-8 13:31 | 显示全部楼层
上升沿触发易被干扰,做野外工作灯的教训
回复

使用道具 举报

ID:883242 发表于 2023-10-8 14:21 | 显示全部楼层
量子工业 发表于 2023-10-8 13:31
上升沿触发易被干扰,做野外工作灯的教训

这种情况更应该用轮询了,轮询n次一直为1才认为是上升沿,否则是干扰重新轮询。
回复

使用道具 举报

ID:195496 发表于 2023-10-8 16:34 | 显示全部楼层
两个变量来实现,一直读,每次读时,先把上次的变时转存,再读出新值比较
回复

使用道具 举报

ID:161164 发表于 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;
复制代码
回复

使用道具 举报

ID:1093723 发表于 2023-10-8 20:26 | 显示全部楼层
1、获得一个上升沿,是很容易的,将一个IO口先置低,再置高,就获得了一个上升沿。  2、上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。  3、你只能写一个while循环,然后时刻判断IO电平。上一次循环是低电平,下次变成高电平了,就可以判断来了一个上升沿。注意信号上升时间和你的单片机时钟周期的关系,也就是说,信号上升沿要小于你查询两次所用的时间。  4、上升沿和下降沿一般是硬件处理,程序只能判断是否已出现。计数器一般会自动计数,如果是程序模拟计数器,先置状,如被外部改变,就认为已出现跳变。
回复

使用道具 举报

ID:748096 发表于 2023-10-9 05:41 来自手机 | 显示全部楼层
C语言是一种高级语言,主要处理逻辑问题,无法上升沿触发。
回复

使用道具 举报

ID:1034262 发表于 2023-10-9 10:31 | 显示全部楼层
比如51的P1口8个IO检测上升沿:
i = P1tmp;
P1tmp = P1;
i = (i ^ P1tmp) & P1tmp;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表