定时器的基本原理和应用

news/2025/3/29 8:37:41/

题目背景

利用51单片机的定时/计数器T0的模式1实现间隔定时,每隔1秒L1指示灯闪烁一下,也就是亮0.5秒,熄灭0.5秒;每隔10秒L8指示灯闪烁一下,也就是也就是亮5秒,熄灭5秒。

分析

计数初值。

定时/计数器,本质上就是计数器,计数到溢出时产生中断。作为计数器时,计数信号来源是周期性的内部时钟脉冲。作为定时器时,计数信号来源是非周期性的外部输入信号

51单片机一共有两个定时/计数器,T0和T1,均为16位的加法计数器。
高8位,THx,低8位,TLx。

1s = 1000ms
1ms = 1000us
1us = 1ns
51单片机内部采用12分频,如果采用12MHz的晶振,时钟脉冲是1us,最大定时时间为65535us ~ 65.5ms。
如果要定时10ms,需要给一个计数初值65535 - 10000 = 55535 = 0xd8ef,TH设置为0xd8,TL设置为0xef。也就是从55535开始计数,计数到溢出时产生中断信号,此时为10ms。

相关寄存器

除了TH和TL之外,还有TMOD寄存器和TCON寄存器。

TMOD

注意TMOD只能字节寻址

这里只需设置TMOD为0x01即可。

TCON

这里用到了TR0,来启动T0。

此外,还需要设置IE寄存器,因为和中断相关。

IE

代码

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char// 用到的两个LED灯
sbit L1 = P0 ^ 0;
sbit L8 = P0 ^ 7;// 控制HC138译码器选通信道
void HC138(uchar channel)
{switch(channel){case 4:P2 = (P2 & 0x1f) | 0x80;break;case 5:P2 = (P2 & 0x1f) | 0xa0;break;case 6:P2 = (P2 & 0x1f) | 0xc0;break;case 7:P2 = (P2 & 0x1f) | 0xe0;break;}
}void InitTimer0()
{TMOD = 0x01;TH0 = (65535 - 50000) / 256;TL0 = (65535 - 50000) % 256;ET0 = 1;EA = 1;// 由TR0来启动TR0 = 1;
}uchar count = 0;
void ServiceTImer0() interrupt 1
{// 没有自动重装功能,需要重新写入计数初值TH0 = (65535 - 50000) / 256;TL0 = (65535 - 50000) % 256;count ++ ;if (count % 10 == 0){L1 = ~L1;}if (count == 100){L8 = ~L8;count = 0;}
}void main()
{HC138(4);InitTimer0();while(1){}
}

http://www.ppmy.cn/news/1141868.html

相关文章

jira 浏览器插件在问题列表页快速编辑问题标题

jira-issueTable-quicker 这是一个可以帮助我们在问题表格页快速编辑问题的浏览器插件 github 地址 功能介绍 jira 不可否认是一个可以帮助有效提高工作效率的工具&#xff0c;但是我们在使用 jira 时使用问题表格可以让我们看到跟多的内容而不用关注细节&#xff0c;但是目…

【Ubuntu】Systemctl控制nacos启动与关闭

要使用 systemctl 来管理 Nacos Server 的启动和停止&#xff0c;你需要创建一个 systemd 服务单元文件。以下是创建和使用 Nacos Server systemd 服务的一般步骤&#xff1a; 创建一个 systemd 服务单元文件&#xff1a; 打开终端并使用文本编辑器创建一个新的 systemd 服务单…

jenkins工具系列 —— 插件 使用Changelog获取commit记录

文章目录 安装changelog插件重启jenkins配置 ChangelogExecute shell 使用 changelog邮件中html格式也可以使用构建测试&#xff08;查看构建项 -> 控制台输出&#xff09; 安装changelog插件 插件文件可通过 V 获取 点击 左侧的 Manage Jenkins —> Plugins ——> …

数据结构-顺序存储二叉树

文章目录 目录 文章目录 前言 一 . 什么是顺序存储二叉树 二 . 模拟实现 前序遍历 总结 前言 大家好,今天给大家讲一下顺序存储二叉树 一 . 什么是顺序存储二叉树 顺序存储二叉树是一种将二叉树的节点按照从上到下、从左到右的顺序存储在数组中的方法。具体来说&#xff0c;顺…

浅析前端单元测试

对于前端来说&#xff0c;测试主要是对HTML、CSS、JavaScript进行测试&#xff0c;以确保代码的正常运行。 常见的测试有单元测试、集成测试、端到端&#xff08;e2e&#xff09;的测试。 单元测试&#xff1a;对程序中最小可测试单元进行测试。我们可以类比对汽车的测试&…

C++交换a和b的方法

以下是用C编写的交换a和b的六种方法&#xff1a; 1. 方法一&#xff1a;使用临时变量 #include <iostream>int main() {int a 5;int b 10;std::cout << "Before swapping: a " << a << ", b " << b << std::end…

软件定制开发的细节|网站搭建|APP小程序定制

软件定制开发的细节|网站搭建|APP小程序定制 在定制开发的过程中&#xff0c;一些小的细节往往能够影响到最终的产品质量和用户体验。下面我将为大家介绍一些软件定制开发的细节。 第一&#xff0c;明确需求。在定制开发之前&#xff0c;我们需要明确客户的需求和目标。只有明确…

基于SSM的实验室考勤管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…