第6章 单片机的定时器/计数器

6.1 定时/计数器的结构与工作原理

6.2 定时器的控制

6.3 定时/计数器的工作方式

6.4 定时/计数器的编程和应用

6.1 定时/计数器的结构与工作原理

6.1.1 定时/计数器的基本原理

纯软件定时/计数方法:

定时——空循环预定周次,等待预定时间

计数——读取I/O口电平,统计变化次数

基本思路:由CPU统计状态变化次数,待预定结果出现后结束统计。

存在问题:占用过多CPU机时

单片机软硬件联合定时/计数方法:

定时器的本质是计数器(对时钟脉冲计数),计数器则是对外来脉冲计数.

定时器基本工作原理:

计数器基本工作原理:

6.1.2 定时/计数器的结构

6.2 定时器/计数器的控制

T04种工作方式T13种工作方式,每种工作方式都有定时和计数2种方式,故共有14种组合关系。

6.3 定时/计数器的工作方式

实例1 设单片机的fosc=12MHz,采用T1定时方式1P2.0脚上输出周期为2ms的方波。

1. 查询方式

#include <reg51.h>

sbit P2_0 = P2^0;

main () {

   TMOD = 0x10;          //设置T1定时方式1(0001 0000B)

   TR1=1;                //启动T0

   for(;;){

      TH1 = 0xfc;      //装载计数初值

      TL1 = 0x18;

      do{ } while(!TF1); //等待TF1溢出

      P2_0 =!P2_0;       //定时时间到P2.0反相

      TF1 = 0;           //TF1标志0

   }

}

使用定时/计数器的步骤小结

  (1)设置TMOD——确定定时/计数器的工作状态

使用T0还是T1?

采用定时模式还是计数模式?

采用工作方式0、方式1、方式2、方式3

强调TMOD的设置只能以字节形式给出 

(2)计算计数初值——产生期望的定时/定数间隔

定时计数初值 a = 216- t×fosc/12

                          (t ≤65536 ms, fosc=12MHz时)

定数计数初值 a = 216- N 

            N≤65536, 脉冲频率≤0.5MHzfosc=12MHz时)

装载计数初值:

THx =  a  / 256         TLx =  a  / % 256

3)确定采用何种方式处理溢出结果

若是中断方式中断初始化设置和中断服务程序

若是查询方式——采用条件判断语句

4)启动定时器:

      TR0 = 1 TR1= 1

5)进行定时或计数结束后的其它工作

6)为下次定时/计数做准备(清TFx标志+重装载计数初值)

      若是中断方式,则无需软件清TFx标志位;

      若是查询方式,需要软件清除TFx标志位。

2. 方式2

实例2 采用T0定时方式2P2.0口输出周期为0.5ms的方波(fosc=12MHz)

分析:计数初值TL0= ((256-250)*12/12)%256 = 0x06

            TMOD = 0x02

实例将第4章实例6 计数显示器”采用的按键查询法,改为T0计数方式2 + 中断法,实现原有功能。

电路改进:将按键BUTP3.7引脚改为T0引脚(P3.4

编程分析:将T0设置为计数器方式2,设法使其在一个外部脉冲到来时就能溢出(即计数溢出周次为1)产生中断请求

初始化:

TMOD = 0000 0110B = 0x06T0计数方式2

a = 2 8 – 1 = 255 = 0xff(计数初值)

ET0 = EA = 1T0开中断)

实例3源程序:

(3)工作方式0

使用13的定时/计数器(THx7-0+TLx4-0

实例4  计算用T0方式0定时5ms的计数初值afosc=12MHz

解:计数初值a=213-5000×12/12=3192= 1100 0111 1000B

        由于方式0TL03位未用(一般填0) ,因此

        a= 0110 0011 0001 1000 = 6318H

结果TH0 = 0x63;    TL0 = 0x18;

方式0与方式1的比较

4)方式3(仅T0有此方式)

6.4 定时/计数器的编程和应用

使用方法:

定时器应用 —— 用于定时控制,或作为分频器发生各种不同频率的方波;
计数器应用 —— 用于外部脉冲统计或外部中断源扩充;
定时 / 计数器复合应用 将定时与计数两种方式结合起来。

实例P3.4口输入一个低频窄脉冲信号。当该信号出现负跳变时,由P3.0口输出宽度为500μs的同步脉冲,如此往复。要求据此设计一个波形展宽程序(fosc= 6MHz)。

实例5源程序

实例6源程序

实例7源程序

编程分析:

1)根据定时/计数器工作原理,当GATE=TR0=1时,允许       引脚脉冲控制定时器的启停,即         =1可启动定时器,      =0可关闭定时器。

测量未知脉冲宽度的思路是:利用查询方式找到①点的出现时刻→利用        信号的上升沿在②点启动T0定时方式1→利用         信号的下降沿在③点中止T0定时→取出反映了脉冲宽度的T0计数值

2)在C51中进行内存储器操作的方法是,定义指针变量并赋地址值→按指针变量对数据进行读/写操作。

3)十六进制数转BCD码的方法是:从最低位开始进行模10计算→删去最末位(相当于整除10)→继续模10计算,直至整除10的结果为0

实例8 源程序

实例8小结

1、测量未知脉冲宽度的方法——利用INTx引脚接入待测脉冲设置Tx定时方式THxTLx清零利用查询语句辅助计时Tx计数值计算脉宽值;

2C51中进行存储器操作的方法——定义指针变量并赋地址值按指针变量对数据进行读写操作;

3、任意位数BCD码的拆解方法——从最低位开始反复进行模10计算 取模后删去最低位(整除10)→直至整除10的结果为0

4、在Proteus中进行C51调试的方法——改变keil 的输出设置形成omf格式编译文件Proteus中加载omf文件利用类似汇编调试方法进行调试。

本章小结

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

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

相关文章

【Qt】之【Bug】error:C1083 无法打开包括文件

背景 a.cpp引用b.h正常&#xff0c;但是a.h引用b.h就报 “无法打开包括文件”的错误 分析 查看“编译输出”&#xff0c;显示不是a.h引起的错误&#xff0c;而是C插件&#xff0c; 查看后发现&#xff0c;C插件引用了a所在插件pro&#xff0c;但是没有引用a依赖的b所在的插件…

Axure中继器进阶指南:打造专业级交互

中继器进阶篇 前言 经过了基础篇的学习,我们已经掌握了中继器的基本操作,接下来来解锁中继器的进阶操作。 1. 修改删除指定行 首先拖入中继器,加上【修改】 【删除】的按钮,然后给修改按钮添加单击事件选择【更新行】。 这里可以看到我们在中继器内部添加的事件,在编…

IDEA关联数据库

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试&#xff08;Debug&#xff09; 第七章 …

2024-07-16 Unity插件 Odin Inspector7 —— Number Attributes

文章目录 1 说明2 Number 特性2.1 MaxValue / MinValue2.2 MinMaxSlider2.3 ProgressBar2.4 PropertyRange2.5 Unit2.6 Wrap 1 说明 ​ 本文介绍 Odin Inspector 插件中有关 Number 特性的使用方法。 2 Number 特性 2.1 MaxValue / MinValue 在 Inspector 窗口中对象能够被设…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之④:数据分析之三(数据展示)

概述 在先前探讨的文章中&#xff0c;我们构建了一个全面的数据测试体系&#xff0c;该体系遵循“数据获取—数据治理—数据分析”的流程。如何高效地构建数据可视化看板&#xff0c;以直观展现分析结果&#xff0c;正逐渐成为利用新兴技术提升效能的关键领域。伴随业务拓展、数…

《驾驭AI浪潮:伦理挑战与应对策略》

AI发展下的伦理挑战&#xff0c;应当如何应对&#xff1f; 人工智能飞速发展的同时&#xff0c;也逐渐暴露出侵犯数据隐私、制造“信息茧房”等种种伦理风险。随着AI技术在社会各个领域的广泛应用&#xff0c;关于AI伦理和隐私保护问题日趋凸显。尽管国外已出台系列法规来规范…

YOLOv7网络结构学习

YOLOV7详细解读&#xff08;一&#xff09;网络架构解读 YOLOV7学习记录之原理代码介绍 【Make YOLO Great Again】YOLOv1-v7全系列大解析&#xff08;Backbone篇&#xff09; yolov7 图解 深入浅出 Yolo 系列之 Yolov7 基础网络结构详解 我觉得Head、Neck和Head的划分不太…

从产品手册用户心理学分析到程序可用性与易用性的重要区别

注&#xff1a;机翻&#xff0c;未校对。 Designing for People Who Have Better Things To Do With Their Lives 为那些生活中有更重要事情要做的人设计 When you design user interfaces, it’s a good idea to keep two principles in mind: 在设计用户界面时&#xff0c;…

三大ip代理服务商PK,IPFoxy黑马逆袭成首选?

最近亚马逊的Prime Day ,小编我呀忙得不可开交。因为小编负责的店铺数量多且需要稳定的长期连接&#xff0c;我用某一海外ip代理竟然不稳定&#xff0c;这还是号称老牌的ip代理服务商&#xff0c;因为它的漏洞&#xff0c;让我加班了好久处理工作上的问题。 吃一堑&#xff0c…

RPA鼠标按键使用技巧

RPA鼠标按键使用技巧 Mouse.MouseAuto.Action命令出错&#xff0c;调用的目标发生了异常&#xff0c;Exception in Mouse.Action元素不可用怎么解决 出现问题 1.想要实现的效果鼠标移动到录屏工具的小球上2.点击开始按钮开始录屏现象&#xff0c;鼠标没有移动痕迹&#xff0c…

【C++】C++ 职工信息管理系统(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

C++系列-Vector模拟实现(补充)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 迭代器失效 这篇文章是基于上一篇的Vector的模拟实现的补充知识点&#xff0c;首先我们需要重点关注的便是迭代器失效的问题。 void test_vector3(){std::vector<int> v…

【C++】类与对象的学习(中)

目录 一、默认成员函数&#xff1a; 二、构造函数&#xff1a; 1、定义&#xff1a; 2、理解&#xff1a; 三、析构函数&#xff1a; 1、定义&#xff1a; 2、理解&#xff1a; 四、拷贝构造&#xff1a; 1、定义&#xff1a; 2、理解&#xff1a; 五、运算符的重载&…

抖音视频素材是哪里找的?热门的抖音素材网站分享

抖音视频创作高手们&#xff0c;你们是否在寻找下一个爆款视频的完美素材&#xff1f;今天&#xff0c;我将为你们介绍几个优质的视频素材网站&#xff0c;确保你们能在素材的海洋中轻松找到那最耀眼的“珍珠”&#xff01; 蛙学网 首先&#xff0c;我们要推荐的是蛙学网。这个…

Go语言并发编程-同步和锁

同步和锁 概述 同步是并发编程的基本要素之一&#xff0c;我们通过channel可以完成多个goroutine间数据和信号的同步。 除了channel外&#xff0c;我们还可以使用go的官方同步包sync&#xff0c;sync/atomic 完成一些基础的同步功能。主要包含同步数据、锁、原子操作等。 一…

13. C++继承 | 详解 | 虚拟继承及底层实现

目录 1.定义 1.1继承的概念 1.2 继承的定义 2. 对象赋值转换 3. 继承中的作用域 a. 隐藏/重定义 (Hiding/Redefinition) b. 重载 (Overloading) c. 重写/覆盖 (Overriding) d. 编译报错 (Compilation Error) 4. 派生类的默认成员函数 构造 拷贝构造 运算符重载 析…

win11将bat文件固定到“开始“屏幕

一、为bat文件创建快捷方式 (假设bat文件的全名为运行脚本.bat) 右键bat文件&#xff0c;点击显示更多选项 右键菜单选择发送到(N)-桌面快捷方式 二、获取快捷方式的路径 返回桌面&#xff0c;选中创建好的快捷方式&#xff0c;按AltEnter&#xff0c;切换到安全选项卡 鼠…

JCR一区级 | Matlab实现PSO-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现PSO-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现PSO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-Transformer-LSTM多变量回归预测&#xff0c;粒子群优化Transformer结合LST…

Nginx的核心功能

1. Nginx的核心功能 1.1 nginx反向代理功能 正向代理 代理的为客户端&#xff0c;对于服务器不知道真实客户的信息。例如&#xff1a;翻墙软件 反向代理服务器 代理的为服务器端。对于客户来说不知道服务器的信息。例如&#xff1a;nginx 项目部署图 web项目部署的虚拟机和Ng…

鸿蒙语言基础类库:【@system.notification (通知消息)】

通知消息 说明&#xff1a; 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.notification]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import notification fro…