打印

如何在中断程序中检测port端口电平信号变化

[复制链接]
3887|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
entepino|  楼主 | 2010-10-16 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何在中断程序中检测port端口电平信号变化?
方法1首先肯定不能用while等待的方法,对实时性损害太大。

方法2也不能用延时的方法,即进入中断后,先检测一下port口电平,记一个标志位,延时一段时间(可能1ms)后,再检测一下此端口电平的值,和上次值进行比较,如果发现值变化了,就认为端口电平变化了,然后退出中断;这种方法也比较损害实时性,整个程序也就1ms,而中断程序也用了1ms多,不合理,请问,大家遇到这种情况都怎么处理的?要是VHDL就好办了,直接’clk就可以了。

相关帖子

沙发
datouyuan| | 2010-10-16 10:52 | 只看该作者
为什么一定要在中断程序中检测port端口电平信号变化?

假如不在中断程序中做就简单:
可以采用外中断(有些mcu具备引脚电平变化唤醒)
或者间隔固定时间(可能1ms)采集再分析。

另外你的方法2描述中,没有说明,port端口电平信号没变化时该怎么办,是阻塞在这吗?

使用特权

评论回复
板凳
linbei1988| | 2010-10-16 11:06 | 只看该作者
没说清楚你的目的,我看你是想每次进入中断都判断某IO口状态,如果发生变化则执行特定程序吧....
如果是这样的话,一般做个全局变量来存储IO口状态,进入中断后比对,发生变化再改变标志,然后再中断外执行

使用特权

评论回复
地板
老鱼探戈| | 2010-10-16 12:05 | 只看该作者
我不明白你为什么要在中断中检测IO口的电平变化,不过你可有这样试:


bit    LastStatus;


//..........................中断需处理的程序段在前

if(!FClk_64ms)  return;               //64ms 检测1次
if(LastStatus!=PB.0)    //以PB0为例
{
      LastStatus=PB.0;
      if(!LastStatus)
      {
       ..................//处理函数
      }
}

使用特权

评论回复
5
entepino|  楼主 | 2010-10-16 17:15 | 只看该作者
我需要在接收到CAN命令后,即进入CAN接受中断后,检测hall元件的输入电平的变化。转换一下思路,其实也不用非要在中断中处理,在主程序中处理也可以。谢谢大家了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

649

帖子

2

粉丝