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