关于#单片机#的问题,请各位专家解答!

利用单片机定时器定时12ms,简述流程
利用单片机定时器定时12ms,简述流程

1.初始化定时器:在程序的初始化阶段,配置定时器的工作模式、预分频器、计数器的初始值等参数。这些参数的设置可能因单片机型号和开发环境而有所不同。确保将定时器设置为合适的模式和计时值以实现12ms的定时。
2.启动定时器:在需要开始定时的地方,将定时器启动,开始计时。这可能是在主程序的某个地方或在中断服务函数中进行。
3.定时器中断:当定时器达到预设的计时值(12ms)时,定时器将触发中断,进入中断服务函数。
4.中断服务函数:在中断服务函数中,执行需要在定时到达时进行的操作。这可能是更新状态标志、发送信号、执行特定任务等。
5.定时器复位或重新启动:在中断服务函数中,可以选择复位定时器的计时器值,以重新开始计时。如果需要进行连续的周期性定时操作,可以重启定时器。
6.主程序处理:在中断服务函数完成后,控制权返回到主程序,继续执行其他任务。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/1464717
  • 除此之外, 这篇博客: 51定时器总结,初值装载计算方法中的 20ms定时的初值装载计算 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 假设使用的晶振频率为11.0592MHz
    因此在许多很好的代码中我们会看到这样的宏定义:

    #define FOSC (11059200L)
    #define FCLK (FOSC/12)  //用于计算指令周期
    //设20ms定时共需要P个指令周期,现在求P的数值:
    //P/FCLK*1000=20
    //因此可以在C语言中做如下运算:
    unsigned long int P;
    P=20*FCLK/1000//注意:不要这么写,建议P=20*(FCLK/1000) 原因见下一小节
    //求得20ms共需的P个定时周期后,就可以计算TH0,TL0的数值了:
         TH_0=(65536-P)/256;
         TL_0=(65536-P)%256; 
    //然后开启定时器,开启中断之后就可以在中断函数中写自己需要的代码即可了。
    void T0_ISR() interrupt 1
    {
    //略
    }