小白极客的51单片机笔记(自用)
做定时器时钟时顺手写的笔记,如有错漏,欢迎斧正。
定时器介绍
51单片机的定时器属于大农家的内部资源,其电路的连接和运转均在单片机内部完成:
- 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作;
- 替代长时间的Delay,提高CPU的运行效率和处理速度;
- 操作系统的任务切换(高级单片机)
STC89C52定时器资源
- 定时器个数:3个(T0、T1、T2)T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源
- 注意:定时器的资源和单片机的型号是关联在一起的,不同型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的
定时器框图
- 定时器在单片机内部就像是一个小闹钟一样,跟据时钟的输出信号,每隔“一秒”,技术单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行
定时器工作模式
- STC89C52的T0和T1均有四种工作模式:
- 模式0:13位定时器/计数器
- 模式1:16位定时器/计数器(常用)
- 模式2:8位自动重装模式
- 模式3:两个8位计数器
- 工作模式1框图:
TL0/TH0是一个十六位的计数器,TL存储低字节,TH存储高字节,左边的时钟提供脉冲,每来一个脉冲,这十六位的计数器里面的值就会加一,当加到最大值65535时再加的话就会溢出,溢出的时候计数器就会回到0.所以在溢出的时候会置一个标志位(TF0),有了这个标志位它就会向中断系统申请中断。
定时器时钟
我们之前讲到了,计数器每来一个脉冲加一,那么这个脉冲的时间是怎么确定的呢?这就需要用到时钟系统了。
- SYSclk:系统时钟,即晶振周期,本开发板上的晶振为12MHz
- 12M很快,一般来说我们会对12MHz进行分频,12Tmode会对12M的系统时钟进行12分频,分频之后这个开关如果连到12分频,那么它输出的就是1MHz,1MHz的一个周期就是一微秒,那就说明我们如果连这条线路的话,那么计数单元每隔一微秒就要记一次数,当它记到最大值,就会产生中断
- C/T是一个选择开关,是寄存器中的一位,如果这一位配置为1的话,就是C(Counter计数器)这个功能,如果给0,那么就是T(Timer定时器)这个功能
时钟最初的来源有两个,一个是SYSclk,另一个是T0 Pin(单片机外部的接口)
中断系统
中断程序流程
STC89C52中断资源
-
中断源个数:8个(外部中断0、定时器0中断、外部中断1、定时器1中断、串口中断、外部中断2、外部中断3)
-
中断优先级个数:4个
-
中断号:
-
注意:中断的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的中断资源,例如中断源个数不同、优先级个数不同等等
定时器和中断系统
整个流程:时钟—>12分频—>定时器模式—>计数器增加溢出中断—>中断入口
下面控制启动和暂停时钟是否过来—>
定时器相关寄存器
- 寄存器是连接软硬件的媒介
- 在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另一方面,每一个寄存器背后都连接了一根导线,控制着电路的连接方式
- 存储器相当于一个复杂机器的“操作按钮”