
单片机定时器、计数器.ppt
35页单片机原理及应用第4章 MCS-51单片机定时器/计数器§ 4.1 定时器/计数器T0、T1的结构 § 4.2 定时器/计数器的4种工作方式 § 4.3 定时器/计数器应用举例 第4章 MCS-51单片机定时器/计数器 MCS-51单片机定时器/计数器定时器/计数器可以是独立的集成芯片, 也可以构成于单片机内部,但无论何种形式都 具有以下共性: • 定时器/计数器可以工作于计数方式也可以工作 于定时方式 • 定时器/计数器的计数值在范围内是可变的,这 取决于计数器的位数计数的最大值也就限定 了定时的最大值 • 在到达设定的定时或计数值时发出中断申请, 实现定时控制MCS-51单片机定时器/计数器在MCS-51单片机内部有两个16位定 时器/计数器T0和T1,它们均可作为定时 器或计数器使用,均具有4种不同的工作 方式,用户可通过对特殊功能寄存器的编 程,方便地选择适当的工作方式及设定 T0或T1工作于定时器还是计数器4.1 定时器/计数器T0、T1的结构 1.内部结构内部机器周期脉冲外部输入脉冲4.1 定时器/计数器T0、T1的结构 • 加法计数器的初值可以由程序设定,设置 的初值不同,加法器达到溢出所需的计数 值或定时时间就不同。
• 对定时器/计数器工作模式、工作方式的设 定及控制是通过方式选择寄存器TMOD和 控制寄存器TCON这两个特殊功能寄存器 来完成的 4.1 定时器/计数器T0、T1的结构 2.定时器/计数器方式选择寄存器TMOD定时器/计数器T0、T1都有4种工作方式 ,可通过程序对TMOD的编程来设置其位 定义如下:4.1 定时器/计数器T0、T1的结构 • C/ :定时或计数功能选择位,“1”时为计数方 式;“0”时为定时方式 • M1、M0:定时器/计数器工作方式选择位,4.1 定时器/计数器T0、T1的结构 • GATE:门控位,用于控制定时器/计数器的启 动是否受外部引脚中断请求信号的影响 GATE=0 TRx=1 一般情况下,选用该方法GATE=1, =1 TRx =1 用于通过端口测量脉冲宽度4.1 定时器/计数器T0、T1的结构 3.定时器/计数器控制寄存器TCONlTF0(TF1):T0(T1)溢出中断标志位当T0/T1启动计 数后,从初值开始加1计数,当T0(T1)计数溢出时,由 硬件将该位置位,并在允许中断的情况下,向CPU发 出中断请求信号,CPU响应中断转向中断服务程序时 ,由硬件自动将该位清零,TF0(TF1)也可以由程序查 询或清零。
4.1 定时器/计数器T0、T1的结构 • TR0(TR1):T0(T1)运行控制位 当GATE=0时,TRx=1,启动Tx计数; TRx=0,停止Tx计数 当GATE=1时,仅当TRx=1且 =1时,才允许Tx 计数,该位由软件进行设置 • 控制字中其余用于中断控制4.2 定时器/计数器的4种工作方式 T0和T1都具有4种工作方式,当工作于方 式0、1、2时,T0和T1功能相同,但工作在3时 ,其功能不同下面分别介绍这4种工作方式 1.工作方式0(M1M0=00)定时/计数方式0是13位计数器,即THx高8 位(作计数器)和TLx的低5位(32分频的定标器)构 成, TLx的高3位未用x=0或1)计数时,TLx的低5位溢出后向THx进位, THx溢出后将TFx置位,并向CPU申请中断4.2 定时器/计数器的4种工作方式 • 定时/计数方式0: 13位计数器示意图4.2 定时器/计数器的4种工作方式 2.工作方式1 (M1M0=01)由THx和TLx组成16位计数器其组成结构与定时/ 计数方式0完全相同,但计数范围比定时/计数方式0扩大 了很多 计数信号从TLx的低位输入,计数每溢出一次,THx 计数器加1。
当16位由全“1”变成全“0”时,最高位产生溢 出,置位TFx,向主机请求中断 定时/计数方式1:16位计数器示意图4.2 定时器/计数器的4种工作方式 3.工作方式2 (M1M0=10)l在此方式下,TLx可以自动设置初始值l由TLx作为8位计数器,THx作为计数初值寄存器, 设置初值时同时送THx和TLxlTLx进行加计数,在计数溢出时,不仅置溢出标志 TFx,还自动将THx中的内容自动送入TLx,使TLx重 新从初值开始计数THx的内容可由软件置入,且在 计数器工作期间其值不变l方式2适用于产生固定时间间隔的控制脉冲,也可以 做为波特率发生器4.2 定时器/计数器的4种工作方式 • 定时/计数方式2:8位自动再装入计数器示意图4.2 定时器/计数器的4种工作方式 4.工作方式3 (M1M0=11)(只有T0有方式3)l将定时器/计数器T0分成两个独立的8位计数器,用 TL0组成完整的8位定时器/计数器(既可以定时,又 可以计数),用TH0组成只能定时的8位定时器定时 器/计数器1无方式3功能,一旦将定时器/计数器1设 置为方式3,相当于TR1=0,停止计数l适用场合:较少选用方式3,只在定时器/计数器T1 用作波特率发生器时,定时器/计数器T0才选作方式3, 这样可以增加一个定时器。
4.2 定时器/计数器的4种工作方式 • 定时/计数方式3:二个8位计数器示意图4.2 定时器/计数器的4种工作方式 • 计数格式:4.3 定时器/计数器应用举例1. 初始化步骤通常情况下设置顺序大致如下:l工作方式控制字(TMOD)的设置;l计数初值的计算及装入TLx、THx;l 中断允许位ETx、EA的设置,使主机开放中断;l给中断优先级寄存器IP选送中断优先级字,以设 定中断优先级 ;l启/停位TRx的设置等 4.3 定时器/计数器应用举例2. 计数器初值计算方法假设将计数器计满为0所需要的计数值为N,应装 入的计数初值为X,n为计数器的位数,则:X=2n-N 其中n与计数器工作方式有关在方式0时n=13,在方 式1时n=16,在方式2和方式3时n=84.3 定时器/计数器应用举例3. 定时器初值计算方法假设定时时间为T,机器周期为Tp,即12/晶 振频率X为定时器的定时初值,则:T=(2n-X)Tp X=2n-T/Tp (n同上) 再将计算出的初值转换为二进制数TB,然后再分 别送入THi、TLi(对于T0,i=0;对于T1,i=1)4.3 定时器/计数器应用举例例如:设定时时间T=5ms,机器周期Tp=2μs,则可 求得计数次数(T/TP)为5ms/2 μs=2500次。
• 选用方式0:n=13,应设置计数初值X=213-(T/Tp)=8192- 2500=5692,变成二进制数为(1011000111100)BMOV THi,#0B1H ;送高8位MOV TLi,#1CH ;送低5位(高3位为0)4.3 定时器/计数器应用举例• 选用方式1:n=16,设置计数初值为: X=216-(T/Tp)=65536-2500=63036, 变成二进制数为(1111011000111100)BMOV THi,#F6H;送高8位MOV TLi,#3CH;送低8位4.3 定时器/计数器应用举例• 在本例中,不能选方式2,因为 28=256<2500 • 假设需要计数100次,则可选方式2: • 256-100=156,变成二进制数为 (10011100)B,变成十六进制数为9CH, • MOV THi,#9CH;送高8位 • MOV TLi,#9CH;送低8位4.3 定时器/计数器应用举例4. 应用举例 例 :方式0应用:利用定时器/计数器T0在P1.0引脚输 出周期为2ms的方波,设时钟频率为6MHz,编写相 应的程序。
可采用定时中断的方式,每1ms产生一次中断,在中断服 务程序中将输出信号取反即可定时器T0的中断入口地址为000BH①初值计算 因T=(2n-X)/Tp,则计数初值为: X=2n-T/Tp=213-500=8192-500=7692=1111000001100B 则TH0=F0H,TL0=0CH4.3 定时器/计数器应用举例②确定初始化控制字主要对IP,IE,TCON, TMOD的相应位进行正确的设置,本例假设从系 统复位开始TMOD=00000000B=00H,TCON=00H③程序设计:T0的中断服务程序,除了产生要求 的方波外,还要注意将时间常数送入定时器中, 为下一次产生中断做准备4.3 定时器/计数器应用举例ORG 000BH ;T0中断服务程序入口 LJMP ZD ;转至INT处 ORG 2000H ;主程序 MOV TMOD,#00H ;置T0为定时方式0 MOV TH0,#0F0H ;设置计数初值 MOV TL0,#0CH SETB EA ;CPU开中断 SETB ET0 ;允许T0中断 SETB TR0 ;启动T0 HALT:SJMP $ ;暂停,等待中断 ZD: CPL P1.0 ;输出方波 MOV TH0,#0F0H ;重新装入计数初值 MOV TL0,#0CH RETI ;中断返回4.3 定时器/计数器应用举例例: 方式2应用: 假设,有一个周期为10ms的脉冲信号,加在引脚 T0/P3.4上。
现要求该引脚每发生一次负跳变,P1.0 端就输出1个2ms脉宽的同步负脉冲,如图所示假 设单片机晶振频率为6MHz4.3 定时器/计数器应用举例• 解:可将T0设定为方式2计数方式,初值可设为FFH,即外部 脉冲由P3.4口发生一次负跳变时,计数器加1即产生溢出,并 向CPU发中断程序在T0产生一次负跳变后,使P1.0产生2ms 的同步负脉冲,可利用定时器1产生2ms定时生成程序如下: ORG 0000HAJMP MAIN ORG 000BH;T0中断入口地址 AJMP LOOP1 ORG 001BH ;T1中断入口地址 AJMP ITIP ORG MAIN MAIN: MOV TMOD, #16H ;T0初始化程序 MOV TL0, #0FFH ;T0初值 MOV TH0, #0FFH SETB TR0 ;启动T04.3 定时器/计数器应用举例 SETB ET0 ;允许T0中断 MOV TL1, #0CH ;T1置初值 MOV TH1, #0FEHSETB P1.0;P1.0初始为高电平 SETB EA ;开中断 HERE: AJMP HERE LOOP1:CPL P1.0 ;T0中断服务程序 SETB TR1 ;启动T1 SETB ET1 ;允许T1中断 RETI ITIP: CPL P1.0 ;P1.0取反CLRET1CLR TR1MOV TL1, #0CH;T1中断服务程序 MOV TH1, #0FEHRETI4.3 定时器/计数器应用举例• 例:方式3应用:设晶振频率为6MHz。
