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

我要赚赏金
