关于用定时器来实现led小灯1s间隔亮灭方案的解析

今日头条

1143人已加入

描述

本案例是用定时器实现led小灯1s间隔亮灭。想要实现led小灯在固定时间间隔进行亮灭,很明显,我们需要用到的模块有:led小灯模块与定时器模块。

关于定时器的使用方法先要搞懂下面这几个寄存器:

标准的 51 单片机内部有 T0 和 T1 这两个定时器,T 就是 Timer 的缩写,现在很多 51 系 列单片机还会增加额外的定时器,在这里我们先讲定时器 0 和 1。前边提到过,对于单片机 的每一个功能模块,都是由它的 SFR,也就是特殊功能寄存器来控制。与定时器有关的特殊 功能寄存器,有以下几个,大家不需要去记忆这些寄存器的名字和作用,你只要大概知道就 行,用的时候,随时可以查手册,找到每个寄存器的名字和每个寄存器所起到的作用。

表1 定时值存储寄存器

定时器

定时值存储寄存器中TH0\TL0属于定时器0,TH1\TL1属于定时器1。定时值存储寄存器的作用在于设定1个计时周期的时间。其计算方法为:x*12/12000000HZ(单片机晶振频率)=1ms(1ms为一个定时周期),得出x=1000,则TH0=0xFC,TL0=0x18(TH0与TL0各八位共组成16位二进制整数型最大65535,65535+1-1000即为64536,十六进制为0xFC18,TH0记录高位,TL0记录低位)。

表2 TCON——定时器控制寄存器的位分配(地址 0x88、可位寻址)

定时器

表3 TCON——定时器控制寄存器的位描述

定时器

对于 TCON 这个 SFR,其中有 TF1、TR1、TF0、TR0 这 4 位需要我们理解清楚,它们 分别对应于 T1 和 T0,我们以定时器 1 为例讲解,那么定时器 0 同理。先看 TR1,当我们程 序中写 TR1 = 1 以后,定时器值就会每经过一个机器周期自动加 1,当我们程序中写 TR1 = 0 以后,定时器就会停止加 1,其值会保持不变化。TF1,这个是一个标志位,他的作用是告诉 我们定时器溢出了。比如我们的定时器设置成 16 位的模式,那么每经过一个机器周期,TL1 加 1 一次,当 TL1 加到 255 后,再加 1,TL1 变成 0,TH1 会加 1 一次,如此一直加到 TH1 和 TL1 都是 255(即 TH1 和 TL1 组成的 16 位整型数为65535)以后,再加 1 一次,就会溢 出了,TH1 和 TL1 同时都变为 0,只要一溢出,TF1 马上自动变成 1,告诉我们定时器溢出 了,仅仅是提供给我们一个信号,让我们知道定时器溢出了,它不会对定时器是否继续运行 产生任何影响。

表4 TMOD——定时器模式寄存器的位描述

定时器

表5 TMOD——定时器模式寄存器 M1/M0 工作模式

定时器

表6 TMOD——定时器模式寄存器的位分配(地址 0x89、不可位寻址)

定时器

我们主要学习模式1与模式2,根据定时器模式寄存器的位分配表,我们可以知道,当我们想要使用模式1时,需要将M1置于0,将M0置于1,因此TMOD = 0x01。

fqj

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分