CopyrightbyJilong.Bai
1
Counter/TimerSummary
一,基本原理及操作:
1,Counter/Timer相关寄存器(有图有真相)
2,基本原理及相关基本操作:Here,onethingweshouldalwayskeepinmind:对51的
操作就是对寄存器的操作,只要我们熟悉了对上面寄存器的操作,这所谓的定时器
/计数器自然彻底被我们征服了。好了上图,我一直坚持有图才有真相:
CopyrightbyJilong.Bai
2
2.1定时器的详细操作:
由上面图我们可以知晓,定时器其实很简单。和其相关的寄存器主要有两个:TMOD
和TCON,其具体流程我们通过该图也一目了然。其实对定时器的操作我们需要关注的
地方主要有三个:
一首先我们得让它工作在定时器模式,其最小时间单位由指令周期决定,即12个振荡周期
=1us.
二,当其工作在定时器模式时,在其工作之前我们得做好全部的准备,只为万事俱备,这
里所谓的万事主要包括:其实由上图的组合逻辑公式来决定
三,当THx溢出时,TFx会由硬件自动置1,中断响应后,TFx仍然由硬件置0
所以具体流程以及相关操作步骤在上图中已经声明,此处不再赘述。
CopyrightbyJilong.Bai
3
2.2计数器的详细操作
对于计数器的操作与定时器极为类似,其主要区别是首先我们得让其得工作在定时器
模式,即C/T这一位必须为1.之后与定时器操作几乎一样,不再赘述。如上图所示。
另外当我们对计数器进行控制时,即STEP2时,我们需要注意以下方面,如图:
CopyrightbyJilong.Bai
4
3,定计数器的具体操作流程
3.1详细操作流程
3
3.2详细操作步骤
当然了,这里我们有个思想就是:尽量多用mode2,因为只有该模式
不会造成时间上的误差,只一点在后边我们会详细说明。
CopyrightbyJilong.Bai
5
二,定时器实例解读
实例一:us级的定时
1,功能陈述:定时100us使P1^0反相
2,产生的问题:通过示波器我们发现,P1^0反相的时间间隔是110us,这10us是从哪里
冒出来的真是奇哉怪也?
3,问题分析:其实这10us是因为我们的程序造成的,当定时器发生溢出后,我们需要跳
转到TO_RELOAD,执行该子程序的时候就会造成时间的延迟,具体如下图中红色标注字
所示。
CopyrightbyJilong.Bai
6
综上:我们看出了使用模式2的优势,这也就是为什么我们建议尽量在满
足使用的情况下使用模式2的原因。(当然如果我们的定时时间是ms级的,其
误差就在千分之一可以忽略,但如果在us级,因为其误差在10%,我们就一定
要去考虑了)
CopyrightbyJilong.Bai
7
实例二:超过65ms的定时
1,功能陈述:实例1遇到的问题是当我们需要定时很小时间,但是假如我们需要定时很长
时间,>65ms的时候,我们又该如何去操作呢?我们依然通过在定时时间溢出后反相
P1^0
2,产生问题:定时时间超过65ms
3,问题解决:应用“最小定时单位”的概念
4,最小定时单位概念:在下面的程序中我们设定的溢出时间是:10ms,这就是“最小定是
单位”
5,程序关键说明:设定好最小时间单位后,我们在此程序中设置了R0,用来控制P1^0的
反相时间,RO的初值我们设置为100,每次溢出后我们给RO自减1,直到RO=0的时候,
反相P1^0,这样就相当于我们给P1^0反相的时间=10010ms=1000ms=1s.
CopyrightbyJilong.Bai
8
CopyrightbyJilong.Bai
9
实例三:通过定时器产生方波
1,功能陈述:通过定时器相关设置产生1kHz的方波,我们仍然选择P1^0来作为观察的对
象
2,产生问题:通过示波器观察的图形我们发现该方波的频率不为1kHz,而是980Hz
3,问题解决:原因其实是和实例一中相同,所以我们要么使用模式2,要么重新调整THx
和TLx的初值,这里我们选择改变THx和TLx的初值来实现1KHx的方波
4,程序关键说明:重新设定初值,461-10=451(此处减10的主要原因其实在实例一中已
经详细说明)65536-451=65085=FE3DH(THx=FEH,TLx=3DH)
CopyrightbyJilong.Bai
10
CopyrightbyJilong.Bai
11
|
|