目录
定时器
简介 :C51中的定时器和计数器是同一个硬件电路支持的,通过寄存器配置不同,就可以将他当做定时器 或者计数器使用。 确切的说,定时器和计数器区别是致使他们背后的计数存储器加1的信号不同。当配置为定时器使 用时,每经过1个机器周期,计数存储器的值就加1。而当配置为计数器时,每来一个负跳变信号 (信号从P3.4 或者P3.5引脚输入),就加1,以此达到计数的目的。 标准C51有2个定时器/计数器:T0和T1。他们的使用方法一致。C52相比C51多了一个T2。
概念:
定时器和计数器,电路一样。
定时或者计数的本质就是让单片机某个部件数数。
当定时器用的时候,靠内部震荡电路数数。
当计数器用的时候,数外面的信号,读取针脚的数据。
定时器怎么定时
定时器的本质原理: 每经过一个机器周期,就加1 :寄存器。
什么是晶振 11.0592Mhz = 11059.2Khz=11059200hz
晶振(晶体震荡器),又称数字电路的“心脏”,是各种电子产品里面必不可少的频率元器件。数字电 路的所有工作都离不开时钟,晶振的好坏、晶振电路设计的好坏,会影响到整个系统的稳定性。
什么是时钟周期 1个时钟周期 = 晶振的倒数 1/11059200 秒
时钟周期也称为 振荡周期,定义为 时钟频率的 倒数。时钟周期是计算机中最基本的、最小的 时间单 位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。更小的时钟周 期就意味着更高的工作频率。
什么是机器周期
机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶 段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为 机器周期。一般情况下,一个机器周期由若干个时钟周期组成。
查找手册
1个机器周期 = 12个时钟周期
加1经过了多少时间:
机器周期 = 12 x 时钟周期 =12 x (1/时钟频率) 秒 = 12 / 时钟频率 秒 = 12 / 11059200 秒 = 12 000 000 / 11059200 微秒 = 1.085 微秒
定时器编程
单片机内有两个可编程的定时/计数器 T0、T1 和一个特殊功能定时器 T2。
T0和T1各自拥有一组独立的寄存器来存储其计数值,包括TH0/TL0(T0的高8位和低8位)和TH1/TL1(T1的高8位和低8位)。
在哪里加1,最大计数时间,也就是爆表(定时器寄存器是16位的,由THx和TLx两个8位寄存器组成。当定时器从初始值开始计数,直到达到其最大值(即65535,对应于16位二进制数的全1状态)时,会发生溢出。)了能计算多长间?
在TH0/1和TL0/1寄存器中加1,默认是从0开始数数,最多能数65536下(2的16次方),累计计时71ms(65536*1.085);
如何算出10ms定时器的初值?
就不让他从0开始数数,10ms需要数9216(10/1.085)下,你让他从65536-9126=56320(16进制表示为 0xDC00)开始数数 这样TL0=0x00;TH0=0xDC;
1.怎么知道爆表?
TCON寄存器的bit5(TF0)能表示爆表:当爆表的时候,硬件会修改bit5(TF0)位上面的数据,改成 1(置1),如果不用中断,我们代码清零。
2.怎么开始计时?
TCON寄存器的bit4,通过编程让这个位为1的时候,开始计时,相当于按下了闹钟。
3.定时器使用是有很多种模式
- GATE位(门控位):
- GATE=0时:仅由TCON寄存器中的TR0或TR1位控制定时器的启动。只要TR0或TR1为1,定时器就会开始工作。
- GATE=1时:除了TCON寄存器中的TR0或TR1位外,还需要外部引脚(INT0或INT1)为高电平,定时器才会开始工作。
- C/T位(功能选择位):
- C/T=0时:定时器工作在定时模式。
- C/T=1时:定时器工作在计数模式。
- M0和M1位(方式选择功能):
- M1M0的工作方式选择有四种:
- 00:方式0,13位计数器。TMOD设置为0x00。
- 01:方式1,16位计数器。TMOD设置为0x01。
- 10:方式2,自动重装8位计数器。TMOD设置为0x02。
- 11:方式3,T0分为两个独立的8位计数器,T1为无中断重装8位计数器。TMOD设置为0x03。
- M1M0的工作方式选择有四种:
定时器控制led一秒亮灭
定时器知识点补充
了解一种常用于二进制到十六进制转换的方法(8421法),它基于十六进制每一位(从右到左)对应的二进制权重是 1, 2, 4, 8(即 20, 21, 22, 23)。这种方法允许我们将每4位二进制数直接转换为对应的十六进制数字。
下面是一个具体的例子:
假设我们有一个二进制数 10110100
,我们想要将其转换为十六进制数。
- 将二进制数分组(如果位数不足,则在左边补零):
0010 1101 00
(注意我们在最左边补了两个零以达到8位,但因为我们只关心每4位一组,所以只需要看前两组)。 - 对每一组应用 "8421法":
- 第一组
0010
:0×8 + 0×4 + 1×2 + 0×1 = 2(对应的十六进制数字是 2) - 第二组
1101
:1×8 + 1×4 + 0×2 + 1×1 = 13(但13在十六进制中表示为 D)
- 第一组
- 将得到的十六进制数字从左到右排列:
2D
之前我们了解了TMOD的模式选择,但是在STC-ISP软件中TMOD的模式选择运用了按位操作:
理解1:
TMOD &= 0xF0;
这行代码使用了按位与(bitwise AND)操作符&=
。它将TMOD
寄存器的当前值与0xF0
(二进制11110000
)进行按位与操作。结果是TMOD
的高四位保持不变,而低四位都被清零(设置为0)。这通常用于清除TMOD
的低四位,以便为接下来的操作设置这些位。
TMOD |= 0x01;
这行代码使用了按位或(bitwise OR)操作符|=
。它将TMOD
寄存器的当前值(经过上一步操作后,其低四位已经是0)与0x01
(二进制00000001
)进行按位或操作。由于0
与任何数进行按位或操作结果都是该数本身,而1
与任何数进行按位或操作结果都是1
(只要对应位上有1
),所以这行代码实际上是将TMOD
的最低位(D0)设置为1
,而不影响其他位。
综合这两行代码,它们的效果是:清除TMOD
的低四位,并将最低位(D0)设置为1
。这通常用于配置TMOD
寄存器以设置定时器/计数器的特定模式。不过,要注意的是,这里只设置了T0的模式位(D0和D1),而T1的模式位(D4和D5)没有被改变,它们保持之前的值。
如果你想要设置T0为模式1(16位定时器/计数器),并且假设T1的模式保持不变,你可能需要这样做:
因为模式1在TMOD中对应于M1=1, M0=0
,其二进制表示为00000010
(即0x02
)。
理解2:
配寄存器推荐用按位操作,清零的时候,对应的需要清零的位与上0,不需要清零的位与上1。
置1的时候,需要置1的位置或1,不需要置一的位置或0。
标签:定时器,周期,认识,计数器,TMOD,寄存器,时钟 From: https://blog.csdn.net/2301_76378962/article/details/139744714