定时器介绍:51单片机定时器属于单片机内部设备,定时器的运转全部都在单片机内部。
定时器作用:① 精确延时/定时(到点了触发中断执行操作。)
② 可以代替长时间的delay,可以边等边做其他事情。
| 软件延时 | 定时器 | |
|---|---|---|
| 原理 | CPU 空循环数数 | 硬件自动计数,CPU 不参与 |
| CPU 占用 | 全程占用,干不了别的 | 零占用,CPU 可以做别的事 |
| 能不能同时干活 | 不能 | 能 |
定时器的三部分:
时钟:提供计数脉冲
计数单元:时针计数
中断系统:产生中断,执行定时任务。
时钟(脉冲源)→ 计数单元(累加溢出)→ 中断系统(触发响应)
↑ ↑ ↑ 提供动力 干活的 响应的
定时器一共有四种工作模式,其中模式一是最常用的,下图就是工作模式一框图:
圈中三部分就代表着时钟,计数单元,中断系统。
左边时钟:负责传递脉冲,如何设定脉冲:1.可以通过SYSclk系统时钟,为计时器模式
2.通过T0Pin外部引脚控制,为计数器模式
系统时钟晶振周期为12MHS,第一个岔路进行分频,第二个岔路进行设定脉冲的选择。
中间的计数单元:是16位计数器,最大能记65535,每接收时钟传来的脉冲就会加1,当到65535时就会发生溢出,随后进入中断系统申请中断。
中断系统:CPU在干一件事时,外界紧急事件请求会中断原本的运行,而去干紧急事件,完成之后继续完成原来的事。中断源:请求 CPU 中断的来源(CST89C52 有6个:INT0/T0/INT1/T1/串口/T2)。优先级:多个中断源同时请求时,CPU 按轻重缓急排队,先响应优先级最高的。中断嵌套:CPU 正在处理低级中断时,更高级中断来了 → 暂停低级 → 处理高级 → 回来继续低级。有嵌套=多级中断系统,无嵌套=单级。
剩下就是根据定时器与中断系统的结构进行寄存器的配置即可。
| 步骤 | 寄存器 | 作用 |
|---|---|---|
| 1 | TMOD | 设置工作模式(16位定时器) |
| 2 | TF0 | 清除溢出标志 |
| 3 | TR0 | 启动定时器 |
| 4 | TH0/TL0 | 装入定时初值(决定定时多久) |
| 5 | ET0 | 允许定时器中断 |
| 6 | EA | 开总中断 |
| 7 | PT0 | 设置中断优先级 |
中断函数代码:
1.interrupt 1:51 单片机中断号,1代表定时器 0 溢出中断服务函数。
2.TR0就是定时器开关,打开后会自己数到65535,溢出时会自动跳转到中断函数。
可以通过设置定时器来设置每隔多长时间进入中断函数(主要是设定初值),
12MHz晶振 → 1机器周期 = 1us → 每次计数 = 1us 定时时间 = (65536 - 初值) × 1us 初值 = 65536 - (定时时间(us) / 1)
但是最多定时65.536ms(65536 × 1us),假如想每1s中断一次,需要多次中断累加。
下面就是利用设置TL0和TH0来设置初值,每个过程1ms累计1000次就是1s。
定时器代码:
就在中断为1s的基础上增添3个if语句使时钟改变。
main函数代码:
定义3个变量,LCD_Init使初始化,使允许中断。其他就是在液晶屏的显示。