STM8学习笔记---定时器 TIM1功能实现
程序员文章站
2022-06-11 15:52:56
...
STM8单片机的定时器1是一个16位定时器
定时器1为高级定时器,主要特性如下:
定时器1的寄存器比较多,
如果单纯的只是用定时功能的话,用不到这么多的寄存器。定时功能需要设置的寄存器主要有自动重装载寄存器ARR、预分频寄存器PSCR、控制寄存器CR、状态寄存器SR、中断使能寄存器IER。
初始化代码如下:
void Timer1_Init( void )
{
TIM1_ARRH = ( unsigned char )( 1000 >> 8 ); //定时1ms
TIM1_ARRL = ( unsigned char )( 1000 );
TIM1_PSCRH = ( unsigned char )( 0x0F >> 8 ); // 16M / (1+15) =1M
TIM1_PSCRL = ( unsigned char )( 0x0F );
TIM1_RCR = 0x00; //重复计数器值
TIM1_SR1 = ( ~0x01 ); //清除更新中断标志
TIM1_CR1 |= 0x01; //使能计数器
TIM1_IER |= 0x01; //更新中断使能
}
首先通过自动重装载寄存器设置自动重装载值,设置ARR值为1000,也就是说计数器从0开始计数,计数值到达1000后,产生一次中断,然后继续从0开始计数,当计数器值1000后不需要手动设置寄存器的值,因为TIM1的计数值是自动装载的。
下来设置分频数。
时钟默认选择的是内部16M晶振,此处设置分频值为15,所以TIM1的时钟频率就为 16M /(1+15)=1MHz。
接下来首先清除中断标志位,再使能计数器,开启中断功能,定时器1的初始化就结束了。下来编写中断服务函数。
#pragma vector = 13 // IAR中的中断号,要在STVD中的中断号上加2
__interrupt void Timer1_Handle( void ) //1ms 定时中断
{
TIM1_SR1 = ( ~0x01 ); //清除更新中断标志
time_cnt++;
if( time_cnt > 999 )
{
time_cnt = 0;
LED = !LED;
}
}
中断服务函数比较简单,进入中断后首先清除中断标志位,然后再中断中统计中断次数,中断设置的是1ms中断一次,当中断次数超过999次时,也就是1000ms,翻转一次LED灯的电平。
这样定时器1实现的功能就是1s中LED灯翻转一次,定时器1的定时功能就实现了。
推荐阅读
-
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
-
安卓开发学习笔记(六):如何实现指定图片定时开屏功能?
-
WPF学习笔记(1):DataGrid单元格实现逐键过滤功能
-
GB28181学习笔记4 实现Server端获取目录功能(NodeJS版)
-
SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
-
STM8学习笔记---定时器 TIM4功能实现
-
STM8学习笔记---定时器 TIM1功能实现
-
STM8学习笔记---定时器 TIM2功能实现
-
ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能
-
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能_jquery