本笔记整理自B站教程【普中官方】51单片机手把手教学视频(上)
不是所有的51单片机都有定时器2,一些增强型有
定时器介绍
CPU时序
目录
振荡周期:为单片机提供定时信号的振荡源的周期;晶振:12M/11.0592M,可以通过晶振的频率来计算振荡周期(倒数)
状态周期:两个振荡周期为一个状态周期
机器周期:1个机器周期等于6个状态周期,相当于等于12个振荡周期
指令周期:指完成一条指令所占用的全部时间,以机器周期为单位,通常是1~4微秒
常用的是机器周期
预备知识
51单片机有两组定时计数器,既可以实现定时也可以实现计数
定时计数和CPU是独立的
定时器配置
定时器原理
TMOD![](https://i-blog.csdnimg.cn/blog_migrate/00e1eef4739822cd1f3112931dfa3a0f.png)
GATE:为0,再通过设置TR0或者TR1来控制定时器0或者定时器1是否开始定时(启动);为1,除了需要设置上述的TR0和TR1,还需要设置INT0或者INT1给高,来启动
C/T:选择是定时还是计数,C是用于计数,高电平有效,T是用于定时,低电平有效
M1,M0:工作方式设置
其中方式2主要用于一些精确的脉冲发生器,比如串口通信
TCON
外部中断主要是用TCON的低4位,这里不做讲解,定时器主要是用TCON的高4位
TF1:定时器1溢出中断的标志,定时器1溢出是由硬件自动置1,不需要软件设置,也由硬件自动清零,等待下一次的响应,当然也可以由软件置1和清零
TR1:定时器1的运行控制位,为1,定时器1开始工作;为0,停止定时器的工作,这是通过软件来设置的
工作方式
方式0
T0引脚是P3.4;T1引脚是P3.5
方式1
TH0保存重装载的初值,当TL0溢出时,TH0会把这个初值又重新装载到TL0中,这种比较于精确的脉冲信号发生器,比如之前提到的串口通信
这里以11.0592M晶振为例,先计算机器周期
振荡周期:1 / 11.0592 us
机器周期 = 12 * 振荡周期 = 12 * 1 / 11.0592 us = 1.085us
如果要让定时器定时1ms,初始值应该怎么设置?(以11.0592M晶振为例)
1ms / 1.085us = 1000 / 1.085 = 921.659 = 922次
65536 - 922 = 64614
64614转换成16进制,为FC66
TL0 = 0x66
TH0 = 0xFC
如果要定时500ms呢?
对于时间比较大的,可以定时10ms,然后在定时器中断函数中用一个变量++,当加到50时,表示定时到了500ms,再产生响应。
范例程序
硬件设计
软件设计
具体程序实现可自行查看B站视频20.7-定时器中断实验--软件编程_哔哩哔哩_bilibili
定时器0的中断号是1
定时器1的中断号是3