历史上的今天
今天是:2024年08月24日(星期六)
2021年08月24日 | 51单片机-定时器简单运用
2021-08-24 来源:eefocus
1.细节
上一讲里,我们知道TH0和TL0合成的“16位的变量”的初值最小要为0,不能是负数,
所以我们要满足:65536-( x/(12/11059200) )>=0。
解得x<= 0.071111秒=71.111毫秒。
也就是用定时器的工作模式1最长的定时时间为71毫秒左右而已。
2.定时器开关
首先定时器也是有开关的,这个相当于我们的导管是否打开让水流进“试管”里。
因为我们用的是定时器0,TCON^4这个位就是控制定时器0是否打开或关闭,所以“TR0=1;”就是打开了定时器开始计时,“TR0=0;”是关闭了定时器计时功能。
只要打开了定时器,TH0和TL0合成的“16位的变量”就会每过(12/11059200)秒就自加1,直到定时器溢出。
3.溢出标志
我们的定时器0一旦溢出,TCON^5就会被置1(TF0==1),如果我们不使用中断函数也是可以在主函数里等待判断“if(TF0==1)”。TF0跟外部中断0的IE0一样,被置1了需要软件清零。
4.工作模式1的代码
这里我们用定时器0来实现间隔50ms的流水灯实验
#include #include void main() { u8 i=0; LED_Init(); //初始化LED硬件模块 TMOD = 0x01; //设置定时器0为工作模式1 TH0 = 0x4C; //设置定时时间为50ms TL0 = 0x00; TR0 = 1; //启动定时器0 while(1) { if (TF0 == 1) //判断定时器0是否溢出,每隔50ms就可以进入一次这个if语句 { TF0 = 0; //定时器0溢出后,清0溢出标志 TH0 = 0x4C; //重新赋初值,保证下次溢出间隔时间还是50ms TL0 = 0x00; P0=~(0x01< i++; } if(i>=8)i=0; } } 5.定时器1的使用 如果我们用定时器1实现上处代码同样的功能,那么TMOD只要初始化为“TMOD=0x10;” 还有把TH0,TL0,TR0,TF0这些全部改为TH1,TL1,TR1,TF1即可,所以说这两个定时器的工作原理都是一样的。 #include #include void main() { u8 i=0; LED_Init(); //初始化LED硬件模块 TMOD = 0x10; //设置定时器1为工作模式1 TH1 = 0x4C; //设置定时时间为50ms TL1 = 0x00; TR1 = 1; //启动定时器1 while(1) { if (TF1 == 1) //判断定时器1是否溢出,每隔50ms就可以进入一次这个if语句 { TF1 = 0; //定时器1溢出后,清0溢出标志 TH1 = 0x4C; //重新赋初值,保证下次溢出间隔时间还是50ms TL1 = 0x00; P0=~(0x01< i++; } if(i>=8)i=0; } }
上一篇:51单片机-定时时长的作法
下一篇:51单片机-定时器工作模式2
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 03:13 编辑 我最近,在做程控滤波,就搜集了一些资料和论文集锦,供大家参考哦,这只是其中的一部分, 如果有需要的,我还会继续传哦,先传这么多吧!!!! … 查看全部问答> |
|
之前写的一个程序,中间用到模板类,模板类的所有定义和实现都在同一个h文件中,使用-frepo开关编译。之前一直都是好好的,今天换了台机器,编译出来的代码在download的目标机的时候说一大堆函数未定义,仔细看了全部都是该模板类的函数。但同样代 ...… 查看全部问答> |
|
最近在筹备运动控制器,要求至少3轴联动,定位精度0.01mm,伺服周期1ms以下,可实现空间圆弧插补。 看了TI公司的F2810、F2812、F28235、F28335、F28345,低价格的F28035、F2802;F28335和F28345是浮点DSP,2009年TI报价分别是15.65和14.42美元,相 ...… 查看全部问答> |
|
Hi, 小弟目前做的项目需要在Windows下安装一个简单的USB驱动,驱动程序由第三方提供(没有经过MS认证),包含DLL、INF、SYS等等文件。 一般情况下,当即插即用设备连上PC后,如果PC中没有该设备的驱动,会弹出安装驱动的提示,用户根据提示来一步 ...… 查看全部问答> |
|
编写一个在WinCE下运行的 ,基于MFC的应用程序,读取.txt文件 文件内容的结构如下 书名1;价格1 书名2;价格2 书名3;价格 3 。。。。。。 CFile myfile(L\"D:\\\\food.txt\", CFile::modeRead); int length = myfile.GetLength(); char ...… 查看全部问答> |
|
我有个疑问,就是主板上的北桥芯片起什么作用,虽然在网上一搜一大堆,但无非就是说是连接CPU和内存,AGP,的作用,起中间枢纽的作用,回答的非常初级,也没有作实质上的解释,但我想知道的是,如果撇开北桥怎么样?如果要从内存取数据,CPU直接先送 ...… 查看全部问答> |
|
我的开发环境是VS2008,我想写一个WinCE下对S3C2440的GPIO操作的程序,应该怎样写呢?比如,我希望操作GPB的某个管脚,应当怎样写代码?另外,Micorsoft.SPOT.Hardware下的CPU.PIN的用法有些不解,(CPU.PIN)15是什么意思呢?是表示芯片的第15个管脚 ...… 查看全部问答> |
|
我的硬件原理图如下链接:请放心打开! http://www.dzjia.cn/html/jiejuefangan/20070619/24939_2.html 如图示:P2.7接到RC500的NCS片选脚上,这时我想要访问RC500的内部地址,我就应该先定义要访问的地址,如下: #define Page_Sel   ...… 查看全部问答> |




