MCS-51单片机定时器中断编程实例与解析

需积分: 33 0 下载量 112 浏览量 更新于2024-08-22 收藏 856KB PPT 举报
"MCS-51系列单片机的定时器/计数器使用中断法编程示例" 本文将详细解析MCS-51单片机中的定时器/计数器工作原理及其编程方法,重点围绕中断法编程展开。MCS-51系列单片机内置了两个可编程定时器/计数器——T0和T1,它们可以通过用户程序选择不同的工作模式,设定相应的工作参数和条件。 ### 定时器/计数器的结构 MCS-51单片机的定时器/计数器由THx(高8位)和TLx(低8位)两个8位寄存器组成,其中x表示定时器编号(0或1)。此外,还有两个专用寄存器TMOD(定时器工作方式寄存器)和TCON(控制寄存器)。TMOD用于设置定时器的工作模式,TCON则包含控制位,如启动/停止控制位(TRx)和中断标志位(TFx)。 ### 工作原理 定时器/计数器的核心是加1计数器。计数脉冲可以来源于两个途径:一是机器周期的12分频信号,用于定时工作模式;二是外部脉冲,通过T0(P3.4)或T1(P3.5)引脚输入,用于计数工作模式。在定时模式下,计数器每接收到一个机器周期的信号,计数值增加1,直到达到最大值后溢出,触发中断标志位TFx并申请中断。在计数模式下,外部脉冲的下降沿使计数值增加1。 ### 中断法编程示例 以下是一个简单的中断法编程例子,使用T0定时器: ```assembly ORG 0000H SJMP STAR ;程序开始跳转至STAR ORG 000BH ;定义T0服务程序入口 AJMP DVT0 ORG 0030H STAR: MOV TMOD,#01H ;设置TMOD为定时器工作方式1 MOV TH0,#0D8H ;设置TH0为计数初值 MOV TL0,#0F9H ;设置TL0为计数初值 SETB ET0 ;启用T0中断 SETB EA ; 开放CPU全局中断 SETB TR0 ; 启动T0定时器 SJMP $ ; 等待中断 DVT0: MOV TH0,#0D8H ; 重装计数初值 MOV TL0,#0F0H ; 重装TL0 CPL P1.7 ; 翻转P1.7引脚状态 RETI ; 中断返回 ``` 在这个示例中,程序首先设置TMOD寄存器,让T0工作在方式1,然后装载计数初值,并开启中断和定时器。当T0溢出中断发生时,执行中断服务程序DVT0,重新装载计数初值,并改变P1.7引脚的状态。 ### 控制与设定 - **定时器/计数器设定**:通过TMOD寄存器设置工作模式。四位D3-D0用于设定T0,四位D7-D4用于设定T1,每个定时器有四种工作模式(0-1)。 - **启动/停止**:使用TCON寄存器的TRx位来启动或停止定时器。TR0用于T0,TR1用于T1,置1为启动,清0为停止。 - **计数器值设定**:THx和TLx寄存器用于存储计数值,可以通过指令直接写入。 总结,MCS-51单片机的定时器/计数器功能强大且灵活,能够实现精确的定时和计数任务,通过中断法编程可以高效地响应定时事件,广泛应用于各种实时控制系统和定时操作中。