单片机定时器0的使用
一:首先选择使用哪组寄存器?
问:8051单片机有哪些定时器?
答:8051单片机拥有3组定时器,分别是定时器0(T0) 定时器1(T1) 定时器2(T2)。
问:如何选择定时器?
答: 8051单片机定时器需要通过IE(中断允许控制器)进行设置,ET0,ET1 分别对应定时器0 定时器1
ET0,ET1 分别在IE寄存器的第1位和第3位 对应 IE = 0000 0010 IE = 0000 0100
二:选择定时器的工作方式
问:如何设置单片机的定时器是工作在定时模式,还是计数模式?
答:8051单片机的工作方式设定需要通过TMOD寄存器来设置,TMOD寄存器不可以通过位寻址。
TMOD寄存器的高4位用于设置定时器1
TMOD寄存器的第4位用于设置定时器0
定时器0 C/T TMOD的 第3位设置为0为定时模式,设置为1为计数模式 0000 0100
定时器1 C/T TMOD的 第6位设置为0为定时模式,设置为1为计数模式 0100 0000
三:选择定时器的方式选择功能
问:如何设置单片机定时器的工作方式选择功能
答:定时器的方式选择功能由TMOD寄存器来设定,不可以位寻址。
TMOD的第0位第1位 对应定时器0
TMOD的第4位第5位 对应定时器1
方式0 M1=0 M0=0 13位定时器/计数器
方式1 M1=0 M0=1 16位定时器/计数器
方式2 M1=1 MO=0 自动重载8位定时器/计数器
方式3 M1=1 M0=1 T0分为2个8位独立计数器,T1无方式3
51单片机定时器用法之1秒定时程序设计
动画演示
在我们的DIY电子时钟里,需要用到单片机定时器来做秒的显示,说是显示,其实就是实现数码管上“:”点的闪烁。这里初步定义为每秒亮1次,亮0.5秒,灭0.5秒。实现显示秒的功能。这里也可以用DS1302的秒数据来做,但是实现起来麻烦,达到一样的效果,我们追求的是程序越简单越好,所以在此我们用单片机定时器来实现。
我们DIY时钟板子上的单片机为STC15W408AS,单片机自带IRC可调时钟和搞可靠复位,为了降低功耗(工作频率越低,功耗越小),本时钟采用12M的工作频率(烧写程序是在软件上选择),那当定时器工作在12T模式下时,一个机械周期就是1us。
接下来我们就该看看单片机的数据手册了。以下是今天我们需要关注的寄存器:
TCON位定义
TMOD寄存器位定义
T0工作方式设置
TCON为定时器T0和T1的控制寄存器,可以位寻址(直接操作位);TMOD是T0、T1工作方式控制寄存器,不可以位寻址(只能操作寄存器),高四位控制T1,低四位控制T0;定时器的工作方式由TOMD寄存器中的M1和M0选择,具体如上图。
本例中我们要用T0实现1秒的定时时间,这里我们用T0工作在方式0,也就是16位的自动重载方式(传统的51单片机只有8位的自动重载,需要做高精度的定时时最好用自动重载方式)。我们不需要外部中断来开启定时器,所以GATE位=0,T0工作在定时模式,CT=0,所以我们TMOD寄存器的值为0x00;在TCON寄存器里和T0相关的位有TF0和TR0;TF0=0:T0中断标志位,当定时器中断产生是,TF0自动置位,CPU相应中断后硬件自动清零;TR0=1:开启定时器,相当于定时器的开关。
除了这些寄存器外,定时器溢出后,也会产生中断,所以还需要去设置中断部分:
EA=1:,开启总中断,相当于中断总开关;ET0=1;开启定时器T0中断,相当于中断的子开关,只有中断的总开关和相应的子开关都开启后,CPU才能相应中断信号,具体请看中断部分数据手册。我们用的STC15W系列单片机属于增强型单片机,为了和传统51单片机兼容,还专门设有一个寄存器AUXR,此寄存器可设置T 0工作在1T还是12T模式,此处我们让T0工作在12T模式下,AUXR=0x00。最后就是定时器的初值寄存器了,我们需要定时的时间是500ms,16位的定时器再12M频率下最大定时时间为65535us,而我们需要的是500ms,明显达不到,那我们就需要做组合定时的方式,这里我们设定定时器的中断频率为10ms,那我们中断1次后在中断函数里将某个变量加1,当变量加到50的时候就是500ms,当变量加到100的时候就是1s了。这就是我们实现1s定时的思路。
具体实现程序如下:(因头条原因,代码图片无法加入,需要请移步关注微信公众号)
如上图中程序所示,定时器初始化时设置T0位16位自动重载模式,工作在12T模式,初值10ms,开启定时器,开启中断。这样定时器就工作了;在定时器中断函数里,每次进入中断后我们就给变量T_a自加1,当变量小于50的时候(小于500ms),让D=1(D即为我们电路中控制秒显示的那两个点,高电平有效),大于50小于100的时候D=0,关闭秒显示。这样一来就实现了秒显示在1秒内亮500ms,灭50ms了。上图中中断函数名后面的interrupt 1这是中断函数的入口地址,C语言中叫中断号(为小白说明,老司机略过),具体的个中断对应的入口地址对照表如下图(部分):
中断号对照表
相关问答
定时 器T0工作方,已知 单片机 系统晶振频率为6mhz,若要求定时值为50ms时,定时器T0 工作方式1 ?12M晶振机器周期是1us,6M的话就是2us,定时器工作方式1为16位定时,50ms=50000us=25000个机器周期,那么初值TH0=(65536-25000)/256;TL0=(65536-...
8051 单片机定时 器原理?8051单片机定时器工作原理及用法TMOD:控制定时器的工作方式。8个bit,高四位bit控制T1,、低四位bit控制T0。因为定时器有4种工作方式;TMOD=0x00(工...
【51 单片机定时 计数器 工作方式 疑点单片机定时器/计数器的工...[最佳回答]因为51单片机处理数据是按八位进行的,所以给定时器赋初值的时候,不能将一个数直接赋到T0中,而是将这个数先转化为一个十六进制数,将它的高两位数(也...
单片机 常用的三种 定时 方法 - XgWOfNq2 的回答 - 懂得程序延时,定时中断,定时查询.
如何用 单片机 的 定时 器精确 定时 ?用单片机本身的定时来做电子表,我个人认为,这种方法不可取,现在有很多时钟芯片,与单片机接口也很简单,它有专门的外部晶振,而且在时间精确是,是绝对准确的...
、MCS-51 单片机定时 器 工作方式 0是指的什么工作方式?工作方式0是13位定时器模式,这是为了与8048兼容而设计的.工作方式0是13位定时器模式,这是为了与8048兼容而设计的.
MCS-51 单片机定时 器/计数器作定时和计数作用时,其计算脉冲分别由谁提供?其定时时间与哪些因素有关?计数的脉冲由外部提供..定时时是由外部晶振提供..定时加1的周期为一个机器周期...定时时间与初值和晶振有关..计数的脉冲由外部提供..定时时是由外部晶振...
单片机工作 主频12MHz,定时器计数器T0 工作方式1 ,计算 定时 10ms的初值是多少?(2^16—计数初值)╳晶振周期╳12=定时时间(2^16—计数初值)╳1/(12╳10^6)╳12=10Ms=10*10^(-3)S计数初值=2^16—10^4=55536=D8F0HTH0=...
单片机 的延时,延时时间长度是怎么算的?最好有一个例子,来...单片机的延时可以使用定时器和循环来实现。以下是两种常见的方式:1.使用定时器延时时间长度取决于定时器的时钟源和预分频器的设置。例如,如果使用...
51 单片机 内部 定时 器的 工作 原理?51单片机内部定时的工作原理:定时器计数8051单片机片内振荡器输出经过12分频后的脉冲个数,即:每个机器周期使定时器T0/T1的寄存器值自动累加1,直到溢出,溢出...