单片微机中的定时器和计数器是重要的硬件资源,它们在许多应用中发挥着不可或缺的作用。在80C51系列微控制器中,通常包含至少两个16位的定时器/计数器,例如T0和T1,而在某些扩展型号如80C52中则有三个,增加了T2。在某些80C51变种,如80C552,还有一个8位的定时器T3,用于看门狗功能。
定时器/计数器的基本原理是基于一个加1计数器,它能够对输入的脉冲或者内部的机器周期进行计数,从而实现定时或计数的功能。当输入脉冲在T0或T1引脚上从1变为0时,计数器会增加1,而定时功能则是通过计算内部机器周期来实现的。此外,这些定时器还可以用作串行接口的波特率发生器,为串行通信提供稳定的时间基准。
定时器的工作方式由TMOD寄存器中的M1和M0位决定,共有四种工作模式:
1. 方式0:13位定时器/计数器,最大计数值为8192,适用于短期定时任务。
2. 方式1:16位定时器/计数器,最大计数值为65535,适合需要较长定时时间的场景。
3. 方式2:8位定时器/计数器,具有自动重装载功能,初值可自动恢复,但计数范围较小,仅为256,适用于需要连续定时且范围不大的应用,如波特率发生器。
4. 方式3:仅T0支持,将T0分为两个独立的8位计数器TH0和TL0,适用于需要独立控制的计数或定时任务。
控制定时器的启动和停止,以及中断功能,主要通过TCON寄存器中的TRx和TFx位。中断允许寄存器IE和中断优先级寄存器IP则决定了中断的启用和优先级。当定时器计数达到预设值时,可以通过中断请求CPU处理相关任务,也可以通过查询方式检测定时器状态。
在实验五中,使用P1.0和P1.1连接的两个发光二极管,通过INT0上的按键启动或关闭定时器,实现1秒的亮灭周期。实验六则更进一步,利用T1作为脉冲输入端,通过P1口的8个数码管显示输入脉冲的数量,同时P3.2口输出2秒周期的方波,按键作为系统运行的开关。
通过灵活配置定时器/计数器的工作方式和中断机制,可以实现各种复杂的定时和计数任务,从而满足不同应用的需求。在实际开发中,了解和熟练掌握这些原理是设计高效、可靠的微机系统的关键。