怎么读出定时器的高八位和低八位,怎么测时间。

2019-07-15 16:10发布

现在我就是想检测一个引脚上高电平的时间,应该怎么使用定时器。当时引脚是高电平时我打开定时器,低电平时,我关闭定时器。怎么测出引脚高电平的时间呢??请高手讲解讲解。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
无量寿经
2019-07-15 18:14
// 获取高电平时间(其实是16位计数器的计数值,STC15系列定时器默认为16位自动重装方式)
unsigned int Ir_Get_High()
{
        TL0 = 0;                    // 清空16位计数器0
        TH0 = 0;                    // 清空16位计数器0
        TR0 = 1;
        while (Ir_Pin && (TH0<0x40));           // 信号引脚变成低电平或高电平时间>17ms退出
        TR0 = 0;
        return (TH0 * 256 + TL0);
}  

// 获取低电平时间 (其实是16位计数器的计数值,STC15系列定时器默认为16位自动重装方式)
unsigned int Ir_Get_Low()
{
        TL0 = 0;                 // 清空16位计数器0
        TH0 = 0;                 // 清空16位计数器0
        TR0 = 1;                 // 计数器0开始运行
        while (!Ir_Pin && (TH0<0x80));          // 信号引脚变成高或低电平时间>17ms退出(只要>12ms即可)
                                      // 0x8000=32768,  32768*0.54253uS=17777.62 uS            
        TR0 = 0;                          // 这里 ! 优先级大于&&     
        return (TH0 * 256 + TL0);                  // 返回16位计数器的计数值。
}
获得高电平区间计数器计数值后,用计数值乘单个计数脉冲周期即得高电平时间。

代码来源:《51单片机轻松入门—基于STC15W4K系列》第18章。

最佳答案

一周热门 更多>