设计与开发

单片机定时器应用 51单片机定时器使用经验总结

小编 2024-11-25 设计与开发 23 0

51单片机定时器使用经验总结

单片机定时器的使用可以说非常简单,只要掌握原理,有一点的C语言基础就行了。要点有以下几个:

1. 一定要知道英文缩写的原形,这样寄存器的名字就不用记了。

理解是最好的记忆方法。好的教材一定会给出所有英文缩写的原形。

2. 尽量用形像的方法记忆。

比如TCON和TMOD两个寄存器各位上的功能,教程一般有个图表,你就在学习中不断回忆那个图表的形像。

3. TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)

定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。其格式为:其中低四位定义定时器/计数器C/T0,高四位定义定时器/计数器C/T1,各位的说明:

(1)GATE——门控制。

GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。

当INT0引脚为高电平时TR0置位,启动定时器T0;

当INT1引脚为高电平时TR1置位,启动定时器T1。

GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。

(2)C/T——功能选择位

C/T=0时为定时功能,C/T=1时为计数功能。

置位时选择计数功能,清零时选择定时功能。

(3)M0、M1——方式选择功能

由于有2位,因此有4种工作方式:

M1M0 工作方式 计数器模式 TMOD(设置定时器模式)

0 0 方式0 13位计数器 TMOD=0x00

0 1 方式1 16位计数器 TMOD=0x01

1 0 方式2 自动重装8位计数器 TMOD=0x02

1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03

单片机定时器0设置为工作方式1为TMOD=0x01

这里我们一定要知道,TMOD的T是TIMER/COUNTER的意思,MOD是MODE的意思。至于每位上的功能,你只要记住图表,并知道每个英文缩写的原型就可以了。

在程序中用到TMOD时,先立即回忆图表,并根据缩写的单词原形理出每位的意义,如果意义不是很清楚,就查下手册,几次下来,TMOD的图表就已经在脑子里了。

8位 GATE位,本身是门的意思。

7位 C/T Counter/Timer

6位 M1 Mode 1

5位 M0 Mode 0

4. TCON: 定时器/计数器控制寄存器(TIMER/COUNTER CONTROL REGISTER)

TMOD分成2段,TCON控制更加精细,分成四段,在本文中只要用到高四段。

TF0(TF1)——计数溢出标志位,当计数器计数溢出时,该位置1。

(1)TR0(TR1)——定时器运行控制位

当TR0(TR1)=0 停止定时器/计数器工作

当TR0(TR1)=1 启动定时器/计数器工作

(2)IE0(IE1)——外中断请求标志位

当CPU采样到P3.2(P3.3)出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务时,再由硬件自动清0。

(3)IT0(IT1)——外中断请求信号方式控制位

当IT0(IT1)=1 脉冲方式(后沿负跳有效)

当IT0(IT1)=0 电平方式(低电平有效)此位由软件置1或清0。

(4)TF0(TF1)——计数溢出标志位

当计数器产生计数溢出时,此位由硬件置1。当转向中断服务时,再有硬件自动清0。计数溢出的标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。注意记忆方法,理解单词原形,就绝对不会把TF和TR搞混。TF的F也就是溢出Over Flow的F。TR的R就是运行Run。默认是0不运行,当然要置1才运行。

5. STC单片机STC89C52RC定时器延时时间的计算

延时时间要根据晶振频率计算,不同板子可能有所不同。

时钟周期:

1/时钟源,在我现在这块板子上,晶振频率是11.0592M,也就是时钟周期是 1/11059200秒

机器周期:

一般51单片机是12个时钟周期,我的板子也就是 12/11059200秒

单次定时最长时间:

如果是16位的计数器,16位最大值是65535,共可计数65536次。基本的常数一定要记住,还要记住8位最大值是255,共可计数256次,还要记住8位上每位代表的数值。

12 * 65536/11059200 = 0.0711 s,也就是,71 ms内的定时可以单次定时就完成。如果定时时间超过71 ms,就要循环了。

一次定时需要几次机器周期:

计算公式:定时秒数/机器周期

比如我要定时1秒, 1/(12/11059200)= 921600次,16位计数器最大可计数65536次,921600次早就益出了。我们可以每次定时10 ms,循环100次就可以定时1秒了,1 s缩小100百倍就是10 ms, 也就是每次需要计数9216次。

确实计数器初始值:

定时10 ms时,如果计数器从0开始计数,我们就不知道什么时候到了9216次。所以应该计数了9216次,16位计数器最多计数95536次,然后就溢出,一溢出TCON的TF位就会置1,我们只要经常检测TF位就可以知道什么时候完成10ms的定时了。

计算公式:计数器初始值=最大计数次数 - 需要计数次数

如果定时10 ms,计数器的初始值就是 65536 - 9216

计算计数器的高位和低位:

16位的计数器,也就是两个8位组成,8位的最大计数次数是256。所以:

计数器高位 = 初始值/256

计数器低位 = 初始值%6

6.STC89C52RC单片机定时器示例代码:

教你玩单片机之定时器(附程序)

80c51的定时器

80c51单片机内有两个可编程的定时/计数器T0、T1。它们是一个16位计数器,分别由一个高8位和一个低8位的寄存器组成的。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

定时/计数器的工作原理

定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。

工作方式寄存器TMOD

GATE:门控制

0时:仅有运行控制位TRx来控制定时/计数器的开启

1时:由TRx和外部中断脉冲计数(用于计算外部中断负跳变 的次数)

C/T:计数器模式和定时器模式选择

0时:选择定时器模式

1时:选择为计数器模式

M1和M0:选择定时/计数器的工作方式

定时器/计数器控制寄存器TCON

IT0和IT1是设置外部中断的触发方式

当其为0时,为低电平触发方式

当其为1时,为负跳变触发方式

IE0和IE1是外部中断标志位

TF0和TF1是定时器的中断标志

TR1和TR0是打开相应的定时器

其他的是定时/计数器的控制

定时/计数器的工作方式

方式1

方式1为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

方式2

方式2的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。

方式3

方式3为自动重装初值的8位计数方式。

方式4

方式4只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。

定时器操作步骤:

选择工作方式(设置M1,M0)

选择控制方式(设置GATE)

选择定时器还是计数器模式(设置C/T)

给定时/计数器赋初值(设置THx和TLx)

开启定时器中断(设置ET0或ET1)

开启总中断(设置EA)

打开计数器(设置TR1或TR0)

定时器小程序

void TimerConfiguration()

{

TMOD = 0x01; //定时器0选择工作方式1

TH0 = 0x3C; //设置初始值

TL0 = 0xB0;

EA = 1; //打开总中断

ET0 = 1; //打开定时器0中断

TR0 = 1; //启动定时器0

}

单片机之定时器LED程序

实验效果 :LED每隔500ms左移一次

void main(void)

{

Time=0;

GPIO_LED=0XFE;

TimerConfiguration();

while(1)

{

if(Time==10)

{

GPIO_LED=_crol_(GPIO_LED,1);

Time=0;

}

}

}

void TimerConfiguration()

{

TMOD = 0x01; //选择工作方式1

TH0 = 0x3C; //设置初始值,定时50MS

TL0 = 0xB0;

EA = 1; //打开总中断

ET0 = 1; //打开定时器0中断

TR0 = 1; //启动定时器0

}

void Timer0() interrupt 1

{

TH0 = 0x3C; //设置初始值

TL0 = 0xB0;

Time++;

}

相关问答

单片机 定时/计数器和中断到底有什么用?

定时器用来计算时间,固定时间触发中断。计数器用来对引脚输入的信号下降沿进行计数。和中断相关,但不一定要开中断。可以单独用。定时器用来计算时间,固定...

单片机定时器应用 实验用80C51内部定时器1,按方式1工作,即作...

[最佳回答]完全一样的题目呀,真幸运,看我的吧(我的是8052的,没关系的):汇编程序:S1EQU30HS2EQU31HORG0000HAJMPMAIN&nb...完全一...

单片机定时器 模式二的适用场景?

消防通道,学校,医院,警察局消防通道,学校,医院,警察局

单片机 定时的时间怎么改变?

定时器实质是计数器。当计数脉冲周期一定时,就有定时功能。雅帆用水桶给你打个比方吧!一、向上计定时数器举例当一个255毫升的烧杯,提前放入155毫升水后,...

单片机 在使用 定时器 时是用到了哪些引脚?一定是这些吗? - 懂得

单片机使用定时器时,不用到任何引脚,因为定时器就好比一个时钟,它被安装在单片机内部,在接收到信号之后,就开始运行,一般使用定时器,通过编程的方案...

At89s51 单片机 定时器 有哪些功能?

At89s51单片机的定时器的主要功能有:主要用于定时控制、、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生...

利用51 单片机定时器 编写一个C语言程序,实现一个发光二极管定时亮、灭,要求亮一秒、灭一秒交替闪烁不?

初始值为0,只只要启动定时器,定时器就开始工作,当计数溢出后,TF被置1,此时在程序中查询TF的状态,做相应的程序处理。一般建议用中断来做,查询方式会占用c...

单片机 用中断和定时怎么延时?

以上函数被调用一次,就延时10ms,多次调用可以达到任意更大的时间要求。!但是,在延时时,就其它什么事也做不了了,就是干等啊!2.硬件延时利用定时器/...3.操...

单片机 的振荡频率为6MHZ,设 定时器 工作在方式1需要定时1MS,...

[最佳回答]工作在方式1,定时时间为1000微秒晶振频率=6MHZ则定时时间T=(2的16次方-X)12/6MHZ=1000解出X=2的16次方-500工作在方式1,定时时间为1000微秒...

8051 单片机定时器 有哪几种工作模式?有何区别?

首先四中模式的前三种,t0和t1完全相同。而模式3只适合定时器t0,t0在该模式下被拆成两个独立的8位计数器th0,tl0,其中tl0可以为8为定时器或计数器,并且使用...

猜你喜欢