历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2020年01月30日 | 单片机学习心得1:89c51单片机定时器应用!

2020-01-30 来源:elecfans

定时器的应用涉及到中断方面的知识,可以先了解中断的概念再来看定时器

如,一个16位的定时器,它所能计数的范围是0~65535,如果单片机采用的是12M的晶振,那么定时器单次最长的时间为65535((1/12)12),因为一个一个机器周期等于12个振荡周期,那么定时器加一所用的时间是1/12M*12是1us,也就是一个12MHz晶振的51单片机单次最长时间约为65ms.


定时器的控制

89c51的定时器由两个寄存器控制,分别是工作模式寄存器TMOD和控制寄存器TCON

工作模式寄存器TMOD是用于控制定时器0/1的工作模式,通过对TMOD进行赋值,则可以改变定时器的工作模式

具体各位的定义如下

当我们使用定时器功能时,就只用设置D0、D1、D4、D5的的值就可以了,其余位置0即可

我们在使用定时器时基本使用的是模式1和模式2,模式0与模式3基本不用,我就不进行描述了。


模式1

当TMOD的D5位置0,D4位置1时,即为定时器T1的模式一,该模式对应的是一个16位的定时器,寄存器TH1和TL1即为T1初值的高8位和低8位,定时时间为:(65536-T1的初值)振荡周期12


模式二

当TMOD的D5位置1,D4位置0时,即为定时器T1的模式二,该模式对应的是一个可以自动装载的8位定时器,当定时器计数满了(计数溢出时),会自动把TH1中的内容重新装载到TL1中,那么模式二计数的最长时间即为(257-T1的初值)振荡周期12


定时器的控制寄存器TCON

TCON的各位定义如下

TF1:T1的溢出标志位,当T1溢出时,由硬件自动使TF1位置1,并向CPU申请中断。当CPU响应中断进入中断服务子程序后,TF1又被硬件自动清0,也可以用软件清0.


TF0:T0溢出标志位。其功能和操作情况同TF1

TR1:T1的运行控制位,当该位置1时,即启动定时器1当该位置0时,即关闭

TR0:T0的运行控制位,其功能及操作情况同TR1。

接下来我将用定时器来结合数码管制作一个0-9计时器

具体操作如下(定时器的初始化在程序最下面)


include //引用了51单片机的官方库文件 

void T0INI() ; //定时器0初始化函数声明 

unsigned int temp = 0,i = 0; //中间变量 

unsigned char leddata[]={ //定义一个字符型数组用来存放共阳极数码管数字显示 0xC0, //"0" 0xF9, //"1" 0xA4, //"2" 0xB0, //"3" 0x99, //"4" 0x92, //"5" 0x82, //"6" 0xF8, //"7" 0x80, //"8" 0x90, //"9" 0x88, //"A" 0x83, //"B" 0xC6, //"C" 0xA1, //"D" 0x86, //"E" 0x8E, //"F" 0x89, //"H" 0xC7, //"L" 0xC8, //"n" 0xC1, //"u" 0x8C, //"P" 0xA3, //"o" 0xBF, //"-" 0xFF, //熄灭 0xFF //自定义 }; void main() { T0INI(); while(1) { P2 = 0x0e; //位选段P20置0 

P0 = leddata[i]; //数码管显示 

if(TF0 == 1) //当定时器计数溢出时 

{ TH0 = 0X3c; TL0 = 0xb0; //给定时器高8位和低8位重新赋值 

temp++; //50ms加1 

} if(temp == 20) //计数到20次也就是一秒 

i++; //数码管显示值加一 

if(i == 10) i = 0; } } void T0INI() //定时器T0初始化 { IE = 0x82; //cpu开总中断 ,定时器T0溢出中断允许 TCON = 0x10; //打开定时器T0 TMOD = 0x01; //设置T0为工作模式1,16位定时计数器 TH0 = 0X3c; TL0 = 0xb0; //12Mhz定时50ms }


推荐阅读

史海拾趣

诚芯微(CXW)公司的发展小趣事

经过数年的技术积累和市场拓展,诚芯微在2013年注册了自主品牌CXW,标志着其品牌战略的正式启动。同年,公司推出了一系列具有竞争力的电源芯片产品,凭借其卓越的性能和稳定的品质,逐渐在市场中获得了认可。此外,诚芯微还加强了与上游晶圆制造、封装企业的合作,确保了产品的质量和良率。

Astro Tool Corp公司的发展小趣事

在市场竞争日益激烈的背景下,Astro Tool Corp公司始终坚持以创新驱动发展。公司不断投入研发资金,引进先进技术和设备,推出了一系列具有创新性和竞争力的新产品。这些产品不仅满足了客户日益多样化的需求,也为公司带来了可观的利润。同时,公司还注重人才培养和团队建设,打造了一支高效、专业的研发团队,为公司的持续发展提供了有力保障。

Benchmarq Microelectronics Inc公司的发展小趣事

在半导体行业中,供应链的稳定性和可靠性对企业的发展至关重要。Benchmarq Microelectronics Inc深知这一点,因此始终注重供应链管理和合作伙伴关系的建立。公司与多家知名供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量可控。同时,公司还加强库存管理和物流配送,确保产品能够及时、准确地送达客户手中。这些努力不仅提升了公司的运营效率和市场竞争力,还为客户提供了更加便捷、高效的服务。

General Diode Corp公司的发展小趣事
焊接参数无法设置或无法保存。
FDI [Future Designs , Inc.]公司的发展小趣事

作为一家有社会责任感的企业,FDI公司始终关注社会公益事业。公司积极参与扶贫、教育、环保等领域的公益活动,为社会做出了积极贡献。同时,FDI还设立了奖学金和助学金,鼓励和支持年轻人投身电子科技事业。这些举措不仅提升了公司的社会形象,也为其赢得了广泛的赞誉。

FREESCALE (NXP)公司的发展小趣事

在电子行业的早期,FDI(Future Designs, Inc.)还只是一家名不见经传的小公司。创始人李明,凭借其对电子技术的热爱和敏锐的商业洞察力,带领团队研发出了一款具有革命性的电子芯片。这款芯片不仅性能卓越,而且成本较低,迅速在市场上获得了认可。正是这款产品,为FDI公司赢得了第一桶金,也为公司后续的发展奠定了坚实的基础。

问答坊 | AI 解惑

运放使用手册

运放的各种使用基本电路 …

查看全部问答>

MFC下面怎么用Sql Server CE?

一切完好,在.NET下面也可以用System.Data.SqlServerce下面的提供的函数成功的对数据库进行操作.包括RDA和合并复制等. 但是我在想如果不用.Net而用MFC使用系统API如果实现对Sql server ce数据操作包括RDA和合并复制之类的.有不有达人相告.感激不尽.…

查看全部问答>

windows mobile 透明窗口

windows mobile下 如何实现窗口的透明效果?指的是局部透明,及窗体完全透明,其上面的控件不透明,SetLayeredWindow不支持 查了好多资料,发现貌似与AlphaBlend有关,请高手指点!最好有例子,谢谢…

查看全部问答>

智能绿色照明系统的设计及实现

智能绿色照明系统的设计及实现…

查看全部问答>

请各位指导下小弟

最近再做一个事情 就是把角度化为0到 2π 之前 比如一个角度是8 π 也就是4 π + 2π 我要把前面的4 π 去掉 也就是把 2nπ 去掉 用FPGA实现 怎么去做啊 谢谢指导一下…

查看全部问答>

stm8的选项字节软件里怎么配置

                                 我也想问你这个问题…

查看全部问答>

CortexM0_LPC1100_GPIO示例代码程序下载

CortexM0_LPC1100_GPIO示例代码程序下载…

查看全部问答>

LPC11c14如何用中断标示符INTID读取报文编号

LPC11c14如何用中断标示符INTID读取报文编号,收到CAN后不是先会产生状态中断么,那不是永远都不到报文中断编号了么?…

查看全部问答>

大学生用51单片机做的东西

昨天元宵节,单位提前两个小时放假,回家的时候路过学校,顺便去看了一下上学时教单片机的老师。老师给我看了一下我们当初建的电子实验室现在的成果,给大家分享一下!智能蔽障机器人小车 51板扩展制作的智能小车,可以实现单片机控制小车前后左右 ...…

查看全部问答>