代码人生 发表于 2023-3-17 20:03:44

求助!STC8H1K16(Pin32) P2口上升沿和下降沿中断

本帖最后由 代码人生 于 2023-3-17 20:06 编辑

之前使用的是 INT0和INT1 两个中断(上升沿和下降沿),IO口电平变化都会触发中断,向上位机发送对应的报警信号,一切正常没有问题。
现在使用的是P2口8个IO口输入,使用普通IO口查询模拟上升沿和下降沿也能用,但是MCU发送数据期间,会漏掉IO的变化,导致回传丢失部分数据。

求助更好的办法解决这个问题,最好能用中断解决,上升和下降沿不是单独上升或者下降沿,有简单例程就可以。谢谢


神农鼎 发表于 2023-3-17 22:58:27

STC8H1K16-36I-LQFP32管脚图
P2.0/P2.1/P2.2/P2.3, 是 PWM5/PWM6/PWM7/PWM8, 都可以支持边沿变化中断
P2.4/P2.6, 是 PWM3P_2, PWM4P_2, 都可以支持边沿变化中断
只剩下 P2.5/P2.7你要改到其他的INT0/INT1口,或定时查询来解决




神农鼎 发表于 2023-3-17 23:11:40

或者改用STC8H8K64U-45I-LQFP32/48/64的D版本,所有的普通I/O都可以支持外部中断,
并且是:
下降沿,上升沿,高电平,低电平 都可以中断
注意:STC8H8K64U-45I-LQFP32的D版本,无P1.2, P1口是USB型MCU风格的排列







神农鼎 发表于 2023-3-17 23:19:04

或者改用STC32G8K64-42I-LQFP32/48,所有的普通I/O都可以支持外部中断,
并且是:
下降沿,上升沿,高电平,低电平 都可以中断
注意:STC32G8K64-42I-LQFP32, P1口是USB型MCU风格的排列, 无USB, 所以有P1.2



梁工 发表于 2023-3-18 00:12:02

使用定时器中断查询,优先级中断。
串口中断收发,低优先级。
不要在任何中断中等待、延时,有事做事,没事退出。

代码人生 发表于 2023-3-18 08:49:59

神农鼎 发表于 2023-3-17 23:11
或者改用STC8H8K64U-45I-LQFP32/48/64的D版本,所有的普通I/O都可以支持外部中断,
并且是:
下降沿,上升 ...

看过手册了,这个型号不支持普通IO中断,需要更换其他芯片,谢谢

代码人生 发表于 2023-3-18 08:53:44

梁工 发表于 2023-3-18 00:12
使用定时器中断查询,优先级中断。
串口中断收发,低优先级。
不要在任何中断中等待、延时,有事做事,没事 ...

用定时器这个感觉应该可以,在定时器里模拟上升沿和下降沿,判断动作,然后做标记,放到数组里,不做延时,我试试看,谢谢梁工:handshake

梁工 发表于 2023-3-18 11:28:23

代码人生 发表于 2023-3-18 08:53
用定时器这个感觉应该可以,在定时器里模拟上升沿和下降沿,判断动作,然后做标记,放到数组里,不做延时 ...

经常用类似方法检测边沿,比中断的好处了,可以方便的加入数字滤波。
定时器中断查询检测边沿,检测到的最小脉冲宽度(高电平或低电平)比定时器中断间隔时间略大,比如100us中断,可以检测到高低电平均略大于100us的脉冲。此定时器中断优先级最高,别的中断优先级均比此定时器低,就不会丢失边沿。

神农鼎 发表于 2023-3-18 16:44:14



改用STC8H8K64U-45I-LQFP32/48/64的D版本,所有的普通I/O都可以支持外部中断,
并且是:
下降沿,上升沿,高电平,低电平 都可以中断
注意:STC8H8K64U-45I-LQFP32的D版本,无P1.2, P1口是USB型MCU风格的排列

神农鼎 发表于 2023-3-18 16:45:54

STC8H1K16-36I-LQFP32管脚图
P2.0/P2.1/P2.2/P2.3, 是 PWM5/PWM6/PWM7/PWM8, 都可以支持边沿变化中断
P2.4/P2.6, 是 PWM3P_2, PWM4P_2, 都可以支持边沿变化中断
只剩下 P2.5/P2.7你要改到其他的INT0/INT1口,或定时查询来解决
页: [1] 2
查看完整版本: 求助!STC8H1K16(Pin32) P2口上升沿和下降沿中断