第4章 MCS51单片机定时_计数器.ppt.Convertor
- 格式:doc
- 大小:211.00 KB
- 文档页数:7
单片机原理MCS 51定时器计数器教学PPT 电子邮件:[电子邮件保护]电话:85191952地址:实验大楼B208,第6章MCS-51定时器/计数器,2,1-1定时器/计数器结构和工作模式,1-2定时器/计数器示例,3,1-1定时器/计数器结构和工作模式,定时器/计数器是MCS-51单片机的重要功能模块之一。
在检测、控制和智能仪器等应用中,定时器通常用作实时时钟,以实现定时检测、定时控制。
计时器也可以用来产生毫秒宽度的脉冲来驱动电机,如步进电机。
计数器主要用于计数外部事件。
在MCS-51单片机中有三个定时器/计数器T0、T1和T2。
本章主要介绍MCS-51结构、原理、工作模式及应用。
8051芯片上有两个16位定时器/计数器:定时器0 (T0)和定时器(T1)。
、5、、1、模式寄存器TMOD特殊功能寄存器TMOD是T0和T1的工作模式寄存器,其格式如下:TMOD的低4位T0的模式字段和高4位T1的模式字段具有相同的含义。
,6,7,定时和外部事件计数模式选择位C/T 0:定时模式。
1:外部计时法。
GATE 1:定时器计数由外部引脚输入电平0控制:定时器计数不受外部引脚输入电平控制。
,8,,2、控制寄存器TCON特殊功能寄存器TCON的高4位存储定时器的操作控制位和溢出标志位,低4位存储外部中断的触发模式控制位并锁存外部中断请求源。
TCON格式如下:定时器T0运行控制位TR0溢出标志位TF0定时器T1运行控制位TR1溢出标志位TF1,9,,3、定时器运行模式MCS-51的定时器T0有四种工作模式:模式0、模式1、模式2和模式3;定时器T1有三种工作模式:模式0、模式1、模式2。
10、模式0、模式0是一个13位计数器,由TL1的低5位和TH1的8位组成。
如果这个计数器加上一个计数器,从计算初始值到溢出的时间是:,11,例1:在某个时间写T0初始化程序1毫秒,12。
模式1、模式1和模式0之间的区别仅在于计数器中的位数不同。
第4章定时/计数器本章要点定时/计数器的工作原理定时/计数器的控制寄存器和方式寄存器定时/计数器的工作方式、计数初值的设置以及各种工作方式下的应用编程4.1 定时/计数器的结构及工作原理MCS-51单片机内部由两个16位可编程的定时/计数器,即定时器T0和定时器T1,52系列单片机提供3个定时器,第三个定时器为T2。
它们既可以用作定时器,又可用作计数器。
我们主要讲51系列单片机的定时/计数器。
4.1.1 定时/计数器的结构定时/计数器的基本结构如图所示。
基本部件是两个8位的计数器。
由TH0和TL0组成T0,由TH1和TL1组成T1,它们都是以加1的方式完成计数。
特殊功能寄存器TMOD控制定时/计数器的工作方式,TCON控制定时/计数器的启动运行并记录T0、T1的溢出标志。
通过初始化编程,可以预置计数初值、指定其工作方式及控制其运行1.定时器的工作原理在作定时器使用时,输入的计数脉冲是由晶体振荡器的输出经12分频后得到的,所以定时器也可以看作对机器周期计数的计数器。
故其计数速率为晶体振荡频率的1/12。
如果晶振频率为12 MHz,则定时器每接收一个输入脉冲的时间为1us。
4.1.2 定时/计数器的工作原理2.计数器的工作原理当它用作计数器时,它对接到相应的外部引脚T0(P3.4) 或T1(P3.5)上的外部事件计数。
在这种情况下,当检测到输入引脚上的电平由高跳变到低时,计数器就加1。
计数器在每个机器周期采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,则计数器加1。
因此计数器需要两个机器周期来识别一个从高到低的跳变,故最高计数速率为晶振的1/24。
不管是定时还是计数工作方式,定时器在运行时不占用CPU的时间,除非产生溢出才可能中止CPU的当前操作。
可见,定时/计数器是单片机内部效率高且工作灵活的部件。
这里要强调一点,MCS-51系列单片机的定时/计数器采用的是加1计数方式。
即单片机内部的计数器从初值开始一直加1,直到产生溢出为止。
4.2 定时/计数器的控制寄存器定时/计数器在开始使用前,必须设置相应的寄存器,以设定其工作方式等。
1. 定时/计数器的方式寄存器(TMOD)特殊功能寄存器TMOD中每位的定义如下图所示。
高4位用于定时/计数器1,低4位用于定时/计数器0。
特殊功能寄存器TMOD只能按字节寻址,不能按位寻址。
GA TE:门控位。
用来确定对应的外部中断请求引脚是否参与T0或T1的操作控制。
当GATE=0时,只要定时/计数器控制寄存器(TCON)中的TR0或TR1被置位时,T0或T1被允许开始计数;当GATE=1时,不仅要TCON中的TR0或TR1置位,还需要P3口的/INT0或/INT1脚为高电平,才允许开始计数。
后一种情况下一般用于测量外部脉冲的宽度。
定时器1定时器0: 定时器方式或计数器方式选择位。
时,为定时方式,其计数器输入为晶振的12分频,即对机器周期计数。
时,为计数方式,计数器的输入来自T0(P3.4)和T1(P3.5)端的外部脉冲。
2. 定时/计数器控制寄存器TCON特殊功能寄存器TCON用于控制定时器的操作及对定时器中断的控制。
特殊功能寄存器TCON既能按字节寻址(88H),又能按位寻址。
TF1:T1的溢出标志。
当T1计数溢出时由硬件则自动置1;在CPU响应中断处理时由硬件清0。
也可由程序查询后清零(非中断方式)。
TR1:T1的运行控制位。
该位置1或清0用来实现启动或停止定时/计数器。
TF0:T0的溢出标志;TR0:T0的运行控制位。
TMOD和TCON寄存器在复位时其每一位均清0。
TCON(88H)其各位定义如下图所示。
其中低4位与外部中断有关。
M1、M0 :定时/计数器的四种工作方式选择。
4.3 定时/计数器的工作方式1.方式0当M1M0设置为00时,定时/计数器选定为方式0工作。
在这种方式下,计数器由THx中的8位和TLx中的低5位组成长度为13位的计数器。
TLx中的高3位未用。
它的计数范围为0~8191(213=8192)。
这主要是与MCS-48系列单片机保持一致,满足兼容性。
当GATE=0时,只要TCON中的TRx为1,TLx和THx组成的13位计数器就开始计数;当GATE=1时,不仅要TCON中的TRx为1,还要/INTx引脚为1才能使计数器开始计数。
当13位计数器加到全1以后,再加1就产生溢出。
这时,置TCON的TFx位为1,同时把计数器变为全0。
若要定时/计数器继续按方式0工作,则应按要求重赋初始值。
2.方式1方式1和方式0的工作相同,唯一的差别是THx和TLx组成一个16位计数器。
它的计数范围为0~65535(216=65536)。
3.方式2方式2把TLx配置成一个可以自动装载计数初值(计数初值自动恢复)的8位计数器,THx 作为赋值寄存器。
THx由软件设置初值。
当TLx产生溢出时,CPU一方面使溢出标志TFx置1,同时把THx 中的8位数据重新装入TLx中。
方式2常用于精确定时控制和产生串行通信用的波特率。
但它的缺点是定时位数较少(最多只能定时256个周期)。
4.方式3方式3只适用于定时计数器T0。
T1不能工作在方式3,若将定时计数器T1定义成方式3,T1将停止工作。
方式3使MCS-51具有三个定时/计数器。
当T0定义为方式3时,将使TL0和TH0分成两个相互独立的8位计数器。
TL0可用于计数器也可用于计时器。
TH0只用作定时器。
由于TL0利用了T0本身的一些控制位,它的操作与方式0和方式1类似,可用于计数也可用于计时。
而TH0被规定为只用作定时器功能,对机器周期计数,并借用了T1的控制位TR1和TF1。
在这种情况下TH0占用了T1的中断。
此时T1还可以设置为方式0~2中的任意一种,用于任何不需要中断控制的场合,或用作串行口的波特率发生器。
通常,当T1用作串行口波特率发生器时,才将T0定义为方式3,以增加一个8位计数器。
4.4 定时/计数器的应用举例4.4.1计数初值的计算由于计数器是加1计数并在溢出时产生中断请求,因此不能直接将计数值直接置入计数器,而应送计数值的补码。
设计数器最大计数值为M,则不同的工作方式,最大计数值M不同。
方式0:M=213=8192方式1:M=216=65536方式2、3:M=28=256置入计数初值X的计算公式如下:1.计数器方式:X=M-计数值2.定时器方式:(M-X)×T=定时值故,X=M - 定时值/ T其中T为计数周期,是单片机时钟的12分频,即单片机机器周期。
当晶振为6 MHz时,T=2us,当晶振为12 MHz时,T=1us。
【例4-1】单片机晶振为12MHZ,要求T0产生500µs定时,计算计数初值X。
解:由于计数周期T=1µs,产生500µs定时,则需要“+1”计数500次,定时器方能产生溢出。
(1)如果采用方式0:X=213-500=7692=1E0CH但在方式0中TL0高三位不用,都设为“0”,则1E0CH应写成:这样,只要将0F0H装入TH1,0CH装入TL1即可。
(2)如果采用方式1:X=216-500=65036=FE0CH;只要将0FEH装入TH1,0CH装入TL1即可。
采用方式1时,装入计数初值的程序段如下:MOV TH1, 0FEHMOV TL1, 0CH4.4.2定时/计数器的初始化由于定时/计数器是可编程的,因此在定时或计数之前要用程序进行初始化,初始化一般有以下几个步骤:①确定工作方式----对方式寄存器TMOD赋值。
②预置定时或计数初值----直接将初值写入TH0、TL0或TH1、TL1中。
③根据需要对中断允许寄存器有关位赋值,以开放或禁止定时/计数器中断。
④启动定时/计数器,使TCON中的TR1或TR0置1,计数器即按确定的工作方式和初值开始计数或定时。
4.4.3应用举例1.定时器方式0的应用例4-2:设单片机主频为12 MHz,利用定时器T1定时,使P1.0输出周期为2ms的对称方波。
解:用P1.0输出方波,周期为2ms。
即每1ms改变一次电平,故定时值应为1ms,可作1000次“+1”运算,使T1作定时器工作在方式0。
即采用13位计数器。
定时初值:X=M-计数次数=213-1000=7192=1C18H。
由于TL1的高3位不用,1C18H写成1110,0000,0001,1000B=0E018H。
TH1 的初值为0E0H,TL1的初值为18H。
方式寄存器TMOD:部分程序如下:ORG 0000HMOV TMOD,#00H ;设置T1工作方式(3字节)MOV TH1,#0E0H ;计数初值送计数器(3字节)MOV TL1,#18H ;计数初值送计数器(3字节)SETB EA ;CPU开中断(2字节)SETB ET1 ;T1开中断(2字节)SETB TR1 ;启动T1(2字节)SJMP $ ;主程序部分,可在此写其它的程序(2字节);主程序共17Byte2.定时器方式1的应用例4-3:要求同例4-2,采用查询方式工作,查询标志位TF1。
解:若定时器T1采用方式1工作,即16位计数器,则定时初值:X = M - 计数初值= 216 –1000 = 64536 = 0FC18HTH1 的初值为0FC H,TL1的初值为18 H。
由于不采用中断方式,TF1置1后不会自动清0,因此要用指令使TF1清0。
部分程序如下:ORG 0000HMOV TMOD,#00H ;设置T1工作方式SETB TR1 ;启动T1LOOP:MOV TH0,#0 FCH ;装入T1的初值MOV TL0,#18H ;装入T1的初值JNB TF1,$ ;若TF1=0,则继续查询CPL P1.0 ;输出方波CLR TF1 ;TF1清0SJMP LOOP ;重复下一次查询程序很简单,但CPU的效率不高。
3.计数器方式的应用举例【例4-6】用T1来计数,工作于方式2,要求每计满100次,将P1.0端取反。
解:T1工作于计数方式,外部计数脉冲由T1(P3.5引脚)引入,每来一个由1至0的跳变计数器加1,由程序查询TF1的状态。
计数初值X=28-100=156=9CHTH1=TL1=9CH,TMOD=60H(设置T1计数方式,方式2)源程序如下:ORG 0000HLJMP MAINORG 8000HMAIN: MOV TMOD, #60H ;T1工作方式2,计数方式MOV TH1, #9CH ;T1计数初值MOV TL1, #9CHSETB TR1 ;启动T1LOOP: JBC TF1, REP;如果TF1=1跳转至REP,并把TF1清零SJMP LOOP ;否则等待REP: CPL P1.0 ;P1.0取反输出CLR TF1SJMP LOOPEND【例6-7】已知一个方波信号的频率为4MHz,编程对该信号进行分频以获得500kHz的方波信号。