第6章 定时器/计数器TMR0
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
若没有使用分频器,TMR0会在每个指令周期信号(时钟周期
的4倍)到来时自动加1。
若使用分频器,TMR0会在指令周期信号分频某个倍数后,产
生有效跳变时自动加1,这时TMR0最长固有定时时间将达到 65535us。
定时时间计算
假设:定时时间为t,标准时钟周期为T, 实际累加 记录的脉冲数 N,有关系式: t = T * N , N = t / T
分频值的计算
设定时要求为:62.5ms(参看182页) 不用分频器只能记录256us 如果分频比为256,则定时62.5ms需要计数 62500/256=244.14次,计数器能够名字要求
TMR0应用注意问题:
注意:TMR0作为定时器时的计数 过程无法停止,是循环计数
1、写TMR0的不理想方法:
了解即可: 计数脉冲和指令周期的同步:单片机将对TOCKI引脚在1个指令周期内做 2次等间隔的判读来判断是否有计数有效沿出现,如果一次为高另一 次为低,则表明出现了一个脉冲沿跳变,如果此跳变符合T0SE的设 置,TMR0的值就加一。所以,外部输入信号必须保证2次跳变之间的 间隔至少维持2个振荡周期的宽度(1个指令周期=4个振荡周期),再另 外加多20ns的内部电路延时。
1.
2.
3.
发出定时信息,或从单片机I/O引脚上向外部电 路输出一系列符合一定时规范的方波信号。 从单片机I/O引脚上,检测外部电路输入的一系 列方波信号的脉宽、周期或频率,以便单片机 接收外部电路的输入信号或通信信号。 单片机对其端口引脚上输入的由外部事件产生 的触发信号进行准确地计数,依据计数结果来 控制完成相应的动作,表现为硬件自动计数。
需要对3个开关进行选择设置
1. 2. 3.
计数的内外时钟选择 预分频器的选择 预分频器的预分频参数选择
预分频参数选择
PS2 PS1 PS0
000 001 010 011
TMR0比率
1:2 1:4 1:8 1:16
WDT比率
1:1 1:2 1:4 1:8
100
101 110 111
1:32
1:64 1:128 1:256
第4章 定时器/计数器
主要特点:
1. 2. 3. 4.
定时器/计数器模块是大部分单片机都内置的一 项重要功能 定时器/计数器的核心工作一般表现为计数累计 功能,通常是由时钟脉冲来驱动。 当对内部标准时钟累计计数时,用作定时器。 当对外部脉冲累计计数时,用作计数器。
一般适用于以下3种不同的应用场合:
写TMR0的正确方法
其实,这部分时间,计数器已经记录 下来,只要在158的基础上让它少跑 这部分计数值,(将这部分计数值一 起挖去,少计这部分计数值) 都能保证准确性。
保护现场 识别中断源
尽量避免少写TMR0
在改变TMR0寄存器内容的同时会将预分频 器清0,预分频器中的计数值会被清除,也 会影响计数精度
GI E
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
端口RA 方向寄 存器 TRISA
85H
— —
——
TRIS A5
TRIS A4
TRIS A3
TRIS A2
TRIS A1
TRIS A0
定时时间计算
当计数寄存器写入初始值时,TMR0将被推迟2个指令周期,
便开始启动累加计数。当精度要求高时,可以通过定时参数补 偿2个指令周期。精度要求不高时,可以不考虑。
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
定时器/ 计数器 TMR0 选项寄 存器 OPTION_ REG 中断控 制寄存 器 INTCON
01H/101 H
8位累加计数寄存器
3个开关设置
81H/181 H 0BH/8BH / 10B/H/1 8BH RB PU INTE DG T0CS T0SE PSA PS2 PS1 PS0
而定时时间是确定的,赋值的初值后,其实定时时间不 再是158,而是比158要大,具体大多少取决于整个中断 服务程序执行到指令①时所花的指令周期数。 但当程序中除了TMR0还有其他中断源也将发出中断响应 时,那么调查中断3源后,轮到响应TMR0时的时间延时 就根本无法确定,这时想用软件补偿也没办法实现了。
1:16
1:32 1:64 1:128
2 与定时器/计数器TMR0模块相关的寄存器
定时器/计数器 TMR0 选项寄存器OPTION_REG 中断控制寄存器INTCON 端口RA方向控制寄存器TRISA
与TMR0模块相关的寄存器
寄存器 的名称 和符号
寄存器内容
寄存器 地址 Bi t7
TMR0恢复到0后, 将继续自动对跳变触发产生计 数加1, TMR0的计数始终不会停,称为循环计数。
分析TMR0两种工作模式的特点
设置定时模式特点: 计数触发信号来源于系统时钟,即为内部的指令周期信号时, 可以实现定时功能。定时的长短主要取决于3种因素。 一是初始时间常数,其数值设置越小,定时越长,最大定时 为256个触发脉冲周期,此时初始时间常数为0。 二是系统振荡频率,PIC单片机时钟振荡频率的范围为0~20 MHz,频率越高,计数信号为指令周期就越短,相同条 件下的定时时间就越短。假定时钟振荡频率为4 MHz,指 令周期为1µs,那么如果不考虑其他因素,理论上TMR0固 有定时时间最短为1µs,而最长为256µs。
4
3
PSA 预分频器指定
跳变触发计数
图5-5 简化TMR0的功能原理图 图6-1 TMR0功能原理图
定时器/计数器TMR0模块的电路结构和工作原理
TMR0具有以下硬件结构特点总结
(1)TMR0有一个8位宽的由时钟信号上升沿触发的循环累加计 数寄存器。 (2)有一个专用的外部触发信号输入端(T0CKI)。 (3) TMR0也是一个在文件寄存器区域内统一编址的寄存器, 地址为01H或101H,用户用软件方式可直接读/写计数器的 内容。 (4) 具有一个软件可编程的8位预分频器。 (5) 当使用内部触发信号,即指令周期作为时钟信号源时, 模块TMR0工作于定时方式,触发方式为固定上升沿触发有效。 在计数器溢出时,相应的溢出中断标志T01F自动置位,并可 产生溢出中断。
试验六要求
清晰掌握闪烁式跑马灯的动作; 清晰理解流程图和程序;
在跑马灯程序的基础上,实现队列灯的显 示; 会调整不同时间参数; 会自己想象,调整出想要的显示效果;
解决问题: 怎样产生定时功能? 在计数器里填写一个初始值,让剩余空间次数满足 以上N的条件。
定时时间计算:(计数初值应保证对剩余空间计
数=定时需要记录的脉冲数 N) 对8位定时器TMR0,不使用分频器时,定时时间的计 算公式为: (28 – 计数初值-2) ×指令周期, 使用分频器时,定时时间的计算公式为: (28 – 计数初值) ×分频比×指令周期 分频比取值为2、4、8…256。
三是预分频器,是对指令周期信号进行按比例分频,可在一 定范围内大幅调整定时的长短。
设置计数模式特点:
计数模式,计数触发信号来源于I/O端口RA / T0CKI信号。
只有处于计数模式下,跳变沿选择TOSE位才有效
对T0CKI信号,既可以是标准的脉冲信号(周期脉冲信号),也可以是 无规则的时序脉冲信号。只要是经 TOSE设定的有效跳变到来,就能 自动计数。因此,计数和定时不同,TMR0计数的长短一般不能确定 定时的长短,也就是不能用于定时。
二进制异步加法计数器
由于D端 接Q非, 所以触发 器每次跳 变都反向 相翻转
分频器电路
Q3
T'
1:8
Q
Q Q2 1:4 1:2 输出
T'
Q
Q Q1
T'
Q
Q 1:1
Clock 时钟输入
T1CKPS1:T1CKPS0 分频器电路 图9.3 可编程预分频器等效电路
CP
FQ1=1/2 FCP FQ2=1/4 FCP
(6)当使用外部时钟信号源时,模块TMR0工作于计数方式, 触发方式可由程序设置位上升沿触发或下降触发有效。在计 数器溢出时,也可产生溢出中断。
TMR0模块工作过程
8位TMR0累加计数器工作总是在送人初始值(称 为时间常数)以后,推迟2个指令周期,在初始值 的基础上对脉冲跳变触发产生计数,直到计数寄 存器TMR0计满到FFH再加1,TMR0恢复到0,产 生溢出和溢出标志T0IF。如果是中断使能T0IE开 启的情况下,T0IF就能引发中断。
FQ3=1/8 FCP
TMR0模块简化原理图(掌握)
指令周期 fosc/4
RA4/T0CK1
0
看门狗用
累加计数 寄存器
8位数据总线
1
+
2
T0SE 脉冲沿选择
1
预分频器
分频 输出
0
计数脉冲和 内部指令周 期同步过程
TMR0寄存器
2个指令 周期延时
5
6
溢出时置 中断T0IF
T0CS 1 脉冲源选择
PS2,PS1,PS0 预分频值设置
例:其工作条件是4MHz振荡频率,TMR0每隔1 00us中断,预 分频器设为1:1,故理论计数起始值应为256-100+2=158。
保护现场 识别中断源
分析原因
当它一次计数溢出发生中断,在单片机响应中断到真正 处理其中断服务时,必定经过了若干指令周期的延时, 如现场保护、中断源识别等,此时TMR0寄存器中已经有 了一些计数值,说明已经花费了部分时间。
定时时间计算
若晶振频率为4MHz,则机器周期为1µs,定时 器TMR0最小定时时间为: [28 – (28– 1)] ×1 = 1µs
定时器TMR0最大定时时间为: [(28– 0) ×1]×256= 65536µs
来自百度文库
初始值计算
如设定定时时间为t,指令周期为T,分频比为P, 不使用分频器时,计数寄存器写入的初始值X为: X=28 — t /T + 2 使用分频器时,那么计数寄存器写入的初始值X为: X=28 — t /(T×P) 定时64ms时: X=28—64×1000/ (1×10-6×256)=6
的4倍)到来时自动加1。
若使用分频器,TMR0会在指令周期信号分频某个倍数后,产
生有效跳变时自动加1,这时TMR0最长固有定时时间将达到 65535us。
定时时间计算
假设:定时时间为t,标准时钟周期为T, 实际累加 记录的脉冲数 N,有关系式: t = T * N , N = t / T
分频值的计算
设定时要求为:62.5ms(参看182页) 不用分频器只能记录256us 如果分频比为256,则定时62.5ms需要计数 62500/256=244.14次,计数器能够名字要求
TMR0应用注意问题:
注意:TMR0作为定时器时的计数 过程无法停止,是循环计数
1、写TMR0的不理想方法:
了解即可: 计数脉冲和指令周期的同步:单片机将对TOCKI引脚在1个指令周期内做 2次等间隔的判读来判断是否有计数有效沿出现,如果一次为高另一 次为低,则表明出现了一个脉冲沿跳变,如果此跳变符合T0SE的设 置,TMR0的值就加一。所以,外部输入信号必须保证2次跳变之间的 间隔至少维持2个振荡周期的宽度(1个指令周期=4个振荡周期),再另 外加多20ns的内部电路延时。
1.
2.
3.
发出定时信息,或从单片机I/O引脚上向外部电 路输出一系列符合一定时规范的方波信号。 从单片机I/O引脚上,检测外部电路输入的一系 列方波信号的脉宽、周期或频率,以便单片机 接收外部电路的输入信号或通信信号。 单片机对其端口引脚上输入的由外部事件产生 的触发信号进行准确地计数,依据计数结果来 控制完成相应的动作,表现为硬件自动计数。
需要对3个开关进行选择设置
1. 2. 3.
计数的内外时钟选择 预分频器的选择 预分频器的预分频参数选择
预分频参数选择
PS2 PS1 PS0
000 001 010 011
TMR0比率
1:2 1:4 1:8 1:16
WDT比率
1:1 1:2 1:4 1:8
100
101 110 111
1:32
1:64 1:128 1:256
第4章 定时器/计数器
主要特点:
1. 2. 3. 4.
定时器/计数器模块是大部分单片机都内置的一 项重要功能 定时器/计数器的核心工作一般表现为计数累计 功能,通常是由时钟脉冲来驱动。 当对内部标准时钟累计计数时,用作定时器。 当对外部脉冲累计计数时,用作计数器。
一般适用于以下3种不同的应用场合:
写TMR0的正确方法
其实,这部分时间,计数器已经记录 下来,只要在158的基础上让它少跑 这部分计数值,(将这部分计数值一 起挖去,少计这部分计数值) 都能保证准确性。
保护现场 识别中断源
尽量避免少写TMR0
在改变TMR0寄存器内容的同时会将预分频 器清0,预分频器中的计数值会被清除,也 会影响计数精度
GI E
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
端口RA 方向寄 存器 TRISA
85H
— —
——
TRIS A5
TRIS A4
TRIS A3
TRIS A2
TRIS A1
TRIS A0
定时时间计算
当计数寄存器写入初始值时,TMR0将被推迟2个指令周期,
便开始启动累加计数。当精度要求高时,可以通过定时参数补 偿2个指令周期。精度要求不高时,可以不考虑。
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
定时器/ 计数器 TMR0 选项寄 存器 OPTION_ REG 中断控 制寄存 器 INTCON
01H/101 H
8位累加计数寄存器
3个开关设置
81H/181 H 0BH/8BH / 10B/H/1 8BH RB PU INTE DG T0CS T0SE PSA PS2 PS1 PS0
而定时时间是确定的,赋值的初值后,其实定时时间不 再是158,而是比158要大,具体大多少取决于整个中断 服务程序执行到指令①时所花的指令周期数。 但当程序中除了TMR0还有其他中断源也将发出中断响应 时,那么调查中断3源后,轮到响应TMR0时的时间延时 就根本无法确定,这时想用软件补偿也没办法实现了。
1:16
1:32 1:64 1:128
2 与定时器/计数器TMR0模块相关的寄存器
定时器/计数器 TMR0 选项寄存器OPTION_REG 中断控制寄存器INTCON 端口RA方向控制寄存器TRISA
与TMR0模块相关的寄存器
寄存器 的名称 和符号
寄存器内容
寄存器 地址 Bi t7
TMR0恢复到0后, 将继续自动对跳变触发产生计 数加1, TMR0的计数始终不会停,称为循环计数。
分析TMR0两种工作模式的特点
设置定时模式特点: 计数触发信号来源于系统时钟,即为内部的指令周期信号时, 可以实现定时功能。定时的长短主要取决于3种因素。 一是初始时间常数,其数值设置越小,定时越长,最大定时 为256个触发脉冲周期,此时初始时间常数为0。 二是系统振荡频率,PIC单片机时钟振荡频率的范围为0~20 MHz,频率越高,计数信号为指令周期就越短,相同条 件下的定时时间就越短。假定时钟振荡频率为4 MHz,指 令周期为1µs,那么如果不考虑其他因素,理论上TMR0固 有定时时间最短为1µs,而最长为256µs。
4
3
PSA 预分频器指定
跳变触发计数
图5-5 简化TMR0的功能原理图 图6-1 TMR0功能原理图
定时器/计数器TMR0模块的电路结构和工作原理
TMR0具有以下硬件结构特点总结
(1)TMR0有一个8位宽的由时钟信号上升沿触发的循环累加计 数寄存器。 (2)有一个专用的外部触发信号输入端(T0CKI)。 (3) TMR0也是一个在文件寄存器区域内统一编址的寄存器, 地址为01H或101H,用户用软件方式可直接读/写计数器的 内容。 (4) 具有一个软件可编程的8位预分频器。 (5) 当使用内部触发信号,即指令周期作为时钟信号源时, 模块TMR0工作于定时方式,触发方式为固定上升沿触发有效。 在计数器溢出时,相应的溢出中断标志T01F自动置位,并可 产生溢出中断。
试验六要求
清晰掌握闪烁式跑马灯的动作; 清晰理解流程图和程序;
在跑马灯程序的基础上,实现队列灯的显 示; 会调整不同时间参数; 会自己想象,调整出想要的显示效果;
解决问题: 怎样产生定时功能? 在计数器里填写一个初始值,让剩余空间次数满足 以上N的条件。
定时时间计算:(计数初值应保证对剩余空间计
数=定时需要记录的脉冲数 N) 对8位定时器TMR0,不使用分频器时,定时时间的计 算公式为: (28 – 计数初值-2) ×指令周期, 使用分频器时,定时时间的计算公式为: (28 – 计数初值) ×分频比×指令周期 分频比取值为2、4、8…256。
三是预分频器,是对指令周期信号进行按比例分频,可在一 定范围内大幅调整定时的长短。
设置计数模式特点:
计数模式,计数触发信号来源于I/O端口RA / T0CKI信号。
只有处于计数模式下,跳变沿选择TOSE位才有效
对T0CKI信号,既可以是标准的脉冲信号(周期脉冲信号),也可以是 无规则的时序脉冲信号。只要是经 TOSE设定的有效跳变到来,就能 自动计数。因此,计数和定时不同,TMR0计数的长短一般不能确定 定时的长短,也就是不能用于定时。
二进制异步加法计数器
由于D端 接Q非, 所以触发 器每次跳 变都反向 相翻转
分频器电路
Q3
T'
1:8
Q
Q Q2 1:4 1:2 输出
T'
Q
Q Q1
T'
Q
Q 1:1
Clock 时钟输入
T1CKPS1:T1CKPS0 分频器电路 图9.3 可编程预分频器等效电路
CP
FQ1=1/2 FCP FQ2=1/4 FCP
(6)当使用外部时钟信号源时,模块TMR0工作于计数方式, 触发方式可由程序设置位上升沿触发或下降触发有效。在计 数器溢出时,也可产生溢出中断。
TMR0模块工作过程
8位TMR0累加计数器工作总是在送人初始值(称 为时间常数)以后,推迟2个指令周期,在初始值 的基础上对脉冲跳变触发产生计数,直到计数寄 存器TMR0计满到FFH再加1,TMR0恢复到0,产 生溢出和溢出标志T0IF。如果是中断使能T0IE开 启的情况下,T0IF就能引发中断。
FQ3=1/8 FCP
TMR0模块简化原理图(掌握)
指令周期 fosc/4
RA4/T0CK1
0
看门狗用
累加计数 寄存器
8位数据总线
1
+
2
T0SE 脉冲沿选择
1
预分频器
分频 输出
0
计数脉冲和 内部指令周 期同步过程
TMR0寄存器
2个指令 周期延时
5
6
溢出时置 中断T0IF
T0CS 1 脉冲源选择
PS2,PS1,PS0 预分频值设置
例:其工作条件是4MHz振荡频率,TMR0每隔1 00us中断,预 分频器设为1:1,故理论计数起始值应为256-100+2=158。
保护现场 识别中断源
分析原因
当它一次计数溢出发生中断,在单片机响应中断到真正 处理其中断服务时,必定经过了若干指令周期的延时, 如现场保护、中断源识别等,此时TMR0寄存器中已经有 了一些计数值,说明已经花费了部分时间。
定时时间计算
若晶振频率为4MHz,则机器周期为1µs,定时 器TMR0最小定时时间为: [28 – (28– 1)] ×1 = 1µs
定时器TMR0最大定时时间为: [(28– 0) ×1]×256= 65536µs
来自百度文库
初始值计算
如设定定时时间为t,指令周期为T,分频比为P, 不使用分频器时,计数寄存器写入的初始值X为: X=28 — t /T + 2 使用分频器时,那么计数寄存器写入的初始值X为: X=28 — t /(T×P) 定时64ms时: X=28—64×1000/ (1×10-6×256)=6