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

定时器 T2 系统框图
与定时器2有关的寄存器
1、控制寄存器T2CON

Bit2:T2CON 用来控制定时器2是否工作
Bit3~Bit6:设置预分频比,分频范围是1、2、4、8、16、32、64、128、256。
2、计数寄存器T2
8位寄存器,计数范围0~255。

3、周期寄存器PR2
8位寄存器,范围0~255

定时器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;     // 清除中断标志位
   }
}运行结果测量:


 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

