第十章 定时器与计数器原理_第1页
第十章 定时器与计数器原理_第2页
第十章 定时器与计数器原理_第3页
第十章 定时器与计数器原理_第4页
第十章 定时器与计数器原理_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章定时器与计数器原理和应用何宾2023.09主要内容定时器/计数器模块功能定时器/计数器工作模式定时器/计数器寄存器组设计实例一:定时器/计数器设置和中断生成设计实例二:定时器/计数器对外部脉冲计数定时器/计数器模块功能

STC32G系列单片机内设置了5个24位定时器/计数器(8位预分频器+16位计数)5个16位定时器/计数器T0、T1、T2、T3和T4均可设置为定时和计数两种工作方式定时器/计数器模块功能

--定时和计数模式的选择如果计数脉冲来自系统时钟,则为定时方式。如果计数脉冲来自单片机外部引脚时,则为计数方式对于定时器/计数器T0和T1,通过寄存器TMOD中对应的C/T位来设置T0/T1工作在定时/计数方式

对于定时器/计数器T2,通过寄存器AUXR中的T2_C/T位来设置T2工作在定时/计数方式

对于定时器/计数器T3,通过寄存器T4T3M中的T3_C/T位来设置T3工作在定时/计数方式

对于定时器/计数器T4,通过寄存器T4T3M中的T4_C/T位来设置T4工作在定时/计数方式定时器/计数器模块功能

--计数脉冲的选择本质上,定时器/计数器的核心单元就是一个加法计数器,该计数器在内部/外部脉冲的驱动下执行递增操作当计数脉冲来自系统时钟时,定时器/计数器在每12个/1个时钟周期(具体通过寄存器设置)时就得到一个计数脉冲,该计数脉冲使得计数值加1当计数脉冲来自单片机外部引脚时,每个计数脉冲就使得计数值加1定时器/计数器模块功能

--计数脉冲的选择当定时器/计数器T0、T1和T2工作在定时模式时,寄存器AUXR中的T0x12位、T1x12位和T2x12位分别决定定时器/计数器T0、T1和T2的计数脉冲频率是选择系统时钟频率/12还是系统时钟频率/1(不分频)当定时器/计数器T3和T4工作在定时模式时,寄存器T4T3M中的T3x12位和T4x12位分别决定定时器/计数器T3和T4的计数脉冲频率是选择系统时钟频率/12还是系统时钟频率/1(不分频)定时器/计数器模块功能

--工作模式的选择T0有4种工作模式模式0(16位自动重装载模式)模式1(16位不可重装载模式)模式2(8位自动重装模式)模式3(不可屏蔽中断的16位自动重装载模式)T1除模式3外,其他工作模式与定时器/计数器0相同T1在模式3时无效,停止计数T2的工作模式固定为16位自动重装载模式T2可以当定时器使用,也可以当串口的波特率发生器和可编程时钟输出T3和T4与T2相同,它们的工作模式固定为16位自动重装载模式T3和T4既可作定时器使用,也可作串口波特率发生器和可编程时钟输出定时器/计数器工作模式本节将介绍定时器/计数器T0、T1和T2的工作模式。对于定时器/计数器T3和T4的工作模式,详见STC32G系列单片机技术参考手册定时器/计数器工作模式

--定时器/计数器0工作模式定时器/计数器0共有4种工作模式模式0(16位自动重加载模式)模式1(16位不可自动重加载模式)模式2(8位自动重加载模式)模式3(不可屏蔽中断的16位自动重加载定时器模式)定时器/计数器0工作模式

--模式0定时器/计数器0工作模式0为16位自动重加载模式系统时钟SYSclk通过定时器0的8位预分频寄存器TM0PS后产生定时器0的时钟信号T0clk定时器/计数器0的时钟源T0clkT0clk定时器/计数器0工作模式

--模式0定时器/计数器0有两个隐藏的寄存器RL_TH0和RL_TL0。RL_TH0与TH0共用一个地址,RL_TL0与TL0共用一个地址当TR0位为“0”(即禁止定时器/计数器0工作)时,写入寄存器TL0的值会同时写入寄存器RL_TL0;同理,写入寄存器TH0的值也会同时写入寄存器RL_TH0当TR0位为“1”(即允许定时器/计数器0工作)时,写到寄存器TL0的值实际上并没有写到寄存器TL0中,而是写到隐藏的寄存器RL_TL0中;同理,写到寄存器TH0的值实际上并没有写到当前寄存器TH0中,而是写到隐藏的寄存器RL_TH0中因此,巧妙地实现了16位重装载定时器当读取寄存器TH0和寄存器TL0时,读取的值就是寄存器TH0和寄存器TL0中保存的值,而不是寄存器RL_TH0和寄存器RL_TL0内的值定时器/计数器0工作模式

--模式0当定时器/计数器0工作在模式0时,由[TH0,TL0]构成的16位计数寄存器的溢出不仅会设置TF0位,而且会自动将16位寄存器[RL_TH0,RL_TL0]的值重新装入16位计数寄存器[TH0,TL0]中定时器/计数器0工作模式

--模式0GATE、INT0和TR0GATE、INT0和TR0共同决定定时器/计数器0能否正常工作它们三个信号通过逻辑“或门”和逻辑“与门”产生control信号,用于控制内部SYSclk信号或外部脉冲通过T0引脚是否能接入该定时器/计数器GATEINT0TR0功能000不启动定时器/计数器0001启动定时器/计数器0010不启动定时器/计数器0011启动定时器/计数器0100不启动定时器/计数器0101不启动定时器/计数器0110不启动定时器/计数器0111启动定时器/计数器0定时器/计数器0工作模式

--模式0

定时器/计数器0工作模式

--模式0

定时器/计数器0工作模式

--模式0

定时器/计数器0工作模式

--模式1定时器/计数器0的模式1不能自动重加载16位计数初值定时器/计数器0工作模式

--模式2定时器/计数器0的模式2为8位自动重加载模式注:当重加载时,将寄存器TH0的内容加载到寄存器TL0中定时器/计数器0工作模式

--模式2

定时器/计数器0工作模式

--模式3定时器/计数器0模式3为不可屏蔽中断16位自动重加载模式,实时操作系统可使用该模式作为节拍定时器当工作在模式3时,只需允许ET0/IE.1(定时器/计数器0中断允许位),而不需要允许EA/IE.7(总中断使能位)就能打开定时器/计数器0的中断因此,该模式下的定时器/计数器0中断与总中断使能位EA无关。并且,一旦在该模式下打开定时器/计数器0的中断(即ET0设置为“1”),那么中断是不可屏蔽的,该中断的优先级也是最高的,即该中断不能被任何其他中断所打断定时器/计数器1工作模式定时器/计数器1除模式3外,其他工作模式与定时器/计数器0相同定时器/计数器1工作模式

--模式0定时器/计数器1工作模式0为16位自动重加载模式系统时钟SYSclk通过定时器1的8位预分频寄存器TM1PS后产生定时器1的时钟信号T1clk定时器/计数器1的时钟源T1clkT1clk定时器/计数器1工作模式

--模式0定时器/计数器1有两个隐藏的寄存器RL_TH1和RL_TL1。RL_TH1与TH1共用一个地址,RL_TL1与TL1共用一个地址当TR1位为“0”(即禁止定时器/计数器1工作)时,写入寄存器TL1的值会同时写入寄存器RL_TL1;同理,写入寄存器TH1的值也会同时写入寄存器RL_TH1当TR1位为“1”(即允许定时器/计数器1工作)时,写到寄存器TL1的值实际上并没有写到寄存器TL1中,而是写到隐藏的寄存器RL_TL1中;同理,写到寄存器TH1的值实际上并没有写到当前寄存器TH1中,而是写到隐藏的寄存器RL_TH1中因此,巧妙地实现了16位重装载定时器当读取寄存器TH1和寄存器TL1时,读取的值就是寄存器TH1和寄存器TL1中保存的值,而不是寄存器RL_TH1和寄存器RL_TL1内的值定时器/计数器1工作模式

--模式0当定时器/计数器1工作在模式0时,由[TH1,TL1]构成的16位计数寄存器的溢出不仅会设置TF1位,而且会自动将16位寄存器[RL_TH1,RL_TL1]的值重新装入16位计数寄存器[TH1,TL1]中定时器/计数器1工作模式

--模式0

定时器/计数器1工作模式

--模式1定时器/计数器1的模式1不能自动重加载16位计数初值定时器/计数器1工作模式

--模式2定时器/计数器1的模式2为8位自动重加载模式注:当重加载时,将寄存器TH1的内容加载到寄存器TL1中定时器/计数器1工作模式

--模式2

定时器/计数器2工作模式定时器/计数器2只有16位自动重加载模式定时器/计数器2的时钟源T2clkT2clk定时器/计数器2工作模式

定时器/计数器寄存器组

--控制寄存器(TCON)除了用于控制定时器/计数器T0和T1外,控制寄存器TCON也可锁存T0和T1溢出中断源和外部请求中断源等该寄存器位于SFR地址为0x88的位置。当复位后,该寄存器的值为“00000000”,表中:TF1定时器/计数器1的溢出中断标志。当允许定时器/计数器1计数后,从初值开始加1计数。当产生溢出时,硬件将该位设置为“1”。此时,向CPU发出中断请求。如果CPU响应该中断请求,则由硬件将该位自动清“0”。通过软件轮询,也可以将该位清“0”位索引76543210名字TF1TR1TF0TR0IE1IT1IE0IT0定时器/计数器寄存器组

--控制寄存器(TCON)TR1定时器/计数器1运行控制位。该位由软件置位和清零。当工作模式寄存器TMOD的GATE位(第7位)为”0”,且TR1位为”1”时,允许定时器/计数器1开始计数;当TR1位为“0”时,禁止定时器/计数器1计数;当工作模式寄存器TMOD的GATE(第7位)位为“1”,TR1位为“1”,且INT1输入为高电平时,才允许其开始计数TF0定时器/计数器0的溢出中断标志。当允许定时器/计数器0计数后,从初值开始加1计数。当产生溢出时,硬件将该位设置为“1”。此时,向CPU发出中断请求。如果CPU响应该中断请求,则由硬件将该位自动清“0”。通过软件轮询,也可以将该位清“0”定时器/计数器寄存器组

--控制寄存器(TCON)TR0定时器/计数器0运行控制位。该位由软件置位和清零。当工作模式寄存器TMOD的GATE位(第3位)为“0”,且TR0位为“1”时,允许其开始计数;当TR0位为“0”时,禁止计数;当工作模式寄存器TMOD的GATE位(第3位)为“1”,TR0位为“1”,且INT0输入为高电平时,才允许其开始计数IE1外部中断请求源(INT1/P3.3)标志。当IE1位为“1”时,外部中断向CPU发出中断请求。当CPU响应该中断后,由硬件自动清除该位IT1外部中断源触发控制位。当IT1位为“0”时,上升沿或者下降沿均可触发外部中断1;当IT1位为“1”时,只有下降沿可以触发外部中断1定时器/计数器寄存器组

--控制寄存器(TCON)IE0外部中断请求源(INT0/P3.2)标志。当IE0位为“1”时,外部中断向CPU发出中断请求。当CPU响应该中断后,由硬件自动清除该位IT0外部中断源触发控制位。当IT0位为“0”时,上升沿或者下降沿均可触发外部中断0;当IT0位为“1”时,只有下降沿可以触发外部中断0定时器/计数器寄存器组

--工作模式寄存器(TMOD)定时器/计数器T0和定时器/计数器T1的定时或者计数功能由TMOD寄存器的控制位C/T进行选择该寄存器位于SFR地址为0x89的位置。当复位后,该寄存器的值为“00000000”T1_GATE(TMOD.7)该位使能/禁止定时器/计数器1。当该位为“1”时,只有在INT1引脚为高,并且TCON寄存器的TR1位置“1”时,才能打开定时器/计数器1位索引76543210名字T1_GATET1_C/TT1_M1T1_M0T0_GATET0_C/TT0_M1T0_M0作用域与定时器1有关与定时器0有关定时器/计数器寄存器组

--工作模式寄存器(TMOD)T1_C/T(TMOD.6)该位控制定时器/计数器1的工作模式。当该位为“1”时,定时器/计数器1工作在计数器方式(即对引脚T1/P3.5外部脉冲计数);当该位为“0”时,定时器/计数器1工作在定时器方式(即对内部时钟进行计数)T1_M1和T1_M0(TMOD.5和TMOD.4)T1_M1T1_M0工作模式0016位自动重新加载模式。当溢出时,将RL_TH1和RL_TL1的值自动重新加载到TH1和TL1中0116位不可自动重新加载模式。即:需要重新写TH1和TL1寄存器108位自动重新加载模式。当溢出时,将TH1的值自动重新加载到TL1中11无效。停止计数定时器/计数器寄存器组

--工作模式寄存器(TMOD)T0_GATE(TMOD.3)该位使能/禁止定时器/计数器0。当该位为“1”时,只有在INT0引脚为高,并且TCON寄存器的TR0位置“1”时,才能打开定时器/计数器0T0_C/T(TMOD.2)该位控制定时器/计数器0的工作模式。当该位为“1”时,定时器/计数器0工作在计数器方式(即对引脚T0/P3.4外部脉冲计数);当该位为“0”时,定时器/计数器0工作在定时器方式(即对内部时钟进行计数)定时器/计数器寄存器组

--工作模式寄存器(TMOD)T0_M1和T0_M0(TMOD.1和TMOD.0)定时器/计数器0模式选择T0_M1T0_M0工作模式0016位自动重新加载模式。当溢出时,将RL_TH0和RL_TL0的值自动重新加载到TH0和TL0中0116位不可自动重新加载模式,即需要重新写TH0和TL0寄存器108位自动重新加载模式。当溢出时,将TH0的值自动重新加载到TL0中11不可屏蔽中断的16位自动重装定时器(由于该中断优先级最高,因此可用于监控系统防止跑飞)定时器/计数器寄存器组

--辅助寄存器(AUXR)为了与传统的MCS-51/MCS-251单片机兼容,在复位后,定时器0、定时器1和定时器2和传统8051一样,都是12分频。在STC32G系列单片机中,通过AUXR寄存器可以禁止分频,直接使用T0clk/T1clk时钟驱动定时器该寄存器位于SFR地址为0x8E的位置。当复位后,该寄存器的值为“00000001”位索引76543210名字T0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMS1BRT定时器/计数器寄存器组

--辅助寄存器(AUXR)T0x12定时器0速度控制位。当该位为“0”时,定时器0是传统8051单片机的速度(即12分频);当该位为“1”时,定时器0的速度是传统8051单片机速度的12倍(即不分频)T1x12定时器1速度控制位。当该位为“0”时,定时器1是传统8051单片机的速度(即12分频);当该位为“1”时,定时器1的速度是传统8051单片机的12倍(即不分频)定时器/计数器寄存器组

--辅助寄存器(AUXR)UART_M0x6串口1模式0的通信速率设置位。当该位为“0”时,串口1模式0的速度是传统8051单片机的速度(即12分频);当该位为“1”时,串口1模式0的速度是传统8051单片机速度的6倍(即2分频)T2R定时器2允许控制位。当该位为“0”时,不允许定时器2运行;当该位为“1”时,允许定时器2运行T2_C/T控制定时器/计数器2的工作模式。当该位为“0”时,用作定时器(即对内部系统时钟进行计数);当该位为“1”时,用作计数器(即对引脚T2/P3.1的外部脉冲进行计数)定时器/计数器寄存器组

--辅助寄存器(AUXR)T2x12定时器2速度控制位。当该位为“0”时,定时器2是传统8051单片机的速度(即12分频);当该位为“1”时,定时器2的速度是传统8051单片机速度的12倍(即不分频)EXTRAM内部/外部RAM存取控制位。当该位为“0”时,允许使用逻辑上在片外、物理上在片内的扩展数据RAM区;当该位为“1”时,禁止使用逻辑上在片外、物理上在片内的扩展数据RAM区定时器/计数器寄存器组

--辅助寄存器(AUXR)S1BRT串口1(UART1)选择定时器1/定时器2作为波特率发生器的控制位。当该位为“0”时,选择定时器1作为串口1(UART)的波特率发生器;当该位为“1”时,选择定时器2作为串口1(UART)的波特率发生器,此时释放定时器1,它可以作为独立的定时器使用注:默认,串口1使用定时器2作为波特率发生器,不建议使用定时器1.定时器2可同时共享作为串口1、串口2、串口3和串口4的波特率发生器定时器/计数器寄存器组

--计数寄存器(TH0和TL0)计数寄存器TH0和TL0用于保存定时器/计数器0的计数初值TH0保存计数初值的高8位,TL0保存计数初值的低8位TH0和TL0分别位于SFR地址为0x8C和0x8A的位置。复位后,它们值均为“00000000”TH0寄存器TL0寄存器位索引76543210名字定时器/计数器0计数初值高8位位索引76543210名字定时器/计数器0计数初值低8位定时器/计数器寄存器组

--计数寄存器(TH1和TL1)计数寄存器TH1和TL1用于保存定时器/计数器1的计数初值TH1保存计数初值的高8位,TL1保存计数初值的低8位TH1和TL1分别位于SFR地址为0x8D和0x8B的位置。复位后,它们值均为“00000000”TH1寄存器TL1寄存器位索引76543210名字定时器/计数器1计数初值高8位位索引76543210名字定时器/计数器1计数初值低8位定时器/计数器寄存器组

--计数寄存器(T2H和T2L)计数寄存器T2H和T2L用于保存定时器/计数器2的计数初值T2H保存计数初值的高8位,T2L保存计数初值的低8位T2H和T2L分别位于SFR地址为0xD6和0xD7的位置。复位后,它们值均为“00000000”T2H寄存器T2L寄存器位索引76543210名字定时器/计数器2计数初值高8位位索引76543210名字定时器/计数器2计数初值低8位定时器/计数器寄存器组

--中断与时钟输出控制寄存器(INT_CLKO)通过INT_CLKO寄存器的T0CLKO、T1C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论