单片机原理与应用-基于AT89S51+Proteus仿真 第2版 课件 第6章 单片机的定时计数器_第1页
单片机原理与应用-基于AT89S51+Proteus仿真 第2版 课件 第6章 单片机的定时计数器_第2页
单片机原理与应用-基于AT89S51+Proteus仿真 第2版 课件 第6章 单片机的定时计数器_第3页
单片机原理与应用-基于AT89S51+Proteus仿真 第2版 课件 第6章 单片机的定时计数器_第4页
单片机原理与应用-基于AT89S51+Proteus仿真 第2版 课件 第6章 单片机的定时计数器_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理与应用第6章单片机的定时/计数器内容指南定时/计数器也是单片机的重要资源。在单片机应用系统中,定时/计数器主要用于实现定时控制和对外界事件计数。对于AT89S52单片机,其定时/计数器T2还具有输入捕获和监视定时功能。本章介绍定时/计数器的结构、原理、工作方式及使用方法。学习目标掌握AT89S51定时/计数器的结构与工作原理。了解定时/计数器的各种工作方式及其差异。熟悉AT89S51方式1和方式2的定时/计数编程应用。第6章单片机的定时/计数器

定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生器。在测量控制系统中,常需要有实时时钟和计数控制,以实现定时(或延时)以及对外界事件进行计数。第6章单片机的定时/计数器常用的定时/计数方法有:

○纯软件-缺点是占用CPU时间

○纯硬件-缺点是不准确、不灵活

○可编程定时器/计数器(软硬件联合)

89S51单片机有2个可编程的16位定时/计数器(T0,T1),89S52单片机有3个可编程的16位定时/计数器(T0,T1,T2)。第6章单片机的定时/计数器纯软件定时/计数方法:定时——空循环预定周次,等待预定时间计数——读取I/O引脚电平,统计变化次数基本思路:由CPU统计状态变化次数,待预定结果出现后结束统计。delay(unsigned

inttime){unsignedintj=0;

for(;time>0;time--)

for(j=0;j<125;j++);}存在问题:占用CPU机时,CPU不能同时干别的事情第6章单片机的定时/计数器定时计数器的形象实例假如有一个水容器1000滴水刚好装满初始时已经装入400滴水问:还需滴入多少滴水才能将其装满?答:还需滴入600滴水才能将其装满,601滴溢出。答:还需600秒时间才能将其装满,601秒溢出。问:如果每秒滴入1滴水,还需多长时间才能将其装满?这就是“计数”这就是“定时”这就是“计数初值”第6章单片机的定时/计数器定时/计数器:对电脉冲进行计数的单元电路。定时与计数的关系用计数器为固定周期的脉冲计数,就是定时。定时和计数是同一个概念同一套装置,本质上定时只是计数的一个特例。定时计数器工作时,关心的问题:1、定时/计数器的满度。(容器的容量)2、初值。(容器已有水滴数)3、计数器计满溢出后的处理。第6章单片机的定时/计数器单片机软硬件联合定时/计数方法:等待CPU响应系统时钟脉冲加1计数器溢出标志溢出定时器外来信号脉冲加1计数器溢出标志溢出等待CPU响应计数器外来信号脉冲加1计数器溢出标志溢出等待CPU响应系统时钟脉冲K定时/计数器定时/计数器本质上都是计数器。定时器是对时钟脉冲计数,计数器则是对外来脉冲计数。第6章单片机的定时/计数器定时器和计数器是同一个部件,其核心是一个可预置初值的16位加1计数器(特殊功能寄存器TH1、TL1),对输入的脉冲进行计数。TF1:溢出标志。当计数器计到全1时(FFFFH),再来一个计数脉冲,计数器清0,产生溢出,TF1由0变为1,向CPU请求中断。脉冲源运行控制电路定时计数器的工作原理(以T1工作于方式1为例)T1和T2都有2种工作模式和4种工作方式第6章单片机的定时/计数器计数器的溢出空间可随计数初值改变→定时时间tt=(计数器最大空间-计数初值)×机器周期

=(2n-a)×12/fosc(s)t与n、a、fosc三个因素有关

TFx(X=0、1)Tx端(每个机器周期产生一个计数脉冲)第6章单片机的定时/计数器逻辑开关功能:=0→定时器模式,=1计数器模式第6章单片机的定时/计数器

TFx(X=0、1)Tx端计数值N=(计数器满计数值-计数初值)=(2n–a)N与n、a两个因素有关定时/计数器的结构第6章单片机的定时/计数器2个16位计数器T0(TH0、TL0)和T1(TH1、TL1)——加1计数器2个控制寄存器TCON和TMOD——管理计数器的运行2个外部引脚T0(P3.4)和T1(P3.5)——接入外部脉冲定时/计数器的控制关系(以T1为例)门控位GATE=0-允许TR1启动计数器GATE=1-允许INT1引脚启动计数器启动控制位TR1=1-启动计数器TR1=0-停止计数器INT1引脚参与定时器的启停管理计数器溢出标志中断请求标志位TF1=1请求中断

T1第6章单片机的定时/计数器模式选择位=0-定时=1-计数

(1)工作方式控制寄存器TMOD用于T1用于T0GATEC/TM1M0GATEC/TM1M0门控位计数/定时选择位“1”--计数“0”--定时M1M0:工作方式选择位00:方式0--13位计数器01:方式1--16位计数器10:方式2--两个8位计数器 自动重装初值11:方式3--仅T0可用TMOD不可位寻址!定时器/计数器的控制寄存器第6章单片机的定时/计数器TF1TR1TF0TR0IE1IT1IE0IT0定时器/计数器T0溢出标志,计数器溢出时,TF0置“1”,可用于软件查询或向CPU申请中断。定时器/计数器T0的运行控制位,当GATE=0时,只要TR0=1,T0就开始工作。TCON可位寻址!

(2)定时器控制寄存器TCON第6章单片机的定时/计数器GATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0

T1方式选择位00-方式001-方式110-方式2T1工作方式

T1

T0

TF0

TR0

T0脚INT0T0方式选择位00-方式001-方式110-方式211-方式3T0工作方式第6章单片机的定时/计数器工作模式选择0-定时模式1-计数模式GATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0

注意:TMOD只能以字节方式进行初始化例如,设置T0为定时器方式1,允许TR0启动;T1为计数器方式0,允许INT1引脚启动。则TMOD=11000001B=0xc1又如,系统上电默认值为TMOD=0,则默认状态应为:T0和TI均为定时器方式0,允许TR0、TR1启动。第6章单片机的定时/计数器TF1TR1TF0TR0IE1IT1IE0IT08FH8DH8CH8BH8AH89H88HTCON8EH(88H)定时器控制位外部中断控制位

T1

T0

TF0

TR0

T0脚INT0注意,系统上电默认值为TCON=0,则默认状态应为:TR0和TR1均为关闭状态、电平中断触发方式、没有外部中断请求第6章单片机的定时/计数器6.1定时/计数器的结构与工作原理6.2定时器/计数器的控制寄存器6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第6章单片机的定时/计数器第6章单片机的定时/计数器M1M0工作方式功能说明00110101012313位定时/计数器16位定时/计数器8位自动重装定时/计数器T0分成两个8位,T1不工作T0/T1的4种工作方式注意:每种工作方式都有定时和计数2种模式。4种工作方式中方式0--13位计数器方式 (很少用,用它无益)方式1--16位计数器方式 (经常用)方式2--8位自动重装初值方式 (经常用)方式3--T0分成两个8位定时器,T1停止工作(几乎无用)掌握方式1,2

(1)方式1定时时间:t=(216-a)×12/fosc(s)——使用16位定时/计数器(THx+TLx)第6章单片机的定时/计数器定时范围为1~65,536μs(≈65ms)。最大定时时间(a=0,fosc=12MHz):t=216(s)=65536(s)定时方式最大计数值:N=65536(脉冲)第6章单片机的定时/计数器计数值:N=(216–a)由于检测一个负跳变需要2个机器周期,即24个振荡周期,故最高计数频率=。对于12MHz晶振,最大外部脉冲的频率为0.5MHz。计数方式第6章单片机的定时/计数器【例6-1】设单片机的晶振频率为12MHz,使用定时器T0以方式1产生频率为500Hz的等宽正方波连续脉冲,并由P1.0输出,采用Proteus中的虚拟示波器观察输出波形。分析:500Hz方波周期为2ms,由2个半周期为1ms的正负脉冲组成方波输出原理:定时1ms后将端口输出电平取反。2ms1msTH0

=

0xfc

TL0

=

0x181ms定时的计数初值应为:a=216–t*fos/12=216–1000*12/12=64536=0xfc18注意:需要不断重装计数初值。第6章单片机的定时/计数器(1)查询方式#include<reg51.h>sbitP1_0

=

P1^0;main(){

TMOD

=

0x01;

//设置T0定时方式1(00000001B)TR0=1;//启动T0

for(;;){

TH0

=

0xfc;

//装载计数初值

TL0

=

0x18;

do{

}while(!TF0);//等待TF0溢出P1_0

=!P1_0;

//定时时间到P1.0反相

TF0

=

0;

//TF0标志清0

}}T0第6章单片机的定时/计数器(2)中断方式#include<reg51.h>sbitP1_0=P1^0;timer0()interrupt1{//T0中断函数P1_0=!P1_0; //P1.0取反

TH0=0xfc; //装载计数初值

TL0=0x18;}main(){

TMOD=0x01; //T0定时方式1

TH0=0xfc; //装载计数初值

TL0=0x18;EA=1; //开总中断

ET0=1; //开T0中断

TR0=1; //启动T0 while(1);}注意:中断响应后系统可自动将TFx标志位清0第6章单片机的定时/计数器仿真波形图第6章单片机的定时/计数器【例6-2】利用定时/计数器T1的中断来控制蜂鸣器发出1KHz的音频信号,假设蜂鸣器接P2.0引脚,系统时钟为12MHz,电路见图6-7。第6章单片机的定时/计数器解:此例仍是定时,使用T1定时方式1,可确定TMOD=00010000,每个计数脉冲的周期为12/12=1µs。1KHz的音频信号周期为1ms,因此要计数的脉冲数为1000/1=1000次,所以T1的初值:TH1=(65536

−1000)

/256;TL1=(65536

−1000)

%256第6章单片机的定时/计数器小结:使用定时/计数器的步骤强调:TMOD的设置只能以字节形式给出(不能位寻址)T0

(1)设置TMOD——确定定时/计数器的工作状态第6章单片机的定时/计数器

(2)计算计数初值——产生期望的定时间隔计数初值a=216-t×fosc/12(t≤65536s)THx=a/256TLx=

a/

%256

装载计数初值:第6章单片机的定时/计数器3)确定采用何种方式处理溢出结果若是查询方式——采用条件判断语句若是中断方式→中断初始化设置和中断服务程序:do{}while(!TFx);

//x=0或1……第6章单片机的定时/计数器ETx=1;//开定时x中断,x=0或1EA=1; //开总中断tx_srv()interruptn

{//n=1或3……}4)启动定时器:

TR0=1

或TR1=1

5)进行定时或计数结束后的其它工作6)为下次定时/计数做准备(清TFx标志+重装载计数初值)若是中断方式,则无需软件清TFx标志位;若是查询方式,需要软件清除TFx标志位。第6章单片机的定时/计数器采用8位计数器,延时时间t=(28-a)×12/fosc(微秒)→12MHz时的最大定时量为256s;可自动重装载计数初值(TLx溢出后,THx数值可自动装入TLx);因没有装载计数初值造成的定时延误,方式2定时精度相对较高。(2)方式2第6章单片机的定时/计数器(1)查询方式#include<reg51.h>sbitP1_0

=

P1^0;main(){TMOD

=

0x02;

TH0=

TL0=0x06;

TR0=1;

for(;;){

do{}while(!TF0);

P1_0

=!P1_0;

TF0

=

0; }}(2)中断方式#include<reg51.h>sbitP1_0=P1^0;timer0()interrupt1{P1_0=!P1_0; }main(){TMOD=0x02;

TH0=TL0=0x06;EA=ET0=1; TR0=1;

while(1);}【例6-3】

采用T0定时方式2在P1.0口输出周期为0.5ms的方波(设fosc=12MHz)。分析:计数初值TL0=((256-250)*12/12)%256=0x06,TMOD=0x02第6章单片机的定时/计数器周期为0.5ms方波第6章单片机的定时/计数器第6章单片机的定时/计数器【例6-4】用单片机监视一生产流水线,每生产100个工件,发出一个包装命令(即一个正脉冲),包装成一箱。本例我们用按钮的动作模拟光电传感器,输出的脉冲接T1输入端P3.5,包装命令脉冲从P2.4输出,本例用LED点亮模拟,如图6-10所示。第6章单片机的定时/计数器分析:此例题是计数应用,计数值是100,因此我们用T1工作于计数方式2,则:TMOD=01100000B=60H。因为计数值为100,所以计数器初值为:256-100=156。参考程序如下第6章单片机的定时/计数器(3)方式0使用13位的定时/计数器(THi7-0+TLi4-0)定时时间t=(213-a)×12/fosc(μs)计数初值a=213-t×fosc/1212MHz时的最大定时量t=213μs=8.192ms第6章单片机的定时/计数器第6章单片机的定时/计数器除计数器位数不同外,方式0与方式1的逻辑结构并无差异。方式0采用13位计数器是为了与早期产品MCS-48单片机兼容。方式0的初值计算比较麻烦,一般采用方式1替代。方式0方式1(4)方式33种组合状态T1仍可设置为方式0~2;通常将T1设定为定时方式2(作为波特率发生器使用)第6章单片机的定时/计数器TH0+TF1+TR1组成的8位定时器TL0+TF0+TR0组成的8位定时/计数器T1组成的无中断功能的定时器特点:方式3下T0可有2个具有中断功能的8位定时器6.1定时/计数器的结构与工作原理6.2定时/计数器的控制寄存器6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第6章单片机的定时/计数器应用:定时器——用于定时控制,或作为分频器发生各种不同频率的方波;计数器——用于外部脉冲统计或外部中断源扩充;复杂应用—需要将定时与计数结合起来。第6章单片机的定时/计数器 定时器/计数器的应用步骤:

确定工作模式和工作方式 计算计数初值

计数:计数初值=2n-计数值X

定时:计数初值=2n-定时时间Tc/机器周期TM =2n-Tcfosc/12

编写应用程序

定时器/计数器的初始化:定义TMOD、写入计数初值TLx和THx、设置中断系统(如采用查询方式处理溢出标志则禁用中断)、启动定时计数器运行。

定时器/计数器的中断服务程序。第6章单片机的定时/计数器【例6-5】利用定时/计数器扩展外部中断源,将定时/计数器T0或T1充当一个外部中断源。分析:定时/计数器在计数模式下,如果把初值置为全l,只要在计数输入端(T0或T1)加一个脉冲,就可以使计数器溢出,产生计数溢出中断。因此,可以把一个外部中断请求作为计数脉冲输入,则可以利用计数中断完成外部中断服务的任务,相当于扩展了一个外部中断源。实现:把外部计数输入端T0(P3.4)或T1(P3.5)作扩充中断源输入,设置计数工作方式2,即自动装载8位计数方式,且初值为255。第6章单片机的定时/计数器第6章单片机的定时/计数器以T0为例,参考程序如下:#include<reg51.h>voidmain(){ …TMOD=0x06; //计数器0为工作方式2 TH0=0xff; //计数初值为255TL0=0xff; //计数初值为255EA=1; //开总中断

ET0=1; //开T0中断

TR0=1; //启动计数while(1) {…} }voidt0-int(void)interrupt1 //中断服务函数

{…} 第6章单片机的定时/计数器【例6-6】长时间的定时。设单片机晶振频率为12MHz,编程使P1.0引脚上产生周期为2秒的等宽正方波连续脉冲。解:根据题意,产生周期2秒的正方波需要间隔1秒钟给P1.0引脚取反,因此需要定时1秒钟。而在12MHz晶振频率下,定时器最大定时时间为(216-0)×1μs=65.536ms,显然直接利用定时器是不能定时1s的。但我们可以利用一个软计数器t对定时器的溢出次数来计数(当然也可以用另外一个定时/计数器来计数,不过为了节省资源通常用软计数器),比如用T0定时50ms,那么50ms溢出1次,溢出20次正好是1s,为此我们用一个变量t作为溢出次数的计数变量,当t从0计数到20次时既是1秒钟。实例5仿真运行效果第6章单片机的定时/计数器以中断处理方式编程的参考程序如下:#include<reg51.h> unsignedchar t=0; //定义t作溢出次数计数器voidmain(void){ EA=ET0=1; //开T0中断 TMOD=0x01; //定义T0定时方式1 TH0=0x3c;TL0=0xb0; //定时50ms初值(12M晶振) TR0=1; //启动T0定时

while(1);}timer0()interrupt1 //T0中断函数{ TH0=0x3c;TL0=0xb0; //重置T0初值 t++;

if(t==20){t=0;P1_0=!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论