当前位置: 首页 > news >正文

(4)定时器

51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成

作用:

  1. 用于计时系统
  2. 替代长时间Delay,提高运行效率和速度
  3. 任务切换

STC89C52定时器资源:

定时器个数:3个(T0,T1,T2),T2是新增资源,T0T1为老版本兼容

定时器的资源和单片机的型号是关联在一起的,不同型号可能有不同定时器个数和操作方式

定时器根据时钟的输出信号,每隔固定时间段,计数单元的数值加一,当计数单元数值增加到设定的值时,计数单元会向中断系统发出中断申请,使程序跳转到中断服务函数中执行

STC89C52的T0和T1均有四种工作模式:

  • 模式0:13位定时器/计数器
  • 模式1:16位定时器/计数器(常用)
  • 模式2:8位自动重装模式
  • 模式3:两个8位计数器

请添加图片描述

计数单元:时钟发出脉冲给计数单元,每个脉冲加一,计数单元一共2*8=16位(最大65535),超过最大值溢出,此时标志位TF0发出中断请求

时钟:有两个来源

  • SYSclk系统时钟,即晶振周期,12MHz,此时做定时器
  • T0 Pin外接时钟——此时做计数器

中断系统:使CPU具有对外界紧急事件的实时处理能力,高级别的中断优先执行,多级中断称为中断嵌套,中断请求的来源称为中断源

STC89C52中断资源:

  • 中断源个数:8个(外部中断0,定时器0中断,外部中断1,定时器1中断,串口中断,外部中断2,外部中断3)
  • 中断优先级个数:4个
  • 中断号:

请添加图片描述

寄存器是连接软硬件的媒介在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另一方面,每一个寄存器背后都连接了一根导线,控制着电路的连接方式寄存器相当于一个复杂机器的“操作按钮”

TCON:控制中断

请添加图片描述

请添加图片描述

TMOD:定时和计数功能

请添加图片描述

请添加图片描述

12MHz每隔一微秒加一,计数单元(0~65535),通过赋初始值的方式做到每秒中断:

0~65535
总共定时65535us
计数单元初始值为64535,计时时间为1000us=1ms
所以TH0(高位)TL0(低位)应组合
TH0 = 64535/256; // 取出64535的高八位赋给TH0
TL0 = 64535%256; // 取出64535的低八位赋给TL0
1.因为64535是十进制数,要先转换为十六进制数所以除16;
2.然后还要取高8位,所以再除16,算到一起就是除256.
3.取模同理
void Timer0_Init(){TMOD = 0x01; // 0000 0001 定时模式1// 这里TMOD可以使用与或式赋值法,只操作特定位而不改变其他位// TMOD &= 0xf0;// TMOD |= 0x01;TF0 = 0; // 标志位初始化,防止产生中断TR0 = 1; // 运行控制位,开始计数工作TH0 = 64535 / 256; // 给计数单元赋初值TL0 = 64535 % 256;ET0 = 1;// 溢出中断允许位EA = 1; // 总中断允许控制位PT0 = 0; // 定时器0中断优先级控制位
}
void Timer0_Rountine() interrupt 1{ // 中断号static unsigned int T0Count = 0;TH0 = 64535 / 256; // 给计数单元赋初值,保证每次移除后都是从64535开始重新计数TL0 = 64535 % 256;T0Count++;if(T0Count >= 1000){ // 中断次数超过1000,即经过1秒后T0Count = 0;P2 = ~P2;}
}

一个函数头文件:INTRINS.H

内部函数 描述
_crol_ 字符循环左移 溢出则从低位重新开始
_cror_ 字符循环右移
_irol_ 整数循环左移
_iror_ 整数循环右移
_lrol_ 长整数循环左移
_lror_ 长整数循环右移
_nop_ 空操作 8051 NOP 指令
_testbit_ 测试并清零位 8051 JBC 指令
_nop_ 空操作 8051 NOP 指令
_testbit_ 测试并清零位 8051 JBC 指令
http://www.lryc.cn/news/68277.html

相关文章:

  • 项目实现读写分离操作(mysql)
  • VP记录:Educational Codeforces Round 148 (Rated for Div. 2) A~D1
  • 无线模块|如何选择天线和设计天线电路
  • (11)LCD1602液晶显示屏
  • 类和对象下
  • 【云计算•云原生】4.云原生之什么是Kubernetes
  • 云厂商降价潮背后:来中小企业战场「拼刺刀」
  • 2-单片机GPIO相关知识点及流水灯和按键采集小实验
  • 基础知识(王爽老师书第一章)
  • 非煤矿山电子封条建设算法 yolov8
  • 七大软件架构设计原则详解
  • 【Python入门】Python循环语句(while循环的嵌套应用)
  • 数据来源和搜集
  • Python入门(七)if语句(二)
  • [元带你学: eMMC完全解读 2] eMMC协议相关术语与定义
  • 预测杭州五一黄金周的旅游出行人数
  • 内防泄密重要,还是外防窃密重要?
  • ChatGPT:2. 使用OpenAI创建自己的AI网站:1. 初探API
  • 5月17日,今日信息差
  • 物联网的体系架构
  • Golang交叉编译
  • kafka3.x详解
  • kubectl常用命令|pod生命周期|金丝雀发布|超详细
  • 【Linux系统】Linux进程信号详解
  • 阿里云u1服务器通用算力型CPU处理器性能测评
  • hive的详细使用文档和使用案例
  • KL散度
  • Java基础学习(16)多线程
  • 【一起啃书】《机器学习》第五章 神经网络
  • matlab实验二可视化