【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}

   九层妖塔 起于垒土

【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}

  • 定时器
    • 1、简介
    • 2、寄存器
      • ①TCON (Timer Control-控制寄存器)
      • ②TMOD(Timer Mode-工作模式寄存器)
      • ③AUXR(Auxiliary Register-辅助寄存器)
      • ④INT_CLKO(AUXR2)(外部中断允许和时钟输出寄存器)
      • ⑤IE(Interrupt Enable-中断允许寄存器)
      • ⑥IP(Interrupt Priority-中断优先级控制寄存器)
      • ⑦IE2(Interrupt Enable-中断允许寄存器2)
    • 3、定时器0的工作模式0
      • ①隐含寄存器RL_TH0,RL_TL0
      • ②系统时钟 f s y s f_{sys} fsys
      • ③定时初值计算
      • ④定时器初始化函数流程
      • ⑤计数器计数初值计算
    • 4、定时器2
      • ①T2控制寄存器-AUXR
      • ②T2的中断允许控制位ET2
      • ③定时器2的初始化流程图
    • 5、定时器的使用问题
      • ①利用定时器的计数输入端口改造成外部中断源输入端口
      • ②定时器/计数器的实时性
      • ③动态读取运行中的计数值
    • 6、可编程时钟输出

定时器

1、简介

 ●定时器的核心部件是一个加法计数器其本质是对脉冲进行计数。计数脉冲来系统时钟或者单片机外部引脚。
 ●STC15F系列单片机只有3个定时器。
 ●四种工作模式:
  ○定时器0:
    模式0(16位自动重装载模式)
    模式1(16位不可重装载模式)
    模式2(8位自动重装载模式)
    模式3(不可屏蔽中断的16位自动重装载模式)
  ○ 定时器1:模式0,模式1,模式2
  ○ 定时器2:固定为模式0;还可以当串口的波特率发生器和可编程时钟输出。

2、寄存器

①TCON (Timer Control-控制寄存器)

 ●TCON:控制定时器T0/T1的启动于停止,包含定时器T0/T1的溢出标志位88H可位寻址
 ●TF1:(Timer Flow)定时器1溢出标志位。计满溢出时由硬件置"1"分为查询法中断法响应溢出。
  ○ 中断法:在中断允许时,向CPU发出中断请求,中断响应后,由硬件自动清除TF1标志
  ○ 查询法:通过软件查询TF1标志,来判断计满溢出时刻,查询结束后,用软件手动清除TF1标志
 ●TR1:(Timer Run)T1的运行控制位
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第1张图片

②TMOD(Timer Mode-工作模式寄存器)

 ●TMOD设置定时器T0/T1的工作模式(四种工作模式)和功能(定时or计数)。
 ●TMOD不可位寻址,只能用字节指令设置。
 ●M1,M0:工作模式选择位。默认为16位自动重装载模式。
 ● C / T ‾ C/\overline{T} C/T:功能选择位。 T ‾ \overline{T} T:T低电平有效即定时器模式。
 ●GATE:门控位。测量脉冲宽度。
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第2张图片

③AUXR(Auxiliary Register-辅助寄存器)

 ●T0x12:定时器0速度控制位。
 (T0x12)=0:定时计数脉冲完全与传统8051单片机的计数脉冲一样,计数脉冲周期为系统时钟周期的12倍,即12分频;当(T0x12)=1时,计数脉冲为系统时钟脉冲,计数脉冲周期等于系统时钟周期,即无分频。
 ●T2R:定时器2的运行控制位。
 ●T2_ C / T ‾ C/\overline{T} C/T:T2的功能选择位。
 ●T2x12:定时器2速度控制位。
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第3张图片

④INT_CLKO(AUXR2)(外部中断允许和时钟输出寄存器)

【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第4张图片

⑤IE(Interrupt Enable-中断允许寄存器)

 ●EA:总中断允许控制位。
 ●ET1:定时器T1中断允许位
 ●ET0:定时器T0中断允许位
 ●地址A8H可位寻址
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第5张图片

⑥IP(Interrupt Priority-中断优先级控制寄存器)

【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第6张图片

⑦IE2(Interrupt Enable-中断允许寄存器2)

【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第7张图片
 ●ET2:定时器2的中断允许位。

3、定时器0的工作模式0

①隐含寄存器RL_TH0,RL_TL0

 ●RL_TH0与TH0共用一个地址;RL_TL0与TL0共用一个地址。
 ●用于保存16位定时器的重装初值。
 ●当定时器0工作在模式0(16位自动重装载模式)时,[TL0,TH0]的溢出置位溢出标志位TF0,同时会自动将[RL_TL0,RL_TH0]的内容重新装入[TL0,TH0]
 ●写数据:
  ○TR0=0即关定时器0,对TL0TH0寄存器写入数据时,也会分别同时写入RL_TL0RL_TH0中。
  ○TR0=1即开定时器0,对TL0TH0寄存器写入数据时,实际上不是写入当前寄存器,而是只写入隐含寄存器RL_TL0RL_TH0中。这样不会影响T0的正常计数。
 ●读数据:
TL0TH0寄存器读取数据时,读取的是TL0TH0状态值,而不是隐含寄存器的内容。

②系统时钟 f s y s f_{sys} fsys

 系统时钟 f s y s f_{sys} fsys =主时钟 f o s c f_{osc} fosc / N
 N为分频系数,可以通过时钟分频寄存器CLK_DIV进行改变,默认为1.

③定时初值计算

  ●12分频:
t = ( 2 n − a ) ∗ 12 f s y s t=\frac{(2^n-a)*12}{f_{sys}} t=fsys(2na)12
  ●不分频:
t = ( 2 n − a ) ∗ 1 f s y s t=\frac{(2^n-a)*1}{f_{sys}} t=fsys(2na)1
时间t的单位位秒; (举例为50ms)
定时器0为16位的,所以n=16;
a为定时器的初始值;
系统时钟 f s y s f_{sys} fsys设是12MHz,即 12 × 1 0 6 12×10^6 12×106Hz
若采用12分频,可算得计数初值十进制数a=15536,换算成二进制数位 a = ( ‭ ‭ 11110010110000 ‬ ‬ ) 2 a=(‭‭11 1100 1011 0000‬‬)_2 a=(11110010110000)2
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第8张图片

④定时器初始化函数流程

中断法:共6步。
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第9张图片

⑤计数器计数初值计算

  ●T0对应的计数输入端为P3.4;T1为P3.5;T2为P3.1。
  ●计数输入端有一个负跳变计数器的状态值加1。
  ●计数器的计数次数N=计数器的最大空间-计数初值= 2 n − a 2^n-a 2na
  ●16位计数器:
    计数初值: a = ( 2 16 − N ) a=(2^{16}-N) a=(216N)

4、定时器2

①T2控制寄存器-AUXR

 ●T2R:T2允许控制位
 ● T 2 T2 T2_ C / T ‾ C/\overline{T} C/T:功能选择位。 T ‾ \overline{T} T:T低电平有效即定时器模式。
 ●T2x12:定时器2速度控制位。
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第10张图片

②T2的中断允许控制位ET2

【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第11张图片
 ●定时器2的中断请求标志位对用户不可见,即无法用查询法。

③定时器2的初始化流程图

【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第12张图片

5、定时器的使用问题

①利用定时器的计数输入端口改造成外部中断源输入端口

 ●计数模式
 ●模式2(8位自动重装)
 ●计数初值为FFH
 ●由T1端口输入一个负跳变,计数器即回零溢出
详见例2

②定时器/计数器的实时性

定时器回0溢出请求中断到主机响应中断并作出处理存在时间延迟

③动态读取运行中的计数值

【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第13张图片
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第14张图片
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第15张图片
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第16张图片
【蓝桥杯】—{MCU:IAP15F2K61S2}—{定时器}_第17张图片

6、可编程时钟输出

你可能感兴趣的:(蓝桥杯,单片机,单片机,stm32,嵌入式,linux,操作系统)