单片机讲义1(第六章定时器计数器)概要

上传人:suns****4568 文档编号:93086376 上传时间:2019-07-16 格式:PPT 页数:69 大小:1.10MB
返回 下载 相关 举报
单片机讲义1(第六章定时器计数器)概要_第1页
第1页 / 共69页
单片机讲义1(第六章定时器计数器)概要_第2页
第2页 / 共69页
单片机讲义1(第六章定时器计数器)概要_第3页
第3页 / 共69页
单片机讲义1(第六章定时器计数器)概要_第4页
第4页 / 共69页
单片机讲义1(第六章定时器计数器)概要_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《单片机讲义1(第六章定时器计数器)概要》由会员分享,可在线阅读,更多相关《单片机讲义1(第六章定时器计数器)概要(69页珍藏版)》请在金锄头文库上搜索。

1、第6章 MCS51的 定时器/计数器,定时器和计数器两种工作模式 (1)计数器工作模式 (2)定时器工作模式 MCS5l单片机的定时器计数器具有4种工作方式(方式0、方式1、方式2和方式3),其控制字均在相应的特殊功能寄存器中,通过对它的特殊功能寄存器的编程,可方便地选择定时器计数器2种工作模式和4种工作方式。,61 定时器计数器的结构,定时器计数器结构 特殊功能寄存器TMOD用于选择定时器计数器T0、T1的工作模式和工作方式。 特殊功能寄存器TCON用于控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。 TMOD、TCON这两个寄存器的内容由软件设置。 单片机复位时,两个寄存器的所

2、有位都被清0。,定时器计数器T0、T1的逻辑结构,80C51中有两个16位加计数的定时器计数器T0、T1 (l)计数器 两个8位加计数器TLi、THi组成,在不同的工作方式下,其组成结构不同。 (2)计数输入 可选择两种计数输入,由 管理。 (3)控制逻辑,(4)计数溢出管理 溢出中断请求标志位TFi,6.1.1 工作方式控制寄存器TMOD,TMODE的功能:用于选择定时器计数器的工作方式和控制模式 格式:,(1)GATE门控位(控制方式选择) GATE=0时,计数器由内部TRi(i=0,1)位控制启、停。 GATE=1时,计数器由内部TRi位和外中断引脚确 (i=0,1)控制启、停。 (2)

3、 计数器模式和定时器模式选择位 =0,为定时器模式。对振荡时钟12分频脉冲计数。 =1,为计数器模式。计数器对外部输入脉冲计数(即:引脚T0(P34)或T1(P35)对外部脉冲(负跳变)计数)。,(3)M1、M0计数器的工作方式选择位 M1、M0共有4种编码,对应于4种工作方式的选择,如表61所示。,6.1.2 定时器/计数器控制寄存器TCON,功能:用于控制计数器的启、停和计数溢出的标志设置 格式:,(l)TF1、TF0计数溢出标志位 当计数器计数溢出时,该位置1,表示计数溢出并请求中断。进入中断服务程序后由硬件自动清0,使用查询方式时,查询有效后,应以软件方法及时将该位清0 (硬件置位软件

4、清零) 。 (2)TR1、TR0计数内部启、停控制位 TR1(TR0)=1,启动定时器计数器工作 TR1(TR0)=0,停止定时器计数器工作 该位可由软件置1或清0 。,6.1.3 定时器/计数器的操作,定时器计数器的方式设定、启停控制等,都通过对特殊功能寄存器TMOD和TCON的操作来完成。 【例】设定T0为方式1的计数方式,并由内部TR0控制启停,其控制字为0101B,设 T1为复位状态,故设定控制字为0000 0101B=05H。使用以下指令完成方式设定。 MOV TMOD,05H 或 MOV 89H,05H TCON可位寻址操作。对T0的启、停控制通过以下位操作指令完成。 SETB T

5、R0 或 SETB 8CH ;启动T0计数 CLR TR0 或 CLR 8CH ;停止T0计数,62 定时器计数器的工作方式,定时器/计数器按计数器的组成不同,分为4种工作方式如右图所示:,方式0:13位计数方式。相当于有5位预分频的8位计数方式。 方式1:16位计数方式。 方式2:计数常数可自动重装的8位计数方式。 方式3:两个8位计数器与波特率发生器的工作方式。,6.2.1 方式 0,6.2.2 方式1,6.2.3 方式 2,6.2.4 方式 3,在方式3下,T1只作波特率发生器。在这样情况下,T1将TF1、TR1资源出借给T0使用。因此,在方式3下,T0可以构成两个独立的计数器结构,如图

6、66(a)和图66(b)所示。 TL0构成一个完整的8位定时器计数器,而TH0则是一个仅能对fOSC/12脉冲计数的8位定时器。,说明:,方式3是为了增加1个附加的8位定时器计数器而提供的,从而使MCS51具有3个定时器计数器、方式3只适用于定时器计数器T0,定时器计数器T1不能工作在方式3。T1处于方式3时相当于TR1=0,停止计数(此时T1可用来作串行口波特率产生器)。,1工作方式3下的T0,当TMOD的低2位为11时,T0的工作方式被选为方式3,各引脚与T0的逻辑关系框图如下图所示。,定时器计数器T0分为2个独立的8位计数器:TL0和TH0。 TL0使用T0的状态控制位GATE、TR0、

7、 ,而TH0被固定为1个8位定时器(不能为外部计数模式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断请求源TF1。,2. T0工作在方式3下T1的各种工作方式,一般情况下,当T1用作串行口的波特率发生器时,T0才工作在方式3。T0处于工作方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合。,(1)T1工作在方式0 T1的控制字中M1、M0=00时,T1工作在方式0。T1是一个13位的定时器/计数器。 (2)T1作在方式1 T1的控制字中M1、M0=01时,T1工作在方式1。T1是一个16位的定时器/计数器。,(3)T1工作在方

8、式2 T1的控制字中M1、M0=10时,T1的工作方式为方式 2。 在这种方式下T1是一个8位的定时器/计数器。 (4)T1工作在方式3 T1的控制字中M1、M0=11时,T1停止计数。,6.3 定时器计数器对输入信号的要求,(1)当被选定为定时器工作模式时 计数输入信号是内部时钟脉冲,每个机器周期产生1个脉冲使计数器增1。因此,定时器计数器的输入脉冲的周期与机器周期一样,为时钟振荡频率的112。当采用12 MHZ频率的晶体时,计数速率为1MHZ,输入脉冲的周期间隔为 ls。由于定时的精度决定于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶体。 (2)当定时器计数器用作计数

9、器时 计数脉冲来自相应的外部输入引脚T0或T1。当输入信号产生由1至0的跳变(即负跳变)时,计数器的值增1。每个机器周期的S5P2期间,对外部输入引脚进行采样。如在第一个机器周期中采得的值为1,而在下一个周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1的期间,计数器加1。由于确认1次负跳变要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的124。为了确保某一给定的电平在变化之前能被采样1次,则这一电平至少要保持1个机器周期。,6.4 定时器计数器的编程和应用,6.4.1 方式1的应用 【例 61】假设系统时钟频率采用6 MHz,要在P1.0上输出 1

10、个周期为 2 ms的方波。,【解】方波的周期用定时器T0来确定,即在T0中设置1个初值,在初值的基础上进行计数,每隔lms计数溢出1次,即T0每隔lms产生1次中断,CPU响应中断后,在中断服务程序中对P1.0引脚信号取反。T0中断入口地址为000BH。为此要做如下几步工作: (l)计算初值 设:需要装入T0的初值为X,则有:,初值的计算公式为:,其中:n=13、16、8 (由计数器的的工作方式来决定n 的取值),X=,X=,=65036,将X化为十六进制,即 X=FEOCH=1111 1110 0000 1100B。 所以,T0的初值为: TH0=0FEH TL0=0CH (2)初始化程序设

11、计 初始化程序包括定时器初始化和中断系统初始化,主要是对寄存器IP、IE、TCON、TMOD的相应位进行正确的设置,并将计数初值送入定时器中。 (3)程序设计 ORG 0000H RESET:AJMP MAIN ;转主程序 ORG 000BH ;T0的中断入口地址 AJMP IT0P ;转T0中断处理程序IT0P ORG 0100H MAIN: MOV SP,60H ;设堆栈指针 MOV TMOD,01H ;设置T0为方式1 0000 0 0 01 ACALL PT0M0 ;调用子程序PT0M0 HERE:AJMP HERE ;自身跳转,PT0M0:MOV TL0,0CH ;对T0置定时初值(

12、先低后高) MOV TH0,0FEH SETB TR0 ;启动T0开始计时 SETB ET0 ;允许T0计数溢出中断 SETB EA ;CPU开中断 RET IT0P:MOV TL0,0CH ;T0中断服务子程序,T0置初值 MOV TH0,0FEH CPL P10 ;P10的状态取反 RETI,如果CPU不做其它工作,也可以采用查询的方式进行控制,查询方式的参考程序如下:,MOV TMOD,01H ;设置T0为方式1 0000 0 0 01 CLR TF0 LOOP:SETB TR0 ;启动T0开始定时 (书中这里有错) MOV TL0,0CH ;T0置初值 MOV TH0,0FEH LOO

13、P1:JNB TF0,LOOP1 ;查询TF0标志是否为1,如为1, 说明T0溢出,则往下执行 CLR TR0 ;T0溢出,关闭T0 CPL P10 ;P10的状态求反 SJMP LOOP,【例 62】假设系统时钟为6MHZ,编写定时器T0产生1s定时的程序。 【解】(1)定时器T0工作方式的确定(1S的确定) 因定时时间较长,采用哪一种工作方式合适呢?由前面介绍的定时器的各种工作方式的特性,可以计算出: 方式0 (n=13)最长可定时16.384 ms: 方式1 (n=16)最长可定时131.072 ms: 方式2 (n=8)最长可定时512 s 。 由上可见,可选方式 1,每隔100 ms

14、中断1次,中断10次为1s 。 (2)计算计数初值(100 ms的定时初值), X=,所以:X=15 536=3CB0H 因此:TH0=3CH, TL0=B0H,(3)10次计数的实现 对于中断10次计数,可使T0工作在定时方式,采用循环程序的方法实现。 (4)程序设计 ORG 0000H RESET:LJMP MAIN ;上电,转主程序入口MAIN 0RG 000BH ;T0的中断入口地址 LJMP IT0P ;转T0中断处理程序ITOP ORG 1000H MAIN: MOV SP,#60H ;设堆栈指针 M0V B,0AH ;设循环次数1次 MOV TMOD,01H ;设T0工作在方式1

15、 0000 0 0 01 MOV TL0,0B0H ;给T0设初值(先低后高) MOV TH0,03CH,LOOP: SETB TR0 ;启动T0开始定时 SETB ET0 ;允许T0中断 SETB EA ;CPU开放中断 HERE:SJMP HERE ;等待中断 IT0P: MOV TL0,0B0H ;T0中断服务子程序, 重新给T0装入初值 MOV TH0,3CH DJNZ B,LOOP CLR TR0 ;1s定时时间到,停止T0工作 RETI,6.4.2 方式2的应用,【例63】当T0(P34)引脚上发生负跳变时,从P10引脚上输出1个周期为lms的方波。如图所示。(假设系统时钟为6 MHz),【分析】(1)T0工作方式选择 T0引脚上如何引发负跳变? T0定义为方式1计数器模式,T0初值为0FFFFH,可满足要求。 (2)T1定义为方式2定时器模式(方式2 (n=8)最长可定时512 s)在T0引脚产生l次负跳变后,启动T1每500s产生1次中断,在中断服务程序中对P10引脚信号求反,使P10产生周期为1ms的方波。 【解】 (3)计算T1的初值

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号