我需要使用硬件定时器实现延迟功能。计时器值每毫秒递增一次。
通常的方法是使用定时器寄存器的宽度并使用对应于
volatile int TimerReg;
void Delay(int amount)
{
int start = TimerReg;
int elapsed;
do
{
eleapsed = TimerReg - start;
} while (elapsed < amount);
}
这在 TimerReg 的宽度为 int 时有效。在这种情况下,差异now - start
是一个稳定增加的值。
但是当 TimerReg 的宽度小于 int 的宽度时,或者(在我的情况下)定时器只从 0..1000 开始计数,当定时器从 999 超过 1000 到 0 时,就会出现问题。
使用这种计时器的好方法是什么?我想避免模运算,因为这在微控制器上很昂贵。
编辑:除法模块尚未包含在微控制器代码中。