定时器的使用方法总结

发布者:Mengyun最新更新时间:2020-03-03 来源: eefocus关键字:定时器  使用方法  寄存器 手机看文章 扫描二维码
随时随地手机看文章

首先理解看门狗定时器方式的使用,简单说,就是有个控制器,选择时钟源,计数方式,等等的控制参数,再配合一个一个累加计数器来确定时间,通过固定的时间间隔来执行中断函数,来得到自己想要的实验结果。

理解之后我们就对最简单的定时器有了一个简单的感念了,了解了基本的定时功能,现在了解下单片机中的TA和TB两个定时器:


首先看TA:

和学习之前的功能一样,先了解寄存器,以及寄存器功能:

在这里插入图片描述

定时器A的控制寄存器:

在这里插入图片描述

定时器A的计数器:

在这里插入图片描述

重点来了:

定时器A的捕获/比较功能寄存器以及中断向量寄存器:

在这里插入图片描述
在这里插入图片描述

前面的控制寄存器和计数器还好理解一点,主要是选择定时器A的功能和一些基本参数的,这里简单讲下设置步骤:


①选择TA的时钟源和分频;//TACTL |= TASSEL_1 + ID_0;

#define ID_0 (00x40u) / Timer A input divider: 0 - /1 /

#define ID_1 (10x40u) /* Timer A input divider: 1 - /2 /

#define ID_2 (20x40u) /* Timer A input divider: 2 - /4 /

#define ID_3 (30x40u) /* Timer A input divider: 3 - /8 /

#define TASSEL_0 (00x100u) /* Timer A clock source select: 0 - TACLK /

#define TASSEL_1 (10x100u) /* Timer A clock source select: 1 - ACLK /

#define TASSEL_2 (20x100u) /* Timer A clock source select: 2 - SMCLK /

#define TASSEL_3 (30x100u) /* Timer A clock source select: 3 - INCLK /

②TA的计数方式的选择:

#define MC_0 (00x10u) /* Timer A mode control: 0 - Stop /

#define MC_1 (10x10u) /* Timer A mode control: 1 - Up to CCR0 /

#define MC_2 (20x10u) /* Timer A mode control: 2 - Continous up /

#define MC_3 (30x10u) /* Timer A mode control: 3 - Up/Down /

③设置中断使能与标志位:

#define TAIE (0x0002u) / Timer A counter interrupt enable /

#define TAIFG (0x0001u) / Timer A counter interrupt flag */


关于TAR计数器是16位的:2^16=65536


上面的难点就在于选择TA的4种计数方式:(简单介绍一下)


00:计数器停止

01:增计数方式:


计数值最大范围到65536,但是taccr0值一定小于65536,所以,每计数都是从0~TACCR0(自定义);

注意这个模式下:TACCR0 作为周期寄存器使用;

所以通过改变 TACCR0 来改变计数周期;每个计数周期写作 (TACCR0 + 1);



可以发现这用模式可以使两者中断标志位置一,一个是TAIFG,另一个是 TACCR0 CCIFG(这个后面讲捕获比较的时候会提到)现在了解一下,就是说引起中断的时候要注意区分,是那种中断类型


10:连续计数模式


就是从0~65536再从0 ~65536 一直循环:

注意这个模式下:TACCR0 做为一般捕获比较寄存器使用;

因为这个模式下 TACCR0 作为普通寄存器使用了,所以这种模式下只会引起一种中断标志置位,就是TAIFG;


这个模式想要变更计数周期,就只能每次溢出之后给TAR赋初值;


11:增减计数方式:

与增计数方式有些相似,都是通过 TACCR0 来确定周期的,所以,TACCR0 作为周期寄存器使用;

周期是 2*TACCR0


因为这种模式是0 ~ 6553 ~ 0;所以周期长,最大周期为131070;



四种工作模式就是上面介绍的,下面讲下关于,捕获比较的特点和编辑方式:


TACCTLx是捕获比较寄存器,TA里有三个这个寄存器,分别是TACCTL0; TACCTL1;TACCTL2

这里要注意的是,如果计数模式选择增计数,或者增减计数模式,TACCR0会被用来做周期计数器,所以此时的TACCR0不能使用捕获比较功能


这里可以按照功能区分成三个单元来说:比较单元,捕获单元,输出单元


①首先通过模式选择功能模式(CAP)

0:比较模式<缺省>

1:捕获模式


这里先讲比较模式:就是设置一个定时长度(TACCRn),比较单元会一直比较TACCRn和TAR的值,当TACCRn = TAR时;CCIE置位,发起中断;

所以常用来写定时任务,如键盘扫描,定时查询等


捕获模式:用来进行测量,如测量时钟频率,脉冲宽度等

1

2

3

4

②设置捕获方式:(CMx)

00:不捕获

01:上升沿捕获

10:下降沿捕获

11:上升&下降沿捕获

③捕获/比较的输入选择:(CCISx)(选择输入信号)

00:CCIxA

01:CCIxB

10:GND

11:Vcc

CCIxA:P1.1~P1.3;CCIxB:P2.2;这个要查看 I/O引脚的第二功能;

④SCS:同步(1)或异步(0)捕获,一般用同步;

SCCI是CCIxA或CCIxB的信号读取位,只能读。


#define CCIS_0 (00x1000u) / Capture input select: 0 - CCIxA /

#define CCIS_1 (10x1000u) /* Capture input select: 1 - CCIxB /

#define CCIS_2 (20x1000u) /* Capture input select: 2 - GND /

#define CCIS_3 (30x1000u) /* Capture input select: 3 - Vcc /

#define CM_0 (00x4000u) /* Capture mode: 0 - disabled /

#define CM_1 (10x4000u) /* Capture mode: 1 - pos. edge /

#define CM_2 (20x4000u) /* Capture mode: 1 - neg. edge /

#define CM_3 (30x4000u) /* Capture mode: 1 - both edges */


输出单元:

主要由

OUTMODx;OUT;控制,用老输出PWM波形(以后用到再看)

#define OUTMOD_0 (00x20u) / PWM output mode: 0 - output only /

#define OUTMOD_1 (10x20u) /* PWM output mode: 1 - set /

#define OUTMOD_2 (20x20u) /* PWM output mode: 2 - PWM toggle/reset /

#define OUTMOD_3 (30x20u) /* PWM output mode: 3 - PWM set/reset /

#define OUTMOD_4 (40x20u) /* PWM output mode: 4 - toggle /

#define OUTMOD_5 (50x20u) /* PWM output mode: 5 - Reset /

#define OUTMOD_6 (60x20u) /* PWM output mode: 6 - PWM toggle/set /

#define OUTMOD_7 (70x20u) /* PWM output mode: 7 - PWM reset/set */


#define OUT (0x0004u) /* PWM Output signal if output mode 0 */


对于最后的中断向量寄存器,要注意的是这里是没有TACCR0的中断向量的,所以TACCR0是个单源中断,二中断向量寄存器内的是多源中断,区分两种中断方式很关键


/* TA3IV Definitions /

#define TAIV_NONE (0x0000u) / No Interrupt pending /

#define TAIV_TACCR1 (0x0002u) / TACCR1_CCIFG /

#define TAIV_TACCR2 (0x0004u) / TACCR2_CCIFG /

#define TAIV_6 (0x0006u) / Reserved /

#define TAIV_8 (0x0008u) / Reserved /

#define TAIV_TAIFG (0x000Au) / TAIFG */

关键字:定时器  使用方法  寄存器 引用地址:定时器的使用方法总结

上一篇:关于定时器A的官方例子解读
下一篇:msp430的看门狗总结

推荐阅读最新更新时间:2024-11-06 15:24

52定时器2的使用
* This file is an example to use timer2 in mode 0此程序用于定时器2模式0。以下程序200811.07调试成功。/*/ #include reg52.h /*当前文件夹内的文件 */ #define MSB_reload_value 0x36 /* msb reload value exemple 高位重载值:延时60ms*/ #define LSB_reload_value 0x36 /* lsb reload value exemple 低位重载值*/ //sfr T2MOD=0xC9; /*定时器2控制寄存器地址。可位寻址,复位值=XXXX XX00B 应该加在reg
[单片机]
定时器中断设计秒表 用数码管显示
//此秒表有时分秒和毫秒位,最多可以记小时,有暂停和继续计时功能,独立键盘上key1为暂停和继续键,key3为复位和开始计时键 //由于ms中断时间很短,所以如果中断和显示延迟关系处理不好,秒表走时不准,应注意 #include reg52.h #define uchar unsigned char #define uint unsigned int uchar code table ={0x 3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code table1 ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0
[单片机]
任务12:中断与定时器
本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。 参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版 本文介绍中断与定时器。 一、认知单片机中的“中断” (1)中断的基本概念 在计算机执行程序的过程中,当出现某种情况时,由服务对象向CPU发出请求当前程序中断的信号,要求CPU暂时停止当前程序的执行,而转去执行相应的处理程序,待处理程序执行完毕后,再返回继续执行原来被中断的程序,这样的过程称为中断过程。引起中断的原因或触发中断请求的来源称为中断源。为实现中断而设置的各种硬件和软件称为中断系统。 (2)采用中断技术的优点 a、实行分时操作,提高了CPU的利用率。当服务
[单片机]
任务12:中断与<font color='red'>定时器</font>
51单片机(二十二)—— 定时器2功能测试
在本文中,我们对51单片机的定时器2的功能进行测试。包含两个实验,一个是定时器2递增计数功能的测试,另一个是定时器2递减计数功能的测试。 实验1:递增计数 这个实验使用了定时器2的16位自动重装模式的递增计数功能。RCAP2H和RCAP2L寄存器内的值是重新加载的值。当TH2和TL2的计数值溢出时,将RCAP2H和RCAP2L寄存器内的值装载到TH2和TL2中重新计数。定时器2的初始化代码如下所示 void init_T2(void) { T2MOD= 0x00; //定时器2递增计数,禁止输出 CP_RL2=0; //16位自动重装模式 RCAP2H=(65536-50000)/256; //给R
[单片机]
物理天平的使用方法
天平所属 教学仪器 ,被广泛的应用于教学实验室当中。天平的类型是非常多的,其中物理天平就是一种常见的类型。我们在使用物理天平的时候对于物理天平的使用方法是必须要掌握的,这样对于物理天平的使用是有很大的帮助的。今天小编就来具体介绍一下物理天平的使用方法吧,希望可以帮助到大家。 1.安装和调整;①各部件需擦净后安装.吊盘背面标有 1 , 2 标记,应按 左1右2 安装.安装完毕应转动手轮使横梁数次起落,调整横梁落下时的支承螺丝,使横梁起落时不扭动,落下时中刀口离开中刀承,吊盘刚好落在底座上.②调节天平底座水平:调节调平螺丝,使底座上气泡在圆圈刻线中间位置,表示天平已调到水平位置.③调节横梁平衡:用镊子把游码拨到左边零刻度处,转
[测试测量]
STM32之定时器的一般应用
STM32系列芯片拥有最少3个、最多8个16位的定时器,这是定时器通过可编程预分频器驱动的16位自动装载计数器构成。 定时器的主要功能有如下几个大点: 1.16位向上、向下、向上/向下自动装载计数器。 2.16位可编程预分频器。 3.4个独立通道(输入捕获,输出比较,PWM生成,单脉冲模式输出)。 4.使用外部信号控制定时器和定时器互连的同步电路。 5.如下事件发生时产生中断/DMA(更新,触发事件,输入捕获,输出比较等)。 tips:高级定时器1和8还具有死区时间可编程的互补输出。 在学习定时器的时候,许多的底层问题,我们可以参考相应的参考手册,这里主要介绍定时器固件库函数的使用。 1.TIM_DeInit函数的功能是将外设TI
[单片机]
51单片机与D/A接口设计详解
D/A转换器 输入的是数字量,经转换后输出的是模拟量。有关D/A转换器的技术性能指标很多,例如绝对精度、相对精度、线性度、输出电压范围、温度系数、输入数字代码种类(二进制或BCD码)等。 1) 分辩率 分辨率是D/A转换器对输入量变化敏感程度的描述,与输入数字量的位数有关。如果数字量的位数为n,则D/A转换器的分辨率为2-n。这就意味着数/模转换器能对满刻度的2-n输入量作出反应。 2) 建立时间 建立时间是描述D/A转换速度快慢的一个参数,指从输入数字量变化到输出达到终值误差±(1/2)LSB(最低有效位)时所需的时间。通常以建立时间来表示转换速度. 转换器的输出形式为电流时,建立时间较短;输出形式为电压时,由于建
[单片机]
51单片机与D/A接口设计详解
常用电工测量仪表的使用方法及注意事项
电工常用测量仪表有摇表、万用表和钳形电流表,这些仪表在测量时若不注意正确的使用方法或稍有疏忽,不是将表烧坏,就是使被测元件损坏,甚至还危及人身安全,因此,掌握常用电工测量仪表的正确使用方法是非常重要的。 1 摇表 摇表又称兆欧表,其用途是测试线路或电气设备的绝缘状况。使用方法及注意事项如下: (1) 首先选用与被测元件电压等级相适应的摇表,对于500V及以下的线路或电气设备,应使用500V或1000V的摇表。对于500V以上的线路或电气设备,应使用1000V或2500V的摇表。 (2) 用摇表测试高压设备的绝缘时,应由两人进行。 (3) 测量前必须将被测线路或电气设备的电源全部断开,即不允许带电测绝缘电阻。并且要查明线路或
[测试测量]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved