STC89C52学习笔记(六)

STC89C52学习笔记(

综述:本文讲述了51单片机的定时器和中断,还讲述了如何初始化定时器、编写中断服务函数和完成定时器控制LED闪烁。

一、定时器

1. 作用

①用于计时

②替代长时间的Delay。因为在Delay下,单片机的MCU也被占用着不能执行其他工作,按键检测和其他工作会不灵敏。

2. 数目

不同单片机有不同数目的定时器和操作方式,在使用前可以先查一下数据手册。

STC89C52有三个定时器:T0、T1、T2,T0、T1是所有51单片机都有的。

3. 定时器的工作模式

(1)STC89C52的T0和T1均有四种工作模式:模式0:13位定时器/计数器;模式1:16位定时器/计数器(常用;模式2:8位自动重装模式;模式3:两个8位计数器。

(2)工作模式包括:时钟(SySclk是系统时钟,也即是晶振周期,在本单片机上,晶振是12MHz)、计数(最大能计数到65535)、中断。定时器T0和T1工作模式1的框图如下:

思路:定时器→计数→中断。定时器≈小闹钟,当时钟输出信号每隔一秒,计数加一,当加到指定时间,计数单元向中断系统发送申请,产生中断,程序跳转到中断服务程序中,执行完再回到原来的程序。

二、中断

1.定义

中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。

2.数目

一般51单片机有8个中断源:外部中断0、定时器0中断、外部中断1、定时器1中断、串口中断、外部中断2、外部中断3,其中外部中断2、外部中断3不是每个51单片机都有的。

3.优先级

每一个中断源有一个优先级别,CPU总是先响应优先级别最高的中断请求,51单片机共有4个中断优先级。

4.中断号

三、定时器控制LED闪烁

1. 初始化定时器0

初始化定时器0,需要对以下寄存器进行赋值,使之实现以下通道。

①配置TMOD寄存器。

使定时器工作在定时器0(T0),所以,TMOD寄存器应配置为0000 0001,

②配置TCOD寄存器。

当TF为1时,会产生中断,于是应该将TF0配置为0。配置TR0为1,使T0开始计数,IE0和IT0控制外部中断引脚。

③给计时器赋初值。

由于计时器可以计数2^16-1=65535次,每次1us,总共65535us。这里给高位TH0=x/256,低位TL0=x%256,x是需要计数的值。

④配置ET0=1,EA=1,PT0=0。

代码如下:

void Timer0_Init()
{TMOD=0x01;TF=0;TR0=1;TH0=65535/256;TL0=65535%256;ET0=1;EA=1;PT0=0;
}

2. 编写中断程序

①查询定时器0的中断号为interrupt 0。

②计算计时时间,编写中断程序。若是每隔1sLED状态取反一次,即可使计数器0达成1ms的计数,再在函数中循环1000次,达成1s的时间。由于65535-64535=1000us=1ms,即可使“TH0=64535/256;TL0=64535%256;”。程序如下:

void Timer0_Routine() interrupt 1
{TH0=64535/256;//1000us,也即是1msTL0=64535%256;T0Count++;if(T0Count>=1000)//每隔一秒P2_0取反一次{T0Count=0;P2_0=~P2_0;}
}

拓展:

①修改TMOD的配置函数。

以上的程序虽然可以完成相应的要求,但是TMOD寄存是不可位寻址,也即是,在这种配置下(TMOD=0x01),只能实现寄存器0这种模式,寄存器1没办法使用。所以这里可以用与或式赋值法,将TMOD配置为TMOD=TMOD&0xF0,保留高4位的值,把第四位清零;TMOD=TMOD|0xF0,保留高七位的值,将最后一位置1。

所以,可以把初始化的代码更改位

void Timer0_Init()
{TMOD=TMOD&0xf0;TMOD=TMOD|0x01;TF0=0;TR0=1;TH0=64535/256;//1000us,也即是1msTL0=64535%256;ET0=1;EA=1;PT0=0;
}

②简便版配置计数器初始化。

运用“stc-isp”软件,点击“定时器计数器”,按照以下配置,再加上ET0=1,EA=1,PT0=0,即可生成1ms的定时器0计数初始化。

void Timer0_Init()
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时ET0=1;EA=1;PT0=0;
}

四、模块化定时器0

将定时器模块化可以方便日后的使用。建立.c和.h文件,将定时器0初始化函数和定时器0中断函数赋值到.c文件中,并添加函数相应说明。在.h文件中,添加防重复定义和函数的声明。


参考视频:51单片机学习视频

侵权联系删除!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/301882.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php站长在线工具箱源码优化版

环境要求 PHP > 7.4MySQL > 5.6fileinfo扩展使用Redis缓存需安装Redis扩展 源码下载地址:php站长在线工具箱源码优化版.zip

stm32GPO的相关操作

GPIO的使用 1.GPIO八种工作模式1.1 上拉输入1.2 下拉输入1.3 浮空输入1.4 模拟输入1.5 推挽输出1.6 开漏输出1.7 复用推挽输出1.8 复用开漏输出 2.相关寄存器2.1 寄存器配置IO 3.相关库函数 1.GPIO八种工作模式 保护二极管的作用:用来保护IO,一般情况IO的…

【React】Ant Design社区扩展库之分割面板:react-resizable-panels

主角:react-resizable-panels 简介:来之Ant Design官方文档社区精选组件 1、效果 2、环境 react-resizable-panels: ^2.0.16next: 14.1.3react: ^18 3、安装 # npm npm install react-resizable-panels# yarn yarn add react-resizable-panels# pnpm …

AI编程005/ 逆向生成mysql的建表语句

1/ 通过insert into 语句生成建表语句 有些时候我们能获取到表的insert语句,但是没有表结构。我们可以借助AI工具,让其逆向生成mysql的建表语句。 提示词如下: 根据下面的SQL语句,逆向生存mysql的建表语句,每个字段…

文心一言上线声音定制功能;通义千问开源模型;openAI又侵权?

文心一言上线定制专属声音功能 百度旗下 AI 聊天机器人文心一言上线新功能,用户录音一句话,即可定制声音。 使用这项功能需要使用文心一言 App。在创建智能体中,点击创建自己的声音,朗读系统提示的一句话,等候几秒钟时…

【大数据】大数据概论与Hadoop

目录 1.大数据概述 1.1.大数据的概念 1.2.大数据的应用场景 1.3.大数据的关键技术 1.4.大数据的计算模式 1.5.大数据和云计算的关系 1.6.物联网 2.Hadoop 2.1.核心架构 2.2.版本演进 2.3.生态圈的全量结构 1.大数据概述 1.1.大数据的概念 大数据即字面意思&#x…

网络工程师笔记18(关于网络的一些基本知识)

网络的分类 介绍计算机网络的基本概念,这一章最主要的内容是计算机网络的体系结构-ISO 开放系统互连参考模型,其中的基本概念,例如协议实体、协议数据单元,服务数据单元、面向连接的服务和无连接的服务、服务原语、服务访问点、相…

Vscode 中调试Django程序

调试介绍: ​​​​​​​Explore the debugger Debug/调试 可以让我们在特定的代码行上暂停程序的运行。当程序暂停时,我们可以查看变量的数值,在“Debug控制台”中运行代码,或利用“Debug”工具提供的其他功能。启动Debugger/调试器会自动…

迭代器模式

前言 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。 迭代器模式在访问数组、集合、列表等数据时,尤其是数据库数据操作时&am…

PSO-SVM,基于PSO粒子群算法优化SVM支持向量机回归预测(多输入单输出)-附代码

PSO-SVM是一种结合了粒子群优化(Particle Swarm Optimization, PSO)算法和支持向量机(Support Vector Machine, SVM)的方法,用于回归预测问题。下面我将解释PSO-SVM的原理: 1、支持向量机(SVM&a…

系统架构评估_3.ATAM方法

架构权衡分析方法(Architecture Tradeoff Analysis Method,ATAM)是在SAAM的基础发展起来的,主要针对性能、实用性、安全性和可修改性,在系统开发之前,对这些质量属性进行评价和折中。 (1&#x…

10倍提效!用ChatGPT编写系统功能文档。。。

系统功能文档是一种描述软件系统功能和操作方式的文档。它让开发团队、测试人员、项目管理者、客户和最终用户对系统行为有清晰、全面的了解。 通过ChatGPT,我们能让编写系统功能文档的效率提升10倍以上。 ​《Leetcode算法刷题宝典》一位阿里P8大佬总结的刷题笔记…

计算机网络-TCP连接建立阶段错误应对机制

错误现象 丢包 网络问题:网络不稳定可能导致丢包,例如信号弱或干扰强。带宽限制可能导致路由器或交换机丢弃包,尤其是在高流量时段。网络拥塞时,多个数据流竞争有限的资源,也可能导致丢包。缓冲区溢出:TC…

Astra深度相机在Ubuntu18.04系统下实现相机标定

问题: 当使用Astra相机的启动的指令启动相机后,使用rviz查看相机所发布的rgb数据时,在终端会出现如下的提示信息: Camera calibration file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml not found. Camera calibration fil…

(学习日记)2024.04.11:UCOSIII第三十九节:软件定时器

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

nacos分布式程序开发实例

1.通过windows docker desktop 完成 nacos 的安装/启动/配置 (1)先安装docker desktop docker-toolbox-windows-docker-for-windows-stable安装包下载_开源镜像站-阿里云 (2)配置docker 国内镜像源 Docker 镜像加速 | 菜鸟教程…

携程旅行 abtest

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章…

Linux|从 STDIN 读取 Awk 输入

简介 在之前关于 Awk 工具的系列文章中,主要探讨了如何从文件中读取数据。但如果你希望从标准输入(STDIN)中读取数据,又该如何操作呢? 在本文中,将介绍几个示例,展示如何使用 Awk 来过滤其他命令…

WPF使用MVVM,将Image中的图片绑定到OpenCVSharp中的Mat类型

看了很多帖子,代码复制过去都是报错的,查看了OpenCVSharp.Extensions的底层,发现用法在WPF中已经进行了更改,原本需要从Mat->Bitmap->BitmapImage,简化成了Mat->BitmapSource这一个过程,所以这也是…

基于单片机水塔水位检测控制系统设计

**单片机设计介绍, 基于单片机水塔水位检测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机水塔水位检测控制系统设计的主要目标是实现水塔水位的自动监测与控制,确保水塔内的水位始…