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

[复制链接]
4798|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)
      {
       ..................//处理函数
      }
}
 楼主| entepino 发表于 2010-10-16 17:15 | 显示全部楼层
我需要在接收到CAN命令后,即进入CAN接受中断后,检测hall元件的输入电平的变化。转换一下思路,其实也不用非要在中断中处理,在主程序中处理也可以。谢谢大家了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

214

主题

653

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部