[牛人杂谈] M051定时器

[复制链接]
 楼主| dongnanxibei 发表于 2019-4-28 22:51 | 显示全部楼层 |阅读模式
定时器内部具有一个24-bit的向上计数器,计数器开始工作的时候计数器的值可以通过 TDR读取到。同时如果计数器的值等于 TCMP寄存器的时候,会触发相应的中断动作。

示例程序摘取
  1. //定时器时钟选择并使能
  2. /* Select HXT as the clock source of TIMER0 */
  3.     CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HXT, MODULE_NoMsk);
  4. /* Enable TIMER0 module clock */   CLK_EnableModuleClock(TMR0_MODULE);

  5. //定时器配置模式和定时频率
  6. /* Open Timer0 frequency to 0.5 Hz in periodic mode, and enable interrupt */
  7.     TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 2);
  8. //中断使能
  9.     TIMER_EnableInt(TIMER0);
  10. // NVIC 中断使能
  11. /* Enable Timer0 NVIC */
  12. NVIC_EnableIRQ(TMR0_IRQn);

  13. //启动定时器并产生0.5s的周期中断

  14. TIMER_Start(TIMER0);

  15. //中断服务程序,定时器中断发生时翻转LED IO电平
  16. void TMR0_IRQHandler(void)
  17. {
  18.     if(TIMER_GetIntFlag(TIMER0) == 1)
  19.     {
  20.         /* Clear Timer0 time-out interrupt flag */
  21.         TIMER_ClearIntFlag(TIMER0);
  22.         P36^=1;
  23.     }
  24. }


zhuomuniao110 发表于 2019-4-29 14:15 | 显示全部楼层
定时器中断非常好用,新唐这个做的比51的还容易上手
mintspring 发表于 2019-4-29 16:10 | 显示全部楼层
NVIC中断,都要这门写吧
小灵通2018 发表于 2019-4-29 16:15 | 显示全部楼层
库函数里还可以直接用定时器做延时。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

3840

帖子

18

粉丝
快速回复 在线客服 返回列表 返回顶部

223

主题

3840

帖子

18

粉丝
快速回复 在线客服 返回列表 返回顶部