51单片机学习之旅——定时器

news/2025/2/22 1:00:54/

打开软件

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的位数)}}}


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

相关文章

MYSQL总结(1)

查询数据库 show databases; 查询当前数据库 select database(); 创建新的数据库 crate database 数据库名; 删除数据库:drop database 数据库名; 使用某数据库:use 数据库名; DDL(Data Definition Language)——表操作 查询当前数据库所有表 showtables; 查询表结构 de…

LeetCode-633. 平方数之和

1、题目描述 给定一个非负整数 c &#xff0c;你要判断是否存在两个整数 a 和 b&#xff0c;使得 a2 b2 c 。 示例 1&#xff1a; 输入&#xff1a;c 5 输出&#xff1a;true 解释&#xff1a;1 * 1 2 * 2 5示例 2&#xff1a; 输入&#xff1a;c 3 输出&#xff1a;f…

【第15章:量子深度学习与未来趋势—15.1 量子计算基础与量子机器学习的发展背景】

想象一下,你正在用ChatGPT生成一篇小说,突然它卡在"主角穿越虫洞"的情节上——这不是因为想象力枯竭,而是传统计算机的晶体管已经烧到冒烟。当前AI大模型的参数规模每4个月翻一番,但摩尔定律的终结让经典计算机的算力增长首次跟不上AI的进化速度。这时候,量子计…

Leetcode 227-基本计算器 II

题解 本题不包含括号&#xff0c;比较简单 双栈法&#xff08;运算符栈数字栈&#xff09; 对于「任何表达式」而言&#xff0c;可以都使用两个栈 nums 和 ops&#xff08;本题只用到了nums&#xff09;&#xff1a; nums &#xff1a; 存放所有的数字 ops &#xff1a;存放…

写一个python组件

写一个python组件 核心功能代码命令行接口打包配置安装与测试注意 写一个python组件&#xff0c;具体的&#xff1a;项目结构设计&#xff1a;定义你的项目的目录结构。编写核心功能代码&#xff1a;实现你想要的功能。创建命令行接口(CLI)&#xff1a;使用argparse或click库来…

如何禁止本地网络访问抖音?

互联网各领域资料分享专区(不定期更新): Sheet 正文 要禁止本地网络访问某APP,可以通过以下方法实现,具体操作取决于网络环境和设备类型: 一、通过路由器设置屏蔽某APP 登录路由器管理界面 进入路由器后台(通常通过浏览器输入路由器IP地址,如192.168.1.1),输入管理员账…

Flutter 状态管理:详细分析与实战

Flutter 状态管理&#xff1a;详细分析与实战 在 Flutter 中&#xff0c;状态管理是开发复杂应用的核心。随着应用规模的增长&#xff0c;管理状态变得越来越重要。无论是简单的局部状态&#xff0c;还是复杂的全局状态&#xff0c;选择合适的状态管理方案可以显著提高开发效率…

计算机视觉算法实战——图像合成(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ✨✨1. 图像合成领域简介✨✨ 图像合成是计算机视觉中的一个重要研究方向&#xff0c;旨在通过算法生成或修改图像内容。图像合成技术广泛应…