单片机的外部中断如何定时,比如说利用脉冲产生中断,测两次脉冲之间的时间

你能不能编个C程序举例一下啊
2024-12-18 12:41:36
推荐回答(3个)
回答1:

首先你要初始化打开定时器,可选择定时器0,方式2,然后设置你的脉冲触发方式。若是是下降沿可直接进入中断,读取当前定时器计数值,同时将两次脉冲的计数值相减即可得出脉冲时间差值。若是上升沿触发,则必须在脉冲输入端加反向器,因为51单片机只有下降沿和低电平触发方式,所以要先将其转换为下降沿方可计算。希望这些可以帮助到你!

回答2:

假定外部脉冲由外部中断0检测 。 (假设变量都已定义)
void init_int0) interrupt 0
{
i++; // 脉冲 计数。
if(i%2==0)
{
TR0=1; //当脉冲来了引发中断 且脉冲是第一次来时。 启动定时器。
}
else
{
TR0=0; 当下一次脉冲来时 关闭定时器。
}

上面就是大概思路 。你初始化定时器时 ,让THL=0X00;TL0=0X00; 当TR0关闭时 读取THO和TLO的数据 。根据晶振 就可以算出来了 。怎么读取TH0和TL0我还没想 。

}
计几个脉冲的时间 就改变IF判断的条件。

回答3:

请问你用的是什么型号的单片机?我用AVR进行过超声波测距。当时的思路是,定义一个定时器并赋初值(注意要用16位计数模式),当收到第一个脉冲时,打开这个定时器,收到第二个脉冲时将定时器停止,用现在的值减去原来的值得到时间。