IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 8.定时器 -> 正文阅读

[嵌入式]8.定时器

定时器

概述:

  1. 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成
  2. ?定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行
  3. STC89C52定时器资源:
    1. 定时器个数:3个(T0、T1、T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源
    2. 注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的

作用:

  • 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
  • 替代长时间的Delay,提高CPU的运行效率和处理速度
  • 计数器(TH0(高八位),TL0(低八位))一共能计时0~65535 ,一次1us,一共65535us,若计时1ms,赋初始值为64535,离结束1ms

中断系统

概述:

  • 中断源个数:8个(外部中断0、定时器0中断、外部中断1、定时器1中断、串口中断、定时器2中断、外部中断2、外部中断3)

  • 中断优先级个数:4个

  • 中断号:在这里插入图片描述

  • 注意:中断的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的中断资源,例如中断源个数不同、中断优先级个数不同等等

使用

在这里插入图片描述

自动生成定时器初始化:

void Timer0Init()		//1毫秒@12.000MHz
{
	//AUXR &= 0x7F;		//定时器时钟12T模式,这个删除不要
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x18;		//设置定时初始值
	TH0 = 0xFC;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	//中断,这几个后面自己添加
	ET0=1;
	EA=1;
	PT0=0; //中断优先级 0:低优先级; 1:高优先级
}

定时器应用:

#ifndef __TIMER0_H__
#define __TIMER0_H__
void Timer0Init();
#endif
#include <REGX52.H>
/**
  * @brief  定时器0初始化 1毫秒@12.000MHz
  * @param  无
  * @retval 无
  */
void Timer0Init()		//1毫秒@12.000MHz
{

	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x18;		//设置定时初始值
	TH0 = 0xFC;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	//中断
	ET0=1;
	EA=1;
	PT0=0; //中断优先级 0:低优先级; 1:高优先级
}
/**
//定时器函数模板(1s)
void Timer0_Routine() interrupt 1
{		
		static unsigned int T0Count;
		TL0 = 0x18;	
		TH0 = 0xFC;
		T0Count++;
		if(T0Count >= 1000){
				T0Count=0;
		}
}
**/
#include <REGX52.H>
#include "Timer0.h"



void main(){

	Timer0Init();	
	while (1)
	{
		
	}
}
void Timer0_Routine() interrupt 1
{		
		static unsigned int T0Count;
		TL0 = 0x18;	
		TH0 = 0xFC;
		T0Count++;
		if(T0Count >= 1000){
			T0Count=0;
			P2_0 =~ P2_0;	
		}
}

流水灯(按键控制LED流水灯左右移动)

#include "INTRINS.H" //数学函数
extern unsigned char _crol_    (unsigned char, unsigned char);//左移一位
extern unsigned char _cror_    (unsigned char, unsigned char);//右移一位
特殊之处:比如a = 0x01; a = _cror_(a,1); 他到a = 0x80 之后直接变成 a = 0x01;

main

#include <REGX52.H>
#include "Timer0.h"
#include "Key.h"
#include "INTRINS.H" //常用函数

unsigned char KeyNum, LEDMode;
void main(){

	P2=0xFE;
	Timer0Init();	
	while (1)
	{
		KeyNum = Key();
		if(KeyNum != 0)
		{
			if(KeyNum == 1)
			{
				LEDMode++;
				if(LEDMode > 1)LEDMode=0;
			
			}
		}
		
	}
}

void Timer0_Routine() interrupt 1
{		
		static unsigned int T0Count;
		TL0 = 0x18;	
		TH0 = 0xFC;
		T0Count++;
		if(T0Count >= 5000){
			T0Count=0;
			if(LEDMode==0)P2=_crol_(P2,1);
			if(LEDMode==1)P2=_cror_(P2,1);
			
		}
}

按键

#ifndef __KEY_H__
#define __KEY_H__
unsigned char Key();
#endif
#include <REGX52.H>
#include "Delay.h"
/**
  * @brief  获取独立按键键码
  * @param  无
  * @retval 按下按键的键码,范围1~4,无按下为0
  */
unsigned char Key()
{
		unsigned char keyNumber = 0;
		if(P3_1 == 0){Delay(20);while(P3_1 == 0);Delay(20);keyNumber = 1;}
		if(P3_0 == 0){Delay(20);while(P3_0 == 0);Delay(20);keyNumber = 2;}
		if(P3_2 == 0){Delay(20);while(P3_2 == 0);Delay(20);keyNumber = 3;}
		if(P3_3 == 0){Delay(20);while(P3_3 == 0);Delay(20);keyNumber = 4;}
	
		return keyNumber;
}

= 0);Delay(20);keyNumber = 2;}
if(P3_2 == 0){Delay(20);while(P3_2 == 0);Delay(20);keyNumber = 3;}
if(P3_3 == 0){Delay(20);while(P3_3 == 0);Delay(20);keyNumber = 4;}

	return keyNumber;

}


  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:44:59  更:2022-03-15 22:47:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:24:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码