一种关于单片机定时器中断和数码管冲突问题的解决方案

问题发现

我们会发现,同时存在定时器中断和数码管操作时,有时会导致数码管显示异常。

原因探究

在定时器中断函数中不要操作P2和P0,因为定时器(T)和主板(M)的时钟频率不一样。有可能导致M刚操作完P2,T又去操作P0,导致正确的P2和P0没有成对出现,会造成数码管重影、闪烁之类的“异步冲突”。

解决方案

在《计算机操作系统》课程中,我们采用信号量机制来协调这种“互斥”操作。但是单片机里面我们只需要在定时器中断里面操作标志变量K,在M中判断K的值根据K值不同做出不同的操作。这样操作P2和P0的操作就全在M里面进行,也能成对出现了,不会导致“异步冲突”。

示例

定时器中断函数中设置标志变量

M中判断标志变量

总结

这个问题一直困扰了我很久,之前有人给我讲过但是没说原因,导致我后面就忘了。后来又遇到这个问题就下定决心搞清楚。其实也是恰好我们的《计算机操作系统》课给了我一些启发。这告诫我在平时的学习过程中一定要多思考,多联系已学的知识。如有问题欢迎大家给我指正!

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级蒟蒻

谢谢各位读者大人给我的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值