实例(8)-定时器

上传人:腾**** 文档编号:45731487 上传时间:2018-06-18 格式:PDF 页数:4 大小:232.73KB
返回 下载 相关 举报
实例(8)-定时器_第1页
第1页 / 共4页
实例(8)-定时器_第2页
第2页 / 共4页
实例(8)-定时器_第3页
第3页 / 共4页
实例(8)-定时器_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《实例(8)-定时器》由会员分享,可在线阅读,更多相关《实例(8)-定时器(4页珍藏版)》请在金锄头文库上搜索。

1、嵌入式学习51 单片机篇 1 实验实验(8) 定时器定时器 一、实验目的:一、实验目的: 1、 熟悉与定时器相关的寄存器。 2、 掌握定时器的工作原理。 3、 编程实现利用定时器控制数码管显示。 二、实验二、实验原理:原理: 2.1、 51 单片机的定时器单片机的定时器 传统 51 单片机有两个 16 位定时器,分别是定时器 0 和定时器 1。两个 16 位定时器/计 数器 T0 和 T1 都具有计数方式和定时方式两种工作方式。对每个定时器/计数器(T0 和 T1), 在特殊功能寄存器 TMOD 中都有一个控制位 C/T 来选择 T0 或 T1 为定时器计数器。定时器 /计数器的核心部件是一个

2、加法计数器,其本质是对脉冲进行计数,只是计数脉冲来源不同。 如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每 12 个时钟得到一个计断 脉冲,计数值加 1;如果计数脉冲来自单片机外部引脚(T0 为 P3.4,T1 为 P3.5),则为计数 方式,管脚上每来一个脉冲计数值加 1。 2.2、增强型、增强型 STC 51 单片机的定时器单片机的定时器 增强弄 STC 51 单片机的两个 16 位定时器/计数器 T0 和 T1 完全兼容传统 51 单片机的 定时/计数器。但是增强型 51 单片机是单周期指令的单片机,因此时钟不用 12 分频。因此, 在定时模式时,既可以选择每 12 个时钟

3、计数值加 1(兼容传统 51 单片机),也可以选择每 1 个时钟计数值加 1。利用特殊功能寄存器 AUXR 中的 T0x12 和 T1x12 分别决定是系统时钟 /12 还是系统时钟/1 后让 T0 和 T1 进行计数。 2.3、定时定时/ 计计数器的工作方式数器的工作方式 定时/计数器 0 有 4 种工作模式:模式 0(13 位定时/计数器),模式 1(16 位定时/计数器), 模式 2(8 位自动重装),模式 3(两个 8 位定时/计数器)。定时/计数器 1 除模式 3 外,其他工 作模式与定时/计数器 0 相同,T1 在模式 3 时无效,停止计数。 在本实验中,我们使用的是模式 1(16

4、 位定时/计数器),下面对模式 1 作进一步描述。在 实验 9 中将会使用定时/计数器 1 的模式 2(8 位自动重装模式)作为串行通信中的波特率发生 器。如果想了解其他的模式,可以查阅单片机的数据手册(STC12C5A60S2.pdf)。 嵌入式学习51 单片机篇 2 图 1 定时/计数器 0 的模式 1:16 位定时/计数器 在模式 1 下,定时器 0 配置为 16 位计数器,由 TL0 和 TH0 所构成。TL0 的 8 位溢出后 向 TH0 进位,TH0 计数溢出时置位 TCON 中的溢出标志位 TF0。GATE(TMOD.3)=0 时,如 TR0=1,则定时器计数。GATE=1 时,

5、允许由外部输入/INT1 控制定时器 1,/INT0 控制定时 器 0。 如上图,当 C/T=0 时,多路开关连接到系统时钟的分频输出,T0 对时钟周期计数,T0 工作在定时方式。当 C/T=1 时,多路开关连接到外部脉冲输入 P3.4/T0,即 T0 工作在计数 方式。 STC12C5A60S2 系列单片机的定时器有两种计数速率:一种是 12T 模式,每 12 个时钟 加 1,与传统 8051 单片机相同;另外一种是 1T 模式,每个时钟加 1,速率是传统 8051 单 片机的 12 倍。T0 的速率由特殊功能寄存器 AUXR 中的 T0x12 决定,如果 T0x12=0,T0 工 作在 1

6、2T 模式;如果 T0x12=1,T0 工作在 1T 模式。 2.4、硬、硬件原理图件原理图 本实验用到的外围硬件是数码管电路。 图 2 硬件原理图 三三、程序设计、程序设计 实验中,我们确定定时器工作在 1T 还是 12T 模式。首先计算出定时器定时 1ms 的初值 T1MS如 果 是1T模 式 , T1MS=(65536-FOSC/1000) ; 如 果 是12T模 式 , 则 T1MS=(65536-FOSC/12/1000)。 16 位加法计数器从初值 T1MS 开始加, 一直加到 65536 溢出, 产生定时器中断,再在中断服务程序里重新赋初值,同时使 Count 变量加 1。 在主

7、函数中,当 Count 超过 1000 时,使 Count 置 0,并使数码管显示的数值加 1,这样 就使数码管每隔 1 秒,显示的数值就加 1。 实验代码如下: #include “sys.h“ /包含系统信息和延时函数 嵌入式学习51 单片机篇 3 #include “SMG.h“ /包含数码管驱动 #define MODE1T /定义使用 1T 模式 #ifdef MODE1T #define T1MS (65536-FOSC/1000) /1ms 定时,1T 模式 #else #define T1MS (65536-FOSC/12/1000) /1ms 定时,12T 模式 #endif

8、 unsigned int Count = 0; /* 定时器 0 中断初始化函数 */ void Time0_Init() #ifdef MODE1T AUXR = 0x80; /T0x12 位置 1,T0 使用 1T 模式 #endif TMOD = 0x01; /模式 1,16 位定时/计数器模式 TL0 = T1MS; /赋初值 TH0 = T1MS8; TR0 = 1; /启动定时器 ET0=1; /T0 中断使能 EA=1; /总中断使能 /* 定时器 0 中断处理函数 */ void Time0_ISR() interrupt 1 using 1 Count+; TL0 = T1MS; TH0 = T1MS8; /主函数 void main() unsigned int num = 0; P0 Count=0; SMG_Display(num); 四、最终效果图四、最终效果图

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

最新文档


当前位置:首页 > 生活休闲 > 社会民生

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