建议配合本专栏的文章“单片机_第6章 实验”一起使用
目录
6.1 定时/计数器的结构与工作原理
定时/计数的三种方式(不重要)
纯软件定时/计数方法
定时——空循环预定周次,等待预定时间
计数——读取I/O口电平,统计变化次数
表示(左边的图是通过delay函数来实现软件定时/计数的,右边的图示通过main函数里面的if语句来进行定时/计数的。)
基本思路:由CPU统计状态变化次数,待预定结果出现后结束统计。
存在问题:占用过多CPU机时(因此时间不能很长,且在做这个的时候,CPU不能做其他的事情,也十分消耗CPU)
纯硬件定时方法(没有计数)
利用CD4060芯片,定时时长可以达到2.1~6小时,通过改变外面的电阻来改变定时的时间
AD8445B
XLT437定时器芯片
单片机软硬件联合定时/计数方法
图示
定时/计数器的基本原理
定时器的本质是计数器(对时钟脉冲计数),计数器则是对外来脉冲计数。
通过上图,可以看出定时器是反应内部系统时钟脉冲,而计数器是反应外部信号脉冲的。
几种定时方法比较
(1)软件定时:时间精确,且不需要外加硬件电路;占用CPU开销,因此软件定时的时间不宜太长。
(2)硬件定时:定时功能全部由硬件电路完成,不占CPU时间,但需通过改变电路的元件参数来调节定时时间,在使用上不够灵活方便。
(3)可编程定时器定时:通过对系统时钟脉冲的计数来实现的。计数值通过程序设定,改变计数值,也就改变了定时时间,使用起来既灵活有方便。
6.1.1 定时/计数器的基本原理
逻辑开关闭合后,脉冲信号将对加1计数器充值。
若计数器的容量为2^n(n为整数),则当数值达到满计数值后将产生溢出,使中断请求标志TFx进位为1,同时加1计数器清零;如果在启动计数之前将TFx清零,并将一个称为计数初值a的整数先置入加1计数器,则当观察到TFx为1时表明已经加入了(2^n-a)个脉冲,如此便能计算出脉冲的到达数量了。
定时器和计数器的实质都是计数器,差别仅在于脉冲信号的来源不同(定时器是反应内部系统时钟脉冲,而计数器是反应外部信号脉冲的)。
基本工作原理
(12分频 = 1个机器周期→1个计数脉冲)
计数器溢出空间 = 计数器最大空间 - 计数初值
定时时间计算(t与n、a、fosc三个因素有关)
定时时间 t = (计数器最大空间 - 计数初值)×机器周期=(2^n-a)×12/fosc (us)
计数计算(N与n、a两个因素有关)
定时计数值 N = (计数器最大空间 - 计数初值) = (2^n – a )
6.1.2 定时/计数器的结构
51单片机定时/计数器的结构
引脚
2个16位计数器T0 (TH0<字节地址8CH>、TL0<字节地址8AH&g