单片微机5章-2.

上传人:我** 文档编号:115795478 上传时间:2019-11-14 格式:PPT 页数:102 大小:3.06MB
返回 下载 相关 举报
单片微机5章-2._第1页
第1页 / 共102页
单片微机5章-2._第2页
第2页 / 共102页
单片微机5章-2._第3页
第3页 / 共102页
单片微机5章-2._第4页
第4页 / 共102页
单片微机5章-2._第5页
第5页 / 共102页
点击查看更多>>
资源描述

《单片微机5章-2.》由会员分享,可在线阅读,更多相关《单片微机5章-2.(102页珍藏版)》请在金锄头文库上搜索。

1、微型计算机技术与应用 70课堂学时+18实验学时 5.2定时器/计数器及其应用 定时器/计数器可以实现下列功能: (1)定时操作 (2)测量外部输入信号 (3)定时输出 (4)监视系统正常工作 5.2.1定时器/计算器的一般结构和工作原理 n组成:一个位计数器、计数时钟源控制电 路、状态和控制寄存器; n计数方式:加计数和减计数; n时钟来源:内部时钟和外部时钟。 图5-12 定时器/计数器的一般结构 一、定时器方式 对于一个N位的加1计数器,若计数时钟f是 已知,则从初值a开始加1计数至溢出所占用 的时间为: 二、计数器方式 时钟来源:外部时钟源 目的:对外部时钟累加统计或为了测量 外部输入

2、时钟的参数。 三、通用的多功能定时器 组成:一个自由运行的N位计数器,若干个 输入捕捉寄存器,若干个比较输出寄存器, 以及相应的状态控制寄存器。 功能:1.输入捕捉方式 2.比较输出 图 5-13 多功能定时器结构框图 1.计数 2. 3. 4. 5.中断 6.中断程序中读出捕捉寄存器值,清中断 7.可以计算Tcap引脚的脉冲周期 1.输入捕捉方式 输入捕捉也称高速输入,用于捕捉外部输 入信号电平跳变的时间 2.比较输出 比较输出也称高速输出或定时输出,使输 出引脚Tcmp在指定时间输出指定的电平 四、监视定时器WDT 功能: 当CPU受到干扰而工作不正常时,监视定时 器溢出产生复位信号,使系

3、统恢复正常工作。 图5-15 监视定时器一般结构 5.2.2 定时/计数器T0、T1的功能和使用方法 n定时/计数器的核心部件是一个加法(或减法 )计数器,有两种工作模式: (1)计数器工作模式 (2)定时器工作模式 n4种工作方式(方式0-方式3)。 定时/计数器T0、T1的结构及控制 nTMOD:选择定时器/计数器T0、T1的工作模式 和工作方式。 nTCON:控制T0、T1的启动和停止计数,同时 包含了T0、T1的状态。 n单片机复位时,两个寄存器都清0。 n 定时/计数器T0、T1的控制 在MCS-51中,与定时/计数器T0、T1工作 方式有关的寄存器为TMOD和TCON。其中 TMO

4、D控制定时/计数器T0、T1的工作方式, 而TCON控制定时/计数器的启动并记录定时/ 计数器的溢出标志。 n一、工作方式控制寄存器TMOD 8位分为两组,高4位控制T1,低4位控制T0。 (1)GATE门控位 0:仅以TRX(X=0,1)来启动定时器/计数器运行。 1:用引脚INT0* (或INT1*)上的高电平和TRX两个条 件来启动定时器/计数器运行。 (2) C/T*计数器模式和定时器模式选择位 0:定时器模式。 1:计数器模式。 (3)M1、M0工作方式选择位 M1 M0 工 作 方 式 0 0 方式0,13位定时器/计数器。 0 1方式1,16位定时器/计数器。 1 0 方式2,8

5、位常数自动重新装载 1 1 方式3,仅适用于T0,T0分成两个8 位计数器,T1停止计数 。 n二、定时器/计数器控制寄存器TCON 图4-7 TCON寄存器中与定时/计数器控制有关的位 低4位与外部中断有关,已介绍。高4位的功能如下: (1) TF1、TF0计数溢出标志位 (2) TR1、TR0计数运行控制位 1:启动定时器/计数器工作 0:停止定时器/计数器工作 n三、 定时/计数器T0、T1的工作方式 定时/计数器T0有四种工作方式(即方式0、方式1、 方式2和方式3),主要用于定时和计数; 定时/计数器T1有三种工作方式(即方式0、方式1和 方式2)。 方式0与方式1工作方式基本相同,

6、区别是方式0是 作为13位定时/计数器使用,为了与INTEL公司早期 单片机兼容,现在不推荐使用,方式1是作为16位 定时/计数器使用。 图5-16 定时/计数器T0(T1)工作于方式0的结构 v1.方式0(13位定时/计数器) n当M1、M0初始化为00时,定时/计数器工作于方式0,即计 数长度为13位。 nC/T* 位决定工作模式: 0:开关打在上面,为定时器工作模式; 1:开关打在下面,为计数器工作模式,计数脉冲为P3.4 、P3.5引脚上的外部输入脉冲,当引脚上发生负跳变时,计 数器加1。 GATE位:决定定时器/计数器的运行取决于TRx一个条件还是 TRx和INTx*引脚两个条件。

7、(1)0:A点(见图6-2)是否计数,仅取决于TRx的状态。 (2)1:B点电位由INTX*的输入电平和TRX的状态这两个条件来 确定。是否计数是由TRx和INTx*二个条件来控制的。 n定时方式:计数脉冲是系统时钟信号的n分频,即每隔n/f秒, TL0加1。当TL0溢出时,TH0自动加1;当TH0也溢出时,定 时器T0中断标志TF0位置1。 n定时时间的计算:如果定时器初值为a,则方式1的定时时间t 为: n例5.9 已知晶振频率为6MHz,若使用T0方式0产生 10ms定时中断,试对T0进行初始化编程。 取a的低5位值作为TL0初值,高8位值作为TH0初值。 void initt0_0()

8、 TH0=0x63; TL0=0x18; TR0=1; IE=0x82; 图5-17 定时/计数器T0(T1)工作于方式1的结构 1. 工作方式1(16位定时/计数器) 与门 或门 0 1 n当M1、M0初始化为01时,定时/计数器工作 于方式1,即计数长度为16位。 nC/T* 位决定工作模式: 0:开关打在上面,为定时器工作模式; 1:开关打在下面,为计数器工作模式, 计数脉冲为P3.4、P3.5引脚上的外部输入 脉冲,当引脚上发生负跳变时,计数器加1。 GATE位:决定定时器/计数器的运行取决于 TRx一个条件还是TRx和INTx*引脚两个条件 。 (1)0:A点(见下图5-17)是否计

9、数,仅取决 于TRx的状态。 (2)1:B点电位由INTX*的输入电平和TRX 的状态这两个条件来确定。是否计数是由TRx 和INTx*二个条件来控制的。 图5-17 定时/计数器T0(T1)工作于方式1的结构 01 与门 或门 1 A 10 B n定时方式:计数脉冲是系统时钟信号频率f的n 分频,即每隔n/f秒,TL0加1。当TL0溢出时 ,TH0自动加1;当TH0也溢出时,定时器T0 中断标志TF0位置1。 n定时时间的计算:如果定时器初值为a,则方 式1的定时时间t为: n例5.9 已知晶振频率为12MHz,T0工作于方式1,产 生50ms定时中断,TF0为高级中断源。试编写主函数 、初

10、始化函数和中断函数,使P1.0产生周期为1s的方 波。 TL0初值为0B0H,TH0初值为3CH。 分析: 定时器T0 50ms中断一次,每10次中断500ms, P1.0取反,输出周期为1s的方波 编程如下: #include “reg52.h“ #define uchar unsigned char #define uint unsigned int sbit P1_0=P10; uchar T0CNT0; /中断计数变量 void init_t0_1() /T0初始化函数 TH0=0x3c; /装入初值 TL0=0xb0; TMOD=1; /设置T0工作模式,定时、方式1 IP=2; /

11、设置优先级寄存器00000010,高级中断 TR0=1; /启动T0 IE=0x82; /设置中断容许寄存器10000010 T0CNT0=0xa; /T0CNT0=00001001 10次 void main() /主函数 init_t0_1(); /调T0初始化函数 for(;); /空转 void timer0(void) interrupt 1 /T0中断函数 TL0|=0xb0; /T0与10110000或操作,送初值 TH0=0x3c; /送初值 T0CNT0 - ; /自减1 if( T0CNT0=0) / T0CNT0减到0,P1_0 取反 T0CNT0=10; /送10给 T

12、0CNT0,准备下一段定时 P1_0=P1_0; n显然,当晶振频率为12 MHz,定时器初值为 0时,方式1最长定时时间为: n在定时时间t确定的情况下,定时器初值M可表示为: (“12时钟/机器周期”模式 ) (“6时钟/机器周期”模式) 在上式中,如果 单位取MHz,则定时时间 t的单位是s。 n定时/计数器T1工作于方式1时,与定时/计数器T0方 式1完全相同。 n由于方式1没有自动重装初值功能,TH0溢出后,定 时器将从0000H开始计数。因此,当需要重复定时 或计数时,必须通过数据传送指令重装初值。为了 减少定时误差,进入定时器中断服务程序后,最好 立即重装初值。 图5-18 定时

13、/计数器T0(T1)工作于方式2的结构 2. 工作方式2 n 计数满后自动装入计数初值; n 8位定时/计数器; n M1、M0=10。 TLX作为常数缓冲器,当TLX计数溢出时 ,在置“1”溢出标志TFX的同时,还自动的将 THX中的初值送至TLX,使TLX从初值开始重新 计数。定时器/计数器的方式2工作过程如图 所示。 省去用户软件中重装初值的程序,精确的定时。 n由于方式2的计数长度 为8位,因此定时时间 t与计数器初值M之间 的关系为: n由于在方式2中,自动 重装初值保存在TH0 寄存器中,因此同样 需要初始化TL0和 TH0(内容与TL0相同) 。 例 5.11 时钟计数程序 设f

14、=12MHz , T0工作于方式2,产生250us 定时中断,T0在1秒内产生4000次中断,T0中 断函数用一个变量对中断次数计数,每当产生 4000次中断置位标志,通知主程序对时钟计数 ,并用printf语句将时钟显示在Serial#1窗口上 。 #include “reg52.h“ #include “stdio.h“ #define uchar unsigned char #define uint unsigned int uint TIME3=22,58,50;/通过数组初始化实现时钟初始化 uint T0CNT0; bit F_SS; /设置标志变量 时分秒 void init_s

15、ys() /系统初始化函数 SCON=0x52; /为printf语句用到的串行口初始化 TMOD=0x22; /设置T0、T1工作在方式2,定时 TH1=0xfd; /给T1送初值 TL1=0xfd; TL0=6; /给T0送初值 TH0=6; F_SS=0; /标志位清0 T0CNT0=4000; /4000次中断 TCON=0x50; /设置控制寄存器1001000,TF1=1,TR1=0 TF0=0,TR1=1 IE=0x82; /设置中断容许寄存器10000010,容许T0中断 IP=2; /设置中断优先级寄存器00000010, T0是高级中断 void timter0() interrupt 1 /T0中断函数 T0CNT0-; /T0CNT0变量自减1 if(T0CNT0=0) /T0CNT0减到0,说明1s时间到 F_SS=1; /设置标志,通知主程序 T0CNT0=4000; /4000送T0CNT0,准备下一个1s cnt_clock(uint *p) /时钟计数函数 *p+=1; /秒加1, *p 所指单元内容加1 if(*p=60) /如果秒单元加到60, *p=0; /秒单元清0 p -= 1; /指针下移到分单元 *p += 1; /分单元内容加1, if(*p=60) /如果分单元加到60 *p=0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号