这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 芯圣HC18M003单片机定时器2

共4条 1/1 1 跳转至

芯圣HC18M003单片机定时器2

专家
2023-10-13 21:46:57   被打赏 5 分(兑奖)     打赏

  Timer2 定时器具有 8 位预分频器和 8 位周期寄存器(PR2),Timer2 定时器的输入时钟为指令时钟 FCPU,输入时钟通过预分频器产生 Timer2 计数时钟,当计数到与周期寄存器(PR2)的值相同时,在下一指令周期产生 Timer2 溢出信号,可根据实际需要选择不同的预分频比及设置周期寄存器的值,产生不同溢出时间。

Timer2 溢出时间 = PR2 + 1* 预分频比/Fcpu

图片1.png

                              定时器 T2 系统框图

与定时器2有关的寄存器

1、控制寄存器T2CON

图片2.png

Bit2T2CON 用来控制定时器2是否工作

Bit3~Bit6:设置预分频比,分频范围是1248163264128256

 

2、计数寄存器T2

8位寄存器,计数范围0~255

图片3.png

3、周期寄存器PR2

8位寄存器,范围0~255

图片4.png

定时器2是一个很简单的定时/计数器。操作也很简单。以下是例程:

#include"holychip_define.h"
 
void main() {
    // 系统初始化
    OSCCON = 0x04;     //Fosc=32M Fcpu=4M(Fosc4分频 2T)
    // IO初始化
    ANSELB = 0x01;    // PB0设为数字模式
    TRISB  = 0x01;    // PB0设为输出模式
    //  *T2配置初始化
    // 设置分频分频比:T2CKPS=0111,128分频
    //  Tim2计算时间  = 1/(时钟源/Timer2分频系数)*(PR2初值+1)
    //  定时1ms
    //  PR2 = 0x1E;
    //    如果PR2设置为0x31,则中断时间为1.6mS
    //  Tim2计算时间 = 1/(时钟源/Timer2分频系数)*(PR2初值+1)
    //         = 1/(4000000/128)*(0x1E+1)
    //      = 0.992ms 约等于1mS
    T2CKPS3 = 0;
    T2CKPS2 = 1;
    T2CKPS1 = 1;
    T2CKPS0 = 1;
    PR2    = 0x1E;
        
    PEIE = 1;   // 打开外设中断
    T2IE = 1;    // 打开T2中断 
    GIE  = 1;      // 打开总中断
    // 使定时器2开始工作
    T2ON = 1;
    while(1) {
    }
}
/***************************************************************************************
  * @说明   T2中断服务函数
  * @参数 无
  * @返回值 无
  * @注  无
***************************************************************************************/
void interrupt Isr(void) {
   If (T2IF)   {
      // 如果是定时器2中断
      PORTB0 =~PORTB0;  // PORTB0翻转
           T2IF = 0;     // 清除中断标志位
   }
}


运行结果测量:

图片5.png




关键词: 菜鸟学单片机     芯圣     HC18M003     定时器2    

院士
2023-10-14 09:24:58     打赏
2楼

版主,您这帖子真是规整啊


专家
2023-10-17 11:19:48     打赏
3楼

看着就舒服


院士
2024-03-11 17:07:40     打赏
4楼

学习了,谢谢分享。


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]