编辑: xiong447385 2019-07-31
第1页定时器/计数器 与其它种类的单片机一样,SH6xxx 单片机也集成了若干定时器/计数器.

定 时器/计数器是单片机应用中使用最广泛的资源之一. 定时器从电路结构来讲,是由一组脉冲计数器组成,定时器和计数器是一个 相对的概念.一般而言,如果脉冲计数器的时钟来源与系统内部的系统时钟或振 荡器时钟,则称之为定时器,因为其时钟是固定的,可以用作时间基准.如果其 时钟来源于系统外部的脉冲,则称之为计数器. SH6xxx 产品中的定时器种类一般包括: ? 8-bit Genernal Timer0 ? 8-bit Genernal Timer1 ? BaseTimer ? WatchDog Timer ? Warmup Timer 下面就这些 Timer 做一些具体介绍. 1. Timer0和Timer1 Timer0/1 一般有以下特点(具体产品 Timer0 或Timer1 的特点在此基础上可 能有所增加或删减): ?

8 位定时/计数器,一般 Timer1 只用作定时器;

? 数据计数器可读可写;

?

8 种预分频系数;

? 定时/计数器时钟来源可以选择内部时钟和外部脉冲;

? 计数值由$FF 到$00 时产生中断溢出(overflow);

? 对于外部事件可选择边沿触发 以下为简化的定时器框图: 第2页PRE-SCALER T0C 8-BIT COUNTER Fosc/4 T0 T0E T0S T0M PRE-SCALER T1C 8-BIT COUNTER Fosc/4 T1M Timer0 Timer1 图1-1 Timer0/1 结构框图 2. 结构配置和操作 定时器0和定时器1分别由一个8位只写定时寄存器 (TL0L/TL1L, TL0H/TL1H) 和一个8位只读计数器 (TC0L/TC1L, TC0H/TC1H) 组成,每个寄存器又由低四位和 高四位组成. 对计数器初始化时, 将数据写入定时寄存器(TL0L, TL0H) 中就可以了. 寄 存器的编程方法: 先写入低四位数据再写入高四位数据. 当计数器中写入高四位 数据或者计数器从$FF到$00计数溢出时, 计数器将会自动装入定时寄存器的值. 如图 1-2,由于寄存器高四位寄存器 H 控制着实际的读和写操作信号. 所 以在操作寄存器时请遵循以下原则: 写操作时,先写低四位,后写高四位以更新计数器;

读操作时,先读高四位,再读低四位. Load Reg. H 8-bit timer counter Load Reg. L Latch Reg. L 图1-2 Timer0/1 操作示意图 第3页3. 定时器0或定时器1中断 当计数器由$FF计数到$00时会溢出,定时器溢出将会产生一个内部中断请求 信号. 如果中断使能标志为"1",系统将处理定时器中断服务子程序. 该功能也 可用于在HALT模式下唤醒CPU. 4. 定时器0工作模式寄存器 通过对定时器 0/1 工作模式寄存器 (TM0/TM1) 的设置,定时器可编程为多 个不同分频比的分频器.由8位计数器对分频器输出的脉冲进行计数.定时器工 作模式寄存器 (TM0/TM1) 是一个

3 位的寄存器,用于定时器的控制,如下表所 示.这些工作模式寄存器将选择定时器的输入脉冲源. 定时器

0 工作模式寄存器 TM0.2 TM0.1 TM0.0 预分频器分频比 比例 N

0 0

0 /2

11 2048 (初始值)

0 0

1 /2

9 512

0 1

0 /2

7 128

0 1

1 /2

5 32

1 0

0 /2

3 8

1 0

1 /2

2 4

1 1

0 /2

1 2

1 1

1 /2

0 1 5. 外部时钟/事件T0作为TMR0的时钟源 当一个外部时钟/事件用作TM0的输入时, 外部时钟源被CPU系统时钟同步. 因此, 外部时钟源必须遵循以下原则. 由于 T0C 从T0M 输出, 并且 T0C 在系统时 钟的每个指令周期里采样得到. 因此, 对T0C 来讲其高电平必须保持至少

2 倍tOSC 的时间而低电平也必须保持至少

2 倍tOSC 时间. 当选择分频器分频比为/2

0 时, T0C 与系统时钟的输入相同. 其条件如下: T0H = T0CH = T0 高电平时间 ≥

2 tOSC + T Δ 第4页T0L = T0CL = T0 低电平时间 ≥

2 tOSC + T Δ Note: T Δ = 40ns 当选择其它的分频比时, TM0 通过异步脉动计数器来标度, 且预分频器的输 出信号是对称的. 那么: T0C 高电平时间 = T0C 低电平时间 =

2 T0 * N 其中 T0 = 定时器0输入周期 N = 预分频器的值 因此, 满足条件是:

2 0 T * N ≥

2 tOSC + T Δ , or T0 ≥ N T

2 + t *

4 OSC Δ 上述条件仅限于 T0 周期用作定时器时. 该等式对脉宽没有限制. 概括如 下: T0 = 定时器

0 周期 ≥ N T

2 t *

4 OSC Δ + 6. Base Timer(时基定时器) 时基定时器(BaseTimer)是在通用定时器基础上进行简化的一类 Timer. BaseTimer 根据其设定的模式,为系统提供时基信号,用于系统的计时或给 系统提供一个时间基准信号. MPX /1 /4 /8 /16 PreScaler /8 32.768kHz

8 Bit base timer counter 4.096kHz BTM [1:0] BTM[3:2] 图1-3 BaseTimer 结构图示意图 第5页BaseTimer 模式寄存器: BTM3 BTM2 BTM1 BTM0 分频比 定时时间 (秒) 时钟源

1 0

0 0 /1 1/16 32.768kHz

1 0

0 1 /4 1/4 32.768kHz

1 0

1 0 /8 1/2 32.768kHz

1 0

1 1 /16

1 32.768kHz

0 0

0 1

1 1 X X BaseTimer 禁止使用 上图和上表中,BaseTimer 的时钟源为 32.768kHz,其实这只是一个原则而 已.BaseTimer 的时钟源每个产品可能有所不同,具体的时钟源请参考具体产品 的数据手册. 系统复位开始运行,在BTM[3:2]被设置为

10 后,BaseTimer 被打开,开始 对内部时钟进行计数.当计数值达到$FF 时,在下一个时钟输入以后,计数器的 值将等于 $00 并产生溢出,使BaseTimer 中断请求标志置为 1.同时如果 BaseTimer 的中断允许位为 ON,则CPU 会立即响应溢出中断. 在BaseTimer 计数过程中,程序不能读写 BaseTimer 内部的计数值. BaseTimer 定时时间=1 / (时钟源 /

8 /分频值) 7. WatchDog Timer (看门狗定时器) 当由于某些原因, 如电源干扰或软件自身的缺陷导致程序意外的进入了死循 环或出错运行状态时,这时我们可以利用看门狗定时器(WDT)来强制系统产生硬 件复位,使系统及时退出死循环或出错状态.当然,当系统发生了硬件死锁现象 时,WDT 也无法发挥作用.用户程序无需关心 WDT 具体的计数值,而只要在 WDT 的溢出周期内(或者说在溢出发生前)不断的复位 WDT,防止产生溢出复位信号即 可. 看门狗定时器是一个递减计数器,一般拥有独立的内建 RC 振荡器作为时钟 源,因此在 STOP 模式下仍会持续运行(也有某些型号的 MCU 的WDT 时钟源来自 系统时钟,因此在 STOP 模式下不会运行).当定时器溢出时,WDT 将复位 MCU. 该功能通过代码选项可以允许或禁止该功能. WDT 控制寄存器(第2~0 位)用来选择不同的溢出时间.定时器溢出后,WDT 溢出标记 (第3位) 将由硬件自动设置为"1". 通过读或者写 WDT 控制寄存器, WDT 会被复位,重新开始计数. 第6页WDT 系统寄存器: 第3位第2位第1位第0位读/写 说明 WDT WDT.2 WDT.1 WDT.0 读/写 只读 第2-0 位: 看门狗定时器控制位. 第3位: 看门狗定时器溢出标记 (只读) . X

0 0

0 读/写WDT溢出周期为4096ms. X

0 0

1 读/写WDT 溢出周期为 1024ms. X

0 1

0 读/写WDT 溢出周期为 256ms. X

0 1

1 读/写WDT 溢出周期为 128ms. X

1 0

0 读/写WDT 溢出周期为 64ms. X

1 0

1 读/写WDT 溢出周期为 16ms. X

1 1

0 读/写WDT 溢出周期为 4ms. X

1 1

1 读/写WDT 溢出周期为 1ms.

0 X X X R 未发生 WDT 溢出复位.

1 X X X R WDT 溢出,发生 WDT 复位. 注意:规格书中的看门狗定时器溢出周期是在工作电压 VDD = 5V 时的参考值,如 果工作电压不同,将会有差异. 在软件应用中,在合理的程序位置清 WDT 才能发挥其有效的程序监控作用.一般 清WDT 指令只能放置在程序主循环中,且只能放置一个.在子程序、循环程序以 及中断服务程序中不能放置清 WDT 指令, 否则有机会在发生错误的情况下永远无 法退出. 8. Warmup Timer(预热定时器) 所有的单片机系统初次上电后,其振荡器首先开始起振,其振荡过程与振荡 器的类型有关,一般而言,RC 类型的振荡器起振时间较短(几十到几百 ms),而 晶振或陶瓷振荡器的起振时间较长(几百毫秒到 1~2 秒). 在SH6xxx 系统中,晶振或陶瓷振荡器是采用负反馈结构,RC 振荡器是利用 RC 充放电的特性. 由于振荡器在刚起振到振荡稳定的过程中,振荡器产生的振荡波形很不稳 定,振幅和频率变化极大.这样的波形如果直接用作系统的时钟,会导致系统运 行不稳定,甚至出现"死机" .为了消除这一影响,在系统中就引入了 warmup timer(预热定时器)的概念.从振荡器开始起振开始,其产生的振荡时钟首先作 为warmup Timer 的输入,只有当 warmup timer 接收到一定数量的稳定的振荡时 钟后,振荡器的振荡时钟才输出到系统中,作为系统时钟,系统开始运行.这样 就消除了振荡器起振时的不稳定状态,保证系统正常可靠的运行. 一般而言,warmup timer 的启动发生在以下情况: ? 初始上电阶段(POR,Power on reset);

? 外部有 Reset 信号输入时;

? 系统内部产生了硬件 Reset 信号时;

? 系统从省电模式返回时(系统进入省电模式,在该模式下,振荡器为关闭 第7页状态),如从 STOP 模式返回时;

由于每个产品所采用的振荡器类型?同,使用条件?同,warmup timer 的定时 时间(即时钟的计数溢出值)均有所差异,具体的数据在每个产品的数据手册的 warmup timer 部分均有详细?出.

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题