51单片机定时器使用
- 格式:docx
- 大小:14.59 KB
- 文档页数:3
51单片机定时器工作方式51单片机是一种非常常见的单片机,它具有多个定时器用来实现各种定时任务。
下面我们就来详细介绍一下51单片机的定时器工作方式。
首先,51单片机的定时器可以分为两种类型:定时/计数器0(T0)和定时/计数器1(T1),它们分别有不同的工作方式和控制寄存器。
一、定时/计数器0(T0)工作方式:定时/计数器0(T0)是一个8位的定时器/计数器,它可以进行定时或计数操作。
在定时模式下,它可以作为定时器在规定的时间段内进行计时;在计数模式下,它可以根据外部信号的脉冲计数。
在定时模式下,T0可以通过设置控制寄存器TCON的位4(TR0)来启动或停止计时操作。
当TR0为1时,定时器开始计时;当TR0为0时,定时器停止计时。
定时器的工作频率可以通过控制寄存器TMOD的位1和位0来设置。
在计数模式下,T0可以通过设置TCON的位5(CT0)来选择定时器或计数器操作。
当CT0为0时,定时器工作,当CT0为1时,计数器工作。
同时,在计数模式下,还需要通过设置控制寄存器TMOD的位1和位0来设置计数器的工作频率。
定时/计数器0还可以使用中断功能,通过设置控制器IE的位4(ET0)来开启或关闭中断。
当ET0为1时,当定时器溢出时会产生中断请求,可以在中断服务程序中处理相应的操作。
二、定时/计数器1(T1)工作方式:定时/计数器1(T1)也是一个8位的定时器/计数器,它可以进行定时或计数操作。
类似于T0,T1也可以在定时模式下作为定时器进行计时,或者在计数模式下根据外部信号的脉冲进行计数。
在定时模式下,T1可以通过设置TCON的位6(TR1)来启动或停止计时操作。
当TR1为1时,定时器开始计时;当TR1为0时,定时器停止计时。
定时器的工作频率可以通过设置TMOD的位3和位2来设置。
在计数模式下,T1可以通过设置TCON的位7(CT1)来选择定时器或计数器操作。
当CT1为0时,定时器工作;当CT1为1时,计数器工作。
151单片机定时器/计时器的使用步骤:1、 打开中断允许位:对IE 寄存器进行控制,IE 寄存器各位的信息如下图所示:EA : 为0时关所有中断;为1时开所有中断ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES : 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开2、 选择定时器/计时器的工作方式:定时器TMOD 格式CPU 在每个机器周期内对T0/T1检测一次,但只有在前一次检测为1和后一次检测为0时才会使计数器加1。
因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。
由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。
通常,T0或T1输入线上的计数脉冲频率总小于100kHz 。
方式0:定时器/计时器按13位加1计数,这13位由TH 中的高8位和TL 中的低5位组成,其中TL 中的高3位弃之不用(与MCS-48兼容)。
13位计数器按加1计数器计数,计满为0时能自动向CPU 发出溢出中断请求,但要它再次计数,CPU 必须在其中断服务程序中为它重装初值。
方式1:16位加1计数器,由TH 和TL 组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。
2方式2:计数器被拆成一个8位寄存器TH 和一个8位计数器TL ,CPU 对它们初始化时必须送相同的定时初值。
当计数器启动后,TL 按8位加1计数,当它计满回零时,一方面向CPU 发送溢出中断请求,另一方面从TH 中重新获得初值并启动计数。
方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。
在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。
51单⽚机定时器计数器详解第六章定时器/计数器6.1 定时器的结构及⼯作原理6.2 定时器的控制6.3 定时器的⼯作模式及其应⽤第六章定时器/计数器实现定时⼀般有多种⽅法:1. 利⽤软件实现(延时程序)优点:简单,控制⽅便;缺点:CPU效率低。
2. 外部硬件实现:单稳态定时器、计数定时器优点:CPU效率⾼;缺点:修改参数⿇烦。
3. 利⽤计数器实现输⼊脉冲定时器/计数器作⽤主要包括产⽣各种时标间隔、记录外部事件的数量等,是单⽚机中最常⽤、最基本的部件之⼀。
外来脉冲定时计数定时器/计数器功能⽰意图6.1 定时器/计数器的结构及⼯作原理6.1.1 定时器/计数器的基本结构MCS-51单⽚机有⼆个定时器/计数器,每个定时器/计数器由⼏个专⽤寄存器组成。
TMOD(89H )⾼四位TMOD(89H )低四位⽅式寄存器TCON(88H)TCON(88H)控制寄存器*8DH 8BH 8CH 8AH TH1 TL1TH0 TL0数据寄存器(16位)定时器T1定时器T0定时器/计数器的结构如下图所⽰。
定时器/计数器的基本结构框图申请P3.5or P3.4or 8DH 8BH8CH 8AH6.1.2 定时器/计数器的⼯作原理定时器/计数器结构原理图INTx P3.YGATE :门控制位:定时/计数控制位TC/x=0,1Y=2,3Z=4,5⼀. 对外部输⼊信号的计数功能当T0或T1设置为计数⼯作⽅式时,计数器对来⾃输⼊引脚P3.4(T0)和P3.5(T1)的外部信号计数。
若前⼀个机器周期采样值为1,后⼀个机器周期采样值为0,则计数器加1。
所以计数器计数的频率最⾼为fosc 的1/24。
BDEHT H >1个机器周期T L >1个机器周期L⼆. 定时功能:定时器/计数器的定时功能也是通过计数实现的,它的计数脉冲是由单⽚机的⽚内振荡器输出经12分频后产⽣的信号,即为对机器周期计数。
INTx P3.Y例如:晶振频率=12MHz 机器周期=1us ,计数1次=1us ,计数频为=1MHz 。
51 单片机定时器延时1s函数1.引言1.1 概述本文介绍了51单片机中的定时器功能以及如何通过定时器实现延时1秒的函数。
在单片机应用中,定时器是一种非常重要且常用的功能模块之一。
它能够精确计时,并可用于实现周期性的任务触发、计时、脉冲输出等功能。
本文首先将对51单片机进行简要介绍,包括其基本概念、结构和特点。
随后,重点讲解了定时器的基本原理和功能。
定时器通常由一个计数器和一组控制寄存器组成,通过预设计数器的初值和控制寄存器的配置来实现不同的计时功能。
接着,本文详细介绍了如何通过编程实现一个延时1秒的函数。
延时函数是单片机开发中常用的功能,通过定时器的计时功能可以实现精确的延时控制。
本文将以C语言为例,介绍延时函数的编写步骤和原理,并给出示例代码和详细的说明。
最后,本文对所述内容进行了总结,并展望了定时器在单片机应用中的广泛应用前景。
通过学习定时器的相关知识和掌握延时函数的编写方法,我们可以更好地应用定时器功能,提高单片机应用的效率和精确性。
综上所述,通过本文的学习,读者可全面了解51单片机中定时器的功能和应用,并能够掌握延时函数的编写方法,为单片机应用开发提供一定的参考和指导。
1.2 文章结构本文以51单片机定时器功能为主题,旨在介绍如何使用定时器进行延时操作。
文章分为引言、正文和结论三个主要部分。
在引言部分,首先会对文章的背景进行概述,介绍单片机的基本概念和应用领域。
然后,给出本文的整体结构,并阐述文章的目的和意义。
正文部分将分为两个小节。
在2.1节中,将对单片机进行详细介绍,包括其构造与工作原理。
这部分的内容将帮助读者全面了解单片机的基本知识,为后续的定时器功能介绍打下基础。
2.2节将重点介绍定时器的功能和特点。
这部分将涵盖定时器的基本原理、工作模式以及在实际应用中的使用方法。
同时,还将详细讲解如何使用定时器进行1秒钟的延时操作,包括具体的代码实现和注意事项。
结论部分将对全文进行总结,并强调定时器的重要性和应用前景。
51单片机定时器 c语言51单片机是目前较为流行的一种单片机芯片,定时器是其重要的功能之一,可以用于实现各种定时任务,而c语言则是51单片机常用的编程语言之一。
下面将结合实例,阐述51单片机定时器在c语言中的使用方法。
一、引入头文件及定义定时器首先需要引入头文件“reg51.h”,然后需要定义一个定时器变量和一个计数变量。
在本文中,我们将使用定时器0,所以定义如下:```c#include<reg52.h>sbit led = P2^0; //定义led信号端口P2.0unsigned char count = 0; //计数变量unsigned char timerVal = 56; //定时器初值```需要注意的是,定时器初值的计算方法如下:$$定时器初值 = 256 - \frac{所需延时时间× 晶振频率}{12}$$在本例中,晶振频率为11.0592MHz,所需延时时间为0.001秒,则计算得到定时器初值为56。
二、设置定时器参数设置定时器参数前,需要先关闭定时器0。
设置完成后,再通过TR0位将定时器0启动。
```cvoid initTimer(){TMOD &= 0xF0; //定时器0, 方式1TMOD |= 0x01;TH0 = timerVal; //定时器初值高位TL0 = timerVal; //定时器初值低位ET0 = 1; //打开定时器0中断EA = 1; //打开总中断}void main(){initTimer(); //初始化定时器0while(1){if(count >= 100){led = !led; //LED翻转count = 0; //计数器清零}}}void timerHandler() interrupt 1{TH0 = timerVal;TL0 = timerVal;count++; //计数器+1}```在上述代码中,通过设置TMOD寄存器,将定时器工作在方式1。
采用定时器/ 计数器T0 对外部脉冲进行计数,每计数100 个脉冲后,T0 转为定时工作方式。
定时1ms 后,又转为计数方式,如此循环不止。
假定MCS-51 单片机的晶体振荡器的频率为6MHz ,请使用方式 1 实现,要求编写出程序。
解答:定时器/ 计数器T0 在采用定时器/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。
定时1ms后,又转为计数方式,如此循环不止。
假定MCS-51单片机的晶体振荡器的频率为6MHz,请使用方式1实现,要求编写出程序。
解答:定时器/计数器T0在计数和定时工作完成后,均采用中断方式工作。
除了第一次计数工作方式设置在主程序完成外,后面的定时或计数工作方式分别在中断程序完成,用一标志位识别下一轮定时器/计数器T0的工作方式。
编写程序如下:ORG 0000HLJMP MAINORG 000BHLJMP IT0PMAIN: MOV TMOD,#06H ;定时器/计数器T0为计数方式2MOV TL0,#156 ;计数100个脉冲的初值赋值MOV TH0,#156SETB GA TE ;打开计数门SETB TR0 ;启动T0,开始计数SETB ET0 ;允许T0中断SETB EA;CPU开中断CLR F0 ;设置下一轮为定时方式的标志位WAIT: AJMP W AITIT0P: CLR EA;关中断JB F0,COUNT ;F0=1,转计数方式设置MOV TMOD,#00H ;定时器/计数器T0为定时方式0MOV TH0,#0FEH ;定时1ms初值赋值MOV TL0,#0CHSETB EARETICOUNT: MOV TMOD,#06HMOV TL0,#156SETB EARETI。
51单片机定时器工作方式
51单片机的定时器有两种工作方式:。
1.定时计数器模式。
单片机定时器通过定时计数器模式实现定时功能,定时器会计数,当
计数到预设值时,定时器就会触发中断或者标志位,从而实现定时功能。
单片机的定时器可以通过外部晶振或者内部时钟源提供时钟信号进行计数,计数值可以根据不同的定时需求进行设置,比如毫秒级,微秒级等精度的
定时。
2.脉冲捕获模式。
单片机定时器通过脉冲捕获模式实现测量外部事件的时间,脉冲捕获
模式可以捕获外部脉冲的高低电平信号,并将捕获到的数值存入定时器计
数器中,从而实现对脉冲的测量功能。
脉冲捕获模式主要应用于测量高速
事件的脉冲信号,比如汽车发动机的转速测量,超声波传感器的距离测量等。
c51单片机定时器中断的执行过程
C51单片机定时器中断的执行过程可以分为以下几个步骤:
1. 初始化定时器:首先需要对定时器进行初始化,设置定时器的计数模式、计数值、溢出方式等参数。
这些参数可以通过编程实现,也可以通过硬件电路进行调整。
2. 启动定时器:初始化完成后,需要启动定时器。
启动定时器后,定时器开始按照预设的参数进行计数。
当计数值达到预设的溢出值时,定时器会产生一个溢出信号。
3. 设置中断服务程序:为了在定时器溢出时执行特定的操作,需要设置一个中断服务程序 ISR)。
中断服务程序是一段特殊的代码,它会在定时器溢出时被自动调用。
4. 开启中断:在中断服务程序设置完成后,需要开启相应的中断。
开启中断后,当定时器溢出时,CPU会自动跳转到中断服务程序执行。
5. 执行中断服务程序:当定时器溢出时,CPU会暂停当前任务,跳转到中断服务程序执行。
在中断服务程序中,可以执行一些特定的操作,如更新显示、读取传感器数据等。
6. 返回主程序:中断服务程序执行完成后,CPU会自动返回到主程序继续执行。
这样,通过定时器中断,可以实现对单片机的周期性控制和数据采集等功能。
51单片机定时器使用——小灯闪烁一、定时器工作方式设置TMOD=0x01
GATE =0 由TR=1控制开始计时;
C/ T=0 作为定时时器使用;
M1=0\M0=1 用作16位定时器
二、计数寄存器TH0\TL0初始值计算如定时0.02秒
普通51单片机12T模式:
(一)手工计算例如晶振为10.6850MHZ 定时20毫秒
X/10.6850*1000000*12=20毫秒 X=17808
原始值T0=Y Y+17808=65536 Y=47728
利用科学计算器进行16进制转换为0Xb800 TH0=0x80 TL0=0x00 (二)单片机公式计算
TL0=T1MS;//初始化定时的计数初值(第8位),高8位丢失
(三)启动定时器(TR0=1),判断是否溢出(If(TF0==1){//}),时间到。
(四)闪烁的小灯代码
#include<REG51.h>
//P1 0脚接LED小灯
sbit led=P1^0;
//定义延时函数,循环cs次,时间长为20*cs毫秒
void delay20(unsigned int cs)
{
unsigned int shuL=0;
TMOD=0x01;
//初始值根据单片机时钟频率计算
TH0=0xB8;
TL0=0x00;
//启动定时器
TR0=1;
while(shuL<=cs)
{
if(TF0==1)
//查询是否溢出,溢出后复位溢出标志,赋初始值,循环计数加。
{TF0=0;
TH0=0xBA;
TL0=0x70;
shuL=shuL+1;
}
}
}
void main()
{
delay20(500);
//小灯取反,亮500*20毫秒,即10秒;
led=~led;
delay20(500);
}。