打印
[51单片机]

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

[复制链接]
4630|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的定时中断,在定时中断里对捕捉到的脉冲进行处理,这三个中断会互相影响导致出错吗?

使用特权

评论回复
5
ayb_ice| | 2014-5-22 11:27 | 只看该作者
宋一喵 发表于 2014-5-22 10:43
哦哦。再请问下,如果我同时定时一个50ms的定时中断,在定时中断里对捕捉到的脉冲进行处理,这三个中断会 ...

会不会出错完全取决于程序,信号质量,频率,占空比因素

使用特权

评论回复
6
airwill| | 2014-5-22 12:12 | 只看该作者
在定时中断里对捕捉到的脉冲进行处理, 这是可以的. 只是你的电机控制就不管了吗? 这个脉冲处理的过程可是把其他所有任务都阻塞了. 能不能接受, 看你的系统了.
不过, 我想肯定还有更好的处理办法.

使用特权

评论回复
7
宋一喵|  楼主 | 2014-5-22 13:06 | 只看该作者
airwill 发表于 2014-5-22 12:12
在定时中断里对捕捉到的脉冲进行处理, 这是可以的. 只是你的电机控制就不管了吗? 这个脉冲处理的过程可是 ...

这种思路就是导致定时中断处理出错了。airwill兄能再指点一下其他思路吗?

使用特权

评论回复
8
airwill| | 2014-5-22 13:44 | 只看该作者
没有定时中断, 外中断只记录触发点的时刻, 保存在一个 FIFO 中, 交给主程序适当的时候处理这些时刻点, 并做解码. 这样主程序可以统筹其他任务的时间. 给不造成阻塞的结果提供更大的可能性.

使用特权

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

本版积分规则

15

主题

67

帖子

10

粉丝