《第七章 定时器计数器精选文档.ppt》由会员分享,可在线阅读,更多相关《第七章 定时器计数器精选文档.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第七章 定时器计数器本讲稿第一页,共五十页7.4 51内部定时计数器及其应用内部定时计数器及其应用2定时与计数的概念定时与计数的概念定时的主要作用是定时的主要作用是产生各种时标间隔。产生各种时标间隔。软件延时软件延时硬件定时器硬件定时器 计数:计数:记录(外部)事件的数量。记录(外部)事件的数量。例如:例如:温度测量温度测量本讲稿第二页,共五十页定时计数器的定时计数器的实质实质3定时计数器的定时计数器的实质就是计数器,一般都具有定时兼计数的功能,具实质就是计数器,一般都具有定时兼计数的功能,具体是定时还是计数主要看计数对象(即计数脉冲)。若计数脉冲为已知体是定时还是计数主要看计数对象(即计数脉
2、冲)。若计数脉冲为已知固定周期的信号,则计数器就可以看作定时器;若计数脉冲为周期不固固定周期的信号,则计数器就可以看作定时器;若计数脉冲为周期不固定的或未知的信号,则计数器只能看作是计数器。定的或未知的信号,则计数器只能看作是计数器。通过外部通过外部引脚引脚对对外部事件外部事件计数计数通过对通过对机器周期进行计数机器周期进行计数实现实现定时定时MCS-51单片机内部定时计数器单片机内部定时计数器本讲稿第三页,共五十页一、内部定时计数器结构和工作原理4 51单片机内部有两个单片机内部有两个可编程可编程16位位加加1的定时器的定时器/计数计数器,具有器,具有 两种工作模式(两种工作模式(计数器计数
3、器模式、模式、定时器定时器模式)模式)和和四种工作方式四种工作方式(方式方式0、方式、方式1、方式、方式2、方式、方式3),),其控制字均在相应的特殊功能寄存器(其控制字均在相应的特殊功能寄存器(SFR)中,通)中,通过对它的过对它的SFR的编程,可以方便的选择工作模数和的编程,可以方便的选择工作模数和工作方式。工作方式。本讲稿第四页,共五十页1、定时、定时/计数器的结构计数器的结构5定时器定时器/计数器是一个加计数器是一个加1计数器,当计数溢出时产生计数器,当计数溢出时产生 中断申请表示中断申请表示定时到或计数到。定时到或计数到。本讲稿第五页,共五十页每输入一个脉冲,计数器加每输入一个脉冲,
4、计数器加1,当加到计数器各位,当加到计数器各位都为都为1时,时,再输入一个脉冲再输入一个脉冲,计数器各位全变为,计数器各位全变为0,溢出,中断标志置溢出,中断标志置1(SFR中中TCON的的TF0、TF1),),从而向从而向CPU申请中断。由预置计数值就可以算出从申请中断。由预置计数值就可以算出从加加1计数器启动到计满溢出所需的时间,即定时时计数器启动到计满溢出所需的时间,即定时时间。间。8位位256;13位位8192;16位位65536计数原理计数原理本讲稿第六页,共五十页 对外部脉冲计数时,当脉冲有一个对外部脉冲计数时,当脉冲有一个高电平到低高电平到低电平电平“1”“0”跳变时,计数器加跳
5、变时,计数器加1,且在每个,且在每个机器周期的机器周期的S5P2采样外部输入,若前一个机器周采样外部输入,若前一个机器周期采样值为期采样值为1,后一个机器周期采样值为,后一个机器周期采样值为0,则计,则计数器加数器加1。由于识别一个从由于识别一个从1到到0的负跳变信号需要两个机的负跳变信号需要两个机器周期器周期(24个振荡周期),所以最高的计数频率个振荡周期),所以最高的计数频率为系统时钟频率的为系统时钟频率的1/24;两个输入脉冲的最小间;两个输入脉冲的最小间隔应不小于两个机器周期。又因为一个机器周期隔应不小于两个机器周期。又因为一个机器周期对信号采样一次,因此输入信号的电平宽度对信号采样一
6、次,因此输入信号的电平宽度至少至少应持续一个机器周期应持续一个机器周期。本讲稿第七页,共五十页定时原理定时原理输入脉冲不是外部脉冲源,而是一个晶体振荡器输入脉冲不是外部脉冲源,而是一个晶体振荡器的脉冲源。的脉冲源。输入脉冲是由内部振荡器的输出经输入脉冲是由内部振荡器的输出经12分频送来,分频送来,所以定时器可看做对机器周期的计数。所以定时器可看做对机器周期的计数。晶振晶振 12MHz,机器周期,机器周期 1us,定时器每接收一,定时器每接收一个脉冲是个脉冲是1us晶振晶振6MHz,机器周期机器周期 2us,定时器每接收一个,定时器每接收一个脉冲是脉冲是1us加法计数器的初值可以由程序设定,设置
7、的初值不同,计数加法计数器的初值可以由程序设定,设置的初值不同,计数值或定时时间就不同。定时时间不仅与计数初值有关,而且值或定时时间就不同。定时时间不仅与计数初值有关,而且与系统时钟频率有关。与系统时钟频率有关。本讲稿第八页,共五十页对于对于16位计数器,最大定时时间是位计数器,最大定时时间是216个脉冲的时个脉冲的时间。间。则定时时间则定时时间T=(216X)*TT:输入脉冲周期,:输入脉冲周期,T=12/f s(f为晶振频率为晶振频率1.212MHz)如为如为12MHz,则,则T1sX:计数器初值(由程序输入):计数器初值(由程序输入)对于对于12MHz晶体,晶体,T1s,最大定时,最大定
8、时T=65.536ms;对于;对于6MHz晶体,晶体,T2s,最大,最大定时定时T=131ms常使用:常使用:X=216T/T本讲稿第九页,共五十页例:例:系统时钟频率为系统时钟频率为12MHz12MHz,要产生,要产生1ms1ms定时,求初定时,求初值值X X T=12/12=1s T=12/12=1s若为若为1616位计数器位计数器 X=2 X=2161000/1=64536=0FC18H1000/1=64536=0FC18H若为若为1313位计数器位计数器 X=2 X=2131000/1=81921000/1=81921000=7192=1C18H1000=7192=1C18H不能采用不
9、能采用8 8位计数器位计数器本讲稿第十页,共五十页二、T/C的特殊功能寄存器SFR111、16位定时位定时/计数器计数器0:核心的计数单元:核心的计数单元 由两个特殊功能寄存器由两个特殊功能寄存器TH0和和TL0组成组成2、16位定时位定时/计数器计数器1:核心的计数单元:核心的计数单元 由两个特殊功能寄存器由两个特殊功能寄存器TH1和和TL1组成组成3、定时器方式选择寄存器:定时器方式选择寄存器:TMOD4、定时器控制寄存器:定时器控制寄存器:TCON本讲稿第十一页,共五十页T/C的特殊功能寄存器SFR12本讲稿第十二页,共五十页3、定时器方式选择寄存器:定时器方式选择寄存器:TMODM1
10、M0 方式说 明0 0013 位定时器(TH的 8 位和TL的低 5 位)0 1116 位定时器/计数器 1 02自动重装入初值的 8 位计数器 1 13 T0 分成两个独立的 8 位计数器,T1 在方式 3 时停止工作 13地址:地址:89H本讲稿第十三页,共五十页定时器方式选择寄存器:定时器方式选择寄存器:TMOD14GATE 门控位。门控位。GATE=0 启动不受启动不受/INT0或或/INT1的控制;的控制;GATE=1 启动受启动受/INT0 或或/INT1 的控制。的控制。C/T 外部计数器外部计数器/内部定时器方式选择位内部定时器方式选择位 C/T=0 定时方式;定时方式;C/T
11、=1 计数方式计数方式。本讲稿第十四页,共五十页4、定时器控制寄存器:、定时器控制寄存器:TCON15TF1TR1TF0TR0IE1IT1IE0IT0 TCON(88H)外部中断有关外部中断有关1、TF1:定时器定时器/计数器计数器T1溢出溢出中断请求标志位。中断请求标志位。当启动当启动T1计数后,计数后,T1从从初值初值开始开始加加1计数,计数器最高计数,计数器最高位产生位产生溢出溢出时,时,由由硬件硬件使使TF1置置1,并向,并向CPU发出中断发出中断请求。当请求。当CPU响应中断时,响应中断时,硬件硬件将自动对将自动对TF1清清0。2、TF0:定时器定时器/计数器计数器T0溢出中断请求标
12、志位。溢出中断请求标志位。含义与含义与TF1类同。类同。本讲稿第十五页,共五十页定时器控制寄存器:定时器控制寄存器:TCON16TF1TR1TF0TR0IE1IT1IE0IT0 TCON(88H)外部中断有关外部中断有关TR1:T1运行控制位。运行控制位。TR1=1时,时,T1开始工作;开始工作;TR1清清0时,时,T1停止工作。停止工作。TR1由软件置由软件置1或清或清0。所以,用软件可控制定时。所以,用软件可控制定时/计数器的计数器的启动与停止。启动与停止。TR0:T0运行控制位。运行控制位。本讲稿第十六页,共五十页三、三、四种工作方式四种工作方式17除了方式除了方式3,T0和和T1有完全
13、相同的工作方式有完全相同的工作方式。本讲稿第十七页,共五十页1、方式018T/C0方式方式0(13位计数器)位计数器)的逻辑结构图的逻辑结构图低低5位位高高8位位方式方式0为为13位计数位计数,由,由TL0的低的低5位(高位(高3位未用)和位未用)和TH0的的8位组成。位组成。TL0的低的低5位溢出时向位溢出时向TH0进位,进位,TH0溢出时,置位溢出时,置位TCON中的中的TF0标志,向标志,向CPU发出中断请求。发出中断请求。P3.4本讲稿第十八页,共五十页方式019定时计数模式选择定时计数模式选择低低5位位高高8位位启动控制分析启动控制分析GATE:门控位:门控位GATE=0时,定时计数
14、器的启停,时,定时计数器的启停,仅仅仅仅由由TR0控制,控制,只要只要TR0=1就启动就启动。GATE=1时,定时计数器的启停,时,定时计数器的启停,还将还将受到受到INT0引脚的控制。引脚的控制。在在TR0=1的前提下的前提下int0引脚引脚=1计数,计数,=0停止计数。停止计数。TR0=0停止计数。停止计数。本讲稿第十九页,共五十页计数初值问题20初值重装问题初值重装问题:用程序将:用程序将08191的某一数送入的某一数送入TH0、TL0作为初值,作为初值,TH0、TL0从初值开始加法计数,直至溢出。所以初值不同,定时时从初值开始加法计数,直至溢出。所以初值不同,定时时间或计数值不同。必须
15、注意的是:间或计数值不同。必须注意的是:加法计数器加法计数器TH0溢出后,必须用程溢出后,必须用程序重新对序重新对TH0、TL0设置初值,设置初值,否则下一次否则下一次TH0、TL0将从将从0开始计开始计数。数。初值计算问题初值计算问题:加法计数器。:加法计数器。例如:计数例如:计数1000个。个。213-1000=7192=1 1100 0001 1000 BE0送送TH18H送送TLMOV TH0MOV TH0,#0E0H#0E0HMOV TL0MOV TL0,#18H#18H本讲稿第二十页,共五十页此种方式与此种方式与MCSMCS4848系列兼容,如果不是为了兼容系列兼容,如果不是为了兼
16、容的目的,一般不用方式的目的,一般不用方式0.0.方式方式0 0的全部功能,方式的全部功能,方式1 1都可以代替。都可以代替。如果要重复定时或计数,则须重新设置时间常数如果要重复定时或计数,则须重新设置时间常数初值初值注意注意:本讲稿第二十一页,共五十页2、方式122T/C0方式方式1(16位计数器)位计数器)的逻辑结构图的逻辑结构图与与方式方式0 相似,方式相似,方式1时的时的计数长度计数长度是是2的的16次方。次方。16位的位的初值初值直接直接拆成高低字节,分别送入拆成高低字节,分别送入TH和和TL即可。即可。初值的计算公式?初值的计算公式?方式1本讲稿第二十二页,共五十页3、方式2(计数
17、初值自动再装入)(计数初值自动再装入)23 工作方式工作方式0和工作方式和工作方式1的最大特点就是的最大特点就是计数溢出后,计计数溢出后,计数器为全数器为全0,因而循环定时或循环计数应用时就存在因而循环定时或循环计数应用时就存在反复设反复设置初值置初值的问题,这给程序设计带来许多不便,同时也会的问题,这给程序设计带来许多不便,同时也会影影响计时精度响计时精度。工作方式工作方式2就针对这个问题而设置,它具有自动重装载功能,就针对这个问题而设置,它具有自动重装载功能,即即计数初值自动再装入计数初值自动再装入。本讲稿第二十三页,共五十页3、方式224方式方式 2(计数初值自动再装入)结构图(计数初值
18、自动再装入)结构图本讲稿第二十四页,共五十页计数初值自动再装入的计数初值自动再装入的实现实现25 在工作方式在工作方式2中,中,16位位计数器计数器分为两部分,即以分为两部分,即以TL0为计数器为计数器,以,以TH0作为预置寄存器,初始化时把计数初值作为预置寄存器,初始化时把计数初值分别加载至分别加载至TL0和和TH0中,当计数溢出时,不再象方式中,当计数溢出时,不再象方式0和和方式方式1那样需要那样需要“人工干预人工干预”,由软件重新赋值,而是,由软件重新赋值,而是由预置寄存器由预置寄存器TH以硬件方法自动给以硬件方法自动给计数器计数器TL0重新加载。重新加载。本讲稿第二十五页,共五十页与方
19、式与方式0和方式和方式1不同处:不同处:只使用只使用TL0做做8位计数器,最大计数值位计数器,最大计数值255;最大定时时间最大定时时间(晶振晶振12MHz时时):256 s用于需要重复定时和计数的场合。用于需要重复定时和计数的场合。方式方式2用于定时工作方式,定时时间由下式确定:用于定时工作方式,定时时间由下式确定:t=NTcy=(256-X)Tcy计数初值计数初值X:X=256-tTcy本讲稿第二十六页,共五十页4、方式327方式 3(两个 8 位独立计数器)结构图只能定时不能计数。只能定时不能计数。既可以定时也既可以定时也可以计数可以计数本讲稿第二十七页,共五十页方式 3(两个 8 位独
20、立计数器)28(2)TH0占用了占用了T1的控制位的控制位TR1、和中断标志位、和中断标志位TF1,同时占用了,同时占用了T1的中断资源,此时,的中断资源,此时,TH0固定为一个固定为一个8位计数器,位计数器,启动受启动受TR1控控制制,只能定时不能计数。只能定时不能计数。说明:说明:(1)T0在方式在方式3时,时,TL0使用使用T0的控制位的控制位C/T、GATE、TR0、INT0,既可以定时也可以计数。既可以定时也可以计数。(3)T0工作在方式工作在方式3时,时,T1可以工作在方式可以工作在方式0、1、2。(4)T0工作在方式工作在方式3时,占用了时,占用了TR1、TF1;T1只受只受C/
21、T位控制,计位控制,计数满时也没有溢出中断请求,数满时也没有溢出中断请求,只能将输出送到串行口。所以此时只能将输出送到串行口。所以此时T1可可以作串行口波特率发生器,以作串行口波特率发生器,如果需要如果需要T1停止计数,只需设置停止计数,只需设置T1为方为方式式3即可。即可。本讲稿第二十八页,共五十页T0工作在方式工作在方式3时,时,T1工作在方式工作在方式2的逻辑图的逻辑图29本讲稿第二十九页,共五十页四、应用30定时定时/计数器的应用计数器的应用(1)选择定时)选择定时/计数器计数器 T0、T1选择其一,选择其一,(2)定时或外计数选择)定时或外计数选择 C/T及及GATE,(3)工)工
22、作作 方式方式 M1、M0(4)计)计 数数 初初 值值 加加1计数、位数计数、位数(5)计)计 数数 初初 值值 的的再装入再装入1)写)写TMOD;2)确定)确定IE、IP;3)写计数初值;)写计数初值;4)启动计数()启动计数(TRi)编制初始化程序:编制初始化程序:本讲稿第三十页,共五十页中断相关寄存器31中断允许控制寄存器中断允许控制寄存器IEEA-ESET1EX1ET0EX0 IE(A8H)AFH AEH ADH ACH ABH AAH A9H A8H51单片机有单片机有两个两个中断优先级。中断优先级。高高优先级或优先级或低低优先级中断。优先级中断。中断优先级寄存器中断优先级寄存器
23、IPPSPT1PX1PT0PX0 IP(B8H)BCH BBH BAH B9H B8H本讲稿第三十一页,共五十页设计一个能产生设计一个能产生t=1ms的周期信号发生器,试编程的周期信号发生器,试编程.32解:解:选选T0方式方式0;C/T=0,GATE=0;12MHz时钟,时钟,T=1usN=0.5ms/T=0.5ms/1us=500初值初值=213-500=8192-500=7692=1E0CH=0001 1110 000 0 1100B,1E0CH01100TL011110000TH0F0H0CH本讲稿第三十二页,共五十页33 LJMP MAIN ORG 000BH LJMP Tim0 O
24、RG 1000H MAIN:MOV SP,#60H MOV TL0,#0CH MOV TH0,#0F0H MOV TMOD,#00H SETB TR0 SETB ET0 SETB EA SJMP ORG 0000H Tim0:MOV TL0,#0CH MOV TH0,#0F0H CPL P1.0 RETI 设计一个能产生设计一个能产生t=1ms的周期信号发生器,试编程的周期信号发生器,试编程.200ms的方波?的方波?本讲稿第三十三页,共五十页34 LJMP MAIN ORG 000BH LJMP INSE0 ORG 1000H MAIN:MOV SP,#60H MOV TL0,#0CH MO
25、V TH0,#0F0H MOV TMOD,#00H SETB TR0 SETB ET0 SETB EA SJMP MOV R2,#200MOV R2,#200 ORG 0000H INSE0:DJNZ R2,Next CPL P1.0 MOV R2,#200Next:MOV TL0,#0CH MOV TH0,#0F0H RETI 设计一个能产生设计一个能产生t=200ms的周期信号发生器,试编程的周期信号发生器,试编程.200ms的方波的方波:软件计数软件计数本讲稿第三十四页,共五十页 当实际应用系统中应用系统的当实际应用系统中应用系统的2个外部中断源已被个外部中断源已被占用,现要求占用,现要
26、求增加增加1个外部中断源个外部中断源,而片内定时器,而片内定时器/计数器没有使用时,可利用定时器计数器没有使用时,可利用定时器/计数器扩展外计数器扩展外部中断源,部中断源,方法如下:方法如下:将定时器将定时器/计数器设置为计计数器设置为计数模式,计数初值设定为满值,将待扩展的外部数模式,计数初值设定为满值,将待扩展的外部中断源接到定时器中断源接到定时器/计数器。当从该引脚输入一个计数器。当从该引脚输入一个下降沿信号,计数器加下降沿信号,计数器加1后产生定时器后产生定时器/计数器溢计数器溢出中断。因此定时器出中断。因此定时器/计数器可作为扩展中断源的计数器可作为扩展中断源的中断输入端。中断输入端
27、。本讲稿第三十五页,共五十页例:例:利用定时器利用定时器/计数器计数器T0扩展一个外部中断源,扩展一个外部中断源,T0设置为方式设置为方式2(自动重装初值方式)外部计数工作(自动重装初值方式)外部计数工作模式,模式,TH0、TH1初值均为初值均为0FFH,初始化程序如下:,初始化程序如下:INIT_T0:MOV TMOD,#06H;T0计数方式计数方式2 MOV TH0,#0FFH;MOV TH0,#0FFH;SETB ET0;T0开中断;开中断;SETB EA;开总中断开总中断 SETB TR0;启动计数器启动计数器T0本讲稿第三十六页,共五十页#includesbitpulse_out=P
28、10;unsignedcharflag;/*定义T0产生中断标志位*/*定时器初始化程序*/init_timer()TMOD=0X25;/*T0计数,方式1;/*T1定时,方式2*/TH0=0XFF;/*T0置初值*/TL0=0XFF;TH1=0X06;/*T1置初值*/TL1=0X06;IE=0X8A;/*开中断*/TR0=1;/*启动T0*/例例 假设某假设某80C51应用系统的应用系统的2个外部中断源已被占用,现要求增加个外部中断源已被占用,现要求增加1个外部中断源,并控制个外部中断源,并控制P1.0引脚输出引脚输出1个周期为个周期为1ms的方波。假设的方波。假设晶振频率为晶振频率为6M
29、Hz。X=256-t/T=256(500)/2=0X06HIEEAESET1EX1ET0EX0本讲稿第三十七页,共五十页/*T0中断服务程序中断服务程序*/void t0_int()interrupt 1TR0=0;/*T0停止工作停止工作*/flag=1;/*置置1中断产生标志位中断产生标志位*/*T1中断服务程序中断服务程序*/void t1_int()interrupt 3pulse_out=!pulse_out;/*脉冲输出位取反脉冲输出位取反*/main()/*主程序主程序*/init_timer();/*调用定时器初始化程序调用定时器初始化程序*/flag=0;/*T0产生中断标志
30、位清产生中断标志位清0*/while(!flag);/*等待等待T0产生中断产生中断*/TR1=1;/*T0中断后,启动中断后,启动T1*/while(1);/*等待等待T1中断中断*/本讲稿第三十八页,共五十页方式方式1的应用的应用例:例:利用定时利用定时/计数器(计数器(T0)的方式)的方式1,产生一个,产生一个50Hz的方的方波,此方波由波,此方波由P1.0引脚输出,假设晶振频率为引脚输出,假设晶振频率为12MHz。1)确定定时器初值确定定时器初值X:由于晶振为由于晶振为12MHz,所以一个机器周期,所以一个机器周期Tcy=(121)/(12106)=1s。计数初值。计数初值X=216-
31、tTcy=65536-0.01s1s=65536-10000=55536=D8F0H即应将即应将D8H送入送入TH0中,中,F0H送入送入TL0中。中。2)根据要求求得根据要求求得T0的方式控制字的方式控制字TMOD:GATE=0,C/T=0,M1M0=01,可得方式控制字,可得方式控制字TMOD=01H,即,即T0的方式的方式1。本讲稿第三十九页,共五十页查询方式:查询方式:#includesbit pulse_out=P10;/*定义脉冲输出位定义脉冲输出位*/main()TMOD=0 x01;/*T0定时方式定时方式1*/TH0=0 xD8;/*装入计数初值装入计数初值*/TL0=0 x
32、F0;TR0=1;/*启动定时器启动定时器T0*/while(1)if(TF0)/*查询查询TF0,等待定时时间到等待定时时间到*/TF0=0;/*定时时间到,清定时时间到,清TF0*/TH0=0 xD8;/*重装计数初值重装计数初值*/TL0=0 xF0;pulse_out=!pulse_out;/*脉冲输出位取反脉冲输出位取反*/本讲稿第四十页,共五十页中断方式:中断方式:#includesbitpulse_out=P10;/*定义脉冲输出位定义脉冲输出位*/*中断服务程序中断服务程序*/voidT0_int()interrupt 1TH0=0 xD8;/*重装计数初值重装计数初值*/TL
33、0=0 xF0;pulse_out=!pulse_out;/*脉冲输出位取反脉冲输出位取反*/*主程序主程序*/main()TMOD=0 x01;/*T0定时方式定时方式1*/TH0=0 xD8;/*装入计数初值装入计数初值*/TL0=0 xF0;ET0=1;/*T0开中断开中断*/EA=1;/*开总中断开总中断*/TR0=1;/*启动定时器启动定时器T0*/while(1);/*等待中断等待中断*/本讲稿第四十一页,共五十页例:例:假设系统时钟为假设系统时钟为6MHz,编写定时器,编写定时器T0定时定时1s的程序。的程序。分析:分析:MAX=131.072ms 1s=100ms*10;X=6
34、5536-100/2=3CBOH#include/*定时器定时器T0中断服务程序中断服务程序*/void T0_int()interrupt 1static unsigned charcount;/*声明静态变量声明静态变量count*/count+;/*累计中断次数累计中断次数*/TH0=0 x3C;/*重装计数初值重装计数初值*/TL0=0 xB0;if(count=10)TR0=0;/*1s到,停止到,停止T0工作工作*/*主程序主程序*/main()TMOD=0 x01;/*T0定时方式定时方式1*/TH0=0 x3C;/*装入计数初值装入计数初值*/TL0=0 xB0;ET0=1;/
35、*T0开中断开中断*/EA=1;/*开总中断开总中断*/TR0=1;/*启动定时器启动定时器T0*/while(1);/*等待中断等待中断*/本讲稿第四十二页,共五十页方式方式2例例:利用定时利用定时/计数器计数器T1的方式的方式2对外部信号计数。要求每计对外部信号计数。要求每计满满200个数,将个数,将P1.0引脚信号取反。引脚信号取反。#includesbitpulse_out=P10;/*定义脉冲输出位定义脉冲输出位*/void t1_int()interrupt 3pulse_out=!pulse_out;/*取反脉冲输出位取反脉冲输出位*/main()TMOD=0 x60;/*T1计
36、数方式计数方式2*/TH1=0 x38;/*装入计数初值装入计数初值*/TL1=0 x38;256-200=56=0 x38ET1=1;/*T1开中断开中断*/EA=1;/*开总中断开总中断*/TR1=1;/*启动定时器启动定时器T1*/while(1);/*等待中断等待中断*/本讲稿第四十三页,共五十页方式方式3例:例:定时定时/计数器计数器T1作波特率发生器用,增加作波特率发生器用,增加1个外部中断个外部中断源,并用它来控制源,并用它来控制P1.0引脚输出引脚输出1个个5KHz的方波。假设晶振频的方波。假设晶振频率为率为6MHz。#includesbit pulse_out=P10;/*定
37、义脉冲输出位定义脉冲输出位*/*定时器初始化程序定时器初始化程序*/init_timer()TMOD=0X27;/*设置定时器工作方式设置定时器工作方式*/TL0=0XFF;/*装入初值装入初值*/TH0=0XCE;TL1=0Xxx;/*根据波特率设置初值根据波特率设置初值*/TH1=0Xxx;IE=0X9A;/*允许中断允许中断*/TR0=1;/*启动启动TL0*/本讲稿第四十四页,共五十页/*TL0中断服务程序中断服务程序*/void tl0_int()interrupt 1 TR1=1;/*启动启动TH0*/TL0=0XFF;/*重装初值重装初值*/*TH0中断服务程序中断服务程序*/v
38、oid th0_int()interrupt 3TH0=0XCE;/*重装初值重装初值*/pulse_out=!pulse_out;/*脉冲输出位取反脉冲输出位取反*/*主程序主程序*/main()init_timer();/*调用定时器初始化程序调用定时器初始化程序*/while(1);/*等待中断等待中断*/本讲稿第四十五页,共五十页例:例:门控位门控位GATE的应用的应用测量测量 INTX引脚脉冲宽度引脚脉冲宽度 当当GATE0=1且且TR0=1时,只有时,只有INT0引脚输入高电平时,引脚输入高电平时,T1才被才被允许工作。利用这个特性,可测量从允许工作。利用这个特性,可测量从INT0
39、引脚(引脚(P3.2)上输入的正)上输入的正脉冲的宽度,其方法如图所示。脉冲的宽度,其方法如图所示。(P3.2P3.2)09HTMOD1GATE0 1TR0T0从从0开始计数开始计数测量脉冲宽度测量脉冲宽度0TR0停止计数停止计数图图6-236-23利用利用GATEGATE位测量正脉冲宽度位测量正脉冲宽度本讲稿第四十六页,共五十页ORG0000HLJMP MAINORG0100HMAIN:MOVSP,#60HMOVTMOD,#09H;设置定时器工作方式设置定时器工作方式MOVTL0,#00HMOVTH0,#00HJBP3.2,$;等待等待P3.2变低变低SETB TR0;P3.2变低后,启动变
40、低后,启动T0JNBP3.2,$;等待等待P3.2变高变高JBP3.2,$;等待等待P3.2变低变低CLRTR1;停止停止T0计数计数MOVR7,TL0;缓存计数值缓存计数值MOVR6,TH0END本讲稿第四十七页,共五十页例例7.1:用用定定时时/计计数数器器模模拟拟生生产产线线产产品品计计件件,以以按按键键模模拟拟产产品品检检测测,按按一一次次键键相相当当于于产产品品计计数数一一次次。检检测测到到的的产产品品数数送送P1口口显显示示,采采用用单单只只数数码码管管显显示示,计计满满16次次后后从从头头开开始始,依依次次循循环环。系系统统采采用用12 MHz晶振。晶振。本讲稿第四十八页,共五十
41、页源程序:源程序:ORG1000H MOVTMOD,#60H ;T1工作在方式工作在方式2 MOVTH1,#0F0H ;T1置初值置初值 MOVTL1,#0F0H SETBTR1 ;启动定时器;启动定时器1MAIN:MOVA,#00H ;计数显示初始化;计数显示初始化 MOVP1,#0C0H ;数码管显示;数码管显示0DISP:JBP3.3,DISP;监测按键信号;监测按键信号 ACALL DELAY;消抖延时;消抖延时 JB P3.3,DISP;确认低电平信号;确认低电平信号 DISP1:JNB P3.3,DISP1;监测按键信号;监测按键信号 ACALL DELAY;消抖延时;消抖延时JN
42、B P3.3,DISP1;确认高电平信号;确认高电平信号CLRP3.5 ;T0引脚产生负跳变引脚产生负跳变NOP NOP本讲稿第四十九页,共五十页 SETBP3.5 ;T0引脚恢复高电平引脚恢复高电平 INCA ;累加器加;累加器加1MOVR1,A ;保存累加器计数值;保存累加器计数值 ADDA,#08H ;变址调整;变址调整 MOVC A,A+PC ;查表获取数码管显示值;查表获取数码管显示值 MOVP1,A ;数码管显示查表值;数码管显示查表值 MOVA,R1 ;恢复累加器计数值;恢复累加器计数值 JBC TF1,MAIN ;查询定时器;查询定时器1计数溢出计数溢出 SJM P DISP ;16次不到继续计数次不到继续计数 TAB:DB 0C0H,0F9H,0A4H ;0,1,2DB 0B0H,99H,92H;3,4,5DB 82H,0F8H,80H;6,7,8DB 90H,88H,83H,;9,A,BDB 0C6H,0A1H,86H;C,D,EDB 8EH;F DEALY:MOV R2,#14H;10 ms延时延时 DELAY1:MOV R3,#0FAH DJNZ R3,$DJNZ R2,DEALY1 RET END本讲稿第五十页,共五十页