最新单片机的定时器计数器精品课件.ppt
单片机的定时器计数器单片机的定时器计数器7.1 定时器定时器/计数器概述计数器概述 实现定时功能,主要采用下面三种方法:实现定时功能,主要采用下面三种方法:软件定时:软件定时:软件定时不占用硬件资源,但占用了软件定时不占用硬件资源,但占用了CPUCPU时间,时间,降低了降低了CPUCPU的利用率的利用率。采用硬件定时:采用硬件定时:完全由硬件实现,不占完全由硬件实现,不占CPUCPU,但,但定定时值与定时范围不能由软件进行控制和修改时值与定时范围不能由软件进行控制和修改,即不,即不可编程。可编程。采用可编程芯片定时:采用可编程芯片定时:通过对系统时钟脉冲的计通过对系统时钟脉冲的计数实现,计数值通过程序设定,此种数实现,计数值通过程序设定,此种定时功能强,定时功能强,使用灵活使用灵活。GATE0时时,只要用软件使,只要用软件使TCON中的中的TR0或或TR1置置1启动定启动定时时/计数器工作;计数器工作;GATE1时时,外部中断请求信号启动定时器外部中断请求信号启动定时器。 0为定时模式为定时模式; =1为计数模式为计数模式。C/TC/TC/T 二、控制寄存器二、控制寄存器TCON TCON的低的低4位用于控制外部中断位用于控制外部中断,已在前面介绍。已在前面介绍。TCON的的高高4位用于控制定时位用于控制定时/计数器的启动和中断申请。其格式如下:计数器的启动和中断申请。其格式如下:TF1(TCON.7):):T1溢出中断请求标志位。溢出中断请求标志位。T1计数溢出计数溢出时由硬件自动置时由硬件自动置TF1为为1。CPU响应中断后响应中断后TF1由硬件自动由硬件自动清清0。可以用软件置可以用软件置1或清或清0,同硬件置,同硬件置1或清或清0的效果一样。的效果一样。TR1(TCON.6):):T1运行控制位。运行控制位。TR1置置1时,时,T1开始开始工作;工作;TR1置置0时,时,T1停止工作停止工作。TR1由由软件置软件置1或清或清0。TF0(TCON.5):):T0溢出中断请求标志位,其功能与溢出中断请求标志位,其功能与TF1类同。类同。TR0(TCON.4):):T0运行控制位,其功能与运行控制位,其功能与TR1类同。类同。 7.3 定时定时/计数器的工作方式计数器的工作方式 一、方式一、方式0 方式方式0为为13位计数位计数,由由TL0的低的低5位(高位(高3位未用)和位未用)和TH0的的8位组成位组成。TL0的低的低5位溢出时向位溢出时向TH0进位,进位,TH0溢出时,溢出时,置位置位TCON中的中的TF0标志,向标志,向CPU发出中断请求。发出中断请求。u门控位门控位GATE具有特殊的作用:具有特殊的作用:当当GATE=0时,时,此时仅由此时仅由TR0控制与门的开启,与控制与门的开启,与门输出门输出1时,控制开关接通,计数开始;时,控制开关接通,计数开始;当当GATE=1时,时,由外中断引脚信号控制或门的输出,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚信号和此时控制与门的开启由外中断引脚信号和TR0共同共同控制。控制。此时当此时当TR0=1时时,外中断引脚信号引脚的高电平启,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。动计数,外中断引脚信号引脚的低电平停止计数。这种方式这种方式常用来测量外中断引脚上正脉冲的宽度。常用来测量外中断引脚上正脉冲的宽度。 p定时和计数应用定时和计数应用l在方式在方式0 0下输入脉冲的计数值范围是:下输入脉冲的计数值范围是:0-81920-8192(213)l定时器模式时定时器模式时:定时时间定时时间T为为(213-计数初值计数初值) 机器周期机器周期:最小定时单位最小定时单位为一个机器周期,为一个机器周期,最大定时单最大定时单位位为为213 机器周期机器周期思考思考:已知一单片机晶体振荡器为:已知一单片机晶体振荡器为6MHz,则最大和,则最大和最小定时单位为多少?最小定时单位为多少? 定时时间定时时间T为为(213-计数初值计数初值) 机器周期机器周期而计数值而计数值NT/ Tcy (Tcy即机器周期即机器周期)所以计数初值计算的公式为:所以计数初值计算的公式为: X=213-N=8192-N定时定时/计数器应用举例计数器应用举例初始化程序应完成如下工作:初始化程序应完成如下工作:对对TMOD赋值,以确定赋值,以确定T0和和T1的工作方式;的工作方式;计算初值计算初值,并将其写入并将其写入TH0、TL0或或TH1、TL1;中断方式时,则对中断方式时,则对IE赋值,开放中断;赋值,开放中断;使使TR0或或TR1置位,启动定时置位,启动定时/计数器定时或计数。计数器定时或计数。例例7-1 应用定时器应用定时器T0产生产生1ms定时(方式定时(方式0),并使并使P1.0输出周期为输出周期为2ms的的方波方波,已知晶振频率为已知晶振频率为6MHz.请设计程序请设计程序解: 1、当为定时方式时(、当为定时方式时( C/T=0 ),),T0对机对机器周期进行计数,其定时时间为:器周期进行计数,其定时时间为: T=(213-X) 机器周期机器周期则:计数值则:计数值 N=T/机器周期机器周期= 213-X所以所以 X= 213-N= 8192-N= 8192-T/机器周期机器周期 =8192-110-3/210-6=7692 X对应的二进制数为对应的二进制数为 11110000 01100 TH0 8位位TL0低五位低五位TH0=0F0HTL0=0CH2、对、对TMOD附值附值GATE=0,C/T=0(定时)(定时)M1M0=00(方式(方式0) TMOD=00H ORG 2000H MOV TMOD, #00H ;写入方式控制字写入方式控制字 MOV TL0, #0CH ;计数初值写入计数初值写入 MOV TH0, #0F0H SETB TR0 ;启动启动T0LOOP: JBC TF0, PE ; TF0=1溢出跳转溢出跳转 AJMP LOOP ;PE: MOV TL0, #0CH ; MOV TH0, #0F0H CPL P1.0 ;思考?思考? AJMP LOOP END 16X=2 -N二、方式二、方式1 方式方式1的计数位数是的计数位数是16位位,由,由TL0作为低作为低8位、位、TH0作为高作为高8位,组成了位,组成了16位加位加1计数器计数器 。计数个数与计数初值的关系为:计数个数与计数初值的关系为: 例例 利用定时利用定时/计数器计数器T0的的方式方式1,产生,产生10ms的的定时定时,并使并使P1.0引脚上输出周期为引脚上输出周期为20ms的方波,采用中断的方波,采用中断方式,设系统时钟频率为方式,设系统时钟频率为12 MHz。分析:分析:1、当为定时方式时(、当为定时方式时( C/T=0 ),),T0对机器对机器周期进行计数,其定时时间为:周期进行计数,其定时时间为: T=(216-X) 机器周期机器周期则:计数值则:计数值N=T/机器周期机器周期= 213-X所以所以 X= 216-N= 65536-N 2、采用方式、采用方式1 时,时, M1M0=01解:解:1、计算计数初值、计算计数初值X:由于晶振为由于晶振为12 MHz,所以机器周期,所以机器周期Tcy为为1 s。所以:所以:NT/ Tcy 1010-3/110-610000X655361000055536D8F0H即应将即应将D8H送入送入TH0中,中,F0H送入送入TL0中中 2、求、求T0的方式控制字的方式控制字TMOD: M1M0=01,GATE=0,C/T=0,可取方式控,可取方式控制字为制字为01H; ORG 0000H LJMP MAIN ;跳转到主程序;跳转到主程序 ORG 000BH ;T0的中断入口地址的中断入口地址 LJMP DVT0 ;转向中断服务程序;转向中断服务程序 ORG 0100H MAIN:MOV TMOD,#01H ;置;置T0工作于方式工作于方式1 MOV TH0,#0D8H ;装入计数初值;装入计数初值 MOV TL0,#0F0H SETB ET0 ;T0开中断开中断 SETB EA ;CPU开中断开中断 SETB TR0 ;启动;启动T0 SJMP $ ;等待中断;等待中断 DVT0:CPL P1.0 ;P1.0取反输出取反输出 MOV TH0,#0D8H ;重新装入计数值;重新装入计数值 MOV TL0,#0F0H RETI ;中断返回;中断返回 END 8X=2 -N三、方式三、方式2 方式方式2为为自动重装初值自动重装初值的的8位计数方式位计数方式。 工作方式工作方式2特别适合于用作较精确的脉冲信号发生器。特别适合于用作较精确的脉冲信号发生器。 计数个数与计数初值的关系为计数个数与计数初值的关系为: 四、方式四、方式3 方式方式3只适用于定时只适用于定时/计数器计数器T0,定时器,定时器T1处于方式处于方式3时相当时相当于于TR1=0,停止计数。,停止计数。 工作方式工作方式3将将T0分成为两个独立的分成为两个独立的8位计数器位计数器TL0和和TH0 。 v方式方式0、方式、方式1的应用的应用例:选择例:选择T1方式方式0用于定时,在用于定时,在P1.1输出周期为输出周期为1ms的的方波方波,晶振,晶振fosc=6MHZ。 分析:分析:1、根据题意,只要使、根据题意,只要使P1.1每隔每隔500s取反一次即可取反一次即可得到得到1ms方波,因而方波,因而T1的定时时间为的定时时间为 500s2、将、将T1设为定时方式设为定时方式0:GATE=0,C/T=0,M1M0=00;T0不不用可为任意,只要不使其进入方式用可为任意,只要不使其进入方式3,一般取,一般取0即可即可。故。故TMOD=00H。系统复位后系统复位后TMOD为为0,所以不必对,所以不必对TMOD置初值置初值。3、计算、计算500s定时定时T1的初值:的初值:机器周期机器周期 Tcy=12/fosc=12/6106=2s设初值为设初值为X则:则: (213X)2106 s =500106 s X=7942D=1111100000110B=1F06H因为在作因为在作13位计数器用时,位计数器用时,TL1高高3位未用,应写位未用,应写X的低的低5位装位装入入TL1的低的低5位,所以位,所以TL1=06H;X的高的高8位应装入位应装入TH1,所以所以TH1=F8H。源程序如下:源程序如下: MOV TL1 , #06H;给;给TL1置初值置初值 MOV TH1,#F8H;给;给TH1置初值置初值 SETB TR1;启动;启动T1LP1:JBCTF1,LP2;查询计数溢出否;查询计数溢出否 AJMP LP1 LP2:MOV TL1,06H;重装初值;重装初值 MOV TH1,F8H CPLP1。1;输出取反;输出取反 AJMP LP1;重复循环;重复循环v方式方式2的应用的应用例例: 用定时器用定时器1方式方式2计数,要求每计满计数,要求每计满100次,将次,将P1.0取反。取反。根据题意,外部计数信号由根据题意,外部计数信号由T1(P3.5)引脚输入引脚输入,每跳变一次计数器加,每跳变一次计数器加1,由程序查询,由程序查询TF1。方式方式2有自动重装初值的功能,初始化后不必再置初值。有自动重装初值的功能,初始化后不必再置初值。初值初值 X=28100=156D=9CH TH1=TL1=9CH TMOD=60H源程序如下:源程序如下: MOV TMOD,#60H;设置;设置T1为方式为方式2 MOV TL1,#9CH;置初值;置初值 MOV TH1,#9CH SETB TR1;启动;启动T1DEL: JBCTF1,REP;查询计数溢出;查询计数溢出 AJMP DEL REP:CPLP1。0;输出取反;输出取反 AJMP DEL v门控位的应用门控位的应用图图 外部正脉冲宽度测量外部正脉冲宽度测量例:利用例:利用T0门控位测试门控位测试INT0引脚上出现的正脉冲的宽度,引脚上出现的正脉冲的宽度,并以机器周期数的形式显示在显示器上。并以机器周期数的形式显示在显示器上。根据要求可这样设计程序:将根据要求可这样设计程序:将T0设定为方式设定为方式1,GATE设为设为1,置置TR0为为1。一旦。一旦INT0(P3。2)引脚上出现高电平即开始计数,引脚上出现高电平即开始计数,直至出现低电平,停止计数,然后读取直至出现低电平,停止计数,然后读取T0的计数值并显示。的计数值并显示。 测试过程如下:测试过程如下:INTINT0 0( (P P3.23.2) )0909H(TMOD)H(TMOD)11TRTR0 0T T0 0从从0 0开始计数开始计数00TRTR0 0停止停止T T0 0计数计数读出读出T T0 0值值BEGIN: MOVTMOD,# 09H;T0工作于方式工作于方式1,GATE置置1 MOVTL0,#00H MOVTH0;#00H WAIT1: JBP3。2,WAIT1;等待;等待INT0变低变低 SETBTR0;启动;启动T0WAIT2: JNBP3。2,WAIT2;等待正脉冲到;等待正脉冲到WAIT3: JBP3。2,WAIT3;等待;等待INT0变低变低 CLRTR0;停止;停止T0计数计数 MOVR0,#DISBUF;显示缓冲区首地址送;显示缓冲区首地址送R0 MOVA,TL0;机器周期的存放格式为低;机器周期的存放格式为低位占低地址,高位占高地址,位占低地址,高位占高地址,连续连续4个显示缓冲单元个显示缓冲单元 XCHDA,R0 INCR0 SWAPA XCHDA,R0 源程序如下:源程序如下: INCR0 MOVA,TH0 XCHDA,R0 INCR0 SWAPA XCHDA,R0DIS:LCALLDISUP;长调用显示子程序;长调用显示子程序 AJMPDIS;重复显示机器周期数;重复显示机器周期数由于定时方式由于定时方式1的的16位计数长度有限,被测脉冲高电平位计数长度有限,被测脉冲高电平宽度只能小于宽度只能小于65536个机器周期。个机器周期。7.3 定时定时/计数器及中断系统综合应用计数器及中断系统综合应用例例 设设MCS-51单片机系统时钟频率单片机系统时钟频率CLK为为6MHZ,请编出利用定时请编出利用定时/计数器计数器T0在在P1.0引脚上产生周期为引脚上产生周期为2秒,占空比为秒,占空比为50%的方波信号的程序的方波信号的程序(1)主程序)主程序任务:任务:1)T0工作方式的设定:工作方式的设定: 选择方式选择方式1(16位方式,最大定时位方式,最大定时131ms) 2)定时常数的设定定时常数的设定(定时定时0.1s): TC=216-100ms/2s =15536=3CB0H 即:即:TH0应装应装3CH,TL0应装应装B0H。3)中断管理:中断管理: 允许允许T0中断,开放总中断中断,开放总中断 即:即:IE应装应装10000010B。4)启动定时器启动定时器T0: SETBTR05)设置软件计数器初值:设置软件计数器初值:(如使用(如使用R7)即即R7应装应装0AH6)动态停机:动态停机: SJMP$主程序如下:主程序如下:MAIN:MOV TMOD,#01H ;设定设定T0为方式为方式1 MOV TH0,#3CH ;装入定时常数高装入定时常数高8位位 MOV TL0,#0B0H ;装入定时常数低装入定时常数低8位位 MOV IE,#82H ;开放开放T0中断中断 SETB TR0 ;启动启动T0 MOV R7,#0AH ;设置软件计数器设置软件计数器 SJMP $(2)中断服务程序)中断服务程序任务:任务:1)恢复)恢复T0常数;常数; 2)软件计数器减)软件计数器减1; 3)判断软件计数器是否为)判断软件计数器是否为0。为。为0时,改变时,改变P1.0状态,并恢复软件计数器初值;不为状态,并恢复软件计数器初值;不为0时中断时中断返回。返回。程序如下:程序如下:TOINT: MOV TL0,#0B0H ;恢复定时常数恢复定时常数MOV TH0,#3CH ;DJNZ R7,NEXTCPLP1.0 MOV R7,#0AHNEXT:RETI完整程序如下:完整程序如下:ORG 0000H AJMP MAINORG 000BH AJMP TOINTORG 0030HMAIN: MOV TMOD,#01HMOV TH0,#3CH MOV TL0,#0B0HMOV IE,#82H SETB TR0MOV R7,#0AHSJMP$TOINT: MOVTL0,#0B0HMOVTH0,#3CHDJNZR7, NEXTCPL P1.0MOVR7, #0AHNEXT: RETIEND思考题及习题思考题及习题1、80C51有几个中断源?各中断标志是如何产生的?又是如有几个中断源?各中断标志是如何产生的?又是如何复位的?何复位的?CPU响应各中断时,其中断入口地址是多少?响应各中断时,其中断入口地址是多少?2、某系统有三个外部中断源、某系统有三个外部中断源1、2、3,当某一中断源变低电,当某一中断源变低电平时便要求平时便要求CPU处理,它们的优先处理次序由高到低为处理,它们的优先处理次序由高到低为3、2、1,处理程序的入口地址分别为,处理程序的入口地址分别为2000H、2100H、2200H。试编。试编写主程序及中断服务程序(转至相应的入口即可)。写主程序及中断服务程序(转至相应的入口即可)。3、外部中断源有电平触发和边沿触发两种触发方式,这两种、外部中断源有电平触发和边沿触发两种触发方式,这两种触发方式所产生的中断过程有何不同?怎样设定?触发方式所产生的中断过程有何不同?怎样设定?4、定时、定时/计数器工作于定时和计数方式时有何异同点?计数器工作于定时和计数方式时有何异同点?5、定时、定时/计数器的计数器的4种工作方式各有何特点?种工作方式各有何特点?6、要求定时、要求定时/计数器的运行控制完全由计数器的运行控制完全由TR1、TR0确定和完全确定和完全由、高低电平控制时,其初始化编程应作何处理?由、高低电平控制时,其初始化编程应作何处理?7、当定时、当定时/计数器计数器T0用作方式用作方式3时,定时时,定时/计数器计数器T1可以工作可以工作在何种方式下?如何控制在何种方式下?如何控制T1的开启和关闭?的开启和关闭?8、利用定时、利用定时/计数器计数器T0从从P1.0输出周期为输出周期为1s,脉宽为,脉宽为20ms的的正脉冲信号,晶振频率为正脉冲信号,晶振频率为12MHz。试设计程序。试设计程序。9、要求从、要求从P1.1引脚输出引脚输出1000Hz方波,晶振频率为方波,晶振频率为12MHz。试设计程序。试设计程序。10、试用定时、试用定时/计数器计数器T1对外部事件计数。要求每计数对外部事件计数。要求每计数100,就将就将T1改成定时方式,控制改成定时方式,控制P1.7输出一个脉宽为输出一个脉宽为10ms的正脉的正脉冲,然后又转为计数方式,如此反复循环。设晶振频率为冲,然后又转为计数方式,如此反复循环。设晶振频率为12MHz。11、利用定时、利用定时/计数器计数器T0产生定时时钟产生定时时钟,由由P1口控制口控制8个指示灯。个指示灯。编一个程序编一个程序,使使8个指示灯依次一个一个闪动,闪动频率为个指示灯依次一个一个闪动,闪动频率为20次次/秒秒(8个灯依次亮一遍为一个周期个灯依次亮一遍为一个周期)。12、若晶振频率为、若晶振频率为12MHz,如何用,如何用T0来测量来测量201s之间的方之间的方波周期?又如何测量频率为波周期?又如何测量频率为0.5MHz左右的脉冲频率?左右的脉冲频率? Keil uVision2是目前使用广泛的单片机开发软件,它集成是目前使用广泛的单片机开发软件,它集成了源程序编辑和程序调试于一体,支持汇编、了源程序编辑和程序调试于一体,支持汇编、C、PL/M语语言。言。 点击桌面快捷图标,可以直接进入主界面:点击桌面快捷图标,可以直接进入主界面:Keil uVision2 的使用的使用在在Keil系统中,每做个独立的程序,都视为项目(或者叫工系统中,每做个独立的程序,都视为项目(或者叫工程)。首先从菜单的程)。首先从菜单的“项目项目”中中“新项目新项目.”,建立我们将要,建立我们将要做的工程项目:做的工程项目: 输入新建的项目名,可以是中文名;此处名字为输入新建的项目名,可以是中文名;此处名字为 test ,选定要保存到的文件夹。选定要保存到的文件夹。为项目选定一个目标设备为项目选定一个目标设备(如如ATMEL89C51)创建源程序文件创建源程序文件(“文件文件”/“新建新建”),并输入程序,并输入程序代码代码“文件文件”/“保存保存”,扩展名必须,扩展名必须是是.ASM保存了保存了ASM文件后,将其添加到工程中。文件后,将其添加到工程中。鼠标右键点击鼠标右键点击 “源代码组源代码组 1”,在弹出的,在弹出的菜单中选菜单中选“增加文件到组增加文件到组 源代码组源代码组 1”向工程添加了源文件后,鼠标右键点击向工程添加了源文件后,鼠标右键点击 “目标目标 1” ,在弹出的菜单中选,在弹出的菜单中选“为目标为目标目标目标1设置设置选项选项” 在相应选项卡进行在相应选项卡进行设置,如设置,如“调试调试”选项卡,可设置软选项卡,可设置软件件/硬件仿真方式。硬件仿真方式。硬件方式还需设置硬件方式还需设置串口和波特率串口和波特率(一般一般为为9600)“项目项目”/“重建所有目标文件重建所有目标文件”,进行汇编、连接,进行汇编、连接,生成目标代码。也可使用工具栏上的按钮。在输出生成目标代码。也可使用工具栏上的按钮。在输出窗口中无错误则成功窗口中无错误则成功! “步进步进” 运行方运行方式式选中选中“Port 0”进行模拟进行模拟“调试调试”由于我们的程序是让由于我们的程序是让 P0 口口8个脚隔一个输出个脚隔一个输出0,隔一个输,隔一个输出出1,在,在P0窗中就可以看到我们原先设想的效果。窗中就可以看到我们原先设想的效果。 提示:提示:“视图视图”菜单可定制调试窗口。菜单可定制调试窗口。“调试调试”菜单里的各项命令由大家自学领会。菜单里的各项命令由大家自学领会。