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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> C51学习笔记(二) -> 正文阅读

[嵌入式]C51学习笔记(二)

定时器/计数器

概念

定时器不是像LED、按键一样摆在外面实实在在可以看见,它是在芯片内部,依赖晶振产生固定的时间间隔。
它用于计时系统,实现软件计时,或每隔一段固定的时间间隔后引发中断完成一项操作。可以替代长时间的Delay,提高CPU运行效率和处理速度。因为Delay会让CPU一直在那个地方停滞,直到Delay结束CPU才继续其它操作,定时器就可以让CPU同时执行别的操作。
定时器每隔一个时间段,计数单元的值就增加,增加到预设值时,计数单元就会向中断系统发出中断申请,让程序跳转到中断服务函数中执行。这个中断就类似于你在睡觉,闹钟响了提醒你去上课,这时就要停止睡觉,执行完上课这一事件后再回来接着睡觉。
STC89C52系列单片机内部设置的两个16位定时器/计数器T0、T1都具有计数方式和定时方式两种工作方式。在特殊功能寄存器TMOD中都有一控制位C/T来选择T0或T1为定时器还是计数器。
定时器/计数器本质是对脉冲进行计数。如果计数脉冲来自系统时针,则为定时方式,每12个时钟或者每6个时钟得到一个计数脉冲,计数值加一;如果来自外部引脚(如图),则为计数方式,每来一个脉冲加一。
在这里插入图片描述

寄存器

在这里插入图片描述

工作模式寄存器TMOD

高4位配置T1、低4位T0。TMOD不能位寻址。
GATE是门控位,等于0时TR0/TR1通过软件置1即可启动定时器,等于1时TR0/TR1要置1还要让INT0/INT1高电平时才启动定时器0/1。M1/M0就是控制定时器/计数器的工作模式,共四种。

控制寄存器TCON

用来控制两个定时器的启动、停止,锁存定时器溢出中断源和外部请求中断源等。可以位寻址,系统复位时所有位清零。
在这里插入图片描述
它的低四位与中断有关。IE0/IE1是外部中断0/1请求源(INT0/INT1)标志,等于1时外部中断向CPU请求中断,CPU响应该中断时由硬件自动置零。IT0/IT1选择外部中断触发方式,为1是脉冲触发,为0是低电平触发。
TF0/TF1就是定时器溢出标志,计满自动置1,向CPU请求中断,一直保持到CPU响应中断,才由硬件置零,也可由程序查询置零。

工作模式

一般大部分情况都是使用模式1即16位定时器/计数器。
在这里插入图片描述
此模式下,时钟给计数器提供脉冲,每来一个脉冲加一,TL0溢出向TH0进位,加到65535时产生溢出,TH0溢出置位TCON中的溢出标志位TF0,有这个标志位就会向中断系统申请中断。
SYSclk是系统时钟,即晶振周期,本板晶振为11.0592MHz。T0 Pin接外界引脚的。C/T为0接的是系统时钟,C/T为1接的是外部引脚,由此来选择是定时器功能还是计数器功能。

中断系统

概念

实现中断的部件叫中断系统,请示CPU中断的请求源叫中断源。
当同时有多个中断源时,规定每个中断源的优先级别,CPU会响应优先级别最高的中断请求。
当CPU正在处理一个中断源时,发生了另一个优先级更高的中断源请求,CPU暂停当前中断源的服务程序,处理完新的中断请求,再继续原来中断服务程序,这就是中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的系统就是单极中断系统
当两个相同优先级的中断同时产生,将由查询次序来决定系统先响应哪个。
在这里插入图片描述
STC89C52中断源有8个,外部中断INT0/1/2/3、定时器0/1/2中断、串口UART中断。
中断系统结构图:
在这里插入图片描述

寄存器

在这里插入图片描述

应用

晶振11.0592MHz每秒可以产生11.0592/12 = 0.9216M个机器周期
一个机器周期就是1s/0.9216M = 1.085us
1ms就需要922个机器周期
设初值64614——FC66

#include <REGX52.H>
void Timer0_Init()  //定时器0
{
	TMOD = 0x01;//0000 0001前面四位控制T1的置零不管。GATE=0,让TR0来控制启动定时器,C/T=0选择定时器功能,M1=0、M0=1选择工作模式1。
	TF0 = 0;
	TR0 = 1;//启动定时器
	TH0 = 0xFC;//设置初值高位
	TL0 = 0x66;//设置初值低位
	ET0 = 1;
	EA = 1;//启动中断
	PT0 = 0;
}
void main()
{
	Timer0_Init();
	while(1)
	{
		
	}
}
unsigned int T0Count;
void Timer0_Routine() interrupt 1  //中断函数
{
	TH0 = 0xFC;
	TL0 = 0x66;
	TOCount++;
	if(TOCount>=1000)//每一秒改变一次
	{
		T0Count = 0;
		P2_0 = ~P2_0;
	}
}

这段程序呈现现象就是LED灯闪一秒灭一秒。
生成定时器可以直接在STC-ISP上生成。
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:58:04  更:2022-10-08 21:01:06 
 
开发: 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年5日历 -2024/5/19 20:32:59-

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