论坛» 嵌入式开发» 国产MCU

芯圣HC18M003单片机定时器2

专家
2023-12-22 11:32 1楼

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

院士
2023-10-14 09:24 2楼

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

高工
2023-10-17 11:19 3楼

看着就舒服

院士
2024-03-11 17:07 4楼

学习了,谢谢分享。

共4条 1/1 1 跳转至

回复

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