您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机原理及应用_第5章_定时器
5.3定时/计数器的结构及工作原理生活中计数的例子处处可见。例:家里面用的电度表、汽车上的里程表等等。再举一个工业生产中的例子,线缆行业在电线生产出来之后要计米,也就是测量长度,怎么测法呢?用尺量?不现实,太长不说,要一边做一边量呢,怎么办呢?行业中有很巧妙的方法,用一个周长是1米的轮子,将电缆绕在上面一周,由线带轮转,这样轮转一周不就是线长1米嘛,所以只要记下轮转了多少圈,就可以知道走过的线有多长了。从一个生活中的例子看起:一个水盆在水龙头下,水龙头没关紧,水一滴滴地滴入盆中。水滴不断落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满。第五章MCS-51单片机的定时/计数器那么单片机中的计数器有多大的容量呢?MCS-51单片机中有两个计数器,分别称之为T0和T1,这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。5.3.1定时/计数器的结构及工作原理MCS-51系列单片机中的计数器除了可以作为计数之用外,还可以用作时钟,时钟的用途当然很大,如打铃器,手机定时开关机,空调定时开关等等,那么计数器是如何作为定时器来用的呢?一个闹钟,将它定时在1个小时后闹响,换言之,也可以说是秒针走了(3600)次,所以时间就转化为秒针走的次数,也就是计数的次数了,可见,计数的次数和时间之间关联密切。那么它们的关系是什么呢?那就是秒针每一次走动的时间正好是1秒。因此只要计数脉冲的间隔相等,则计数值就代表了时间的流逝。计数定时溢出水溢出是流到地上,而计数器溢出后将使得TF0变为“1”。一旦TF0由0变成1,就是产生了变化,产生了变化就会引发事件,就象定时的时间一到,闹钟就会响一样。现在我们来研究一个问题:要有多少个计数脉冲才会使TF0由0变为1。5.3.1定时/计数器的结构及工作原理再来看水滴的例子,当水不断落下,盆中的水不断变满,最终有一滴水使得盆中的水满了。这时如果再有一滴水落下,就会发生什么现象?水会溢出,用个术语来讲就是“溢出”。任意定时及计数的方法刚才已研究过,计数器的容量是16位,也就是最大的计数值到65536,因此计数计到65536就会产生溢出。问题是在现实生活中,经常会有少于65536个计数值的要求,如怎么样来满足这个要求呢?5.3.1定时/计数器的结构及工作原理我们采用预置数的方法,要计数100次,那就先放进65436,再来100个脉冲,不就到了65536了吗。定时也是如此,每个脉冲是1微秒,则计满65536个脉冲需时65.536毫秒。如果现在只要20毫秒定时怎么办?20毫秒为20000微秒,所以,只要在计数器里面放进65536-20000=45536就可以了。提示:如果是一个空的盆要1万滴水滴进去才会满,我在开始滴水之前就先放入一勺水(假设100滴),还需要10000滴嘛?定时/计数器的定时和计数功能在TMOD中,各有一个控制位(C/T),分别用于控制定时/计数器T0和T1是工作在定时器方式还是计数器方式。1.定时功能----计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加1。所以,计数频率是振荡频率的1/12。2.计数功能----计数脉冲来自相应的外部输入引脚,对负跳变脉冲计数,计数溢出可申请中断,标志位TFX,T0为P3.4,T1为P3.5。定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1)。5.3.1定时/计数器的结构及工作原理5.2.1与定时器/计数器有关的控制寄存器有:5.3.2定时/计数器控制方式及相关控制寄存器单片机内部的定时/计数器是一种可编程器件,可设置为四种工作方式,由两个8位专用寄存器TMOD和TCON进行管理与控制。1.工作方式寄存器TMOD用于选定定时/计数器的工作方式、启动方式等。1)用于设置定时/计数器的工作方式(0~3);M1M0M1M0工作方式说明00方式013位定时/计数器01方式116位定时/计数器10方式28位自动重装初值定时/计数器11方式3T0分为2个8位定时/计数器,TH0仅定时。5.3.2定时/计数器控制方式及相关控制寄存器2)选择定时/计数——C/T*;C/T=0---定时,C/T=1---3)启动控制方式选择---内/外;GATE:门控位,启动方式设定GATE=0--允许软件位TR0或TR1启动;GATE=1--允许外部引脚信号INT0/INT1以及TR0/TR1联合启动。2.定时器控制寄存器TCON(1)TF1定时器1溢出标志(2)TR1定时器1运行控制位(3)TF0定时器0溢出标志(4)TR0定时器0运行控制位(5)IE1外部中断1请求标志(6)IT1外中断1触发方式选择位(7)IE0外部中断0请求标志(8)IT0外部中断0触发方式选择位。应用时可通过中断和查询的方式获得溢出信息-----TF0=1/0例:启动T0工作,用指令SETBTR0注意:复位后TMOD、TCON各位均清零。通过控制TMOD中的M1、M0位选择定时器4种工作方式。这4种工作方式的实质是对T0(或T1)的两个8位计数器TH0、TL0(或TH1、TL1)的计数操作方式而言。1.方式0TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚00机器周期TH0TL08位5位溢出TCONTMODD0D7D7D0申请中断1(1)加1计数器为13位TL0=5位,TH0=8位(2)C/T*=1为计数工作方式,计数脉冲由T0引脚输入。计数个数N=(-初值)(3)C/T*=0为定时工作方式,时钟频率为fosc/12。定时时间t=(-初值)*时钟周期*12(4)计数器溢出,TF0置1。由硬件申请中断。能否被CPU响应?2132135.3.3、定时器/计数器的工作方式81922.方式1定时/计数器工作于方式1时为一个16位的计数器。其逻辑结构、操作及运行控制几乎与方式0完全—样,差别仅在于计数器的位数不同。在方式1中TL0和TH0均为8位,TL0和TH0一起构成了l6位计数器。定时工作方式1时,定时时间为:定时时间=(216-计数初值TC)×机器周期用于计数器工作方式时,最大计数值为216=65536。计数个数=216-计数初值TCTF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位8位溢出TCONTMODD0D7D7D0申请中断3.方式2定时/计数器工作于方式2时,将两个8位计数器THx、TLx分成独立的两部分,组成一个可自动重装载的8位定时/计数器。方式2的控制运行与方式0、方式1相同。用于定时工作方式时,定时时间t为:t=(28—计数初值X)×机器周期方式2用于计数工作方式时,最大计数值(初值=0时)是28。方式2特别适合于用作较精确的定时和脉冲信号发生器。还常用作串行口波特率发生器。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位溢出TCONTMODD0D7D7D0申请中断4.方式3方式3只适用于定时器T0。在方式3下,T0被分成两个相互独立的8位计数器TL0和TH0,如图所示。(1)TH0和TL0变成2个分开的计数器。(2)TL0占用了全部的定时器控制位。(C/T,GATE,TR0,TF0)(3)TH0只能用于定时方式,运行控制位和溢出标志位则借用定时器1的TR1和TF1。此时的定时器1用于串行口波特率发生器。在T0设置为方式3工作时,一般是将定时器T1作为串行口波特率发生器,或用于不需要中断的场合。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚11机器周期TH0TL08位溢出TCONTMODD0D7D0申请中断机器周期8位申请中断溢出一、定时/计数器计数初始化1.定时/计数器的初始化方法初始化的主要内容是对TCON和TMOD编程,计算和装载T0和T1的计数初值。(1)初始化1)分析定时器/计数器的工作方式,将方式字写入TMOD寄存器;(定/计、内/外启动、工作方式)2)计算T0或T1中的计数初值,并将其写入TH0、TL0或TH1、TL1;3)根据需要开放CPU和定时/计数器的中断,即对IE和IP寄存器编程;4)启动定时器/计数器工作:若要求用软件启动,编程时对TCON中的TR0或TR1置位即可启动;若由外部中断引脚电平启动,则对TCON中的TR0或TR1置位后,还需给外引脚加启动电平。5.3.4定时/计数器的应用举例(2)计数器初值的计算1)计数器模式时的计数初值TC=2M-N(M为计数器位数,N为要求的计数值)方式0:M=13,计数器的最大计数值213=8192。方式1:M=16,计数器的最大计数值216=65536;方式2:M=8,计数器的最大计数值28=256;方式3同方式2。例如,设T0工作在计数器方式2,求计数10个脉冲的计数初值,TC=28-10=246=(11110101)B=0F5H2)定时器模式时的计数初值在定时器方式下,定时器T0(或T1)是对机器周期进行计数的。定时时间为:t=(2M-计数初值X)×机器周期则计数初值X=2M-(t/12*Tosc)①TMOD确定控制字01H要产生500μs的方波脉冲,只需在P1.2端以250μs为间隔,交替输出高低电平即可实现。为此,定时时间应为250μs。使用6MHz晶振,则一个机器周期为2μs,设待求计数初值为X,则:②计算计数器的计数初值;例1:设晶振频率fOSC=6MHz,使用定时器0以方式1产生周期为500μs的方波脉冲,并由P1.2输出。试以中断方式实现。8051P1.2500μs(216–X)×2×10-6=250×10-6即216–X=125X=216-125=10000H-7DH=0FF83H所以,初值为:TH0=0FFH,TL0=083H③采用中断方式:编程时打开全局和局部中断。④由定时器控制寄存器TCON中的TR0位控制定时器的启动和停止。TR0=1,启动;TR0=0,停止。程序设计ORG0000HLJMPMAIN;主程序入口ORG000BHLJMPT0INT;T0中断入口主程序:ORG0040HMAIN:MOVTMOD,#01H;T0为方式1MOVTH0,#0FFHMOVTL0,#83H;初值SETBEA;允许中断T0INT:PUSHPSWPUSHACCMOVTH0,#0FFH;重新设置初值MOVTL0,#83HCPLP1.2;输出取反POPACCPOPPSWRETISETBET0SETBTR0;启动定时SJMP$;等待中断中断处理程序:2.定时/计数器初始化举例编写初始化程序的步骤;(1)方式控制字送TMODMOVTMOD,#——(2)计数器的初值送TH、TL(0/1)MOVTH0,#——MOVTL0,#——(3)根据需要开放中断和设定优先级即对IE和IP赋初值。(4)启动T0/T1开始工作---置位TR0/1SETBTR0/1(5)等待溢出信号的出现(如何进入处理程序?)(查询法或中断法)注意:不同方式下,M的取值不同。若系统时钟频率fOSC=12MHz,则方式0:M=13,定时器的最大定时值为213*机器周期=8192µS;方式1:M=16,定时器的最大定时值为216*机器周期=65536µS;方式2:M=8,定时器的最大定时值为28*机器周期=256µS;方式3同方式2。二、定时/计数器计数应用举例在应用定时/计数器时,溢出标志TFx置位后既可由硬件向CPU申请中断,也可通过用户程序查询TFx的状态,因此对计数溢出信息的处理有以下两种方法。中断法:在定时器初始化时要开放对应的源允许(ET0或ET1)和总允许,在启动后等待中断。当计数器溢出中断,CPU将程序转到中断服务程序入口,因此应在中断服务程序中安排相应的处理程序。查询法:既在定时器初始化并启动后,在程序中安排指令查询TFx的状态。LP:JBCTF0,NEXT;TF0为1,转后面的处理程序,并将TF0复位SJMPLP;
本文标题:单片机原理及应用_第5章_定时器
链接地址:https://www.777doc.com/doc-6287742 .html