博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初学定时器
阅读量:4166 次
发布时间:2019-05-26

本文共 2317 字,大约阅读时间需要 7 分钟。

定时器

1.延时的方法:

其中_nop_();:一个 NOP 的时间是一个机器周期的时间。

2.定时器的介绍

A).时钟周期

时钟周期T是时序中最小的时间单位(即1/时钟源频率)。

B).定时器

a).定时的含义

从某一个初始值开始,经过确定的时间后溢出的过程。

b).溢出

假如一个16位(即两个字节)的定时器,最大值为65535,那么等加到65535后,再加1就为溢出,溢出后,这个值就直接变为0。

C).定时器的寄存器

a).定时器存储寄存器

名称 描 述 SFR地址 复位值
TH0 定时器0高字节 0x8C 0x00
TL0 定时器0低字节 0x8A 0x00
TH1 定时器1高字节 0x8D 0x00
TL1 定时器1低字节 0x8B 0x00

注:SRF:特殊功能寄存器。

b).定时器控制寄存器TCON的位分配(地址0x88、可位寻址)

7 6 5 4 3 2 1 0
符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
复位值 0 0 0 0 0 0 0 0

位描述——前四位

TF1:定时器1溢出标志。一旦定时器 1 发生溢出时硬件置 1。
TR1:定时器1运行控制位。软件置位(清零)来进行启动(停止)定时器。
TF0:定时器 0 溢出标志。
TR0:定时器0运行控制位。软件置位(清零)来进行启动(停止)定时器。一旦定时器 0 发生溢出时硬件置 1。
后四位:外部中断部分,与定时器无关。
区分:硬件置1或清0和软件置1或清0
硬件:指一旦符合条件,单片机将自动完成的动作。
软件:指我们必须用程序去完成这个动作。

c).TMOD—定时器模式寄存器的位分配(地址0x89、不可位寻址)

7 6 5 4 3 2 1 0
符号 GATE(T1) C/T(T1) M1(T1) M0(T1) GATE(T0) C/T(T0) M1(T0) M0(T0)
复位值 0 0 0 0 0 0 0 0

位描述

T1/T0:T1表示控制定时器1的位,T0表示控制定时器0的位。
GATE:该位被置为1时为门控位。仅当”INTx”脚为高并且”TRx”控制位被置 1 时使能定时器”x”,定时器开始计时,当该位被清 0 时,只要”TRx”位被置 1,定时器 x 就使能开始计时,不受到单片机引脚”INTx”外部信号的干扰,常用来测量外部信号脉冲宽度。
C/T:定时器或计数器选择位。该位被清零时用作定时器功能(内部系统时钟),被置 1 用作计数器功能。

d).TMOD——定时器模式寄存器M1/MO工作模式

M1 M0 工作模式 描述
0 0 0 兼容8048单片机的13位定时器、THn的8位和TLn的5位组成一个13位定时器
0 1 1 THn和TLn组成一个16位的定时器
1 0 2 8位自动重装模式,定时器溢出后THn重装到TLn中
1 1 3 禁用定时器1、定时器0变成2个8位定时器

:一般我们都选择模式1和模式2。

模式 1:是 THn 和 TLn 组成了一个 16 位的定时器,计数范围是 0~65535,溢出后,只要不对 THn 和 TLn 重新赋值,则从 0 开始计数。
模式 2:是 8 位自动重装载模式,只有TLn做加1计数,计数范围0~255,THn的值并不发生变化,而是保持原值,TLn溢出后,TFn就直接置1了,并且THn原先的值直接赋给TLn,然后TLn重新赋值的这个数字开始计数。

D).模式1的电路示意图

这里写图片描述

注释(以定时器0位例)

a).OSC:时钟频率,又一个机器周期为12个时钟周期,故d为12。

b).从GATE往右,先后为非门、或门和与门电路。
c).TR0和下边或门电路的结果要进行与运算,TR0如果是0的话,与运算完了肯定为0,所以为了使定时器工作,TR0=1。
d).如果要与门结果为1,则或门的结果必须为1。在GATE=1的情况下,经过非门后变成0,如果要或门电路结果为1,则INT0(即引脚P3^2)必须为1,定时器才会工作。
e).GATE=0,经过非门后为1,那么不管INT0引脚是什么电平,经过或门电路后都是1,则定时器肯定工作。

3.定时器的应用

A).使用定时器的必要步骤

第一步:设置特殊功能寄存器 TMOD,定时器方式和定时器几的设置。

第二步:开总中断EA。
第三步:ET0位,打开定时器0中断。
第四步:设置TCON,通过TR0置 1 来启动定时器。
第五步:设置计数寄存器TH0和TL0的初值。
注:使用定时器一般就要使用中断,但中断和定时器不是一码事,定时器是单片机模块的一个资源,确确实实存在的一个模块,而中断时单片机的一种运行机制。

B).通过定时器来控制LED的闪烁

unsigned int t=0;void main(){    TMOD=0x01;//选择模式1    EA=1;//开总中断    ET0=1;//开0中断    TR0=1;//启动定时器0    TH0=(65536-50000)/256;//赋初值,求膜    TL0=(65536-50000)%256;//赋初值,求余    while(1)    {        if(t==20)        {            t=0;            P1=0x00;        }    }}void timer() interrupt 1{    TH0=(65536-50000)/256;//赋初值,求膜    TL0=(65536-50000)%256;//赋初值,求余    t++;    P1=0xff;}
你可能感兴趣的文章
HTML5学习之——HTML 5 Web Workers
查看>>
HTML5学习之——HTML 5 Canvas
查看>>
HTML5学习之——HTML5 内联 SVG
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
SVG学习之——HTML 页面中的 SVG
查看>>
SVG 形状学习之——SVG圆形
查看>>
SVG 滤镜学习之——SVG 滤镜
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
进程创建时文件系统处理
查看>>
内核线程创建
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>