51单片机学习之旅——定时器
打开
软件
















1与其它等于其它,0与其它等于0
1或其它等于1,0或其它等于其它
TMOD=TMOD&0xF0;//0xF0=1111 0000进行与操作,高四位保持,低四位清零,高四位定时器1,低四位定时器0
TMOD=TMOD|0x01;//0x01=0000 0001进行或操作,高四位保持,低四位置0001
只配置了定时器0为16位定时器/计数器模式,不影响定时器1的配置
TF0=0;//初始状态TF0置0,只有当溢出时,单片机硬件自动置TF0为1,响应中断时,硬件又自动置TF0为0
TR0=1;//配置定时器0时GATE已配置为0,TR0=1允许计时

TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
定时器算配置好了,接下来配置中断,给CPU信号说,来!到点儿了!先别忙那个了,干这个!



ET0=1;
EA=1;
PT0=0;
综上,定时器0初始化函数代码为:

之所以多1是因为65535是从0开始计数,如果从1开始计数,则是1到65536,而我们设置初始值,相当于从1开始计数而不是0,所以TL0=(65536-1000)%256,TH0=(65536-1000)/256
12MHz定时器时钟为12T所以1T就是1MHz
void Timer0_Init()//定时器0初始化函数12MHz下配置的12T
{TMOD&=0xF0;//高四位保持,低四位清零,a=a&b简写为a&=bTMOD|=0x01;//高四位保持,低四位0001TL0=0X18;//低四位(65536-1000)%256设置1毫秒定时器TH0=0XFC;//高四位(65536-1000)/256设置1毫秒定时器TF0=0;//TF0初始化,溢出为1,平时为0TR0=1;//允许定时器开始计数//打开中断ET0=1;EA=1;//设置优先级PT0=0;
}
定时器中断配置好了,接下来是中断后要干事情了,需要中断函数
void Timer0_Routine() interrupt 1
{static unsigned int T0Count;//用于定时比65536微秒更长的时间比如1秒,设置一个变量TL0=0x18;//每次进入中断函数后,初始化函数里的初始值会自动清0,如果不想下次从0开始计数则需要TH0=0xFC;//重新给TL0和TH0赋值T0Count++;//每进一次中断是1毫秒,累加到T0Count中if(T0Count==1000)//1秒等于1000毫秒{T0Count=0;//先初始化清零//下来写想要干的事儿,点灯等等}
}
不懂static可以跳转到这里,希望可以帮助到你节约时间
51单片机学习之旅——C语言小知识-CSDN博客
下来把定时器0做模块化

跳转到这个链接:51单片机学习之旅——模块化编程集_51单片机模版编程-CSDN博客


跳转到这个链接:51单片机学习之旅——模块化编程集_51单片机模版编程-CSDN博客
下来做按键模块化

跳转到这个链接:51单片机学习之旅——模块化编程集_51单片机模版编程-CSDN博客


跳转到这个链接:51单片机学习之旅——模块化编程集_51单片机模版编程-CSDN博客
同理是delay模块化,
跳转到这个链接:51单片机学习之旅——模块化编程集_51单片机模版编程-CSDN博客


跳转到这个链接:51单片机学习之旅——模块化编程集_51单片机模版编程-CSDN博客
下面是main.c文件内容:
#include <REGX52.H>
#include "timer0.h"
#include "key.h"
#include <INTRINS.H>//函数库中有连续左移,右移函数unsigned char keynumber=0,ledmode=0;void main()
{P2=0xFE;//先让最低位亮一个灯Timer0Init();//定时器0中断初始化while(1){keynumber=key();//读取按键if(keynumber)//按键1控制led灯的模式,0模式循环左移,1模式循环右移{if(keynumber==1){ledmode++;if(ledmode>=2){ledmode=0;}}}}
}void Timer0_Routine() interrupt 1{static unsigned int T0Count;TL0=0x18;TH0=0xFC;T0Count++;if(T0Count>=500){T0Count=0;if(ledmode==0){P2=_crol_(P2,1);//_crol_(待移项,需要左移left的位数),最高位与最低位相连成环,一直移}if(ledmode==1){P2=_cror_(P2,1);//_cror_(待移项,需要右移right的位数)}}}


相关文章:
51单片机学习之旅——定时器
打开软件 1与其它等于其它,0与其它等于0 1或其它等于1,0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作,高四位保持,低四位清零,高四位定时器1,低四位定时器0 TMODTMOD|0x01;//0x010000 0…...
一台服务器将docker image打包去另一天服务器安装这个镜像
一台服务器将docker image打到去另一天服务器安装这个镜像 1. 打包2.另一台服务器执行 1. 打包 docker save -o nebula-graph-studio.tar harbor1.vm.example.lan/dockerio/vesoft/nebula-graph-studioxxx.tar 是打包好的文件 后面的是 docker image 2.另一台服务器执行 docke…...
QT串口通信之二,实现单个温湿度传感器数据的采集(采用Qt-modbus实现)
接上 QT串口通信之一,实现单个温湿度传感器数据的采集 上述文章中用QSerialPort实现了温湿度传感器的采集,实际上比较麻烦的,因为需要自定义解析帧, 接下来,用Qt-modbus-封装度更高的协议,来实现温湿度的采集; #include "MainWindow.h" #include "ui_M…...
基于SpringBoot的校园消费点评管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
【小沐学Java】VSCode搭建Java开发环境
文章目录 1、简介2、安装VSCode2.1 简介2.2 安装 3、安装Java SDK3.1 简介3.2 安装3.3 配置 4、安装插件Java Extension Pack4.1 简介4.2 安装4.3 配置 结语 1、简介 2、安装VSCode 2.1 简介 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在桌面上…...
《操作系统 - 清华大学》8 -4:进程管理:进程控制结构
深度剖析进程控制块:操作系统进程管理的核心关键 在操作系统的复杂体系中,进程控制块(PCB)是实现高效进程管理的关键所在。接下来,将从多个维度深入剖析进程控制块,帮助更好地理解其在操作系统中的重要作用…...
RPC 框架项目剖析
RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。 项目链接:rpc项目 项目底层类 1.抽象消息类 描述: 各种消息的基类 属性: 消息id,消息类型…...
C++ Boost面试题大全及参考答案
目录 boost::thread_group 如何实现批量线程管理? 解释 boost::asio 中 proactor 模式的设计原理 使用 boost::atomic 实现无锁环形缓冲区 boost::mutex 与 std::mutex 在异常安全上的差异 如何用 boost::condition_variable 实现生产者 - 消费者模型 当 boost::shared_p…...
关于Transparent native-to-ascii conversion
1、功能 自动转换ASCII编码,即在文件系统上,文件的编码格式为ascii编码,在编辑器(idea/pycharm)中,其展现结果为配置的编码格式,仅展现方便阅读 使用UTF-8并勾选自动转换ASCII编码结果&#x…...
js数据类型检测
JavaScript的数据类型检测 typeof操作符 适用场景 基本数据类型快速判断:适用于快速判断变量是否为number、string、boolean、undefined、function等基本数据类型。比如在函数参数检查中,若要求传入数字参数,可用typeof来初步判断。函数类型…...
go 模块管理
go version 查看版本 go version go1.21.12 windows/amd64 需要保证:go的版本升级为1.11以上,go mod依赖的最底版本 go env 查看go的环境变量 go env 开启go mod # 标识开启go的模块管理 set GO111MODULE=on GO111MODULE有三个值:off, on和auto(默认值)。 GO111M…...
记一次复杂分页查询的优化历程:从临时表到普通表的架构演进
1. 问题背景 在项目开发中,我们需要实现一个复杂的分页查询功能,涉及大量 IP 地址数据的处理和多表关联。在我接手这个项目的时候,代码是这样的 要知道代码里面的 ipsList 数据可能几万条甚至更多,这样拼接的sql,必然是要内存溢出的,一味地扩大jvm参数不…...
基于 Python 的项目管理系统开发
基于 Python 的项目管理系统开发 一、引言 在当今快节奏的工作环境中,有效的项目管理对于项目的成功至关重要。借助信息技术手段开发项目管理系统,能够显著提升项目管理的效率和质量。Python 作为一种功能强大、易于学习且具有丰富库支持的编程语言&…...
java面试场景问题
还在补充,这几天工作忙,闲了会把答案附上去,也欢迎各位大佬评论区讨论 1.不用分布式锁如何防重复提交 方法 1:基于唯一请求 ID(幂等 Token) 思路:前端生成 一个唯一的 requestId(…...
JS宏实例:数据透视工具的制作(四)
上一节中,我们完成了核心的计算代码部分,本节中将完善事件代码 一、创建所有需求的事件函数 1、窗体初始化 // 窗体初始化 function pivotForm_Initialize(){} function typeSet_Initialize(){} function valueSet_Initialize(){} function allCol…...
5. Go 方法(结构体的方法成员)
Go语言没有传统的 class ,为了让函数和结构体能够关联,Go引入了“方法”的概念。 当普通函数添加了接收者(receiver)后,就变成了方法。 一、函数和方法示例 // 普通函数 func Check(s string) string {return s }//…...
20250223学习记录
之前HDFview查看.hdf5文件的时候,看到土壤湿度数据是分为AM和PM,当时我有一个这样的疑问 但是后来用Python处理的时候,直接就是对整个的.hdf5文件处理,当时没有注意这一块,所以就没有这个疑问了。 今天突然看到一篇论…...
WPS携手DeepSeek:开启智能办公新时代
在数字化办公的浪潮中,效率与智能成为了人们追求的核心目标。近年来,人工智能技术的飞速发展为办公领域带来了前所未有的变革契机。DeepSeek作为一款备受瞩目的人工智能工具,以其强大的功能吸引了众多用户,然而在使用过程中&#…...
无需服务器,浏览器跑700+AI模型?!
Transformers.js 是一个创新的网络机器学习库,它将先进的 Transformer 模型直接带入浏览器,无需服务器端支持。这个库与 Hugging Face 的 Python transformers 库功能对等,提供相似的 API 接口来运行预训练模型,涵盖了自然语言处理…...
WSL2下ubuntu开启NFS服务
1. wsl2下ubuntu配置 安装 NFS 服务: sudo apt-get install nfs-kernel-server rpcbindnfs 配置文件/etc/exports: sudo vi /etc/exports打开/etc/exports 以后在后面添加如下所示内容: /home/mk/nfs *(rw,sync,no_subtree_check,no_root…...
EntityX:C++11实体组件系统的终极入门指南
EntityX:C11实体组件系统的终极入门指南 【免费下载链接】entityx EntityX - A fast, type-safe C Entity-Component system 项目地址: https://gitcode.com/gh_mirrors/en/entityx EntityX 是一个基于 C11 的快速、类型安全的实体组件系统(ECS&a…...
card.io-iOS-SDK核心组件详解:CardIOCreditCardInfo与Delegate机制
card.io-iOS-SDK核心组件详解:CardIOCreditCardInfo与Delegate机制 【免费下载链接】card.io-iOS-SDK card.io provides fast, easy credit card scanning in mobile apps 项目地址: https://gitcode.com/gh_mirrors/ca/card.io-iOS-SDK card.io-iOS-SDK是一…...
构建跨平台物联网协议解析器:基于CGO与LuaJIT的Go/Lua混合编程实践
1. 物联网协议解析的挑战与混合编程优势 在物联网项目中,协议解析往往是让人头疼的问题。不同厂家的设备使用不同的通信协议,有的基于二进制格式,有的采用文本协议,还有各种自定义的私有协议。我曾经接手过一个项目,需…...
ANSYS APDL非线性材料定义避坑指南:从MP到TB命令的完整流程解析
ANSYS APDL非线性材料定义避坑指南:从MP到TB命令的完整流程解析 在工程仿真领域,材料非线性行为的准确建模往往是决定分析精度的关键因素。许多初学者在使用ANSYS APDL进行非线性材料定义时,常常陷入MP与TB命令族的混淆中,导致计算…...
SCons源码架构分析:理解构建引擎的核心实现原理
SCons源码架构分析:理解构建引擎的核心实现原理 【免费下载链接】scons SCons - a software construction tool 项目地址: https://gitcode.com/gh_mirrors/sc/scons SCons作为一款强大的软件构建工具,其源码架构设计体现了现代构建系统的核心思想…...
Elasticsearch 磁盘水位阈值设置:最合理配置 + 生产实战
Elasticsearch 磁盘水位阈值设置:最合理配置 生产实战前言Elasticsearch 磁盘水位阈值设置:合理配置与生产最佳实践一、核心概念:什么是 ES 磁盘水位?1.1 定义1.2 三个关键水位(必须记住)1.3 水位触发后行…...
告别编译噩梦:用CMake一次搞定OpenCV 4.5.3 + contrib + VTK 9.0.3的完整开发环境
构建跨平台计算机视觉开发环境:CMake整合OpenCV与VTK的最佳实践 在计算机视觉与三维可视化结合的复杂项目中,开发环境的搭建往往成为第一道技术门槛。传统的手动编译方式不仅耗时费力,更难以保证不同平台间的可复现性。本文将分享如何通过CMa…...
mysql升级后日志文件如何处理_mysql日志迁移说明
MySQL升级后日志路径和配置必须显式重设:error log和slow-query-log-file需确保目录存在并授权;log-bin迁移要复制旧文件并避免直接删除;GTID模式下purge需谨慎;废弃参数如log_warnings须替换为log_error_verbosity;升…...
自己做agent项目时,为什么工具和提示词写完之后总要重构再重构
最近有朋友来问我,他们团队做内部agent代理项目,工具写了十几个,能跑起来了,但后来想加权限没地方加,agent中断之后也不知道怎么恢复状态,最后只好停下来把工具全部重写了一遍! 他们花了一个小…...
魔幻C++ 用最大公因数 求最小公倍数
//最大公因数 int gcd(int a,int b){if(b0)return a;else return gcd(b,a%b); } //最小公倍数 int lcm(int a,int b){return a/gcd(a,b)*b; }cout<<lcm(28,8);...
