当前位置:文档之家› 单片机课定时器

单片机课定时器

燕山大学课程设计说明书题目:定时器实验学院(系):电气工程学院年级专业: 09级仪表(2)班学号: 0901******** 学生姓名:吴季哲指导教师:张淑清教师职称:教授摘要单片机,一个集成在一块芯片上的完整计算机系统。

尽管它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。

同时集成诸如通讯接口、定时器,实时时钟等外围设备。

而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。

单片机8031中有两个16位定时器/计数器,分别为定时器/计数器0和定时器/计数器1,简称为定时器0(T0)和定时器1(T1)。

定时器/计数器具有计数和定时功能,拥有4种工作方式,即工作方式0~3。

本次课程设计采用的是定时器0的工作方式2来实现定时功能。

利用工作方式2的区别于定时工作方式0和1的自动重新加载功能,循环定时,通过软件和硬件的结合达到定时的目的。

在单片机外部接连适当的电路,通过开关按键启停定时功能,通过二极管灯亮与否判断定时时间到否。

关键词单片机8031 定时器0 工作方式2 二极管目录摘要 (1)第一章.绪论 (3)1.1 引言 (3)1.2本人所做工作 (3)1.3课题概述 (3)第二章课程设计报告内容 (5)2.1 双音多频(DTMF)信号简介 (5)2.1.1相关控制寄存器 (5)2.1.2定时器工作方式2 (7)2.1.3 总体设计 (9)2.2 详细设计 (9)2.2.1 硬件设计 (9)2.2.2软件设计 (11)第三章程序代码及其分析 (13)3.1 定时器程序代码 (13)3.1.1定时器的原程序代码如下所示 (13)3.1.2修改后定时器的原程序代码如下所示 (14)3.2结果分析 (18)3.2.1在原程序中结果分析 (18)3.2.1在扩展程序中结果分析 (19)第4章总结 (20)参考文献第一章绪论1.1 引言在我们平时的生活中,有许多地方可以看到定时的影子,如手表定时、电脑电视定时、工厂车间零件制作定时等等。

定时不仅让我们的生活变得时间化和规律化,也从一定程度上提高了生产力,提高了人民的生活水平。

基于单片机的定时,轻巧简便,利于携带和操作,在当今物质文化飞速发展的今天更是必不可少的。

所以研究基于单片机的定时器设计很有意义。

1.2 本人所做工作在这次的单片机课程设计中,我和同组同学被派发“定时器”这一课题。

作为一名普通的组员,我和其他组员都各尽其职,为顺利完成此次课题一起努力着。

课程设计期间,我和同组人员讨论并完善程序代码。

这个过程让我受益匪浅,不仅提高了自己的代码分析能力,也从一定程度上锻炼了动手能力。

1.3课题概述在单片机控制应用的定时和计数的需求很多,为此在单片机中都有定时器/计数器。

8031的两个定时器/计数器都是16位加法计数结构。

由于在8031中只能使用8为字节寄存器,所以把两个16位定时器分解为4个8位定时器,依次为TL0、TL1、TH0和TH1。

它们均属于专用寄存器之列。

单片机的定时功能是通过计数器的计数来实现的,不过此时的计数脉冲来自单片机芯片内部,每个机器周期有一个计数脉冲,即每个机器周期计数器加1。

由于一个机器周期等于12个振荡脉冲周期,因此,计数频率为振荡频率的1/12。

如果单片机采用12MHz晶振,则计数频率为1MHz,即每微妙计数器加1。

这样,在使用定时器是既可以根据计数值计算出定时时间,也可以通过定时时间的要求算出计数器的预置值。

要实现定时器的功能,需要用到与定时器/计数器应用有关的控制寄存器,它们分别是:定时器控制寄存器(TCON)、定时器方式选择寄存器(TMOD)、中断允许控制寄存器(IE)。

此次课题所要设计的系统比较简易,其主要功能是:利用定时器/计数器定时,去实现二极管不同顺序发光。

第二章课程设计报告内容2.1 背景知识2.1.1相关控制寄存器在8031中,与定时器/计数器应用有关的控制寄存器共有3个,分别是定时控制寄存器、工作方式控制寄存器和中断允许控制寄存器。

本次课程设计将会涉及这三个控制寄存器,现对它们说明如下。

(1)定时器控制寄存器(TCON)TCON寄存器地址为88H,位地址为8FH~88H。

该寄存器位定义及位地址表示如表3-1所示。

表3-1 TCON寄存器表示定时器控制寄存器中,与定时器/计数器有关的控制位共4位,即TF1、TR1、TF0和TR0,它们的作用分别为:TR0和TR1——运行控制位。

TR0(TR1)=0,停止定时器/计数器工作;TR0(TR1)=1,启动定时器/计数器工作。

控制计数启停只需用软件方法使其置1或清0即可。

TF0和TF1——计数溢出标志位。

当计数器产生计数溢出时,相应溢出标志位由硬件置1。

计数溢出标志用于表示定时/计数是否完成,因此,它是供查询的状态位。

当采用查询方法是,溢出标志位被查询,并在后续处理程序中应以软件方法及时将其清0。

而当采用中断方法是,溢出标志位不但能自动产生中断请求,而且连清0操作也能在转向中断服务程序时由硬件自动进行。

(2)定时器方式选择寄存器(TMOD)TMOD寄存器用于设定定时器/计数器的工作方式。

寄存器地址为89H,但它没有位地址,不能进行位寻址,只能用字节传送指令设置其内容。

该寄存器的位定义如表3-2所示。

表3-2 TMOD寄存器表示它的低半字节对应定时器/计数器0,高半字节对应定时器/计数器1,前后半字节的位格式完全对应。

位定义如下:GATE——门控位。

GA TE=0,以运行控制位TR启动定时器;GATE=1,以外中断请求信号(0INT)启动定时器,这可以用于外部脉冲宽度INT或1测量。

C/——定时方式或计数方式选择为。

TTC/=1,计数工作方式。

C/=0,定时工作方式;TM1M0——工作方式选择位。

M1M0=00,工作方式0;M1M0=01,工作方式1;M1M0=10,工作方式2;M1M0=11,工作方式3。

(3)中断允许控制寄存器(IE)该寄存器地址为A8H,位地址为AFH~A8H。

寄存器位定义及位地址如表3-3所示。

表3-3 IE寄存器表示其中与定时器/计数器有关的是定时器/计数器中断允许控制位ET0和ET1。

ET0(ET1)=0,禁止定时器中断;ET0(ET1)=1,允许定时器中断。

2.1.2 定时器工作方式28031的两个定时器/计数器都有4种工作方式是,即工作方式0~3。

由于本次课程设计主要涉及定时器/计数器0的工作方式2,所以以下将重点介绍定时器/计数器0的工作方式2。

本次课程设计使用定时器工作方式2,是由于其相对定时器工作方式0和工作方式1有一定的长处。

工作方式0和工作方式1有一个共同点,就是计数溢出后计数器全为0,因此循环定时应用时就需要反复设置计数初值。

这不但影响定时精度,而且也给程序设计带来麻烦。

工作方式2就是针对此问题而设置的,它具有自动重新加载计数初值的功能,免去了反复设置计数初值的麻烦。

定时器/计数器0的工作方式0和工作方式2所对应的电路逻辑结构图分别如图3-1和图3-2所示。

图3-1定时器/计数器0的工作方式0逻辑结构图3-2 定时器/计数器0的工作方式2逻辑结构对比上述两图,我们可以发现工作方式0和工作方式2对应的逻辑结构还是有许多部分相同的,如两图的右半部分,而两图左半部分则有所差异。

下面将对其相同点和不同点作简要分析,这也是为什么这次课程设计选择工作方式2的原因。

相同点:两种工作方式,计数脉冲既可以来自芯片内部,也可以来自外部。

来自内部的是机器周期脉冲,图中OSC是英文Oscillator(振荡器)的缩写,表示芯片的晶振脉冲,经12分频后,即为单片机的机器周期脉冲。

来自外部的计数脉冲由T0(P3.4)引脚输入,计数脉冲由控制寄存器TMOD的TC/位进行控制。

当TC/=0时,接通机器周期脉冲,计数器每个机器周期进行一次加1,这就是定时器工作方式;当TC/=1时,接通外部计数引脚T0(P3.4),从T0引入计数脉冲输入,这就是计数工作方式。

不同点:如图3-1所示的左半部分,工作方式0条件下,TL0使用了5位,当TL0的低5位计数溢出时,向TH0进位;而全部13位计数溢出时,向计数溢出标志位TF0进位,将其置1。

如图3-2所示的左半部分,工作方式2条件下,16位计数器被分成两部分,TL作为计数器使用,TH作为预置寄存器使用,初始化时把计数初值分别装入TL和TH中。

当计数溢出后,由预置寄存器TH以硬件方法自动给计数器TL重新加载。

变软件加载为硬件加载。

更详细点,初始化时,8位计数初值同时装入TL0和TH0。

当TL0计数溢出时,置位TF0,并用保存在预置寄存器TH0中的计数初值自动加载TL0,然后开始重新计数。

如此重复,这样不但省去了用户程序中的重装指令,而且也有利于提高定时精度。

2.1.3 总体设计如图3-3所示是此次课题设计的总体框架图。

图3-3 定时器总体框架图2.2 详细设计2.2.1 硬件设计(1)定时器设计电路图本次课程设计设计的电路图如图3-4所示。

图中单片机采用8031,由图可见,P1.0~P1.7依次控制八个LED灯。

图3-4 定时器电路图2.2.2软件设计(1)计数初值计算根据定时器/ 计数器0的工作方式2逻辑结构图可知,使用工作方式2的计数范围是1~255,定时时间的计算公式为:(28-计数初值)*晶振周期*12或(28-计数初值)*机器周期本次课题设计的晶振频率为12MHz,所以机器周期为1微秒。

由于工作方式2计数最高限值为255,所以这里选定定时时间为100微秒,这样可计算出计数初值。

设计数初值为x,则(28- x)*1*10-6s=100*10-6s计算得x=(256-50)=(256-50)。

所以寄存器TL0和TH0都设置初值为CEH。

每一次定时时间要求是100U秒,所以可利用软件方法实现10000次1秒的定时,这就是循环定时。

(2)详细流程图定时器设计的详细流程图如图3-5所示。

图3-5 定时器设计详细流程图第三章程序代码及其分析3.1 定时器程序代码3.1.1定时器的原程序代码如下所示。

#include <reg51.h>#define Tick 10000 // 10000 x 100us = 1s#define T100us (256-50) // 100us时间常数(6M)unsigned int C100us; // 100us记数单元bit LEDBuf;sbit LED = P1^0;void T0Int() interrupt 1{C100us--;if (C100us == 0) {C100us = Tick; // 100us 记数器为0, 重置记数器LEDBuf = !LEDBuf; // 取反LED}}void main(){TMOD = 0x02; // 方式2, 定时器TH0 = T100us;TL0 = T100us;IE = 0x82; // EA=1, IT0 = 1LEDBuf = 0;LED = 0;C100us = Tick;TR0 = 1; // 开始定时while (1) {LED = LEDBuf;}}3.1.2修改后定时器的原程序代码如下所示。

相关主题