课程设计-单片机定时器的设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要

单片机是一种集成在电路芯片,是采用超大范畴集成电路技能把具有数据处理本事的中心处理器CPU 随机存储器RAM、只读存储器ROM、多种I/O 口和间断系统、定时器/计时器等成果(大要还包括表现驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完竣的计较机系统。单片机具有特点具有良好的性能价格比;低电压、低功耗;集成度高、体积小、可靠性高;控制成果强等优点。

计算机暂时中止正在执行的主程序,转去执行中断服务程序,并在中断服务程序执行完了之后能自动回到原主程序处继续执行,这个过程叫做“中断”。中断需要解决两个主要问题:一是如何从主程序转到中断服务程序;二是如何从中断服务程序返回主程序。

关键词:单片机,中断,延时

目录

1.设计目的 (1)

2.设计任务的内容和要求 (1)

3.设计原理 (1)

4.程序说明 (3)

5.心得体会 (6)

定时器试验

1.设计目的

(1)熟练运用汇编语言编程,并且掌握键盘查表来运行相应的功能

(2)熟悉启东硬件仿真系统,熟练应用该系统调试软件

(3)熟悉单片机应用系统的组成,并能运用程序控制外部流水灯

2.设计任务的内容和要求

(1)初始化定时器,使之采用定时器0,方式2,定时100us时间

(2)通过设置中断,产生总时间为1秒

(3)1秒时间到,控制发光二极管点亮

3.设计原理

在实际的控制系统中常要求有外部实时时钟,以实现定时或延时控制;还要求有外部计数器,以实现对外界事件进行计数。

MCS-51单片机由两个可编程定时/计数器(以下简称T/C)。T0,T1

T/C的核心是1个加1计数器,它的输入脉冲有两个来源:一个是外部脉冲源,另一个是系统机器周期(时钟振荡器经12分频以后的脉冲信号)。T0,T1是2 个16位寄存器。加1到满溢出产生中断

T0(TH0,TL0);8CH,8AH地址不连续

T1(TH1,TL1);8DH,8BH

都具有定时或者计数功能。

图一

图一有2个模拟的位开关,前者决定了T/C的工作状态:当开关处于上方时为定时状态,处于下方时为计数状态。工作状态的选择由特殊功能寄存器TMOD的C/T位来决定。C/T=0表示定时,C/T=1表示计数。

当T/C处于定时方式时,加1计数器在每个机器周期加1,因此,也可以把它看作在累计机器周期。由于一个机器周期包含12个振荡周期,所以它的计数速率是振荡频率的1/12。

如果主频12M,机器周期为1us,每1us定时寄存器完成1次加1操作。一旦振荡周期确定,机

MCS-51单片机有2个特殊功能寄存器TMOD和TCON:TMOD用于设置T/C的工作方

式;TCON用于控制定时器T0、T1的启动与停止,并包含了定时器的状态。定时/计数器工作方式如下表所示

定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。

在编写中断服务程序时,应该清楚中断响应过程:CPU 执行中断服务程序之前,自动将程序计数器PC 内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A 和其它寄存器内容)然后将对应的中断矢量装入程序计数器PC 使程序转向该中断,矢量地址单元中以执行中断服务程序。定时器T0 和T1 对应的中断矢量地址分别为000BH 和001BH。中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。

本设计采用工作模式2

当T0M(T1M)=10时定时器设定为工作模式2,此时定时器0(定时器1)被设置为可自动重载的8 位定时器。

TL0为8位加法计数器,

TH0为存放该8位加法计数器初值的寄存器。

TH0、TL0的初值都由程序预置。

在工作模式2中,定时器的定时时间由下式确定

T*

(256

=

Tcy

)

X

-

图二方式2结构图

4.程序说明

此程序大体分为3部分

第一部分:开始部分

这一部分主要是指定了程序的起始地址,中断地址等初始化操作。

ORG 0000H

AJMP START

ORG 000BH ;定时器0的中断向量地址

AJMP TIME0 ;跳转到真正的定时器程序处

ORG 30H

这一部分主要是指定了程序的起始地址,中断地址等初始化操作。

第二部分:主程序

主程序是程序的主体。在本例中,主程序主要为定时计数器T0实现了初始化以及中断的开启。P1.1为测试是否进入主程序的测试灯,实际运行时只会被点亮一次而不会再有动作。P1.2是进入中断程序前的指示灯,和P1.1一样,只会被点亮一次而不会再有动作。

START: MOV P1,#0FFH ;关灯

CPL P1.1;测试1

MOV 30H,#00H ;软件计数器预清0

MOV TMOD,#0000010B ;定时/计数器0工作于方式2

MOV TH0,#00H

MOV TL0,#09cH ;156

SETB EA ;开总中断允许

SETB ET0 ;开定时0允许

SETB TR0 ;定时0开始运行

CPL P1.2 ;测试2

SJMP $

第三部分:中断子程序

该中断服务子程序是程序的核心。由于本次试验的单片机周期为1微秒,定时计数器的周期为100微秒,故要想在1秒之后点亮P1.0,则需要进入10000次中断子程序之后点反转一次P1.0口。

为此,我设计了一个软件计数器。此计数器分为2部分。每一部分都可以计数到100.当第一个子计数器计数到100之后,就会转向第二个子计数器,使其加一。于是,两个计数器的计数和为100*100=10000,最终就是1秒。在每一次计数结束后,计数器清零,同时反转P1.1.

TIME0: ;定时器0中断程序

INC 30H

MOV A,30H

CJNE A,#64h,T3 ;30H单元中的值到了100了吗?

以上部分是计数器的第一部分,由于寄存器空间限制,单个寄存器不能够计数到10000,

相关文档
最新文档