51 单片机定时器

51 单片机定时器

声明:本文以 STC89C52 单片机为例

定时器作用

主要有三个作用

1、用于计时系统,可实现软件计时,使程序每隔一段时间完成一项操作

2、替代长时间的delay,提到CPU的运行效率和处理速度

3、实现多个任务的切换执行

定时器的工作模式

51单片机的定时器工作模式有四种

模式0:13位定时器/计数器

模式1:16位定时器/计数器(常用)

模式2:8位自动重装模式

模式3:两个八位计数器

模式1(常用)

定时器有三个部分构成:时钟、计数单元、中断

以下为51单片机 定时器的模式1的内部电路图
在这里插入图片描述

如图所示,红色部分分别是他的时钟源和中断,剩下部分则是他的计数单元。

原理:可以看到图中的TL0和TL1各占8个bit,时钟源每来一个脉冲,TL0则+1,当TL0计满,则溢出给TH0,两个计数器一共16个bit,则可以计数2的16次方个数,即0~65535,当加到最大值时,就将TF0(TimerFlag)置为1,就申请中断,TL0和TH0置为0。

定时器时钟源

时钟有两种,一种为系统时钟,一种是外部时钟(T0 Pin)。

SYSclk:系统时钟,也就是晶振周期。不同芯片的晶振频率不同,51单片机的晶振频率为12MHz,那他的时钟周期就是晶振频率的倒数,也就是1/12 us;

晶振:通电后会产生固定频率的内部元件;

外部时钟:芯片的 T0 引脚连接到的外部晶振单元;

C/T:C为counter(计数器),T为Timer(定时器),字母头上一横指的是,低电平生效,简单地说,此处是一个寄存器,当给这个寄存器配置为 1 时,实现计数器功能,配置为 0 ,实现定时器功能。

从上图可以看到,系统时钟有两种模式,一种是➗12,一种➗6,也就是分频,可以粗浅地理解为降低它的晶振频率,➗12则频率变为1MHz,每产生一个脉冲就是1 us,同理➗6则是2 us,每来一个脉冲就计一个数。

中断系统

CPU能够对外界紧急事件的实时处理的系统。

当触发紧急事件时,CPU暂停当前工作去处理这个紧急事件,处理完之后再回到原本被中断的地方继续工作。

同时发生多个中断请求时,所以中断会有优先级,不同的CPU优先级个数不同,高优先级的中断能中断低优先级的中断,这个过程也叫中断嵌套。

定时器寄存器

在这里插入图片描述

图中为51单片机的相关寄存器,每个寄存器详细配置暂时按下不表,详细请看芯片手册。

补充

此处补充一点模电知识,还是以定时器模式1的电路图为例:
在这里插入图片描述

可以看到我图中使用了三个颜色的框圈出了三个不同东西。

红色框为 非门

蓝色框为 或门

绿色框为 与门

实际使用

我们都知道,寄存器是连接软硬件的媒介,具体使用时,对照相应芯片手册配置寄存器就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C51单片机有两个定时器,分别为Timer 0和Timer 1。定时器的主要功能是计时和延时,可以用于控制程序执行的时间。 以下是C51单片机定时器的基本操作步骤: 1. 设置定时器模式:选择定时器工作模式,如定时器模式或计数器模式。 2. 设置定时器计数值:确定计数器的初始值,即计时的时间。 3. 启动定时器:启动定时器开始计时。 4. 等待定时器计时结束:等待定时器计时结束,即达到设定的计数值。 5. 停止定时器:停止定时器计时。 以下是一个简单的C51单片机定时器示例程序: ``` #include<reg52.h> #define uint unsigned int #define uchar unsigned char void timer0_init(); //定时器0初始化函数 void main() { timer0_init(); //调用定时器0初始化函数 while(1) { //程序执行任务 } } void timer0_init() { TMOD &= 0xF0; //设置定时器0为模式1 TH0 = 0x3C; //给定时器赋初值,定时1ms TL0 = 0xAF; ET0 = 1; //打开定时器0中断允许 EA = 1; //打开总中断允许 TR0 = 1; //启动定时器0 } void timer0() interrupt 1 using 1 { TH0 = 0x3C; //给定时器赋初值,定时1ms TL0 = 0xAF; //中断执行任务 } ``` 在上面的程序中,timer0_init()函数用于初始化定时器0,设置为模式1,计时1ms;timer0()函数是定时器0的中断处理函数,当定时器0计时结束后,会自动进入此函数进行中断处理。在这个函数中,可以编写相应的任务执行代码。在主函数中,通过while(1)循环不停地执行程序任务,而定时器0会在后台进行计时和中断处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值