《Mes-51单片机定时计数器课件.ppt》由会员分享,可在线阅读,更多相关《Mes-51单片机定时计数器课件.ppt(24页珍藏版)》请在三一办公上搜索。
1、,第6章 MCS 51定时/计数器, 6.1 定时器的结构及工作原理 6.2定时器的控制6.3定时器的工作模式及其应用,第6章 MCS 51定时/计数器,6.1 定时器的结构及工作原理一、定时/计数器的结构图,中断,工作方式,工作方式,6.1 定时器的结构及工,二、定时/计数器的原理 1、计数脉冲 (1)定时 计数脉冲为时钟脉冲的12分频,每来一个脉冲,定时计数器加1。 (2)计数 外部脉冲由引脚P3.4和P3.5加入,每来一个脉冲计数器加1 2、定时器溢出 当定时器为最大值时,再来一个脉冲,定时器复位,即发生溢出,此时要向CPU提出中断申请.三、定时/计数器 T0 :16位定时/计数器 由T
2、L0,TH0两个八位计数器组成 T1: 16位定时/计数器 由TL1,TH1两个八位计数器组成,二、定时/计数器的原理,6.2 定时器的控制一、工作方式寄存器TMOD TMOD用于控制T0和T1的工作方式,其各位的定义如图所示。,1. M1M0工作方式控制位,6.2 定时器的控制,2. C/T 定时器方式或计数器方式选择位 若C/T=1时, 为计数器方式; C/T = 0时, 为定时器方式。 3. GATE 定时器/计数器运行门控标志位 当GATE=1时,只有INT0(或INT1)引脚为高电平且TR0(或TR1 )置1时, 相应的定时器/计数器才被选通工作, 这时可用于测量在INTx端出现的正
3、脉冲的宽度。若GATE=0,则只要TR0(或TR1)置1,定时器/计数器就被选通,而不管INT0(或INT1)的电平是高还是低。 二、 定时器/计数器控制寄存器TCON TF0、TF1分别是定时器/计数器T0、 T1 的溢出标志位, 加法计数器计满溢出时置 1, 申请中断, 在中断响应后自动复 0。TF产生的中断申请是否被接受, 还需要由中断是否开放来决定。 TR1、TR0 分别是定时器 /计数器T1、 T0 的运行控制位, 通过软件置 1 后, 定时器 /计数器才开始工作, 在系统复位时被清 0。,2. C/T 定时器方式或计数器方式选择位,6.3 定时器的工作模式及其应用一、模式0及其应用
4、 模式0选择定时器的高8位和低5位组成一个13位的定时/计数器,如下图所示:,P3.4,6.3 定时器的工作模式及其应,定时器工作在方式0时,为13位的定时器,TH0的8位,TL0的低5位,当TL0溢出时,向TH0进位,当TH0溢出时,向CPU申请中断. 定时初值的计算: T=(213-X)*振荡周期*12 T为定时时间,X为定时初值 定时/计数器的初始化过程: (1)确定工作模式,设置TMOD (2)设置定时/计数器的初值 (3)设置中断 (4)启动定时/计数器,定时器工作在方式0时,为13位的定时器,TH0的,例6.2 利用定时/计数器的方式产生1ms定时,在P1.0输出周期2ms方波,设
5、单片机晶振频率fosc=12MHz. 查询方式: MOV TMOD #00H MOV TH0,#18H MOV TL0,#0E0H SETB TR0 LOOP: JBC TF0 ,NEXT SJMP LOOP NEXT: MOV TL0,#18H MOV TH0,#0E0H CPL P1.0 SJMP LOOP,例6.2 利用定时/计数器的方式产生1ms定时,在P1.0输,中断方式,ORG 0000H 中断方式,二、方式1 方式1为16位的定时/计数器,TH0为高8位,TL0为低8位,一起组成16位的定时/计数器.结构图如下图所示:,二、方式1,定时/计数器工作在方式一时,定时初值的计算公式如
6、下: T=(216-T0的初值) 振荡周期12若晶振的频率fosc=12MHZ,则最长定时时间为: TMAX=(216-T0初值) 1/12 12 us=65.536ms例6.4:用定时器T1产生一个100Hz的方波,由P1.0输出,设fosc=12MHZ,采用查询方式. 解:方波周期: T=1/100Hz=0.01S=10MS, 用T1定时5MS计数器初值: X=216-12 5 103 /12=60536=EC78H,定时/计数器工作在方式一时,定时初值的计算公式如下:,三、方式2 定时/计数器工作在方式2时为8位的自动重装的定时定数器,TL0作为计数器,THO用来保存定时初值,当TL0溢
7、出,TH0将计数初值送入TL0,重新开始计时.,三、方式2,定时/计数器工作在方式2时,定时初值的计算公式如下: T=(28-T0的初值) 振荡周期12若晶振的频率fosc=12MHZ,则最长定时时间为: TMAX=(28-T0初值) 1/12 12 us=256us例6.5 当外部引脚P3.4(T0)上电平发生负跳变时,从P1.0输出500us的同步脉冲,请编程实现功能. 解:(1)模式选择: 首先选T0为模式2,外部事件计数方式,当P3.4引脚上的电平发生负跳变时,T0计数器加1,举出标志TF0置1;然后改变T0为500us定时工作方式,并使P1.0输出由1变为0.定时器到产生溢出,使P1
8、.0引脚恢复输出高电平,T0又恢复外部事件计数方式.,定时/计数器工作在方式2时,定时初值的计算公式如下:,(2)计算初值 T0工作在外部事件计数方式,当计数到28时,再加1计数器就会溢出,设计数初值为X,当出现一次外部事件时,计数器溢出,则: X+1= 28 X=28-1=11111111B=0FFH T0工作在定时方式时,设晶振频率为6MHZ,500us相当于250个机器周期,因此,初值X为: (28-X) 2 us=500us X=28-250=06H(3) 程序清单,(2)计算初值,START: MOV TMOD,#06H MOV TH0,#0FFH MOV TL0,#0FFH SET
9、B TR0 LOOP: JBC TF0,PTF01 SJMP LOOP01PTF0: CLR TR0 MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H CLR P1.0 SETB TR0LOOP2: JBC TF0,PTF02 SJMP LOOP2 PTF02: SETB P1.1 CLR TR0 SJMP START,START: MOV TMOD,#06H,例6.6 :利用定时器T1方式2对外部事件,要求每计满200个脉冲将P1.0端取反 解: 外部事件由T1(P3.5)引脚输入,每发生一次负跳变,计数器加1,每输入200个脉冲,计数器发生溢出中断,将P1.0
10、取反一次. T1设置为方式2计数器状态,方式字为TMOD=60H 初值计算:X=28-200=56D=38H 因此TL1的初值为38H,重装初值TH1=38H程序清单:,例6.6 :利用定时器T1方式2对外部事件,要求每计,MAIN: MOV TMOD,#60H MOV TL1,#38H MOV TH1,#38H MOV IE,#88H SETB TR1 HERE:SJMP HERE ORG 001BH CPL P1.0 RETI,MAIN: MOV TMOD,#60H,三、模式3: 模式3只适用于定时器T0,若将T1置为模式3,它将停止计数,其效果类同将TR1=0;即关闭定时器T1.T1只做
11、为波特率发生器。 当T0工作在模式3下,TL0,TH0被分成两个相互独立的8位计数器。其中,TL0使用原T0的各位控制位,引脚,中断源,即使用C/T,GATE,TR0,TF0和INT0引脚,其功能和操作与模式0和模式1相同,只是TL0只能使用8位寄存器,既可以工作在定时器方式也可以工作在计数方式。TH0只可作简单的内部定时器,定占用T1的控制位TR1,和T1的中断标志位TF1,同时也占用了T1的中断源,由TR1来负责启动和关闭。,三、模式3:,四、综合应用举例例6.7:设时钟频率为12MHz, 编写程序利用T1产生1S定时程序.解:(1)T1的工作模式的确定 因为定时器事件较长,采用哪一种工作
12、方式适合? fosc=12MHz时,模式0最长可定时2131us=8.192ms 模式1最长可定时2161us=65.536ms 模式2最长可定时281us=256us经分析,可选方模式1,定时事件为50ms,另设计一个软件计数器,初始值为20,每隔50ms中断一次,中断20次为1S.,四、综合应用举例,(2)求初值 (216-X)-1/(12106) 12=5013-3 X=65536-50000=15536=3CB0H 因此 (TH1)=3CH (TL1)=B0H(3)程序如下: ORG 0000H MAIN: MOV SP,#60H LJMP MAIN MOV R2,#20 ORG 00
13、1BH MOV TMOD,#10H AJMP SERVE MOV TL1,#0B0H ORG 2000H MOV TH1,#3CH,(2)求初值,SETB TR1 SETB ET1 SETB EA SJMP $ SERVE:MOV TL1,#0B0H MOV TH1,#3CH DJNZ R2,LOOP CLR TR1 LOOP: RETI END,例6.8 利用定时器T0方式2对外部事件计数,要求每次满200次后,从P1.0输出宽度为5ms的高电平,如此循环下去(设 fosc=12MHz) 解:根据题意,T0交替工作于计数方式和定时方式,先计数满200次后改为定时方式,1 ms后又回到计数方式
14、,计数方式为方式2,定时器为方式1. T1的方式控制字:计数方式为TMOD=06H 定时方式为TMOD=01H T1的初值:计数初值为:X=28-200=56D=38H 定时初值为EC78H,例6.8 利用定时器T0方式2对外部事件计数,要求每次满2,ORG 0030H MAIN: CLR TR0 MOV TMOD,#60H MOV TH0,#38H MOV TL0,#38H SETB TR0 CLR P1.0 WAIT: JBC TF0, TIME SJMP START TIME: CLR TR0 SETB P1.0 MOV TMOD,#01H MOV TH0,#0ECH MOV TL0,#
15、78H SETB TR0 WAIT1: JBC TF0,MAIN SJMP WAIT1 END,ORG 0030H,例6.9 利用T0确定INT0引脚上出现的正脉冲的宽度,将测到的机器周期的个数存入30H,31H中。 解: 设T0为定时器方式1,门控位GATE置1,初值为0 当INT0引脚变为高电平时,采用外触发方式启动T0定时,当外部INT0引脚变为低电平时,停止T0定时,这时TL0和TH0中的值就是INT0引脚为高电平期间所经过的机器周期数,其程序清单如下: MAIN: MOV TMOD,#09H MOV TL0,#00H MOV TH0,#00H WAIT:JB P3.2 ,WAIT1 SETB TR0 WAIT2:JNB P3.2,WAIT2 WAIT: JNB P3.2,WAIT CLR TR0 MOV 30H,TL0 MOV 31H,TH0 SJMP $ END,例6.9 利用T0确定INT0引脚上出现的正脉冲的宽度,将,