找回密码
 立即注册
查看: 125|回复: 10

STC8G单片,I/O口切换端口模式时会出现尖峰干扰,该如何解决?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:256
  • 最近打卡:2026-04-30 08:02:35
已绑定手机

10

主题

42

回帖

900

积分

高级会员

积分
900
发表于 2026-4-14 16:34:24 | 显示全部楼层 |阅读模式
做一个全数字红外探头的读取模块,要求单片机按时序输出高低电平并能切换成采集模式



我使用的单片机是STC8G1K08,采集引脚是P32,该红外探头引脚在“未受控”情况下,会持续性输出高电平,单片机引脚与红外引脚直连

读取流程大致是:
常规下引脚输出低,压制红外探头;
采集红外信号时,先输出一段时间高电平,作为读取信号或触发信号;
单片机按 位 接收红外探头的输出——引脚输出低电平,随后高电平,接着引脚切换为采集模式,采集信号,如此重复,直至信号完全采集

我发现,当引脚采集到低电平信号(此时引脚电平被红外探头拉低),在由采集模式切换到输出模式时,会不定时出现小尖峰,疑似是端口模式切换瞬间,失去了对红外探头的控制

输出为推挽输出,输入为高阻输入
这是采集代码:


//数字红外信号读取函数
  void PIR_Read(void)
  {
          unsigned char i=0;
          unsigned long  date=0;
          
          P3M0 |= 0x04; P3M1 &= ~0x04;            //P32 推挽输出模式
          PIR=1;                                  //强制拉高
          delay_us(100);
          
          
          for(i=0;i<19;i++)
          {
                  P3M0 |= 0x04; P3M1 &= ~0x04;       //P32 推挽输出模式
                  PIR = 0;               
                  delay_us(4);                       //拉低引脚 4 us
                  
                  PIR = 1;
                  delay_us(4);                       //拉高引脚 4 us
                  
                  P3M0 &= ~0x04; P3M1 |= 0x04;       //P32 高阻输入
                  delay_us(8);                       //等待信号稳定
                  
                  date <<= 1;
                  if(PIR == 1)
                  {
                          date |=0x01;
                  }
          }
          P3M0 |= 0x04; P3M1 &= ~0x04;       //P32 推挽输出模式
          PIR = 0;                           //强制拉低引脚
          delay_ms(1);                       //持续 1 ms时间

          
          pir_value = PIR_Convert(date);      //对采集到的数据进行格式转换
          pir_ready = 1;                      //红外数据采集完成标志
          
  }

这是引脚波形图:
IMG_20260414_143221.jpg     IMG_20260414_144542.jpg     IMG_20260414_144946.jpg


求教大伙,该如何解决这个问题?
IMG_20260414_144946.jpg
IMG_20260414_144542.jpg
IMG_20260414_143221.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2026-05-01 05:53:11
已绑定手机

3

主题

94

回帖

505

积分

高级会员

积分
505
发表于 2026-4-14 17:15:07 | 显示全部楼层
有必要切换端口模式吗,按你描述完全可以用准双向模式或开漏模式。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:671
  • 最近打卡:2026-04-30 08:59:31
已绑定手机

52

主题

2608

回帖

9093

积分

论坛元老

积分
9093
发表于 2026-4-14 18:32:16 | 显示全部楼层
先将引脚拉低,然后再切换模式
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-04-30 01:26:24
已绑定手机

22

主题

401

回帖

1816

积分

金牌会员

DIY玩家

积分
1816
发表于 2026-4-14 18:49:00 | 显示全部楼层
切换端口模式下拉失效
可能内部的器件要切换到同组
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-04-30 01:26:24
已绑定手机

22

主题

401

回帖

1816

积分

金牌会员

DIY玩家

积分
1816
发表于 2026-4-14 18:53:30 | 显示全部楼层
某型号

截图202604141852394251.jpg

有几种下拉
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2026-05-01 05:53:11
已绑定手机

3

主题

94

回帖

505

积分

高级会员

积分
505
发表于 2026-4-15 07:29:36 | 显示全部楼层
几年前用STC15W408AS-16设计一款含PWM的电路,调试过程发现停止PWM后会有一个窄脉冲,想了好多方法都不能消除。后利用PWM在两组不同管脚之间切换的方法,需要关闭时将CCP0转到CCP0_2(实际没有P3.5脚),需要重开时再转回来。间接解决了这个不明原因造成的窄脉冲。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:256
  • 最近打卡:2026-04-30 08:02:35
已绑定手机

10

主题

42

回帖

900

积分

高级会员

积分
900
发表于 2026-4-15 09:12:53 | 显示全部楼层
wul*** 发表于 2026-4-14 17:15
有必要切换端口模式吗,按你描述完全可以用准双向模式或开漏模式。

好的,我尝试一下准双向模式
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:256
  • 最近打卡:2026-04-30 08:02:35
已绑定手机

10

主题

42

回帖

900

积分

高级会员

积分
900
发表于 2026-4-15 09:14:06 | 显示全部楼层
乘风*** 发表于 2026-4-14 18:32
先将引脚拉低,然后再切换模式

采集时为高阻输入模式,没办法拉低
只有切换模式,转为推挽输出,单片机才能主动地拉低引脚电平
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:256
  • 最近打卡:2026-04-30 08:02:35
已绑定手机

10

主题

42

回帖

900

积分

高级会员

积分
900
发表于 2026-4-15 09:15:13 | 显示全部楼层
wul*** 发表于 2026-4-15 07:29
几年前用STC15W408AS-16设计一款含PWM的电路,调试过程发现停止PWM后会有一个窄脉冲,想了好多方法都不能消 ...

感谢分享
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:256
  • 最近打卡:2026-04-30 08:02:35
已绑定手机

10

主题

42

回帖

900

积分

高级会员

积分
900
发表于 2026-4-15 09:15:40 | 显示全部楼层

感谢回复
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-1 10:30 , Processed in 0.137801 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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