怎么读出定时器的高八位和低八位,怎么测时间。
// 获取高电平时间(其实是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章。
定时器的计数值乘以计一个数的时间不就是高电平的时间吗
