微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 怎么读出定时器的高八位和低八位,怎么测时间。

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

时间:10-02 整理:3721RD 点击:
现在我就是想检测一个引脚上高电平的时间,应该怎么使用定时器。当时引脚是高电平时我打开定时器,低电平时,我关闭定时器。怎么测出引脚高电平的时间呢?请高手讲解讲解。

// 获取高电平时间(其实是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章。

定时器的计数值乘以计一个数的时间不就是高电平的时间吗

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top