89c52单片机定时器编程详解

版权申诉
0 下载量 158 浏览量 更新于2024-12-07 收藏 13KB RAR 举报
资源摘要信息: "89c52定时器编程指南" 知识点概述: 89c52是一种广泛使用的8位微控制器,属于8051系列,由Intel公司开发。该微控制器因其简单、易用且具有良好的性价比而受到许多嵌入式系统开发者的青睐。89c52微控制器内部集成了两个定时器/计数器,即定时器0和定时器1,它们可以被配置为定时器模式、计数器模式,或者产生串行通信所需的波特率。这两个定时器为89c52提供了一个灵活的时间管理解决方案,适用于需要精确计时、计数或时间间隔测量的各种应用。 定时器基础知识: 1. 定时器模式:在这种模式下,定时器以固定频率递增计数,当计数达到设定值时产生中断,通常用于产生定时中断。在定时器模式下,定时器的计数是基于内部时钟信号的。 2. 计数器模式:计数器模式允许定时器对外部事件进行计数。这种模式下,定时器每次接收到外部事件(如脉冲信号)时增加计数。当计数达到设定值时,产生中断,适合于外部事件的计数。 3. 波特率生成:定时器1还可用作串行通信的波特率生成器。通过编程定时器1,可以为串行口提供所需的波特率,实现数据的异步串行通信。 编程89c52的定时器: 1. 初始化定时器:首先需要设置定时器的工作模式,通过TMOD寄存器来配置定时器0和定时器1的工作模式。TMOD寄存器的每一位都有特定的功能,可以用来设定定时器为模式0、模式1、模式2或模式3。 2. 设置定时/计数值:根据需要定时的时间长度,计算并设置定时器的初值。初值的设置决定了定时器溢出的时间间隔,从而确定中断的触发频率。89c52的定时器是16位的,所以它的计数范围从0到65535。 3. 启动定时器:通过设置TCON寄存器中的TR0和TR1位为1,来启动定时器0和定时器1。 4. 定时器溢出中断处理:当定时器溢出时(即从设定的初值计数到65535),会产生一个中断,如果已经允许了中断,那么CPU会暂停当前操作,转去执行定时器溢出中断服务程序。在中断服务程序中,可以重新加载定时器初值,并执行相应的操作。 5. 禁用定时器:在不需要定时器工作时,可以通过清零TCON寄存器中的TR0和TR1位来停止定时器。 定时器编程实例分析: 假设我们想要在89c52上使用定时器0产生一个周期为1秒的中断。我们首先需要计算定时器的初值,这依赖于89c52的时钟频率。如果假设89c52的晶振频率为11.0592MHz,那么机器周期为12分频后为1.085μs。为了得到1秒的定时,定时器需要计数1/1.085μs = 921600次。因为定时器是16位的,所以它能达到的最大值为65535,我们需要将921600除以65536,得到一个商和余数,初值为65536 - 余数。在16进制中计算出初值,然后加载到定时器寄存器TH0和TL0中。 接下来,设置定时器模式为模式1(16位定时器模式),启动定时器,并在中断服务程序中处理定时器溢出事件,重新加载初值并执行所需的操作。 89c52的定时器具有非常重要的作用,它们允许开发人员精确地控制时间间隔,为各种实时任务提供时间基准。掌握定时器的使用和编程对于开发基于89c52的嵌入式系统至关重要。