首页 理论教育单片机定时器功能-零起点学习单片机多语言编程

单片机定时器功能-零起点学习单片机多语言编程

【摘要】:定时器/计数器是MCS51系列单片机芯片内的一个组件,简写为T/C。它有2个相同的定时器/计数器,称为定时器/计数器0和定时器/计数器1。实际上定时器/计数器是一个计数器,可以8位、13位或16位计数,对应的两组4个8位计数器。TCON定时控制位共4位。TR0=0,停止定时器/计数器工作;TR0=1,开启定时器/计数器工作。TMOD是专业寄存器,用于设定定时器/计数器0和定时器/计数器1的工作方式,只能用字节传送设置。

定时器/计数器(Timer/Counter)是MCS51系列单片机芯片内的一个组件,简写为T/C。它有2个相同的定时器/计数器,称为定时器/计数器0和定时器/计数器1。用符号分别表示为T/C0和T/C1。实际上定时器/计数器是一个计数器,可以8位、13位或16位计数,对应的两组4个8位计数器(TH0/TL0和TH1/TL1)。这4个计数器属于专业寄存器。

计数功能:若作为计数器使用,要对外部输入脉冲计数,累计计数,累积到计满溢出停止时,脉冲数就是计数的个数。计数器的计数方式是对一个有效计数脉冲(前1个机器周期为电平、后1个机器周期为低电平)进行计数器加1。MCS51系列单片机芯片有T0(P3.4)和T1(P3.4)两个信号引脚对外部脉冲进行计数。外部输入的脉冲在负跳变时有效。

定时功能:定时功能是通过定时器/计数器的计数来实现的。若作为定时器使用,计数器对单片机内部的每个机器时钟脉冲作为定时计数,累积到计满溢出停止时,这个脉冲数就是定时时间。

1.【例3-53】 P1.0、P1.1的两个灯亮灭各定时0.5s的循环闪烁源程序

实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.0和P1.1位的灯亮灭按定时各0.5s的规律亮灭。

程序点评:程序中使用了定时器0,选择了定时工作方式1。计数溢出采用查询方式。程序进入“LOOP_2”循环段落后使用了取反指令“CPL”,P1.0和P1.1通过反复取反达到反复地置0、置1,从而控制了灯的亮灭。程序还用了数值比较转移指令“CJNE”。

2.定时器控制学习

MCS51系列单片机提供给用户的控制定时的寄存器共有3个,在设计使用定时器服务程序前首先要对所选定的定时寄存器进行正确的初始化(值)设置。计算计数初始值(因为定时是通过计数实现的)并且将初始值分别存放在定时器/计数器0和定时器/计数器1(T/C0和T/C1)所对应的两组4个8位专业寄存器中(TH0/TL0和TH1/TL1),并选择定时器/计数器的工作方式。

(1)与定时控制相关的寄存器

1)定时控制寄存器(TCON)。单片机复位后,TCON=00H。各位标志如下:

TCON寄存器参与中断控制和定时控制。寄存器中断控制位的设置见前述。TCON定时控制位共4位。

①TF0和TF1是计数溢出标志位。当计数器计数溢出时该位置“1”,可以将此位状态供位查询使用,查询后软件(指令)清“0”。也可以作为中断的标志位使用,在转向中断后也要清“0”。

②TR0和TR1定时器运行控制位。

TR0(TR1)=0,停止定时器/计数器工作;TR0(TR1)=1,开启定时器/计数器工作。

使用中用软件(指令)置“0”或置“1”。

定时控制寄存器(TCON)初始值设置可以是字节设置也可以是位设置。

2)工作方式控制寄存器(TMOD)。TMOD是专业寄存器,用于设定定时器/计数器0和定时器/计数器1(T/C0和T/C1)的工作方式,只能用字节传送设置。其各位定义如下:

MSB—表示最高有效位,LSB—表示最低有效位。单片机复位后,TMOD=00H。其中,低4位控制T/C0,高4位控制T/C1。工作方式控制寄存器(TMOD)各位设置如下:

①GATE———选通门控制。当GATE=0时,不管978-7-111-47138-7-Chapter03-136.jpg978-7-111-47138-7-Chapter03-137.jpg引脚是高电平或低电平,均不作为定时器选通条件;当GATE=1时,只有978-7-111-47138-7-Chapter03-138.jpg978-7-111-47138-7-Chapter03-139.jpg引脚是高电平,才能作为定时器选通条件之一。

②C/T———定时方式或计数方式选择。T/C=0为定时器方式,T/C=1为计数器方式。

③M1、M0———定时器/计数器工作模式选择。

M1 M0=00,工作方式0(mode0)。

M1 M0=01,工作方式1(mode1)。

M1 M0=10,工作方式2(mode2)。

M1 M0=11,工作方式3(mode3)。

工作方式0(mode 0)是13位计数结构的工作方式(不常用),其计数器由TH0全部8位和TL0的低5位构成。TL0的低3位不用。计数范围为1~8192(213)。本款单片机晶振频率为6MHz,则最小定时时间为〔213-(213-1)〕×1/6×10-6×12μs=2×10-6μs=2μs,最大定时时间为:(213-0)×1/6×10-6×12μs=16384×10-6μs=16384μs。

工作方式1(mode1)是16位计数结构计数器,由TH高8位、TL低8位构成。计数范围为1~65536(216)。本款单片机晶振频率为6MHz,则最小定时时间为〔216-(216-1)〕×1/6×10-6×12μs=2×10-6μs=2μs,最大定时时间为(216-0)×1/6×10-6×12μs=131072×10-6μs=131072μs≈131ms。

工作方式2(mode 2)是8位自动重新加载工作方式。把16位计数器分成两部分,TL作计数器,TH作预置初始值寄存器。当TL计数溢出后,TH将初始值内容自动重新装入TL内。计数范围为1~255(28)。本款单片机晶振频率为6MHz,则最小定时时间为〔28-(28-1)〕×1/6×10-6×12μs=2×10-6μs=2μs,最大定时时间为:(28-0)×1/6×10-6×12μs=255×10-6μs=510μs。

工作方式3T/C0分成两个8位定时器,T/C1停止计数。

定时器/计数器工作模式选择一般作为定时器选用16位计数器,这时最大定时时间就是机器时钟时间×65536(216)。若晶体振荡器频率为6MHz,机器周期=晶振周期×12,而晶振周期T=1/f=1/6×10-6。所以机器周期=1/6×10-6×12=2μs,则定时器最大定时时间为2μs×65536=0.13s。

3)中断允许控制寄存器(IE)。寄存器(IE)的详细介绍见中断控制寄存器章节。与定时器/计数器有关的位再复习如下:

①EA———中断总允许控制位 EA=0中断总禁止,EA=1中断总允许。

②ET0、ET1———定时/计数中断允许控制位ET0(ET1)=0禁止定时/计数中断,ET0(ET1)=1允许定时/计数中断。

(2)定时初始化设置步骤(既定时控制寄存器的状态设置)

1)计算计数初始值(定时常数),并将定时常数分别放入TH0(TH1)和TL0(TL1)中。

2)确定TMOD值。

①选择定时器T/C0或T/C1并定义所对应的低半字节或高半字节。

②确定工作方式选M0M1。

③确定门控制位GATE。

④确定定时方式位(或确定计数方式位)。

3)确定TCON中TR0和TR1定时器运行控制位的值。

3.编程练习一(定时器:查询方式)

【例3-54】 使用定时器1,采用工作方式0和查询方式。晶振频率为6MHz,一个机器周期2μs。设计产生一个周期500μs的连续等宽方波并控制P1.0,P1.1两个灯亮灭各定时20ms循环闪烁源程序。

1)计算计数初始值。因为是周期为500μs的等宽方波,则该等宽方波由占空比50%的高、低电平组成。高低电平各为250μs。则250μs×80=20ms。另外,工作方式0(mode0)是13位计数结构。

(213-X)×2μs×1062=250μs×106 X=8192-125=8067

8067÷256=31余131 31÷16=1余15=1FH=11111B(因为余数15=FH)

余数131÷16=8余3=83H=10000011B

X=8067=1111110000011B,高8位=11111100放入计数器1的计数存储器TH1=11111100B,则TH1=0FCH。低5位=00011B放入计数器1的低位计数存储器TL1=03H。

2)工作方式控制寄存器TMOD的初始化。因为采用工作方式0,所以M1M0=00。又因为选择定时功能,所以C/T=0。选择了定时器1,为实现定时器1的运行控制GATE=0。另外,定时器0不用,有关为设置为0,则TMOD=00H。

说明:根据条件设置TMOD=00H,看似使用定时器1或使用定时器0没有区别,但是在程序中的指令是启动定时运行位控制TR1,只能使用定时器1。这一点应特别注意。

3)确定TCON中TR0和TR1定时器运行控制位的值,TR1=1。

4)源程序。(www.chuimin.cn)

实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.0和P1.1的灯按定时各20ms规律亮灭。

程序点评:程序中使用了定时器1,选择了定时器工作方式0。计数溢出采用查询方式。程序进入“LOOP_2”循环段落后P1.0和P1.1的状态反复取反达到亮灭效果。另外,本程序灯的亮灭控制时间明显快于例3-51。

【例3-55】 使用定时器0,采用工作方式2和查询方式。晶振频率为6MHz,一个机器周期2μs。设计产生一个周期500μs的连续等宽方波,并控制P1.2、P1.3两个灯亮灭各定时50ms循环闪烁的源程序

1)计算计数初始值。因为是周期为500μs等宽方波,则该等宽方波由占空比50%的高、低电平组成。高低电平各为250μs,则250μs×200=50ms。另外,工作方式2是8位计数结构。

(28-X)×2μs×1062=250μs×106,解X=255-125=130,130÷16=8余2=82H=10000010B。

将82H分别装入TH0和TL0中。

2)工作方式控制寄存器TMOD的初始化。因为采用工作方式2,所以M1M0=10。又因为选择定时功能,所以C/T=0。选择定时器0,为实现定时器0的运行控制GATE=0。另外,定时器1不用,设置为0,则TMOD=02H。

3)确定TCON中TR0和TR1定时器运行控制位的值,TR0=1。

4)源程序如下:

实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.2和P1.3接口的灯按定时各50ms规律亮灭。

程序点评:程序中使用了定时器0,选择了定时器方式为工作方式2(即自动重新装载方式)。计数溢出采用查询方式。

4.编程练习二(定时器:中断方式)

【例3-56】 使用定时器1,采用工作方式0和中断方式。晶振频率为6MHz,一个机器周期2μs。设计产生一个周期500μs的连续等宽方波,并控制P1.0、P1.1两个灯亮灭各定时20ms循环闪烁源程序

1)计算计数初始值。因为是周期为500μs的等宽方波,则该等宽方波由占空比50%的高、低电平组成。高低电平各为250μs,则250μs×200=50ms。另外,工作方式0(mode 0)是13位计数结构。

(213-X)×2μs×1062=250μs×106,X=8192-125=8067

8067÷256=31余131 31÷16=1余15=1FH=11111B(因为余数15=FH)

余数131÷16=8余3=83H=10000011B

X=8067=1111110000011B,高8位=11111100放入计数器1的计数存储器TH1=11111100B,则TH1=0FCH。低5位=00011B放入计数器1的低位计数存储器TL1=03H。

2)工作方式控制寄存器TMOD的初始化。因为采用工作方式0,所以M1M0=00。又因为选择定时功能,所以C/T=0。选择了定时器1,为实现定时器1的运行控制GATE=0。另外,定时器0不用,有关为设置为0,则TMOD=00H。

说明:根据条件设置TMOD=00H,看似使用定时器1或使用定时器0没有区别,但是在程序中的指令是启动定时运行位控制TR1,只能使用定时器1。这一点应特别注意。

3)确定TCON值。TR1=1在程序中设置(因为使用定时器1),其他位为0,TCON=00H。

4)确定中断允许控制寄存器(IE)数值。

EA=1,中断总允许;ET1=1,允许定时器1定时中断,IE=88h=10001000B。

5)确定中断入口。定时器1的中断入口为001BH。

6)确定IP值。因只有一个中断,可以不设置优先级,仍保持复位状态IP=00H。

7)源程序如下:

实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.0和P1.1的灯按定时各50ms规律亮灭。

程序点评:程序中使用了定时器1,选择了定时器工作方式0。计数溢出采用中断方式。

【例3-57】 使用定时器0,采用工作方式2和中断方式。晶振频率为6MHz,一个机器周期2μs。设计产生一个周期500μs的连续等宽方波,并控制P1.2、P1.3两个灯亮灭各定时50ms循环闪烁的源程序

1)计算计数初始值。因为是周期为500μs等宽方波,则该等宽方波由占空比50%的高、低电平组成。高、低电平各为250μs,则250μs×200=50ms。另外,工作方式2(mode2)是8位计数结构。

(28-X)×2μs×1062=250μs×106,解得:X=255-125=130,130÷16=8,余2=82H=10000010B。将82H分别装入TH0和TL0中。

2)工作方式控制寄存器TMOD的初始化。因为采用工作方式2,所以M1M0=10。又因为选择定时功能,所以C/T=0。选择定时器0,为实现定时器0的运行控制,应使GATE=0。另外,定时器1不用,有关位设置为0,则有TMOD=02H。

3)确定TCON值。TR0=1在程序中设置(因为使用定时器),其他位为0,TCON=00H。

4)确定中断允许控制寄存器(IE)数值。

EA=1,中断总允许;ET0=1 允许定时器0定时中断,IE=82H=10000010B。

5)确定中断入口。定时器0的中断入口为000BH。

6)确定IP值。因只有一个中断,可以不设置优先级,仍保持复位状态IP=00H。

7)源程序。

实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.2和P1.3的灯按定时各50ms规律亮灭。

程序点评:程序中使用了定时器0,选择了定时器方式工作方式2(即自动重新装载方式)。计数溢出采用中断方式。

【例3-58】 利用定时器T/C0控制P1.7灯闪烁,定时时间为1s,采用中断方式

1)确定TMOD值。选用T/C0做定时器,工作方式选工作方式1,即16位定时器。TMOD=00000001B=01H。

2)计算定时常数。要求定时时间为1s,选T/C0定时时间为T/C0=0.1s,靠软件重复10次,总定时时间T=10×0.1s=1s。定时常数T0=65536-(100×103/2)=65536-50000=15536。因为T/C0是由2个8位定时器组成,必须将T0分解为高8位TH0和低8位TL0,即TH0=15536/256=60=3CH,TL0=15536-(256×60)=176=0B0H。

3)确定TCON值。TR0在程序中设置,其他位为0,TCON=00H。

4)确定IE值。EA=1,允许总中断;ET0=1允许T/C0定时中断;其他位为0;IE=10000010=82H。

5)确定IP值。因只有一个中断,可以不设置优先级,仍保持复位状态IP=00H。

6)确定中断服务程序地址入口000BH。

7)源程序如下:

实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.7的灯按1s的定时规律亮灭。

程序点评:程序中使用了定时器0,选择了定时器方式工作方式1,计数溢出采用中断方式。