1.工作模式2的使用
这里我们顺便讲解一下定时器0的工作模式2,也就是使用“小试管”的方式,TMOD的初始化就为“TMOD=0x02;”。
我们知道工作模式2的最长溢出时间仅为256*(12/11059200)=0.000277秒=277微秒。
我们想实现间隔51ms的流水灯实验该怎么做,首先我们定义一个变量cnt用来记录每次的溢出次数,然后我们的定时时间为51微秒(因为最大定时只有278微秒),cnt记录的值等于1000的时候,证明时间已经过去了51ms,于是再去执行流水灯的任务。
我们已经知道工作模式2是不需要在溢出之后再填充初始值的,比如我们定时的时间为51微秒,那么计算出“距离溢出的刻度”就为47(实际计算出的是47.0016,所以定时为51微秒误差就不大)。
所以给TL0赋初值为256-47=209=0xD1。那么TH0也是给初值为0xD1,这是保证每次TL0溢出之后新的初始值是等于TH0的值的,所以定时器工作模式2又叫做8位自动重装载模式。相关概念还需读者再去另外学习这些理论知识。
2.工作模式2的代码
#include #include void main() { u8 i; u16 cnt; LED_Init(); //初始化LED硬件模块 TMOD = 0x02; //设置定时器0为工作模式2 TH0 = 0xD1; TL0 = 0xD1; //定时51us TR0 = 1; //启动定时器0 while(1) { if (TF0 == 1) //每隔51us就可以进入一次这个if语句 { TF0 = 0; //定时器0溢出后,清零中断标志 cnt++; //记录溢出次数 } if(cnt>=1000) //时间过去了51ms { cnt=0; P0=~(0x01< i++; } if(i>=8)i=0; } } 大家对照上一讲的工作模式1的代码会发现,工作模式2在while循环中不再出现TH0和TL0的身影,TL0每次溢出之后,初值又变为TH0初始时候的值了,所以定时时间在while循环之前就已经决定好了。 大家可以尝试着把“if(cnt>1000)”里的1000改为10000就是间隔510ms的流水灯了。 往后我们做的题目定时时间一般最少都是要定时1毫秒以上,所以用工作模式1的机会会很多,而工作模式2在我们前期教程里会很少运用,等学到串口通信相关知识时我们再重拾这个知识点。
上一篇:51单片机-定时器简单运用
下一篇:51单片机-定时器中断函数的使用
推荐阅读最新更新时间:2024-11-12 11:11
推荐帖子
- 如何从单片机将程序上传到电脑?
- 如何从单片机将程序上传到电脑?如何从单片机将程序上传到电脑?是上传附件吗?还是复制?回复楼主prince11的帖子就是将已经下载到单片机中的程序再从单片机上载到电脑。回复沙发小志的帖子这种应用没听说过,楼主做的什么项目啊,回复板凳prince11的帖子
- prince11 单片机
- 有谁有用过Verilog写can总线模块的吗?
- 现在正在学习FPGA,然后现在也不知道该具体做点什么出来,感觉我以后可能会用到can总线,所以就想是不是能用Verilog来编写出can总线的实现功能模块,即为以后的学习打下基础,又同时学习了Verilog的使用,一举两得。可是没有个头绪,不知道是否有人写过相关的,希望大家一起分享一下经验,共同在FPGA的学习过程中一起进步!有谁有用过Verilog写can总线模块的吗?为啥要用fpga实现就是想着练习一下Verilog,然后再未来学习中可能会用到can总线。所以就想这么做回复沙发
- 奔跑的蜗牛 FPGA/CPLD
- quartus有直接可以调用的随机数函数吗?
- 如题\0\0\0eeworldpostqqquartus有直接可以调用的随机数函数吗?有,不能综合,只在tb中用可以用LFSR产生伪随机数楼上有答案,当然也可以使用PRBS码来产生伪随机码
- 通通 FPGA/CPLD
- 【2.6TFT】NBCTFT2.6_V2.2使用手册
- NBCTFT2.6_V2.2使用手册【2.6TFT】NBCTFT2.6_V2.2使用手册了解下
- Sur 微控制器 MCU
- 请教大神~如何在电子产品的固件上写入产品序列号
- 想请教各位大神一个关于产品序列号的问题~我们想给产品设置序列号,让产品联网后,后台能自动读出序列号。而且我们需要实现序列号标签(贴在机身和包装上),固件序列号一致。但是在开发过程发现,产品量产烧录的固件都是一样的,求各位大神指教一下产品固件的序列号是如何实现的?序列号通常是怎么样生成的?能够使得量产中序列号标签、固件序列号一致?谢谢!!!请教大神~如何在电子产品的固件上写入产品序列号都是生产最后一道工序就是写和贴系列号吧读芯片UID号有的烧写软件可以在HEX固定几个字节累加变化
- henson186 stm32/stm8
- 【STM32H7S78-DK】 六 可设置时钟及代码分析
- 【STM32H7S78-DK】六可设置时钟及代码分析【STM32H7S78-DK】一开箱贴【STM32H7S78-DK】二touchgxf环境搭建和基本测试【STM32H7S78-DK】三touchgxf和stm32cubeide和led按键测试【STM32H7S78-DK】四下载失败问题及解决、计数器实现及分析【STM32H7S78-DK】五乱序键盘实现及分析之后一、打开to
- damiaa stm32/stm8
设计资源 培训 开发板 精华推荐
- S5U13L02P00C100,基于S1D13L02 LCD控制器的评估板
- 使用 NXP Semiconductors 的 MC33908LAE 的参考设计
- LTC3838IUHF-1 4.5V 至 26V 输入、1.2V/15A 和 1.5V/15A 双路输出、350kHz、DCR 检测、DTR 使能、降压转换器的典型应用电路
- 使用 LTC2379CDE-18、18 位、1.6Msps、低功耗 SAR ADC 的典型应用
- LPS33HW适配器板,标准DIL24插座
- NCP1729 负载稳压负输出电压的典型应用
- MCP6S2XEV,PGA 评估板(修订版 4)具有 MCP6S26 可编程增益放大器
- AM2G-4818SZ 18V 2 瓦 DC/DC 转换器的典型应用
- stm32f411 system1
- AM3GW-2405SZ 5V 3W DC-DC 转换器的典型应用