1. 定时器与中断:单片机的时间管理大师
记得我刚开始学51单片机那会儿,最让我头疼的就是定时器和中断这两个概念了。每次看到代码里那些TMOD、TCON寄存器配置,脑袋就嗡嗡响。直到有一次做LED闪烁项目,用普通的延时函数实现不了精确控制,才硬着头皮研究定时器,结果发现这东西真的太实用了!
定时器其实就是单片机内部的一个秒表,只不过这个秒表特别精准,它可以独立于主程序运行,到点了就提醒CPU该干活了。而中断系统就像是这个秒表的闹铃功能,时间一到就响铃,CPU不管在做什么都要先来处理定时器的事情。
我建议初学者先把定时器想象成一个厨房用的定时器:你设定好时间(配置寄存器),启动它(TR0=1),然后就可以去忙别的事情了(执行主程序)。等时间到了它会发出"嘀嘀"声(触发中断),你就要放下手中的活来处理(执行中断服务程序)。
2. 定时器工作原理与模式选择
2.1 定时器的核心机制
51单片机通常有两个16位定时器:T0和T1。每个定时器由两个8位寄存器组成(THx和TLx),这样就能组成16位的计数器。上电后这些寄存器初始值都是0,启动后每个机器周期自动加1。
这里有个很重要的概念:机器周期。51单片机中,1个机器周期=12个时钟周期。如果你的晶振是12MHz,那么时钟周期就是1/12微秒,机器周期就是1微秒。这个关系一定要搞清楚,因为所有定时计算都基于这个。
我刚开始总是算错时间,后来发现了个小技巧:用12MHz晶振时,机器周期正好是1微秒,计算起来特别方便。比如要定时50ms,就是50000个机器周期,那么初始值就是65536-50000=15536。
2.2 四种工作模式详解
51单片机的定时器有4种工作模式,通过TMOD寄存器的M1和M0位来设置:
模式0(13位模式):把TLx的低5位和THx的8位组合成13位计数器。最大计数值8192,现在很少用了,主要是为了兼容老型号。
模式1(16位模式):这是最常用的模式!THx和TLx组成完整的16位计数器,最大计数值65536。我做项目90%的情况都用这个模式。
模式2(8位自动重装):TLx作为8位计数器,THx存放重装值。当TLx溢出时,不仅会触发中断,还会自动把THx的值重新装入TLx。特别适合做精确的波特率发生器。
模式3:这个模式比较特殊,只适用于T0。把T0拆成两个独立的8位定时器,TL0用T0的控制位,TH0用T1的控制位。实际项目中用的不多。
我一般这样选择模式:需要长时间定时用模式1,需要精确的串口通信用模式2,其他两种模式基本不用。
3. 定时器实战配置:从LED闪烁到精准定时
3.1 完整的配置步骤
配置定时器其实就6个步骤,我总结了个顺口溜:"模式先设定,初值要算清,中断允许开,启动不能忘,中断函数写,重装要记得"。
具体来说:
- 设置TMOD寄存器


1913

被折叠的 条评论
为什么被折叠?



