51单片机定时器与计数器

news2024/12/24 2:59:33

文章目录

  • 51单片机定时器与计数器
    • 一、定时器与计数器的结构与功能
      • 计数功能
      • 定时功能
    • 二、定时器与计数器的控制
      • TMOD 工作方式寄存器
      • TCON 定时器控制寄存器
    • 三、仿真案例
      • (一).8个LED 1 秒周期闪烁。
      • (二) 产品包装生产线。

51单片机定时器与计数器

一、定时器与计数器的结构与功能

8051单片机有两个16位定时器/计数器T0 (高8位TH0、低8位TL0)T1(高8位TH1、低8位TL1)T0T1同时具有定时计数功能。
8位特殊功能寄存器TMOD(timer mode),选择定时/或计数工作模式和工作方式
8位特殊功能寄存器TCON(timer controller),控制定时器的启动与停止

在这里插入图片描述

计数功能

计数器用于统计从 P3.4端口和P3.5端口输入的脉冲负跳变数量(前一个机器周期采样为高电平,后一个采样周期为低电平)。为保证正确采样,输入脉冲的高电平和低电平至少保持一个机器周期时间,所以输入脉冲频率最高为单片机内部脉冲频率一半

定时功能

定时功能是单片机通过对内部机器脉冲进行计数计数值乘以机器周期为定时时间。
如机器周期为1us,计数1000次,定时时间为1ms。

定时和计数的本质都是对脉冲信号计数,只不过是计数信号来源不同。计数脉冲信号来源P3.4或者P3.5 外部计数脉冲。定时脉冲来源于内部机器脉冲,一次脉冲时间固定,可以用来定时。

二、定时器与计数器的控制

定时或者计数工作的过程

  1. 设置工作方式寄存器TMOD
  2. 为定时器/计数器(T0 / T1)赋初值。
  3. 通过TCON控制寄存器中的TR0TR1实现启动或者停止。

TMOD 工作方式寄存器

TMOD,选择定时/或计数工作模式和工作方式,功能为启动方式,工作于计数还是定时,计数器模式。只能按字节整体赋值。

在这里插入图片描述
低4位是用于控制 定时/计数器 T0,高4位是用于控制 定时/计数器T1。

  • GATE 用于设置的启动方式。当GATE=0时,以寄存器TCON中的TRx 位控制定时器或者计数器Tx启动或停止。当设置GATE=1时,则Tx的启动受TRx和外部中断信号INTx共同控制。
    例如:D3位 GATE=1,只有当置 INT0=1和TR0=1 时T0才启动,否则T0停止。
  • C\T用于设置工作于计数器或定时器模式 C\T =0时,工作于定时器方式。C\T =1时,工作于计数器方式。
    例如 D2位 C\T=0 T0工作于定时器。
  • MlM0用于设置工作方式。
    若所需计数长度为N,则计数初值X=2^(方式定时器位数)-N。

方式0,M1M0=00,13位定时器/计数器。
定时/计数器启动后,在TL和TH中存储的计数初值基础上进行加1计数,直至溢出。溢出时T0寄存器被清零,TF0被置位,并申请中断。此后,定时/计数器重新启动,则从零重新开始计数。若希望T0从某一数值开始计数,则应给计数器赋初值。在为计数器赋初值时,应将初值拆成高低两部分字节,分别送入TL和TH。

方式1,M1M0=01,16位定时/计数寄存器,方式1与方式0工作原理类似。

方式2,M1M0=10,自重装的8位计数器。 计数初值分别在加载到TL和TH中,当计数溢出时,不需要软件重新赋初值,由高8位寄存器TH自动给用作计数的低8位寄存器TL赋初值。

方式3, M1M0=11,T0为两个独立的8位计数器,T1无效。

TCON 定时器控制寄存器

TCON(timer controller),控制定时器的启动与停止,以及标识是否溢出。
在这里插入图片描述

  • TRx控制Tx启动或停止。
    例如D4位 TR0=1时,启动定时/计数器T0;当D4位 TR0=0时,停止定时/计数器T0。
  • TFxTx的溢出标志位。
    当定时或计数因达到最大计数容量而产生溢出时,此位由硬件自动置1,当转向中断服务程序时由硬件自动清零,若无中断服务程序则需要由编程进行清0。

三、仿真案例

(一).8个LED 1 秒周期闪烁。

1.定时器/计数器初值计算

晶振脉冲 频率 f=11.0592MHz,每个机器周期12个脉冲频率,故机器周期为 T=12*1/(11.0592*10^6)=1.085us
工作方式0,13位定时/计数寄存器,最长定时时间 2^13*1.085us≈9ms
工作方式1,16位定时/计数寄存器,最长定时时间 2^16*1.085us≈71ms
显然一次定时达不到 1s,需要多次定时,每次定时溢出需要处理一些系列操作将带来误差,所以尽可能减少溢出次数,选择工作方式1,计时 50ms(46083个机器周期*1.085=50ms),计时20次

2.电路原理图

在这里插入图片描述

3.程序

#include<reg51.h> //包含单片机定义寄存器的头文件
int main(void ) //主函数
{
	unsigned char a,b,led=0xfe,cnt=0;//a,b用于循环移位,led保存LED各位,cnt保存溢出次数。
	TL0=(65536-46083)%256;//T0 的TL低8位初值
	TH0=(65536-46083)/256;//T0 的TH高8位初值
	TMOD=0x01;
	TR0=1;//启动计数器
	TF0=0;//溢出位置0
	while(1){
		while(TF0==1){
			cnt++;//溢出一次cnt加一			
			while(cnt==20){
				a=led>>7;
				b=led<<1;
				led=a|b;//循环移位
				P1=led;
				cnt=0;//溢出次数归零
			}
			//溢出后 T0寄存器被清零,需要重新赋值,同时将溢出位再次置0
			TL0=(65536-46083)%256;
			TH0=(65536-46083)/256;
			TF0=0;
		}
	}
}

(二) 产品包装生产线。

每个产品经过按键一次。8个LED灯,计满5个D1亮,再次计满D2亮……计满8次灯全亮。生产线不停,重复上述过程。

计数5个,数量较少,可以使用模式2能够自动装载(为计数器低8位TL赋初值)。

电路原理图
在这里插入图片描述

程序

/* Main.c file generated by New Project wizard
 *
 * Created:   周二 4月 18 2023
 * Processor: 80C51
 * Compiler:  Keil for 8051
 */

#include <reg51.h>
#include <stdio.h>

void main(void)
{
	unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x00};
	unsigned char cnt=0;
	TH1=256-5;//设置高8位 TH1初值
	TL1=256-5;//设置低8位 TH0初值,每次溢出后由高8位TH1 赋值给低8位。
	TMOD=0x60;//使用T1,GATE=0,计数器c/t=1,模式2 M1M0=10
	TF1=0;//溢出置0
	TR1=1;//启动计数器T1
	while(1){
		while(TF1==1){//溢出时
			P1=led[cnt];
			cnt=(cnt+1)%8;//取余循环
			TF1=0;//溢出置0
		}
	}
}


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

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

相关文章

ESP32设备驱动-BMP388气压传感器驱动

BMP388气压传感器驱动 文章目录 BMP388气压传感器驱动1、BMP388介绍2、硬件准备3、软件准备4、驱动实现1、BMP388介绍 BMP388 是一款非常小巧、低功耗和低噪声的 24 位绝对气压传感器。 它可以实现精确的高度跟踪,特别适合无人机应用。 BMP388 在 0-65C 之间的同类最佳 TCO,…

港联证券|AI概念板块无死角杀跌,主题炒作熄火后资金会流向哪些板块?

ChatGPT概念指数大跌7%&#xff0c;单日跌幅创历史之最。 4月10日&#xff0c;炒作逾月的ChatGPT概念板块团体大跌&#xff0c;云从科技&#xff08;688327.SH&#xff09;、三六零&#xff08;601360.SH&#xff09;、科大讯飞&#xff08;002230.SZ&#xff09;等热门股跌停&…

集中式版本控制工具 —— SVN

一、简介 1️⃣ SVN 是什么&#xff1f; 代码版本管理工具他能记住每次的修改查看所有的修改记录恢复到任何历史版本恢复已经删除的文件 2️⃣ SVN 与 Git 相比有什么优势&#xff1f; 使用简单、上手快目录级权限控制&#xff0c;企业安全必备子目录 Checkout&#xff0c;…

RK3568平台开发系列讲解(Linux系统篇)文件系统的读写

🚀返回专栏总目录 文章目录 一、文件IO1.1、文件 IO read()1.2、文件 IO write()二、系统调用层和虚拟文件系统层三、ext4 文件系统层沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们一起学习 read 和 write 调用过程。 一、文件IO 1.1、文件 IO read() rea…

openLdap2.4.44的安装部署

openLdap2.4.44的安装部署 一、安装 1.从yum源拉取 yum install -y openldap openldap-clients openldap-servers 2.复制DB到指定目录 cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG 3.给目录授权 &#xff08;如果没有ldap &#xff0c;可…

定时任务框架快速入门

一、Quartz 1. Quartz 概述 Quartz 是一个开源的作业调度框架(job scheduler)&#xff0c;几乎可以集成到任何 Java 应用程序中&#xff0c;从最小的独立应用程序到最大的电子商务系统。Quartz 可用于创建简单或复杂的调度来执行数十个、数百个甚至数万个作业&#xff1b;其任务…

[NOIP1999 普及组] Cantor 表

[NOIP1999 普及组] Cantor 表 题目描述: 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a; 1/1 , 1/2 , 1/3 , 1/4, 1/5, … 2/1, 2/2 , 2/3, 2/4, … 3/1 , 3/2, 3/3, … 4…

win11下载配置Python环境+pycharm下载

前两天快乐的把我重装的win10升级成win11&#xff0c;升级的时候超怕不能成功&#xff0c;但效果还不错&#xff0c;然后突然想学一学Python&#xff0c;所以首先来配置环境吧 一、下载安装包 建议去官网&#xff0c;因为自从有了Python3之后&#xff0c;Python2就慢慢的被淘汰…

测试市场已经饱和了吗?现在转行软件测试会不会太迟?

非常有意思的话题&#xff0c;某种程度上来说&#xff0c;测试职场一条从未设想过的道路真的走通了。 这条路指广大测试呼吁对测试从业进行学历保护、专业保护&#xff0c;就像医学那样设置护城河&#xff0c;以一种令人意想不到的方式完成了。 得益于大量培训机构为了赚钱&a…

R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析

在自然和社会科学领域有大量与地理或空间有关的数据&#xff0c;这一类数据一般具有严重的空间异质性&#xff0c;而通常的统计学方法并不能处理空间异质性&#xff0c;因而对此类型的数据无能为力。以地理加权回归为基础的一系列方法&#xff1a;经典地理加权回归&#xff0c;…

有趣的Hack-A-Sat黑掉卫星挑战赛——被破坏的阿波罗计算机(解法二)

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加&#xff0c;太空已经成为国家赖以生存与发展的命脉之一&#xff0c;凝聚着巨大的国家利益&#xff0c;太空安全的重要性日益凸显[1]。而在信息化时代&#xff0c;太空安…

全网最火爆,Web自动化测试POM模式分层实战,框架封装看这一篇就够了

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 线性脚本以快递 100…

【可信平台】SO202303191426,销售订单未同步,销售出库单未同步

1.销售订单未同步 这里先说下推送逻辑:1.物料描述带有‘再生’ 。2.公司是芮邦 这个物料应该在EOS里查,可我不会,我在MES里查,的确符合条件。 可信平台同步逻辑,是销售订单同步了,才会同步销售出库单。 这个SO销售订单就没同步,要先解决这个问题。 可以在接口看日志…

HighTec编译器错误记录

目录 1、HighTec安装后缺少Universal Debug Engine 2、HighTec工程改名后不能跳转函数定义&#xff0c;提示找不到定义。 3、HighTec工程重复编译 1、HighTec安装后缺少Universal Debug Engine 在HighTec安装后&#xff0c;没有调试UDE&#xff0c;重装系统后还是没有&#x…

STM32F4_OLED显示

目录 1. OLED简介 2. 硬件模块 3. 8080并行接口 4. SPI方式 5. SSD1306常用命令表 6. 完整源码 (STM32F407对应的源码) 6.1 oled.c 6.2 oled.h 6.3 oledfont.h 7. IIC接口下的OLED(STM32F407搭配4Pin OLED) 7.1 OLED.c 7.2 OLED.h 7.3 OLED_Font.h 7.4 MyI2C.c …

QTableview 隐藏单元格内控件无效的原因

QTableview 隐藏单元格内控件无效的原因 背景&#xff1a; 在QTableview的单元格中创建多个QComboBox&#xff0c;当某条件成立时&#xff0c;隐藏特定单元格中的QComboBox&#xff0c;使得该单元格为空。 DEMO&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#inc…

【Redis】Redis键(key)

常用命令 常用案例 keys * 查看当前库所有的key 127.0.0.1:6379> keys * 1) "k1"exists key 判断某个key是否存在&#xff0c;存在几个则返回几&#xff0c;不存在则返回0 127.0.0.1:6379> exists k1 (integer) 1 127.0.0.1:6379> exists k2 (integer)…

西工大电子实习单片机-7+1亮灯编程C语言代码分享

电子实习是西工大大多数学生绕不开的一门实习课程。单片机是电子实习课程中较为重要的一部分&#xff0c;需要上两次。我们在单片机编程时在西工大电脑机房老系统上往往由于大一学习的C语言忘得一干二净而无从下手。流水灯成了流水账。 废话不多说&#xff0c;仅供参考。71是指…

分享5款办公效率工具|让你早点下班

如果每天你的工作都很多&#xff0c;做不完需要加班怎么办? 不知道你会不会加班&#xff0c;但是我肯定不会&#xff0c;因为我知道哪些高效率的办公工具&#xff0c;可以帮助我早点下班&#xff0c;今天来给大家分享一下。 1.FlowUs FlowUs 是一款为个人和团队打造的新一代生…

Netty通信技术进阶二

Netty核心组件 1. Bootstrap2 Channel3. EventLoopGroup 和 EventLoop3.1 eventLoopThreads 是多少&#xff1f; 4. ChannelHandler & ChannelHandlerContext & ChannelPipeline4.1 复用Handler4.2 ChannelInboundHandlerAdapter or SimpleChannelInboundHandler 5. By…