第8章8051内部资源-定时器计数器.ppt_第1页
第8章8051内部资源-定时器计数器.ppt_第2页
第8章8051内部资源-定时器计数器.ppt_第3页
第8章8051内部资源-定时器计数器.ppt_第4页
第8章8051内部资源-定时器计数器.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、第8章 8051内部资源的C编程,8.2 定时器/计数器,基本概念,计数:对外部事件的个数进行计量 定时:由内部提供一个非常稳定的计数源进行定时 定时分类:软件,硬件,可编程 定时/计数器简称定时器,80C51单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1),均为二进制加法计数器。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。,8.2.1 定时/计数器结构,T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。 作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计

2、数器就自动加1。计数的最高频率一般为振荡频率的1/24。 作定时器时,对晶振经12分频后的脉冲计数,即每过一个机器周期,计数器加1.,其他组成部分,工作方式寄存器TMOD用于设定T0和T1的工作方式,TCON用于启动、停止计数,同时管理T0和T1的溢出标志等。 程序开始要对TMOD、 TCON进行初始化编程,在应用定时器计数器是,需要通过程序设置TH0,TL0等的计数初值。,8.2.1 定时/计数器控制寄存器,定时器共有2个控制寄存器TMOD和TCON,由软件写入TMOD和TCON 两个8位寄存器,设置各个定时器的操作模式和控制功能。,1定时器控制寄存器TCON(88H),图5-6 定时器工作

3、模式寄存器TCON,可以进行位寻址,TR0与TR1:分别为T0、T1的启停位 如:TR0 =1; TR0 =0; TF0与TF1:分别为T0、T1的溢出中断标志位 当T0产生溢出,TF0被硬件自动置位, 当T0溢出中断被CPU响应后,TF0被硬件自动复位。,2工作模式控制寄存器TMOD(89H),图6-5 定时器工作模式寄存器TMOD,只能用字节传送,M1M0:工作方式选择位 C/T:定时/计数方式选择位 0定时,每过一个机器周期计数器加1 1计数,外部脉冲负跳变计数器加1 GATE:门控位 0计数器由TR0启停 1计数器在TR0=1和外部中断INT0=1时才能启动工作,8.2.2 定时/计数

4、器工作方式,每个定时/计数器还有4种工作模式,也就是每个定时器可构成4种电路结构模式。 在模式0、1和2,T0和T1的工作模式相同,在模式3,两个定时器的模式不同。下面以T1为例,分述各种工作模式的特点和用法。,1方式0(13位计数器),图6-1 定时/计数器T1(T0)工作模式0,占用TH0全部8位,TL0低5位,2方式1(16位计数器),图6-2 定时/计数器T1(T0)工作模式1,3方式2(8位计数器),图6-3 定时/计数器T1(T0)工作模式2,计数初值自动重装,TH和TL赋相同的初值,4方式3(T0分成2个8位计数器),图6-4 定时/计数器T1(T0)工作模式3,T0低字节TL0

5、作为普通的 8位定时器/计数器,T0高字节TH0作为8位定时器使用,占用TF1标志,8.2.3 定时器/计数器的应用,一、 定时器/计数器的初始化步骤: 根据任务要求设置方式控制字TMOD 计算并设置定时器/计数器初值 根据需要开放中断和设定中断优先级 启动定时器/计数器工作,二、定时/计数器常数的计算,定时/计数器的定时/计数范围 工作方式0:13位,M=213=8192 工作方式1: 16位,M=216=65536 工作方式2/3:8位,M=28=256,1计数器初值的计算 把计数器计满为零所需要的计数值设定为C,计数初值设定为x,由此可得到公式 x = M - C 式中,M为计数器模值,

6、该值和计数器工作方式有关。 在方式0时M为8192; 在方式1时M为65536; 在方式2和方式3时M为256。,2定时器初值的计算 在定时器模式下,计数器由单片机主脉冲经12分频后计数。因此,定时器定时时间T的公式: T =(M - x)*Tm 上式也可写成:x = M - T/ Tm 式中,M为模值,和定时器的工作方式有关; Tm是单片机振荡周期TCLK的12倍,即机器周期 x为定时器的定时初值。,三、定时器/计数器编程,在实时系统中,定时通常使用定时器,这与软件循环的定时完全不同,尽管两者最终都依赖系统的时钟,在定时器计数时,其他事件可继续进行,软件定时不允许任何事件发生。 【例】单片机

7、的fosc=12MHz,要求在P1.0引脚上输出周期为10ms的方波。,分析:周期为10ms的方波要求定时间隔为5ms,每次时间到P1.0取反。 定时器计数率=fosc/12。机器周期=12/fosc=1us,每个机器周期定时器加1,需计数次数=5000/(12/fosc)=5000/1=5000。 所以选择使用T0的方式1定时,方式寄存器TMOD=01H,定时器初始值为: 65536-5000。,1) 定时器0的方式1编程,采用查询方式。 #include sbit P1_0=P10; void main() TMOD=0 x01; /*定时器0方式1 */ TR0=1; /*启动T/C0

8、*/ for (;) TH0=(65536-5000)/256; /*装入计数器初值 */ TL0=(65536-5000)%256; do while (!TF0); /*查询等待TF0置位 */ P1_0=!P1_0; /*定时时间到P1.0反相 */ TF0=0; /*软件清TF0*/ */ /*end of for loop*/ /*end of main */,2) 用定时器0的方式1编程,采用中断方式。 #include sbit P1_0=P10; void timer0(void) interrupt 1 using 1 /*T/C0中断服务程序入口*/ P1_0=!P1_0;

9、 /*P1.0取反 */ TH0=(65536-5000)/256; /*装在计数器初值 */ TL0=(65536-5000)%256; void main() TMOD=0 x01; /*定时器0方式1 */ P1_0=0; TH0=(65536-5000)/256; /*装在计数器初值 */ TL0=(65536-5000)%256; EA=1; /*CPU开放中断*/ ET0=1; /*T/C0开中断*/ TR0=1; /*启动T0*/ do while (1); /*空循环*/ /end of main,思考两个问题,对于长定时的问题如何解决? 如在fosc=12MHz的情况下,要求

10、输出周期为1s的方波。需要计数500,000次,超过了各种工作方式的计数最大值。 对于占空比不为50%的方波如何实现?,定时器定时20ms,设置软件计数i,定时溢出一次i=i+1; 从高电平开始,i=1电平取反变低,继续定时,i=5电平 取反变低,一个周期结束,i=0.,【例8-4】: 产生一个脉冲占空比可调的程序,它产生的脉宽调制信号用于电机的变速控制。 分析:脉冲宽度调制(Pulse Width ModulationPWM)是通过改变脉冲序列的周期以改变脉冲的宽度或占空比实现调压,采用适当的控制方法即可使电压与频率协调变化。将输出信号的基本周期(T)固定,通过调整基本周期内工作周期(t1)

11、的大小来控制输出电压。由于电机的转速与电机两端的电压成比例,而电机两端的电压与控制波形的占空比(t1/T)成正比,因此电机的速度与占空比成比例, 占空比越大,电机转得越快。 根据PWM原理,可得: Vd=Vmax*D 式中:Vd电机的平均转速; Vmax-电机全通电时的速度;D=t1/T -占空比。 基于上述原理,使用80C51内部定时器T0与软件配合产生出调宽脉冲波,如图8-26所示,通过INC键或者DEC键可以调节输出脉冲,从而控制单片机P3.0输出,实现对电机电枢电压的调节,改变电机转速。,图8-25脉冲宽度调制原理,图8-26 PWM调制电路,参考程序清单如下: #include #d

12、efine uchar unsigned char #define uint unsigned int #define ON 1 #define OFF 0 #define MAX_VAL 50 uchar pwm_val=0; uchar set_val=30; sbit out1=P30; void delay (uint k) /*延时子程序*/ uint i,j; for (i=0;ik;i+) for (j=0;j60;j+) ; ,void timer0(void) interrupt 1 using 1 /*T0 中断服务程序*/ TH0=(65536-1000+7)/256;

13、/*1ms精确定时 */ TL0=(65536-1000+7)%256; pwm_val+; /*每10ms到,软件计数器加1 */ if(pwm_val=MAX_VAL) pwm_val=0; void key(void) /按键扫描程序 INC键 和DEC键 增大或减小高电平的时间 delay(10); /延时去抖 while(P1!=0 xff) switch(P1) case 0 xfe: /* INC 键处理 */ set_val+;if (set_val=MAX_VAL) set_val=1;break; case 0 xfd: /* DEC 键处理 */ set_val- -;if (set_val=0) set_val=MAX_VAL-1;break; default: break

温馨提示

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

评论

0/150

提交评论