[51单片机] 请问51单片机如何捕捉外部脉冲

[复制链接]
5000|7
 楼主| 宋一喵 发表于 2014-5-22 10:14 | 显示全部楼层 |阅读模式
我想使用STC12C5A60S2捕捉红外对管产生的脉冲,红外对管只有三个引脚,分别是电源、地、脉冲输出。因为PCA要用来作PWM控制电机,没法用来捕捉脉冲。我想到并且看到有人用外部中断来捕捉脉冲的。我的想法是直接把两个红外对管的脉冲输出引脚接到单片机的P3.2和P3.3外部中断,然后设置成下降沿触发中断,定义一个全局变量在中断函数里计数,再在其他函数调用这个变量。像下面
void InitInterrupt(void)//这个是设置外部中断触发,总中断在其他地方开启
{
    EX0 = 1;    //开外部中断INT0
    EX1 = 1;    //开外部中断INT1
    IT0 = 1;    //下降沿触发
    IT1 = 1;    //下降沿触发
}
//********左电机中断***********************
void GetLeftMotorPulse(void) interrupt 0
{
   g_uiLeftMotorPulse++;          //左电机脉冲计数
   return;

}
//********右电机中断***********************
void GetRightMotorPulse(void) interrupt 2
{
   g_uiRightMotorPulse++;                  //右电机脉冲计数
   return;
}
不知道我这思路是否可以计算红外对管的脉冲。请各位大虾指点一下。
 楼主| 宋一喵 发表于 2014-5-22 10:34 | 显示全部楼层
我只需要对脉冲进行计数。
g_uiLeftMotorPulse这两个计数变量在定时中断中调用后也有清零。
ayb_ice 发表于 2014-5-22 10:38 | 显示全部楼层
这可以说明抓了多少个下降沿
 楼主| 宋一喵 发表于 2014-5-22 10:43 | 显示全部楼层
ayb_ice 发表于 2014-5-22 10:38
这可以说明抓了多少个下降沿

哦哦。再请问下,如果我同时定时一个50ms的定时中断,在定时中断里对捕捉到的脉冲进行处理,这三个中断会互相影响导致出错吗?
ayb_ice 发表于 2014-5-22 11:27 | 显示全部楼层
宋一喵 发表于 2014-5-22 10:43
哦哦。再请问下,如果我同时定时一个50ms的定时中断,在定时中断里对捕捉到的脉冲进行处理,这三个中断会 ...

会不会出错完全取决于程序,信号质量,频率,占空比因素
airwill 发表于 2014-5-22 12:12 | 显示全部楼层
在定时中断里对捕捉到的脉冲进行处理, 这是可以的. 只是你的电机控制就不管了吗? 这个脉冲处理的过程可是把其他所有任务都阻塞了. 能不能接受, 看你的系统了.
不过, 我想肯定还有更好的处理办法.
 楼主| 宋一喵 发表于 2014-5-22 13:06 | 显示全部楼层
airwill 发表于 2014-5-22 12:12
在定时中断里对捕捉到的脉冲进行处理, 这是可以的. 只是你的电机控制就不管了吗? 这个脉冲处理的过程可是 ...

这种思路就是导致定时中断处理出错了。airwill兄能再指点一下其他思路吗?
airwill 发表于 2014-5-22 13:44 | 显示全部楼层
没有定时中断, 外中断只记录触发点的时刻, 保存在一个 FIFO 中, 交给主程序适当的时候处理这些时刻点, 并做解码. 这样主程序可以统筹其他任务的时间. 给不造成阻塞的结果提供更大的可能性.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

67

帖子

10

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