定时器是单片机系统的一个重点,但并不是难点,大家一定要完全理解并且熟练掌握定时器的应用。
1) 时钟周期
时钟周期 T 是时序中最小的时间单位,具体计算的方法就是 1/时钟源频率,我们 KST-51 单片机开发板上用的晶振是 11.0592M,那么对于我们这个单片机系统来说,时钟周期=1/11059200 秒。
2) 机器周期
我们的单片机完成一个操作的最短时间。机器周期主要针对汇编语言而言,在汇编语言下程序的每一条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而 C 语言一条语句的时间是不确定的,受到诸多因素的影响。51单片机系列,在其标准架构下一个机器周期是 12 个时钟周期,也就是 12/11059200 秒。现在有不少增强型的 51 单片机,其速度都比较块,有的 1 个机器周期等于 4 个时钟周期,有的 1个机器周期就等于 1 个时钟周期,也就是说大体上其速度可以达到标准 51 架构的 3 倍或 12倍。因为我们是讲标准的 51 单片机,所以我们后边的课程如果遇到这个概念,全部是指 12 个时钟周期。
这两个概念了解即可,下边就来我们的重头戏,定时器和计数器。定时器和计数器是单片机内部的同一个模块,通过配置 SFR(特殊功能寄存器)可以实现两种不同的功能,我们大多数情况下是使用定时器功能,因此我们的课程也是主要来讲定时器功能,计数器功能大家自己了解下即可。
顾名思义,定时器就是用来进行定时的。定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每经过一个机器周期就会自动加 1,因此,我们可以把机器周期理解为定时器的计数周期。就像我们的钟表,每经过一秒,数字自动加 1,而这个定时器就是每过一个机器周期的时间,也就是 12/11059200 秒,数字自动加 1。还有一个特别注意的地方,就是钟表是加到 60 后,秒就自动变成 0 了,这种情况在单片机或计算机里我们称之为溢出。
那定时器加到多少才会溢出呢?后面会讲到定时器有多种工作模式,分别使用不同的位宽(指使用多少个二进制位),假如是 16 位的定时器,也就是 2 个字节,最大值就是 65535,那么加到 65535 后,再加 1 就算溢出,如果有其他位数的话,道理是一样的,对于 51 单片机来说,溢出后,这个值会直接变成 0。从某一个初始值开始,经过确定的时间后溢出,这个过程就是定时的含义。
1) 时钟周期
时钟周期 T 是时序中最小的时间单位,具体计算的方法就是 1/时钟源频率,我们 KST-51 单片机开发板上用的晶振是 11.0592M,那么对于我们这个单片机系统来说,时钟周期=1/11059200 秒。
2) 机器周期
我们的单片机完成一个操作的最短时间。机器周期主要针对汇编语言而言,在汇编语言下程序的每一条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而 C 语言一条语句的时间是不确定的,受到诸多因素的影响。51单片机系列,在其标准架构下一个机器周期是 12 个时钟周期,也就是 12/11059200 秒。现在有不少增强型的 51 单片机,其速度都比较块,有的 1 个机器周期等于 4 个时钟周期,有的 1个机器周期就等于 1 个时钟周期,也就是说大体上其速度可以达到标准 51 架构的 3 倍或 12倍。因为我们是讲标准的 51 单片机,所以我们后边的课程如果遇到这个概念,全部是指 12 个时钟周期。
这两个概念了解即可,下边就来我们的重头戏,定时器和计数器。定时器和计数器是单片机内部的同一个模块,通过配置 SFR(特殊功能寄存器)可以实现两种不同的功能,我们大多数情况下是使用定时器功能,因此我们的课程也是主要来讲定时器功能,计数器功能大家自己了解下即可。
顾名思义,定时器就是用来进行定时的。定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每经过一个机器周期就会自动加 1,因此,我们可以把机器周期理解为定时器的计数周期。就像我们的钟表,每经过一秒,数字自动加 1,而这个定时器就是每过一个机器周期的时间,也就是 12/11059200 秒,数字自动加 1。还有一个特别注意的地方,就是钟表是加到 60 后,秒就自动变成 0 了,这种情况在单片机或计算机里我们称之为溢出。
那定时器加到多少才会溢出呢?后面会讲到定时器有多种工作模式,分别使用不同的位宽(指使用多少个二进制位),假如是 16 位的定时器,也就是 2 个字节,最大值就是 65535,那么加到 65535 后,再加 1 就算溢出,如果有其他位数的话,道理是一样的,对于 51 单片机来说,溢出后,这个值会直接变成 0。从某一个初始值开始,经过确定的时间后溢出,这个过程就是定时的含义。