第五章 单片机的定时器和计数器

合集下载

单片机 第五章2 单片机的定时器计数器

单片机 第五章2 单片机的定时器计数器

若晶振频率为6MHz,1个机器周期为1/6 x 10-6 x12=2μs 则最小定时时间为:[213 –(213 -1)]x2μs=2μs 最大定时时间为:[213 –0] x2μs=16384μs =16.384ms
2、 方式1 (T1,T0) 当M1M0两位为 01时,定时 /计数器被选为工作方式 1,16位计数器,其逻辑结构 如图 所示。
8FH TCON TF1 8EH TR1 8DH TF0 8CH TR0 8BH IE1 8AH IT1 89H IE0 88H IT0
TF1(TCON.7, 8FH位)----定时器T1中断请求溢出标志位。 TF0(TCON.5, 8DH位)----定时器T0中断请求溢出标志位。 TR1(TCON.6, 8EH位)----T1运行控制位。 0:关闭T1;1:启动T1运行。只由软件置位或清零。 TR0(TCON.4, 8CH位)----T0运行控制位。 0:关闭T0;1:启动T0运行。只由软件置位或清零。
1、 方式0 (T1,T0)
当 M1M0两位为 00时,定时 /计数器被选为工作方式 0, 13位计数器,其逻辑结 构如图所示。
振荡器 ÷12 C/ T = 0 TL0 低5位 C/ T = 1 控制 T0 端 TR0 GATE INT0 端 TH0 高8 位 TF0 中断
+
在方式0下,计数工作方式时,计数值的范围是: 1~8192(213 ) 定时工作方式时,定时时间的计算公式为: (213一计数初值)×晶振周期×12 或(213一计数初值)×机器周期
例4:用定时器l 以工作方式2计数,每计100次进行累计器加1操作.
(1)计算计数初值. 28—100=156D=9CH TH1=9CH,TL1=9CH TMOD寄存器初始化:MlM0=10,C/T=1,GATE=0 因此 TMOD=60H (2)程序设计序设计

认识单片机的定时器计数器

认识单片机的定时器计数器

void main(void) { TMOD=0x01;
TH0=-25000/256; TL0=-25000%256; TR0=1; ET0=1; EA=1; while(1); } void timer0(void) interrupt 1 { TH0=-25000/256;
TL0=-25000%256; P10=~P10; }
根据定时时间T,及公式(1)、(2)分别可以求出初 值N为:
方式1: N=216-T×fosc/12
(3)
方式2、方式3 :N=28-T×fosc/12 (4)
如果fosc=12MHZ,以上公式可简化为
方式1: N=216-T
方式2、方式3 :N=28-T
例如:系统的时钟频率是12MHz,在方式1下,如果希望定时 器/计数器T0的定时时间T为10ms,则初值N =216-T=6553610000=55536
任务一、认识单片机的定时器/计数器
一、定时器/计数器及其应用 在单片机应用系统中,定时或计数是必不可少的。例如: 测量一个脉冲信号的频率、周期,或者统计一段时间里 电机转动了多少圈等。常用的定时方法有:
1、软件定时 软件定时是依靠执行一段程序来实现的,这段程序本身 没有具体的意义,通过选择恰当的指令及循环次数实现 所需的定时,由于执行每条指令都需一定的时间,执行 这段程序所需总的时间就是定时时间。 软件定时的特点是无需硬件电路,但定时期间CPU被占 用,增加了CPU的开销,因此定时时间不宜过长,而且 定时期间如果发生中断,定时时间就会出现误差。
led=_crol_(led,1); 满10次变量led左移1位送P0口
P0=led;
}
}
[案例3] 用定时器的计数方式实现外部中断。如图 所示,P0口控制8只发光管轮流点亮,发光管点 亮时间为500ms,单脉冲电路控制发光管的移动 方向,按下单脉冲按钮,发光管左移,再按下发 光管右移 。

单片机计数器与定时器的区别

单片机计数器与定时器的区别

单片机计数器与定时器的区别在的学习过程中,我们经常会发现中断、串口是学习的难点,对于初学者来说,这几部分的内容很难理解。

但是我个人觉得这几部分内容是的重点,如果在一个学期的课堂学习或者自学中没有理解这几部分内容,那就等于还没有掌握51单片机,那更谈不上单片机的开发了,我们都知道在成品的单片机项目中,有很多是以这几部分为理论基础的,万年历是以定时器为主的,报警器是以中断为主的,联机通讯是以串口为主的。

在这几部分内容中,计数器/定时器对于初学者说很容易搞混淆,下面我将对这方面的内容结合自己的学习经验谈几点看法。

计数器和定时器相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。

当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。

在定时器和计数器中都有一个溢出的概念,那什么是溢出了。

我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,过了一会儿,碗的水满了,就发生溢出。

同样的道理,假设水龙头的水是一滴滴的往碗里滴,那么总有一滴水是导致碗中的水溢出的。

在碗中溢出的水就浪费了,但是在单片机的中溢出将导致一次中断。

在定时器计数器中,我们有个概念叫容量,就是最大计数量。

把水滴比喻成脉冲,那么导致碗中水溢出的最后一滴水的就是定时计数器的溢出的最后一个脉冲。

在各种单片机书本中,在介绍定时计数器时都讲到一个计数初值,那什么是计数初值呢?在这里我们还是假设水滴碗。

假设第一百滴水能够使碗中的水溢出,我们就知道这个碗的容量是100。

在这里计数初值有3个,假设:根据所得的初始值,再将其转换为,就可以进行计数或者定时了。

后面讲解定时器初值的。

单片机, 计数器, 定时器。

第05章 MCS-51单片机的中断与定时(1-4)

第05章 MCS-51单片机的中断与定时(1-4)

2
1
TH0
;P1.0输出“0” ;P1.0输出“1”
5.2 MCS-51单片机的中断系统
五、外中断应用举例
1. 中断初始化程序
设置外中断源的触发方式 设置中断允许寄存器IE 设置中断优先级寄存器IP
2. 中断服务程序
保护现场 中断处理 恢复现场
23/65
5.2 MCS-51单片机的中断系统
【例5-3】 设外部中断0为下降沿触发方 式,高优先级,试编写中断初始化程序
5.2 MCS-51单片机的中断系统
【例5-4】 将单脉冲接到外中断0(INT0)引脚,利 用P1.0作为输出,经反相器接发光二极管。编写程 序,每按动一次按钮,产生一个外中断信号,使发 光二极管的状态发生变化,由亮变暗,或反之
P1.0 单脉冲 发生器 INT0
1
+5V
8031
26/65
5.2 MCS-51单片机的中断系统
串口:0023H
20/65
5.2 MCS-51单片机的中断系统
四、中断请求的撤除
1.定时/计数器中断请求标志TF0/TF1会自动撤除 2.串行口中断请求标志TI/RI要用指令撤除
CLR TI ;清TI标志位 CLR RI ;清RI标志位
3.负脉冲触发的外中断请求标志IE0/IE1会自动撤除 4.低电平触发的外中断请求信号需要外加电路撤除
下次课前请预习5.3节
30/65
5.3 51单片机的定时器/计数器
MCS-51单片机内部有两个16位定时/计数器 T0和T1,简称定时器0和定时器1
在特殊功能寄存器TMOD和TCON的控制下, 它们既可以设定成定时器使用,也可以设定 成计数器使用
定时/计数器有4种工作方式,具有中断功能, 可以完成定时、计数、脉冲输出等任务

第5章AT89S52定时器计数器

第5章AT89S52定时器计数器
8
图5-2 TMOD格式
8位分为两组,高4位控制T1,低4位控制T0。 TMOD各位的功能。 (1)GATE———门控位。
0:仅由运行控制位TRx(x = 0,1)来控制定时器/计数器运 行。
1:用外中断引脚( INT0*或 INT1*)上的电平与运行控制 位TRx共同来控制定时器/计数器运行。
9
5
5.1 定时器/计数器的结构 定时器/计数器T1、T0结构如图5-1所示,T0由特殊功能
寄存器TH0、TL0构成,T1由特殊功能寄存器TH1、TL1构成。
图5-1 定时器/计数器T0、T1结构框图
6
具有定时器和计数器2种工作模式,4种工作方式(方式0、 方式1、方式2和方式3)。属于增1计数器。
定时器/计数器T0分为两个独立的8位计数器TL0和TH0, TL0使用T0的状态控制位C/T*、GATE、TR0、TF0 ,而TH0
23
被固定为一个8位定时器(不能作为外部计数模式),并使用 定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断 请求源TF1。 2.T0工作在方式3时T1的各种工作方式
P1.0输出;T2OE=0,禁止定时时钟从P1.0输出。 DCEN(D0):计数方式选择。DCEN=1,T2的计数方式
由P1.1引脚状态决定。P1.1=1,T2减计数,P1.1=0,T2加 计数;DCEN=0,计数方式与P1.1无关,同T1和T0一样,采 用增1计数。
31
2. 特殊功能寄存器T2CON T2的功能选择由特殊功能控制寄存器T2CON来设定,
(2)M1、M0——工作方式选择位 M1、M0共有4种编码,对应于4种工作方式的选择,如
表6-1所示。
10
(3)C/T*—计数器模式和定时器模式选择位 0:为定时器工作模式,对单片机的晶体振荡器12分频后的

单片机计数器,定时器工作原理_

单片机计数器,定时器工作原理_
TH0高8位
模= 1FFFH+1
=2 13
TL0低5位
1
1
1
1
1
1
0
0
X X X 1
1
1
0
0
用指令装入初值: MOV TH0,#0FCH; MOV TL0,#1CH;(xxx用‘0’填入) 方式1 (16位方式): 初值=(-64H)=10000H-64H=FF9CH 用指令装入计数初值: MOV TH0,#0FFH MOV TL0,#9CH
5-24
中断方式 ORG 0000H AJMP MAIN ;单片机复位后从0000H开始执行 ORG 001BH ;T1中断入口 AJMP TIME1 ;转到T1 中断服务程序
ORG 0030H ;主程序 MAIN:MOV A,#01H MOV P1,A ;置初值,第一个LED亮 MOV TMOD,#10H ;T1工作于定时方式1 MOV TH1,#3CH MOV TL1,#0B0H ;定时100ms SETB EA SETB TR1 SETB ET1 WAIT:SJMP WAIT ;中断总允许 ;启动T1工作 ;允许T1中断 ;等待中断
这种情况下,T1仍可工作于方式0、1、2,但不能使用中 断方式。 只有将T1用做串行口的波特率发生器时,T0才工作在方式 3,以便增加一个定时器。
5-16
4、方式3 M1M0=11
1/12fosc
K °
仅适用于T0
定时/计数器0(方式3):2个8位计数器。
振荡源 ÷ 12 C/ T=0 ° S ° C/ T=1 ≥1 °
5-22
分析 : 利用T1完成100ms的定时,当P1口线输出‘1’时, 发光二极管亮,每隔100ms,‘1’左移一次。

单片机定时器与计数器的区别

单片机定时器与计数器的区别

单片机定时器与计数器的区别在51单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,两者的区别是什么呢?下面就跟着店铺一起来看看吧。

单片机计数器与定时器的区别计数器和定时器的本质是相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。

当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。

在定时器和计数器中都有一个溢出的概念,那什么是溢出了。

呵呵,我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,过了一会儿,碗的水满了,就发生溢出。

同样的道理,假设水龙头的水是一滴滴的往碗里滴,那么总有一滴水是导致碗中的水溢出的。

在碗中溢出的水就浪费了,但是在单片机的定时计数器中溢出将导致一次中断,至于什么是中断我们下次再讲,这里只是初步的提下概念,中断就是能够打断系统正常运行,而去运行中断服务程序的过程,当服务程序运行完以后又自动回到被打断的地方继续运行。

在定时器计数器中,我们有个概念叫容量,就是最大计数量。

方式0是2的13次方,方式1是2的13次方,方式2是2的8次方,方式3是2的8次方。

把水滴比喻成脉冲,那么导致碗中水溢出的最后一滴水的就是定时计数器的溢出的最后一个脉冲。

在各种单片机书本中,在介绍定时计数器时都讲到一个计数初值,那什么是计数初值呢?在这里我们还是假设水滴碗。

假设第一百滴水能够使碗中的水溢出,我们就知道这个碗的容量是100。

问题1,我如何才能使碗接到10滴水就溢出呢?呵呵,我可以想象,如果拿一个空碗去接水,那么还是得要100滴水才能溢出,但是如果我们拿一个已经装有水的碗拿去接,那就不用100滴了。

到此我们可以算出,要使10滴水让碗中的水溢出,那么碗中就先要装90滴水。

在定时计数器中,这90滴水就是我们所谓的初始值。

问题2,在一个车间我们如何利用单片机对100件产品进行计件,并进行自动包装呢?我们可以利用计数器计数100,在中断中执行一个自动包装的动作就可以了。

《单片机原理及应用》第5章 定时器及应用

《单片机原理及应用》第5章 定时器及应用

计数工作方式
通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。 当输入脉冲信号产生由1至0的下降沿时定时器的值加1。 CPU检测一个1至0的跳变需要两个机器周期,故最高计 数频率为振荡频率的1/24。 为了确保某个电平在变化之前被采样一次,要求电平保持 时间至少是一个完整的机器周期。 对输入脉冲信号的基本要求如图5-2所示。
外部事件
计数电路 时间单位脉冲 单片机 计数完成信号
5.2 89C51定时器概述
• 89C51有两个16位的定时器/计数器,即定时器0(T0)和 定时器1(T1)。它们实际上都是16位加1计数器。 • T0由两个8位特殊功能寄存器TH0和TL0构成;T1由TH1 和TL1构成。
• 每个定时器都可由软件设置为定时工作方式或计数工作方
• 例:当P3.4引脚上的电平发生负跳变时,从P1.0输出一个 500μs的同步脉冲。请编程序实现该功能。查询方式, fosc=6MHz。
解:(1)模式选择 选T0为模式2,外部事件计数方式。当P3.4引脚上的电平发生 负跳变时,T0计数器加1,溢出标志TF0置1;然后改变T0为 500μs定时工作方式,并使P1.0输出由1变为0。T0定时到产生 溢出,使P1.0输出恢复高电平,T0又恢复外部事件计数方式。
T0的低5位:01100B=0CH即(TL0)=0CH T0的高8位:11110000B=F0H即(TH0)=F0H
(2)计算最大定时时间T
T0的最大定时时间对应于初值为0. 则:T=213×1/6 × 10-6×12=16.384ms
例2:利用T0的工作模式0产生1ms定时,在P1.0引脚输出 周期为2ms的方波。设单片机晶振频率fosc=12MHz。编 程实现其功能。 解:要在P1.0引脚输出周期为2ms的方波,只要使P1.0每隔 1ms取反一次即可。 (1)选择工作模式 T0的模式字为TMOD=00H,即 M1M0=00,C/T=0,GATE=0,其余位为0。 (2)计算1ms定时时T0的初值

单片机原理第5章定时、计数器

单片机原理第5章定时、计数器

5.2.2 控制寄存器 控制寄存器TCON
5,控制寄存器TCON初始化设置 ,控制寄存器 初始化设置
0
0 1
0
1 0 1
0
0
0
0
复位时, 的所有位被清0. 复位时,TCON的所有位被清 的所有位被清 要启动,关闭 , 要启动,关闭TI, T0,需对 ,需对TR1,TR0用 , 用 软件设置: 软件设置: SETB TRx;启动 ; CRL TRx;关闭 ; 也可以用传送指令 MOV TCON,#50H , 同时启动T0, 同时 同时启动 ,T1同时 使用电平触发方式. 使用电平触发方式.
时钟 振荡 ÷12
2,脉冲计数 , 每来1个脉冲,计 每来 个脉冲, 个脉冲 数器加1. 数器加 .
C P U
T0 TL0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
溢 出 启动 TH0 工作 方式
TCON
TMOD
中断
5.1 定时器的结构及工作原理
1,计数脉冲来源 ,
(P3.4)
INT0(INTI)=1 指令 SETB TR0(TR1) 启动定时/计数器 启动定时 计数器T0(T1) 计数器
1
5.2.2 控制寄存器 控制寄存器TCON
1,溢出标志位 TFx
0 1
TFl(TCON.7):T1溢出标志位.当T1溢出时由硬 : 溢出标志位 溢出标志位. 溢出时由硬 件自动使中断触发器TFl置1,并向 申请中断. 件自动使中断触发器 置 ,并向CPU申请中断. 申请中断 响应进入中断服务程序后, 当CPU响应进入中断服务程序后,TFl又被硬件 响应进入中断服务程序后 又被硬件 自动清0. TFl也可以用软件清 . 自动清 . 也可以用软件清0. 也可以用软件清 TF0(TCON.5):T0溢出标志位.其功能和操作同 : 溢出标志位 其功能和操作同TFl 溢出标志位.

C51单片机课件 5第五章顺序控制系统

C51单片机课件 5第五章顺序控制系统

5.2 89C51单片机定时器/计数器
2、中断方式参考源程序:
#include <reg51.h>
sbit P1_0=P1^0; void timer0( ) interrupt 1
{ TH0=0x15;
TL0=0xa0; P1_0=~P1_0; }
void main ( void ) { P1=0xff; TMOD=0X01; TH0=0x15; TL0=0xa0; TR0=1; EA=1; ET0=1; While (1); }
六、顺序控制系统所涉及的知识点
(1)定时/计数器的概念。 (2)89C51单片机中定时/计数器的应用。 (3)C51定时/计数器中断服务程序的设计与应用。
5.2 89C51单片机定时器/计数器
定时和计数功能最终都是通过计数实现的,若计数的事件源是
周期固定的脉冲,则可以实现定时功能,否则只能实现计数功 能。因此可以将定时和计数功能由一个部件实现。
图5-4 定时器/计数器结构框图
5.2 89C51单片机定时器/计数器
2、计数方式:外部输入信号的下降沿触发计数,计数器 在每个时钟周期或时钟周期的12分频采样外部输入信号, 若一个周期的采样值为1,下一个周期的采样值为0,则 计数器加1,故识别一个从1到0的跳变需2个周期,所以,
单片机对外部输入信号最高的计数速率是时钟频率的
实现定时和计数的方法一般有软件、专用硬件电路和可编程定
时器/计数器三种方法。

采用软件只能定时,且占用CPU时间,降低了CPU的使用效率。
专用硬件电路可实现精确的定时和计数,但参数调节不便。
可编程定时器/计数器,不占用CPU时间,能与CPU并行工作, 实现精确的定时和计数,又可以通过编程设置其工作方式和 其它参数,因此使用方便。

单片机定时器计数器工作原理

单片机定时器计数器工作原理

单片机定时器计数器工作原理一、引言单片机作为嵌入式系统的核心部件,在工业控制、智能家居、汽车电子等领域中发挥着重要作用。

在单片机中,定时器和计数器是常用的功能模块,它们可以实现精确的定时控制和计数功能。

本文将详细介绍单片机定时器计数器的工作原理,以及其在实际应用中的作用。

二、单片机定时器和计数器概述单片机定时器和计数器是单片机内部的特殊功能模块,用于生成精确的时间延时和进行事件计数。

在单片机的内部结构中,定时器和计数器通常由定时/计数器模块和控制逻辑组成,通过寄存器配置和控制信号来实现各种定时和计数功能。

定时器和计数器通常包括以下几个重要的功能部分:1. 控制寄存器:用于配置定时器/计数器工作模式、计数模式、计数方向等参数。

2. 定时/计数寄存器:用于存储定时器/计数器的计数值,根据计数模式进行累加或递减。

3. 比较寄存器:用于存储比较值,用于与定时/计数器的计数值进行比较,从而触发相应的中断或输出信号。

定时器通常用于产生精确的时间延时,常用于生成精确的脉冲信号、PWM信号等。

而计数器则用于进行精确的事件计数,通常用于测量脉冲个数、计时等应用。

三、定时器和计数器的工作原理1. 定时器的工作原理定时器的工作原理主要分为定时/计数模式的选择、定时器计数器的递增和中断触发等几个方面。

在配置定时器工作模式时,可以选择不同的计数模式,包括定时器/计数器模式、分频器模式等。

通过配置控制寄存器和定时/计数寄存器,可以设置定时器的计数值和计数方向。

在定时器计数器的递增过程中,定时器会根据设定的计数模式和计数值进行递增,当达到比较寄存器中的比较值时,会触发相应的中断或输出信号。

这样就实现了定时器的定时操作。

2. 计数器的工作原理计数器的工作原理与定时器类似,同样涉及到计数模式的选择、计数器的递增和中断触发等几个方面。

在配置计数器工作模式时,同样可以选择不同的计数模式,通过配置控制寄存器和计数寄存器来设置计数器的计数值和计数方向。

第5章 定时器计数器

第5章 定时器计数器
时软件清0 ) ✓ 使用中断方式时,此位作为中断请求标志位,进入中断服务程序
后由硬件自动清0
(2)TR1、TR0——计数运行控制位
✓ TR1(或TR0)=1,启动定时器/计数器工作 ✓ TR1(或TR0)=0,停止定时器/计数器工作。 ✓ 该位可由软件置1或清0(位操作)
7
定时器/计数器T1、T0工作方式
22
✓ 当T2MOD的DCEN=0时,T2为增1型重新装载方式
EXEN2=0时,T2计满回0溢出,TF2置1;陷阱寄存器RCAP2L、 RCAP2H中预置的16位计数初值重新再装入TL2、TH2中,自动进 行下一轮计数。
EXEN2=1时,T2操作方式照旧,但当T2EX(P1.1)产生负跳变时 触发三态门将RCAP2L、RCAP2H陷阱寄存器中的计数初值自动装 载到TL2和TH2中重新开始计数,EXF2置1并发出中断请求。
9
✓ 方式2(M1 M0=10B) 方式2为自动恢复初值(初值自动装入)的8位定时器/计数器。
TLx(x = 0,1)作为常数缓冲器,当TLx计数溢出时,TFx置1且
自动将THx中的初值送至TLx,开始重新计数。
【注】方式2可省去用户软件中重装初值的指令执行时间,可以
相当精确地确定定时时间。
10
✓ 方式3(M1 M0=11B) 相当于增加了一个8位定时器/计数器。
(2)T1工作在方式1( M1 M0 =01B )
12
(3)T1工作在方式2( M1 M0 =10B )
(4)T1设置在方式3( M1 M0 =11B )
当T0设置在方式3,再把T1也设成方式3,此时T1停止计数。
13
定时/计数器初始化步骤
(1)方式控制字送TMOD MOV TMOD,#——

第5章_MCS-51单片机中断定时器

第5章_MCS-51单片机中断定时器
返回目录
5.1.4 P3口
P3口第二功能
第二功能状态
15:12
14
返回目录
5.1.4 P3口
P3口使用
P3口使用
P3口的每一位都可独立地定义为第一功能 I/O或第二功能使 用。P3的第二功能涉及到串行口、外部中断、定时器,与 特殊功能寄存器有关,它们的结构、功能等在后面章节中 再作进一步介绍。
P3 口 的 地 址 为 B0H , 对 应 P3.0~P3.7 的位地址为 B0H~B7H。
15:12 15
返回目录
5.1.4 小结
4个并行口使用注意事项
P0、P1、P2、P3并行端口使用注意事项
(1)4个端口的电路结构均不完全相同,并且性能和用途 也各有所侧重; (2)4个口均为“准双向口”,每个并行口都有两种读入 方法:一个是读锁存器,另一个是读取引脚状态; (3)P0口作为I/O口使用时应外接上拉电阻,其它口则可 不必; (4)P2口某几根口线作地址使用时,剩下的口线不能作为 I/O口线使用; (5)P3口的某些口线作第二功能时,剩下的口线可以单独 作为I/O口线使用。
15:12 26
返回目录
5.2.1 CPU与外设的输入/输出方式
2.异步传送方式
异步 传送又称为有条
-----异步传送方式
件传送,或查询方式,
通常 把 通过 程 序 对外 设状 态 的检 测 称 之为 “查 询”, 所 以 这种 有条 件 的传 送 方 式又 叫做 程 序查 询 方 式。 查询 的 流程 图 如 图所 示。
15:12 27
返回目录
5.2.1 CPU与外设的输入/输出方式
3.直接存储器存取(DMA)方式
---DMA方式
DMA ( Direct Memory Access ) 方 式 是

第5章 MCS-51单片单片机内部 定时器计数器

第5章  MCS-51单片单片机内部 定时器计数器

LOOP:
例:由P1.0输出方波信号,周 期为2ms,设fosc=12MHz。 (中断方式)
2ms
解:每隔1ms改变一次P1.0的输出状态,即形成方波, 用T0非门控方式1定时。 计算时间常数:X = 216 - t/T = 216 –(1/1000)/10-6 = 65536-1000 = 64536 = FC18H
3 工作模式2 • 模式2把TL0(或TL1)设置成一个可以自动重 装载的8位定时器/计数器 。 用于需要重复定时和计数的场合。 最大计数值:256 (28) 最大定时时间(晶振12MHz时 T=1s): 256s 自动恢复初值8位定时/计数器。TLx为8位加1计 数器,THx为8位初值暂存器。
复位时,TMOD所有位均置0。 确定定时器工作方式指令: MOV TMOD,#方式字 例:设T0用方式2非门控定时,T1用方式1门控计数。 MOV TMOD,#0D2H ; 1101 0010 B
定时器控制寄存器TCON除可字节寻址外,各 位还可以位寻址。
位地址 位符号 8FH TF1 8EH 8DH 8CH TR1 TF0 TR0 8BH IE1 8AH 89H 88H IT1 IE0 IT0
解得:T0初值=7096=11011101 11000B,其中将高8位 11011101 B=DDH 赋给 TH0 ,低 5 位 11000B=18H 赋 给 TL0。

方法一:
采用查询工作方式,编程如下:
ORG AJMP 0000H MAIN
LOOP:JNB TF0,$;$为当前指令指 针地址 CLR SETB CLR MOV MOV TF0 P1.0 P1.0 TH0 , #0DDH ;重装载 ;产生2µ s正脉冲
ORG AJMP ORG AJMP ORG MAIN:MOV MOV MOV SETB SETB SETB HERE:SJMP PT0INT:MOV MOV CPL RETI

第05章单片机定时计数器习题解答.

第05章单片机定时计数器习题解答.

第05章 单片机定时计数器 习题解答一、 填空题1.1. MCS-51单片机中有单片机中有 2 2 个 16 16 位的定时器位的定时器//计数器。

器。

2.2. 定时器定时器//计数器T0可以工作于方式可以工作于方式 0、1、2、3 3 。

3.3. 方式0为 13 位定时器位定时器//计数器。

计数器。

4.4. 若系统晶振频率为12MHz ,则T0工作于定时方式1时最多可以定时 65536 65536 µs。

µs。

5.5. 欲对300个外部事件计数,可以选用定时器个外部事件计数,可以选用定时器//计数器T1的模式的模式 0 0 或模或模式 1 。

6.6. TMOD 中的M1M0= 11时,定时器工作于方式时,定时器工作于方式 3 3。

7.7. 若系统晶振频率为6MHz 6MHz,则定时器可以实现的最小定时时间为,则定时器可以实现的最小定时时间为,则定时器可以实现的最小定时时间为 2 2 µs。

8.8. MCS-51单片机工作于定时状态时,计数脉冲来自单片机内部的机器周期 。

9.9. MCS-51单片机工作于计数状态时,计数脉冲来自单片机工作于计数状态时,计数脉冲来自 单片机外部事件单片机外部事件单片机外部事件 。

10.10. 当GATE=0时,时, 则当软件控制位则当软件控制位TR0TR0==1时 启动T0开始工作。

开始工作。

二、 简答题1.1.定时器定时器定时器//计数器T0和T1各有几种工作方式?简述每种工作方式的特点。

如何控制定时器/计数器的工作方式?计数器的工作方式?答:答:T0T0可以工作于方式0,1,2,3;T1可以工作于方式0,1,2方式0:是13位定时位定时//计数器,由TLX 的低5位(位(TLX TLX 的高3位未用)和THX 高8位组成。

成。

方式1:TLX 和THX 组成16位定时位定时//计数器。

计数器。

方式2:方式2为自动重装初值的8位定时位定时//计数器。

单片机中的定时器和计数器

单片机中的定时器和计数器

单片机中的定时器和计数器单片机作为一种嵌入式系统的核心部件,在各个领域都发挥着重要的作用。

其中,定时器和计数器作为单片机中常用的功能模块,被广泛应用于各种实际场景中。

本文将介绍单片机中的定时器和计数器的原理、使用方法以及在实际应用中的一些典型案例。

一、定时器的原理和使用方法定时器是单片机中常见的一个功能模块,它可以用来产生一定时间间隔的中断信号,以实现对时间的计量和控制。

定时器一般由一个计数器和一组控制寄存器组成。

具体来说,定时器根据计数器的累加值来判断时间是否到达设定的阈值,并在时间到达时产生中断信号。

在单片机中,定时器的使用方法如下:1. 设置定时器的工作模式:包括工作在定时模式还是计数模式,以及选择时钟源等。

2. 设置定时器的阈值:即需要计时的时间间隔。

3. 启动定时器:通过控制寄存器来启动定时器的运行。

4. 等待定时器中断:当定时器计数器的累加值达到设定的阈值时,会产生中断信号,可以通过中断服务函数来进行相应的处理。

二、计数器的原理和使用方法计数器是单片机中另一个常见的功能模块,它主要用于记录一个事件的发生次数。

计数器一般由一个计数寄存器和一组控制寄存器组成。

计数器可以通过外部信号的输入来触发计数,并且可以根据需要进行计数器的清零、暂停和启动操作。

在单片机中,计数器的使用方法如下:1. 设置计数器的工作模式:包括工作在计数上升沿触发模式还是计数下降沿触发模式,以及选择计数方向等。

2. 设置计数器的初始值:即计数器开始计数的初始值。

3. 启动计数器:通过控制寄存器来启动计数器的运行。

4. 根据需要进行清零、暂停和启动操作:可以通过控制寄存器来实现计数器的清零、暂停和启动操作。

三、定时器和计数器的应用案例1. 蜂鸣器定时器控制:通过定时器模块产生一定频率的方波信号,控制蜂鸣器的鸣叫时间和静默时间,实现声音的产生和控制。

2. LED呼吸灯控制:通过定时器模块和计数器模块配合使用,控制LED的亮度实现呼吸灯效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Timer1 TMOD TCON
GATE TF1
Timer0
M0 TR0 GATE
C/T
TR1
M1 TF0
C/T
M1
M0
M1 M0
工作模式
功能说明
00
01 10 11
方式0
方式1 方式2 方式3
13位计数器
16位计数器 自动再装入8位计数器 定时器0:分成两个8位计数器;定时器1:停止计数


定时器Ti方式0的13位计数器何种情况下,会产生溢出,并置位溢出标 志位TFi,向CPU请求中断。当13位二进数加1,使其最高位向前进位 时,就产生溢出。即13位二进制数11111111 11111B加1,则会溢出, 变为00000000 00000B。 我们知道,对于13位计数器,若预置计数初值为11111111 11111B, 只能计得脉冲信号的一个脉冲,即计数器加1,计数器就会溢出。按这 样的思路,要使计数器计得脉冲信号的10个脉冲,即计数器加10,计 数器计满溢出,那么应给计数器预置计数初值为何值?计数初值应为 11111111 10110B,因为11111111 10110B+1010B(10)=00000000 00000B。
#include <reg51.h>//包含头文件reg51.h sbit P1_0=P1^0;//定义P1.0引脚位名称为P1_0 sbit P1_1=P1^1;//定义P1.1引脚位名称为P1_1 void time_0() interrupt 1 //定时器0溢出中断 { //重装定时器0计数初值 TL0=0x18;TH0=0xE0; P1_0=~P1_0; //方波电平反相 } void time_1() interrupt 3 //定时器1溢出中断 { P1_1=~P1_1; //方波电平反相 }
void main() //主程序 { ;//设置T0为方式0定时,T1为方式0计数 TMOD=0x40; //设置定时器0计数初值 TL0=0x18;TH0=0xE0; //设置定时器1计数初值 TL1=0x1B;TH1=0xFF; EA=1;ET0=1;ET1=1;//开中断 TR0=1; //启动T0 TR1=1; //启动T1 while(1); }


要想计数器计得一定数量的计数值后,计数器计满溢出,就需把预置的 计数初值设为计数值的补数。对于13位计数器,求计数值补数的方法就 是先把十进制的计数值转换13位二进制数,在把其取反加1。例如计数 值为10,则10转换成13位二进制数为00000000 01010B,取反为 11111111 10101,再加1为11111111 10110B。 由于定时器Ti的计数器是由两个8位的特殊功能寄存器THi和TLi构成。而 定时器Ti处于方式0下工作时,计数器只用到了其中13位,即THi的8位 和TLi的低5位,而TLi的高3位弃之不用。计数值10的13位计数初值 11111111 10110B,高8位存放在THi中,低5位存放在TLi中。定时器Ti 处于方式0下工作时,闲置的TLi的高3位可设为000B。所以综上所述, 要想计数器计得脉冲信号的10个脉冲,即计数器加10,计数器计满溢出, 应把THi设为FFH,TLi设为16H。
定时器的初始值的计算
对于不同的工作方式,计数器位数不同,故最大计数值M也不同: 方式0:M=213=8192
方式1:M=216=65536
方式2:M=28=256 方式3:定时器0分为2个8位计数器,每个M均为256。
因为定时/计数器是作加1计数,并在计满溢出时产生中断,因此初
值X的计算如下: X = M – 计数值
举 例2
用定时器工作方式2实现的1秒延时函数如下: void delay1s() { unsigned int i; // i取值范围为0~4000,因 此不能定义成unsigned char TMOD=0x20; // 设置T1为方式2 TH1=6; // 设置定时器初值, 放在for循环之外 TL1=6; for(i=0;i<4000;i++){ // 设置4000次循环次数 TR1=1; // 启动T1 while(!TF1); // 查询计数是否溢出,即定时250s 时间到,TF1=1 TF1=0; // 250s定时时间 到,将定时器溢出标志位TF1清零 } }

在定时器Ti处于方式1下工作时,计数器用到 了全部16位来计数,由THi作为高8位和TLi作 为低8位构成。若计数器要计的计数值还为10, 那么计数器预置的计数初值为何值?我们知道, 预置的计数初值就是计数值的补数,对于16位 计数器,求计数值补数的方法就是先把十进制 的计数值转换16位二进制数,在把其取反加1。 10转换成16位二进制数为00000000
举 例2
用T1、工作方式2实现1秒延时,晶振频率为12MHz。 因工作方式2是8位计数器,其最大定时时间为:256×1s = 256s,为实现1秒延时,可选择定时时间为250s,再 循环4000次。定时时间选定后,可确定计数值为250,则 T1的初值为:X = M 计数值=256 250 = 6 = 6H。采用 T1方式2工作,因此,TMOD =0x20。
1.标准库函数 标准库函数是由C51的编译器提供的,用户不必定义这 些函数,可以直接调用。KEIL C51编译器提供了100多个 库函数供我们使用。常用的C51库函数包括一般I/O口函数、 访问SFR地址函数等,在C51编译环境中,以头文件的形式 给出。 2.用户自定义函数 用户自定义函数是用户根据需要自行编写的函数,它 必须先定义之后才能被调用。
例1:利用T0计数器的工作方式0产生1ms的定时,在P1.0引脚 上输出周期为2ms的方波,如图所示。设单片机晶振频率 f=12MHz。



解:由图看出,加上12MHz晶振的振荡器12分频后的脉冲信号的周期为: 由于计数器计得一个12分频后的脉冲,需的时间。故要定时,则计数器 要计得1000个12分频后的脉冲,即计数初值要加计数值1000,并计满溢 出。 现计算在工作方式0产生1ms的定时,预置的计数初值应为何值? 1000转换成13位二进制数为00011111 01000B ( 29 28 27 26 25 23 ),取反为11100000 10111,再加1为 11100000 11000B。于是预置的TH0初值为E0H,TL0初值为18H。
计算出来的结果X转换为16进制数后分别写入TL0(TL1)、TH0
(TH1)。 注意!方式0时初始值写入时,对于TL不用的高3位应填入0!
举 例1
用T1、工作方式0实现1秒延时函数,晶振频率为12MHz。 方式0采用13位计数器,其最大定时时间为:8192×1s = 8.192ms,因此,定时时间不可能象任务7中一样选择50ms, 可选择定时时间为5ms,再循环200次。 定时时间为5ms,则计数值为5ms/1s =5000,T1的初值为: X = M 计数值= 8192 5000 = 3192 = C78H = 0110001111000B 13位计数器中TL1的高3位未用,填写0,TH1占高8位,所 以,X的实际填写值应为: X = 0110001100011000B = 6318H
C语言的函数
在C语言程序中,子程序的作用是由函数来实现的,函数是C语言的
基本组成模块,一个C语言程序就是由若干个模块化的函数组成的。
C程序都是由一个主函数main( )和若干个子函数构成,有且只有一 个主函数,程序由主函数开始执行,主函数根据需要来调用其他函数,
其它函数可以有多个。
函数分类和定义
例3:在工作方式2下,定时 器T1引脚对用定时器T0器产 生的P1.0引脚上周期为2ms 的方波,进行计数,要求每 计满5次,将P1.1状态取反, 在P1.1 上产生周期为10ms 的方波。
解 :P1.1的方波由T1(P3.5)引脚输入,每发生一次负跳变,计数器加1,每输入5 个脉冲,计数器发生溢出中断,中断服务程序将P1.1取反一次。 T1在方式2下,对外部信号T1计数,则工作方式寄存器TMOD设置为:(TMOD) =01100000B=60H。T0做方式0定时时,TMOD的低4位一般取0000B。 计算T1的计数初值: 由于要计的计数值为5,5转换成二进制数为00000101B,取反为11111010B, 再加1为11111011B,于是TL1的计数初值为11111011B (FBH),重装初值寄存 器(TH1)=FBH。
(TMOD)=00000000B=00H
TMOD
TCON
Gபைடு நூலகம்TE TF1
C/T
TR1
M1 TF0
M0 TR0
GATE
C/T
M1
M0
例2:在工作方式0下,定时器T1引脚对用T0计数器产生的 P1.0引脚上周期为2ms的方波,进行计数,要求每计满5次, 将P1.1状态取反,在P1.1 上产生周期为20ms的方波。
#include <reg51.h>//包含头文件reg51.h sbit P1_0=P1^0;//定义P1.0引脚位名称为P1_0 sbit P1_1=P1^1;//定义P1.1引脚位名称为P1_1 //T0中断服务子程序 void time_0() interrupt 1 //定时器0溢出中断 { //重装定时器0计数初值 TL0=0x18;TH0=0xE0; //方波电平反相 P1_0=~P1_0; } //T1中断服务子程序 void time_1() interrupt 3 //定时器1溢出中断 { //重装定时器1计数初值 TL1=0x1B;TH1=0xFF; P1_1=~P1_1; //方波电平反相 }
举 例1
用T1方式0实现1秒延时函数如下: void delay1s() { unsigned char i; TMOD=0x00; // 置T1为工作方式0 for(i=0;i<200;i++){ // 设置200次循环次数 TH1=0x63; // 设置定时器初值 TL1=0x18; TR1=1; // 启动T1 while(!TF1); // 查询计数是否溢出,即定时5ms时间到,TF1=1 TF1=0; // 5ms定时时间到,将定时器溢出标志位TF1清零 } }
相关文档
最新文档