您好,欢迎访问三七文档
Email:hybi@mail.xjtu.edu.cn主讲毕宏彦嵌入式系统及其电路嵌入式系统设计主讲教师:毕宏彦2第10讲定时器结构及工作原理定时器的控制及其工作方式定时/计数器的应用嵌入式系统设计主讲教师:毕宏彦3本讲内容定时器结构及工作原理定时器的控制及其工作方式定时/计数器的应用嵌入式系统设计主讲教师:毕宏彦4定时器的结构MCS-51内部集成了两个16位的可编程定时器,T1、T0。每个定时器为加1计数器,由两个8位寄存器组成,TH1、TL1,TH0、TL0。内部由两个特殊功能寄存器控制:TMOD——工作方式寄存器,用于确定工作方式、功能。TCON——定时器控制寄存器,用于定时器启、停等。定时器的结构及工作原理P3.4P3.5T1T0CPUTCONTMODTH1TL1TH0TL0嵌入式系统设计主讲教师:毕宏彦52、对外部事件计数(计数方式)计数脉冲来源于外部,外部脉冲从P3.4(T0端),或P3.5(T1端)输入。当CPU检测到T0或T1引脚上的信号由1跳变为0时,计数器加1,即脉冲的下降沿加1。定时器的工作原理1、对系统时钟计数(定时方式)计数脉冲来源于内部(系统时钟),对时钟振荡器输出脉冲经12分频后计数,即一个机器周期加一(一个机器周期=12个振荡周期)。如时钟为12MHz,加1即加1s,实现定时。定时器的核心部分为一加1计数器,可对机器周期计数或对外来脉冲计数。嵌入式系统设计主讲教师:毕宏彦6本讲内容定时器结构及工作原理定时器的控制及其工作方式定时/计数器的应用嵌入式系统设计主讲教师:毕宏彦7定时器的控制工作方式寄存器TMODTMOD用来设置定时器的工作方式,字节地址为89H低四位用于T0,高四位用于T11、M1M0为工作方式选择位00方式013位定时/计数器01方式116位定时/计数10方式2一个8位自动重装载定时/计数器11方式3T1不工作,T0分为两个8位定时器定时器T1定时器T0GATEC/TM1M0GATEC/TM1M0D7D6D5D4D3D2D1D0TMOD(89H)嵌入式系统设计主讲教师:毕宏彦82、C/T为定时/计数选择位C/T=1(Count),计数模式,定时器对外部脉冲计数C/T=0(Timing),定时模式,定时器对机器周期计数3、GATE为门控位用于控制定时器的启动(RUN)GATE=0,通过程序对TCON中的TR0或TR1置1,启动定时器运行,叫软件启动。GATE=1,允许外部中断引脚INTx启动定时器工作。在TR0=1或TR1=1的情况下,INTx端输入一高电平,启动定时器工作。叫外部信号启动定时器。TMOD不能位寻址,复位时全为0。由软件初始化对TMOD写一个立即数完成设置。例如:TMOD=0X21;嵌入式系统设计主讲教师:毕宏彦9控制寄存器TCON低四位用于外部中断,高四位用于定时器TF1——TimerFlowing定时器T1溢出中断请求标志位。T1溢出时,硬件自动置位TF1=1,向CPU发请求中断,当CP响应中断并执行中断程序,硬件自动清TF1=0。另外,TF1可用于查询,TF1可软件置1或清0,实现软件中断TR1——TimerRun,定时器T1启/停控制位。软件置1(TR1=1)定时器开始工作,软件清0(TR1=0),定时器停止工作定时器Timer外部中断InterruptTF1TR1TF0TR0IE1IT1IE0IT0D7D6D5D4D3D2D1D0TCON(88H)TCON用来控制定时器的启停和外部中断,可以按位访问,其字节地址为88H。嵌入式系统设计主讲教师:毕宏彦10本讲内容定时器结构及工作原理定时器的控制及其工作方式定时/计数器的应用嵌入式系统设计主讲教师:毕宏彦11定时器的应用一、初始化1、确定工作方式,对TMOD赋值2、定时器赋初值,写入TH0、TL0或TH1、TL13、开放中断,给IE赋值,EA、ET0、ET14、启动定时器工作,给TR0、TR1置1二、初值计算1、计数方式时:初值:Z=2k—计数值(K为位数,8、13、16)2、定时方式时:初值计算:(溢出值2k—初值)×周期=计数值×周期计数值×周期=定时时间一个机器周期=12/晶振频率晶振频率=12MHz时,一个机器周期=12/12MHz=1s晶振频率=6MHz时,一个机器周期=12/6MHz=2s嵌入式系统设计主讲教师:毕宏彦12溢出值2k初值定时计数值溢出值:28=256213=8192216=65536最大定时时间:256×2s=0.512ms;8192×2s≈16.4ms;131ms例如:设定时50ms,系统时钟f=6MHz,求定时器的初值用T0定时方式1可达到50ms的定时,定时器的初值:Z=131ms—50ms=81ms(时间)一个机器周期为2s,81ms转换成二进制计数值为40500,变成16进制数为9E34H,9EH给TH0,34H给TL0。设时钟频率=6MHz则机器周期=2s嵌入式系统设计主讲教师:毕宏彦13三、定时器应用编程举例2、定时50ms要用16位定时器T0定时,方式1,采用定时器溢出中断,50ms到中断一次100ms50ms1、利用定时器产生实时时钟信号例1:用定时器T0定时50ms,从P1.1引脚输出周期为100ms的方波,晶振频率为6MHz。解:1、每当定时50ms到,P1.1反相P1.1嵌入式系统设计主讲教师:毕宏彦143、定时器T0初值Z计算Z=(溢出值216—50ms的计数值)=(216—50ms×1000/2s)=65536—25000=40536初值的数字量为40536,变成16进制数为9E58H嵌入式系统设计主讲教师:毕宏彦15开始设工作方式TMODTL0、TH0赋初值开放T0中断,IE赋值等中断P1.10输出低电平TR01启动T0T0重赋初值P1.1=!P1.1中断返回中断服务程序主程序→流程图:嵌入式系统设计主讲教师:毕宏彦16#includereg51.h#includeabsacc.h#includeintrins.h#includeVIIC_C51.h#defineucharunsignedchar/*宏定义*/#defineuintunsignedint#define_Nop()_nop_()/*定义空指令*/#definewclcdXBYTE[0xf101]#definewdlcdXBYTE[0xf100]#definekeyXBYTE[0xf200]ucharxdatastt[100]_at_0x1000;ucharxdatastu[100]_at_0x1080;sbitp11=P1^1;//p11定义到P1^1端口sbitSDA=P1^2;//sda1usefori2c256'ssda…….程序初始化时的设置嵌入式系统设计主讲教师:毕宏彦17voidmain(){TMOD=0x21;/*定时器工作方式控制,*/SCON=0x50;//串行口通信设置PCON=0x00;TH1=0xfa;/*1bit-start1bit-stop*/TH0=0X9E;TL0=0X58;p11=0;TR0=1;/*starttimer0*/TR1=1;/*starttimer1*/ET0=1;/*enableTimer0interrupt*/ET1=0;/*disableTimer1interrupt*/EX0=0;/*disableexternal-0interrupt*/EX1=0;/*disableexternal-1interrupt*/ES=1;/*enableserial-portinterrupt*/EA=1;while(1);}主程序设置嵌入式系统设计主讲教师:毕宏彦18TO中断函数voidt0int(void)interrupt1using1{EA=0;p11=!p11;TH0=0X9E;TL0=0X58;程序内容EA=1;}嵌入式系统设计主讲教师:毕宏彦19例2:某应用系统通过P1.0和P1.1分别输出周期为400s和800s的方波。为此系统选用定时器T0,定时方式3,主频为6MHz,机器周期为2s,经计算得定时常数为9CH和38H。解:1)P1.0输出周期为400s,只要每200s反相一次400s200sP1.0800s400sP1.12)P1.1输出周期为800s,只要每400s反相一次输出两路方波信号嵌入式系统设计主讲教师:毕宏彦202)定时器的初值计算。TL0定时200s,计数值为100,初值为156=9CH;TH0定时400s,计数值为200,初值为56=38H。256初值156计数值100256初值56计数值200TL0TH03)T0设为方式3,为两个独立的8位定时器TL0、TH0,TL0定时器溢出中断用T0的中断,T0全部控制位由T0占用TH0定时器溢出中断用T1的中断,T1的溢出中断标志位TF1、T1的启/停位TR1被TH0占用。嵌入式系统设计主讲教师:毕宏彦21#includereg51.h#includeabsacc.h#includeintrins.h#includeVIIC_C51.h#defineucharunsignedchar/*宏定义*/#defineuintunsignedint#define_Nop()_nop_()/*定义空指令*/#definewclcdXBYTE[0xf101]#definewdlcdXBYTE[0xf100]#definekeyXBYTE[0xf200]ucharxdatastt[100]_at_0x1000;ucharxdatastu[100]_at_0x1080;sbitp10=P1^0;//p10定义到P1^0端口sbitp11=P1^1;//p11定义到P1^1端口…….程序初始化时的设置嵌入式系统设计主讲教师:毕宏彦22voidmain(){TMOD=0x23;/*定时器工作方式控制,*/SCON=0x50;//串行口通信设置PCON=0x00;TH1=0xfa;/*1bit-start1bit-stop*/TL0=156;//200s时T0中断TH0=56;//400s时T1中断p10=0;p11=0;TR0=1;/*starttimer0*/TR1=1;/*starttimer1*/ET0=1;/*enableTimer0interrupt*/ET1=1;/*enableTimer1interrupt*/EX0=0;/*disableexternal-0interrupt*/EX1=0;/*disableexternal-1interrupt*/ES=1;/*enableserial-portinterrupt*/EA=1;while(1);}主程序设置嵌入式系统设计主讲教师:毕宏彦23TO中断函数voidt0int(void)interrupt1using1{ucharnn,mm;EA=0;p10=!p10;TL0=156;EA=1;}嵌入式系统设计主讲教师:毕宏彦24T1中断函数voidt1int(void)interrupt3using1{ucharnn,mm;EA=0;p11=!p11;TH1=56;EA=1;}嵌入式系统设计主讲教师:毕宏彦25思考题与习题1、定时/计数器工作于定时和计数方式时有何异同点?2、定时/计数器的4种工作方式各有何特点?3、要求定时/计数器的运行控制完全由TR1、TR0确定和完全由、高低电平控制时,其初始化编程应作何处理?嵌入式系统设计主讲教师:毕宏彦26本讲内容小结定时器结构及工作原理定时器的控制及其工作方式定时/计数器的应用
本文标题:第10讲定时计数器
链接地址:https://www.777doc.com/doc-3259162 .html