嗨,我想知道是否有人可以给我一个
TickGetDiv256();
函数如何工作的例子。它来自 Tick.c 中的 Microchip
我试图数 2 小时,如果满了,引擎就会停止。
我可以使用“ threshold = tick + TICKS_PER_SECOND * 60;
”功能。但我不知道在这段时间内使用它是否会很好:threshold = tick + (TICKS_PER_SECOND * 60 * 60)*2
;
亲切的问候
嗨,我想知道是否有人可以给我一个
TickGetDiv256();
函数如何工作的例子。它来自 Tick.c 中的 Microchip
我试图数 2 小时,如果满了,引擎就会停止。
我可以使用“ threshold = tick + TICKS_PER_SECOND * 60;
”功能。但我不知道在这段时间内使用它是否会很好:threshold = tick + (TICKS_PER_SECOND * 60 * 60)*2
;
亲切的问候
从MPLAB C 指南来看,C 编译器支持的最大整数数据类型是 32 位。从我在其他地方收集到的信息来看,滴答计数器是六个字节 -TickGetDiv256
返回这些字节的“中间四个”。
由于滴答计数器的全部六个字节无法放入 32 位整数,因此您将使用它TickGetDiv256
来提取中间字节,从而计算自计数器启动以来经过的“256 滴答”间隔的数量。当然,这并不完全正确,因为它忽略了滴答计数器的最高字节。如果滴答计数器的低四个字节没有为您感兴趣的时间跨度提供足够的范围,您将使用此函数。
也许我可以这样做:
// if (Ts1/GTsy1) is under 40 and have'nt increased within 2h
if (AD0 < 40 && (TickGetDiv256() - (startingTick + (TICKS_PER_SECOND * 7200)/256)) >= 7200)
{
sip.PL = 0;
sip.PU = 0;
// Failure(code);
}
// if (Ts1/GTsy1) is under 40, start countdown
if (AD0 < 40)
{
if (!alflags.ColdTimer)
startingTick = TickGetDiv256(); //Start timer
alflags.ColdTimer = 1;
}
else
alflags.ColdTimer = 0;