一、定时器
定时器/计数器是单片机内部资源,有三个定时器T0、T1、T2,其中T0、T1与传统8051单片机兼容,T2是增加的资源。定时器用于计时,代替长时间Delay,来提高CPU运行速度。
二、内部结构
1.定时器内部
定时器工作像一个闹钟,计数溢出,申请中断,执行中断程序。
配置定时器步骤:确定用外部或内部晶振,多少分频;确定用哪个定时器,工作在什么模式;确定计数单元开关打开;确定计数单元初始值;配置中断。
定时器内部结构分为三部分:系统时钟、计数单元、中断系统,如下图所示:
2.定时器工作模式
模式0:13为定时/计数器
模式1:16位定时/计数器(常用)
模式2:8位自动重装
模式3:两个8位计数器
注意:T0可在模式3下工作,控制T1中断;T1不可在模式3下工作,停止计数。
3.T0在模式1的内部结构图
模式不一样,根本上是计数单元能计数溢出值不一样。
系统时钟:内部晶振提供计数脉冲,用作定时器;外部晶振提供计数脉冲,用作计数器。
计数单元:GATE经过非门的值,与#INT0经过或门的结果,再与TR0经过与门,来控制计数开关的开与闭。当GATE为1时,计数开关由#INT0和TR0共同决定;当GATE为0时,计数开关由TR0决定。计数单元初始值,高位(65535 - 定时时间)/256,低位(65535 - 定时时间)%256。其中定时时间1ms为例,高位(65535 - 1/(12/12MHz)* 1000)/ 256,低位(65535 - 1/(12/12MHz)* 1000)%256。
中断系统:看下面。
三、中断系统
1.概念
中断是CPU正在执行主程序,有特定中断来申请中断,CPU暂停执行主程序,转而去执行中断程序,执行完返回主程序,这个过程叫中断。
中断源:申请中断的请求源。STC89C52中断源有8个(4+3+1),分别是外部中断(0-3)、定时器中断(0-2)、串口中断(UART)。对应的有8个中断函数,优先级由高到低,如下图所示:
中断嵌套:CPU在执行中断程序时,有更高优先级中断源申请中断,CPU响应执行更高优先级中断,执行完返回优先级低中断程序继续执行。
2.内部结构
配置中断三个步骤:中断触发方式、中断使能、中断优先级。
四、相关寄存器
1.定时/计数器
T0、T1相关寄存器:
T2相关寄存器
2.中断系统
五、实验
1.按键控制LED流水灯模式
实验现象:K1按下,LED亮灯右移;K1再按下,LED亮灯左移。时间500ms。
用到Key、Delay模块。
Timer0.c
Timer0.h
main.c
INTRINS头文件中,_crol_循环左移,_cror_:循环右移。
2.定时器时钟
实验现象:在LCD1602上显示时间。
用到LCD1602、Timer0模块。
main.c