04 定时器

本文介绍了51单片机中的定时器工作原理、模式1的16位定时器/计数器结构,以及如何通过定时器T0配合独立按键控制LED流水灯。详细讲解了寄存器配置和中断系统的使用。
摘要由CSDN通过智能技术生成

#科技/51单片机/定时器

一、基础知识

  • 1.1 定时器概念

    • 属于单片机内部资源,其电路的连接和运行均在单片机内部完成。
    • STC89C52定时器资源
      • T0,T1,T2(与传统51不兼容);
  • 1.2定时器作用

    • 用于计时
    • 代替长时间Delay,提高CPU运行效率和处理速度
  • 1.3 原理

    • 时钟的输出信号控制计数单元增加,当计数单元增加到设定值时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行
      计时器框图
    计时器框图
## 2.1 计时器的工作模式 - **模式1**:16位定时器/计数器

在这里插入图片描述

<figure>
<center><figcaption>16位定时器/计数器</figcaption></center>
- ####

1.计数系统

- 	时钟传一个脉冲,计数器++,当计数器溢出时,置一个标志位TF0,向*中断系统*申请中断。
- #### 时钟系统:
	- 最初来源
		- 1、**SYSclk**:系统时钟,即晶振周期。
		- 2、**T0 Pin*
  1. List item

*:外部引脚控制,实现计数器功能
- 寄存器位选择:
- C/T(counter/timer):1=>counter计数器 ;
0=>timer定时器
- #### 中断系统
- 功能:
- 使CPU具有对外界紧急事件实时处理能力
- 概念:
- 中断源:请示CPU中断的请求源
- 中断嵌套:CPU处理一个中断请求时,传来一个优先级更高的中断请求,CPU会暂停当前服务,转而处理优先级更高的中断请求,处理完后,再返回处理优先级低的服务程序。
-



定时器和中断系统

2.2 定时器相关寄存器

[!NOTE]
寄存器是连接软硬件的桥梁:

  • 单片机通过配置寄存器,来控制内部线路的链接,通过控制内部线路不同方式的链接,来实现不同的功能。
  • 寄存器的作用相当于开关
定时器相关寄存器
- 1、定时器/计数器控制寄存器TCON(可位寻址,可单独赋值) - 2、定时器/计数器工作模式寄存器TMOD ---

二、代码实现——独立按键配合计时器控制LED流水灯

- 以计时器T0为例
  • 1、模块化配置T0的寄存器函数:
#include <REGX52.H>
/**
  * @brief  定时器0初始化,一毫秒@12MHZ
  * @param 	无
  * @retval 无
  */
void Timer0_Init(void)		//1毫秒@12.000MHz
{
	TMOD &= 0xF0;			//设置定时器模式
	TMOD |= 0x01;			//设置定时器模式
	
	TL0 = 0x18;				//设置定时初始值
	TH0 = 0xFC;				//设置定时初始值
	
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	ET0=1;
	EA=1;
	PT0=0;
}
  • 2、主函数
- #include <REGX52.H>
#include "Timer0.h"
#include "Key.h"
#include <INTRINS.H>

unsigned char KeyNum,LEDMode;

void main()
{
	P2=0xFE;
	Timer0_Init();
	while(1)
	{
		KeyNum=Key();		//获取独立按键键码
		if(KeyNum)			//如果按键按下
		{
			if(KeyNum==1)	//如果K1按键按下
			{
				LEDMode++;	//模式切换
				if(LEDMode>=2)LEDMode=0;
			}
		}
	}
}

void Timer0_Routine() interrupt 1
{
	static unsigned int T0Count;
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	T0Count++;		//T0Count计次,对中断频率进行分频
	if(T0Count>=500)//分频500次,500ms
	{
		T0Count=0;
		if(LEDMode==0)			//模式判断
			P2=_crol_(P2,1);	//LED输出
		if(LEDMode==1)
			P2=_cror_(P2,1);
	}
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值