找回密码
 立即注册
查看: 1745|回复: 11

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

[复制链接]
  • TA的每日心情
    慵懒
    6 天前
  • 签到天数: 2 天

    [LV.1]初来乍到

    18

    主题

    41

    回帖

    426

    积分

    中级会员

    积分
    426
    发表于 2023-3-17 20:03:44 | 显示全部楼层 |阅读模式
    本帖最后由 代码人生 于 2023-3-17 20:06 编辑

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

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


    回复 送花

    使用道具 举报

    该用户从未签到

    547

    主题

    9132

    回帖

    1万

    积分

    管理员

    积分
    14053
    发表于 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口,或定时查询来解决

    1.png


    该用户从未签到

    547

    主题

    9132

    回帖

    1万

    积分

    管理员

    积分
    14053
    发表于 2023-3-17 23:11:40 | 显示全部楼层
    或者改用STC8H8K64U-45I-LQFP32/48/64的D版本,所有的普通I/O都可以支持外部中断,
    并且是:
    下降沿,上升沿,高电平,低电平 都可以中断
    注意:STC8H8K64U-45I-LQFP32的D版本,无P1.2, P1口是USB型MCU风格的排列
    1.png
    1.png
    2.png

    3.png


    该用户从未签到

    547

    主题

    9132

    回帖

    1万

    积分

    管理员

    积分
    14053
    发表于 2023-3-17 23:19:04 | 显示全部楼层
    或者改用STC32G8K64-42I-LQFP32/48,所有的普通I/O都可以支持外部中断,
    并且是:
    下降沿,上升沿,高电平,低电平 都可以中断
    注意:STC32G8K64-42I-LQFP32, P1口是USB型MCU风格的排列, 无USB, 所以有P1.2

    1.png
    2.png

    该用户从未签到

    45

    主题

    2854

    回帖

    6416

    积分

    超级版主

    积分
    6416
    发表于 2023-3-18 00:12:02 | 显示全部楼层
    使用定时器中断查询,优先级中断。
    串口中断收发,低优先级。
    不要在任何中断中等待、延时,有事做事,没事退出。
  • TA的每日心情
    慵懒
    6 天前
  • 签到天数: 2 天

    [LV.1]初来乍到

    18

    主题

    41

    回帖

    426

    积分

    中级会员

    积分
    426
     楼主| 发表于 2023-3-18 08:49:59 | 显示全部楼层
    神农鼎 发表于 2023-3-17 23:11
    或者改用STC8H8K64U-45I-LQFP32/48/64的D版本,所有的普通I/O都可以支持外部中断,
    并且是:
    下降沿,上升 ...

    看过手册了,这个型号不支持普通IO中断,需要更换其他芯片,谢谢
  • TA的每日心情
    慵懒
    6 天前
  • 签到天数: 2 天

    [LV.1]初来乍到

    18

    主题

    41

    回帖

    426

    积分

    中级会员

    积分
    426
     楼主| 发表于 2023-3-18 08:53:44 | 显示全部楼层
    梁工 发表于 2023-3-18 00:12
    使用定时器中断查询,优先级中断。
    串口中断收发,低优先级。
    不要在任何中断中等待、延时,有事做事,没事 ...

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

    点评

    经常用类似方法检测边沿,比中断的好处了,可以方便的加入数字滤波。 定时器中断查询检测边沿,检测到的最小脉冲宽度(高电平或低电平)比定时器中断间隔时间略大,比如100us中断,可以检测到高低电平均略大于100us  详情 回复 发表于 2023-3-18 11:28

    该用户从未签到

    45

    主题

    2854

    回帖

    6416

    积分

    超级版主

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

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

    该用户从未签到

    547

    主题

    9132

    回帖

    1万

    积分

    管理员

    积分
    14053
    发表于 2023-3-18 16:44:14 | 显示全部楼层
    1.png

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

    该用户从未签到

    547

    主题

    9132

    回帖

    1万

    积分

    管理员

    积分
    14053
    发表于 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口,或定时查询来解决
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-4-20 21:23 , Processed in 0.073665 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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