你进入了一个误区就是期望只用用定时器来定时任意数,其实你可以引入一个变量,定时器可以设置为50ms溢出一次,也就是进一次定时器中断,然后每进一次中断,设置的变量就++,如果需要定时1s的话,当这个数加到20的时候就是1s,然后你再主程序里面判断这个变量,如果这个变量等于20,就执行你期望的1s中执行的操作,并清空这个变量。
伪代码如下:
unsigned int TIM_counter = 0u;
中断代码
{
TIM_counter ++;
定时器值装填;
}
int main()
while(1)
if(TIM_counter == 20)
TIM_counter = 0;
1s定时需要的操作
return 0;
向定时器,串口等外设,其工作频率是需要设置的。
如定时器设1ms进一次中断的初始化:需设置分频数,然后根据分频及你想要的计时时间设置一个计时的数据。
定时器每1ms进一次中断,你定义一个静态变量计数,到1000就是1s了。
建议你认真看一款芯片的datasheet ,看的时间结合试验,上手很快滴
计数器的时基就是晶振输出的时钟的,或是进行倍频分频后的时钟。
而计数达不到1s时,就要进行多次的计数,进行累计计数