STC89C52定时器的简介

这篇具有很好参考价值的文章主要介绍了STC89C52定时器的简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、序言

针对于STC89C52RC而言,这个芯片内部包含了三个定时器——T0、T1和T2,他们的中断优先级分别是1、3和5。

怎么还有一个定时器2呢?博主也是今天整理这篇博客的时候,翻阅芯片手册才发现的。如果说,我们经常用的T0和T1叫做通用定时器的话,那么T2我愿称之为高级定时器。今天这篇博客是给小白介绍定时器的,就暂不介绍T2的功能,有需求的话可以向博主留言。

那么进入正题。

二、定时器的基本介绍

先来分析一下,他为什么叫做定时器?
本质上来说:他就是存储数据的寄存器,每过一个机器周期,存储的数据值加1,这个时候寄存器的值就不断加一,当加的值溢出的时候,这个时候就会触发中断。因此你想要定时具体的时间,有两个控制因素:一个是机器周期的大小,一个是你设置寄存器的初始值。那么什么是机器周期?

因为周期时频率的倒数,所以下面的内容我都以频率来讲解。

机器周期
官方的定义来说:执行一次最简单的代码所需要的时间。那么他与什么有关呢?答案是时钟周期。

时钟周期
时钟周期就是你单片机工作的外部时钟源的周期,就是我们所说的外部晶振。(最常见的就是11.0592MHZ)

机器频率就是时钟频率除以分频系数,那么对于STC89C52而言,它有两种分频系数,12分频和6分频,也就是我们经常见到的12T模式和6T模式(这些都是在STC-ISP里面设置)。

如此一来,当我们知道了单片机的机器周期是多少,就可以自由设置定时的时间了。

例如:晶振是11.0592MHZ 分频是12T的单片机,寄存器加1需要的时间是:11.0592MHZ / 12 = 0.9216MHZ;

如果设置20ms的定时周期,那么寄存器累加个数为:20000 * 0.9216 = 18432(个);则分别给

TH0(TH1) = (65535 - 18432) / 256;

TL0(TL1) = (65535 - 18432)% 256;

这样就精确的设置了定时的时间。

STC89C52定时器的简介

STC89C52定时器的简介

三、主要相关寄存器的介绍

定时器模式设置寄存器

STC89C52定时器的简介

我在这里给你简单介绍:

TMOD共有8个位,前4个位是给定时器1的,后4个位是给定时器0的。我们看后4位:

GATE位一般设置为0,如果设置为1,是用外部引脚输入的信号来开启定时器的。

C_T位在用作定时器时设置为0,设置为1是计数器模式(这里不介绍计时器的相关知识)。

M1、M0位是用来设置4种不同的定时器模式的(这个会在之后介绍四种定时器模式)。

定时器中断控制寄存器

STC89C52定时器的简介

小白完全不需要看上面的介绍,因为很难看懂.所以这里只介绍需要用到的几个:TF0、TF1、TR0、TR1、EA

TF0、TF1分别是定时器0和定时器1的中断溢出标志位,由硬件清’0’。

TR0、TR1分别是定时器0和定时器1的开启位,置’1’表示开启某一个定时器。

EA是开启总中断(这个都是要打开的)。 

四、中断模式选择:

STC89C52定时器的简介

STC89C52定时器的简介

STC89C52定时器的简介

STC89C52定时器的简介

STC89C52定时器的简介

五:单片机工作模式选择

时钟周期
时钟周期就是你单片机工作的外部时钟源的周期,就是我们所说的外部晶振。(最常见的就是11.0592MHZ)

机器频率就是时钟频率除以分频系数,那么对于STC89C52而言,它有两种分频系数,12分频和6分频,也就是我们经常见到的12T模式和6T模式(这些都是在STC-ISP里面设置)。

如此一来,当我们知道了单片机的机器周期是多少,就可以自由设置定时的时间了。

例如:晶振是11.0592MHZ 分频是12T的单片机,寄存器加1需要的时间是:11.0592MHZ / 12 = 0.9216MHZ;

如果设置20ms的定时周期,那么寄存器累加个数为:20000 * 0.9216 = 18432(个);则分别给

TH0(TH1) = (65535 - 18432) / 256;

TL0(TL1) = (65535 - 18432)% 256;

这样就精确的设置了定时的时间。

工作模式1:13位定时器

最大定时时间:2^13 / 0.9216 = 8888.89us

看图说话:

STC89C52定时器的简介

首先就是在STC-ISP里面设置分频系数。

C/T是设置定时器还是计数器,这个之后在TMOD里面同统一设置。

control:设置TR0 = 1;//打开定时器,然后GATE位在TMOD里面设置为0就可以打开整个开关。而INT0引脚表示的是可以外部输入信号控制。

接下来就是设置定时器寄存器。

最后检测溢出中断标志位。

整个程序代码就是

TMOD = 0x00;//GATE = 0, C_T = 0;
TR0 = 1;//打开定时器0
TH0 = (8192 - 4608) / 256;//设置定时5ms
TL0 = (8192 - 4608) % 32;
ET0 = 1;//打开定时器0中断
EA = 1;//开启总中断

工作模式2:16位定时器

最大定时时间:2^16 / 0.9216 = 71110us

看图说话

STC89C52定时器的简介

整个代码的书写步骤跟工作模式1类似。 

工作模式3:8位自动重装载

向TH0(TH1)中写入要自动重装载的值,在每一次TL0(TL1)溢出的时候,会自动将高位寄存器(TH0,TH1)的值读入地位寄存器,并且产生溢出中断。

看图说话

STC89C52定时器的简介

其他的地方都是类似的,主要区别在于

TL0 = TH0 = (256 - 184);//定时200us

工作模式4:两个8位定时器

根据芯片手册的介绍,该模式可以将一个16位定时器当作两个8位定时器来用,因此达到了扩展定时器的作用。

注意,该模式只有定时器0才有。

当设置该模式时,低位寄存器单独当作定时器,溢出中断由TF0显示,高位寄存器单独当作定时器,溢出中断由TF1显示。

STC89C52定时器的简介

但是在该种模式下,我如果要开启定时器1呢?那么他的溢出中断会不会跟这个模式下的混淆起来?

有知道的读者可以给我解答一下嘛?

六、范例程序

16位定时器模式

void Timer0_Initial(void)
{
	TMOD = 0x01;//16位定时器模式
    TR0 = 1;
	TH0 = (65535 - 9216) / 256;//10ms溢出中断
	TL0 = (65535 - 9216) % 256;
	ET0 = 1;
	EA = 1;
}
void Timer0_ISR(void)	interrupt 1
{
    static unsigned int count = 0;
    
	count++;
	TH0 = (65535 - 9216) / 256;//10ms溢出中断
	TL0 = (65535 - 9216) % 256;
	if (count == 100)//1s到达
	{
		count = 0;
		LED = ~LED;//LED闪烁
	}
}

8位自动重装载模式

void Timer0_Initial(void)
{
	TMOD = 0x02;//8位自动重装载模式
    TR0 = 1;
	TH0 = TL0 = (256 - 184);//定时200us
	ET0 = 1;
	EA = 1;
}

void Timer0_ISR(void)	interrupt 1
{
    static unsigned int count = 0;
    
	count++;
	if (count == 5000)//1s到达
	{
		count = 0;
		LED = ~LED;//LED闪烁
	}
}

定时器和中断:文章来源地址https://www.toymoban.com/news/detail-447121.html

#include <REGX52.H>

/**
  * @brief  定时器0初始化,1毫秒@12.000MHz
  * @param  无
  * @retval 无
  */
void Timer0Init(void)
{
	TMOD &= 0xF0;		//设置定时器模式,第四位清零
	TMOD |= 0x01;		//设置定时器模式,设置状态
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1;
	EA=1;
	PT0=0;
}

/*定时器中断函数模板
void Timer0_Routine() interrupt 1
{
	static unsigned int T0Count;
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	T0Count++;
	if(T0Count>=1000)
	{
		T0Count=0;
		
	}
}
*/

到了这里,关于STC89C52定时器的简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STC89C52】独立键盘和矩阵键盘

    今天我分享的是基于STC89C52的独立键盘与矩阵键盘实验的学习笔记。希望对你有所帮助! 目录 一、原理图分析  二、独立键盘 三、矩阵键盘 键盘在现实生活中很常见,手机的虚拟键盘,电脑的实体键盘。 键盘是由一个个按键构成,按键常态下与两端触点断开,按下时与两端

    2023年04月12日
    浏览(36)
  • 什么是STC89C52单片机

    STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写10000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[1],芯片内集成了通用8位中央处理器和ISP Flash存储单元,功

    2024年02月13日
    浏览(39)
  • 你知道什么是STC89C52RC吗?

    目录 一、什么是STC89C52RC 二、STC89C52RC由什么构成 三、STC89C52RC各部分如何使用 四、STC89C52RC如何进行编程 五、怎么使用STC89C52RC 六、为何使用STC89C52RC STC89C52RC是一种基于8051架构的单片机芯片,由中国的STC公司生产。它包含52KB的闪存程序存储器,1KB的RAM数据存储器,以及一系列

    2024年02月04日
    浏览(47)
  • 第七章、stc89c52中的串行口通信

    串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 STC89C52系列单片机内部集成有一个功能很强的全双工串行通信口 UART (Universal Asynchronous Receiver Transmitter,通用异步收发器),与传统8051单片机的串口完全兼容。设有

    2024年02月07日
    浏览(31)
  • STC89C52RC单片机原理图详解

    目录 1、单片机整体模块 2、 LED模块 3、独立按键模块 4、数码管模块 5、LCD1602模块 6、矩阵按键模块​编辑 7、串口通信模块 8、LED点阵屏模块 单片机使用的是TTL电平(一种电平的规范),规定为0V为低电平,5V为高电平; 字母上有一横,意为低电平有效。 单片机上电时,所有

    2024年02月05日
    浏览(47)
  • 【mcuclub】STC89C52单片机最小系统讲解

        3.1、主芯片 STC89C52是STC公司生产的一种低功耗、高性能8位微控制器 器件参数: 1、增强型8051单片机,指令代码完全兼容传统8051 2、工作电压:5.5V~3.3V 3、工作频率范围:0~40MHz,实际工作频率可达48MHz 4、用户应用程序空间为8K字节(程序空间) 5、片上集成512 字节RAM(

    2024年02月03日
    浏览(74)
  • STC89C52的四个 外部中断 基本使用方法

    中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。STC89C52系列单片机提供了8个中断请求源,它们分别是: 外部中断0(NT0); 对应I/O :P32 定时器0中断; 外部中断1(INT1); 对应I/O :P33 定时器1中断; 串口(UART)中断; 定时器2中断; 外部中断2(INT2); 对应I/O :P43 外部

    2024年02月04日
    浏览(104)
  • 51单片机(二)8051内核及STC89C52介绍

    我们现在经常使用的STC89C52RC单片机就是基于8051内核的,它是深圳宏晶科技生产的一款单片机,它与MCS-51兼容,下面开始介绍STC89C52RC单片机。 1. STC89C52RC的兼容型号         STC89C52RC兼容 STC89C51RC,STCLE51RC,STC89C53RC,STC89LE52RC等。 以下是完整型号列表: 我们平时用的stc89c52已经能

    2024年02月06日
    浏览(46)
  • 基于STC89C52RC设计的心形流水灯设计

    基于STC89C52RC设计的心形流水灯设计 一·硬件设计分析 1.1 主控电路 主控单片机选择为STC89C52RC的 LQFP-44(10x10)封装 注意: 使用51单片机需要注意,如果需要使用的单片机的P0口,则需要在P0的IO口上接上一个4.7K-10K左右的上拉电阻。   上拉电阻的作用: 给单片机的I/O口拉高电平

    2024年02月08日
    浏览(41)
  • STC89C52 小车-舵机转向/蓝牙控制/寻迹,有PCB有讲解,更新

    推荐单片机:STC89C52或51(尽量52 还有提供 可用于测试直接烧录的89单片机文件(hex),不需要重新编译 。 还是老话: 源代码可以直接编译通过。 本人是自学,原创内容--转载请务必说明!! 所有下载在文章结尾(包全代码,附件) 代码:为个人gitHub库,无法或不会下载的可以评论

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包