我用的是51呢 你能给我写个程序举例下吗 谢谢
追答51?我很久没用过了,语法记不太清了,给你个思路:在主程序中就
:i=0;//定时器的初始值;然后赋值。具体赋值视频上边有,你自己看看;
while(1)
{ if(P1^1==1)
{把定时器打开};
break;
}//判断第一个脉冲是否来到,来的话开启定时器开始计时。并记录定时器的初始值;
while(1)
{ if(P1^1==1)
{把定时器关闭};
break;
}//判断第二个脉冲到来;
然后把此时定时器的值保存。用此时的减去初始值,再减去定时器开、关这两条语句执行的时间,就是两个脉冲之间的时间。
所有的我就不知道定时器的值怎么保存呢。。。真麻烦你了,你详细点解释下定时器的值怎么保存呢
追答第一个脉冲来的时候你不是给THO装初值,给TL0装初值,假设都为0。然后第二个脉冲来了,你用一个unsigned int 型变量 i 保存数值( i 为16bits),先让 i = TH0,然后i = i<<8,(即把TH0保存到 i 的高8位)然后i = i + TL0,这样就把时间的高8位和低8位整合成一个字节,保存在 i 中,用 i 减去初值就是脉冲持续时间。
追问那下一个i来了呢?这怎么弄呢?
追答你可以用一个数组,保存前后两次的结果。事先定义一个long int temp,以防止定时器加满又从0开始计数;用result【2】存放两次脉冲来的时候定时器的数值。,然后每次来一个脉冲,做一下工作:result[0] = result[1];temp = 65536 +i(i为整合出的那个定时器的数值)-result【1】;if(temp>66636) result[1[=temp-66636; else result[1] = temp;然后就一个大while就行了。说的有点乱,你静下来慢慢想想,希望对你有帮助。
本回答被提问者采纳