模块六单片机的定时器计数器.docx

上传人:b****2 文档编号:2622974 上传时间:2023-05-04 格式:DOCX 页数:54 大小:233.72KB
下载 相关 举报
模块六单片机的定时器计数器.docx_第1页
第1页 / 共54页
模块六单片机的定时器计数器.docx_第2页
第2页 / 共54页
模块六单片机的定时器计数器.docx_第3页
第3页 / 共54页
模块六单片机的定时器计数器.docx_第4页
第4页 / 共54页
模块六单片机的定时器计数器.docx_第5页
第5页 / 共54页
模块六单片机的定时器计数器.docx_第6页
第6页 / 共54页
模块六单片机的定时器计数器.docx_第7页
第7页 / 共54页
模块六单片机的定时器计数器.docx_第8页
第8页 / 共54页
模块六单片机的定时器计数器.docx_第9页
第9页 / 共54页
模块六单片机的定时器计数器.docx_第10页
第10页 / 共54页
模块六单片机的定时器计数器.docx_第11页
第11页 / 共54页
模块六单片机的定时器计数器.docx_第12页
第12页 / 共54页
模块六单片机的定时器计数器.docx_第13页
第13页 / 共54页
模块六单片机的定时器计数器.docx_第14页
第14页 / 共54页
模块六单片机的定时器计数器.docx_第15页
第15页 / 共54页
模块六单片机的定时器计数器.docx_第16页
第16页 / 共54页
模块六单片机的定时器计数器.docx_第17页
第17页 / 共54页
模块六单片机的定时器计数器.docx_第18页
第18页 / 共54页
模块六单片机的定时器计数器.docx_第19页
第19页 / 共54页
模块六单片机的定时器计数器.docx_第20页
第20页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

模块六单片机的定时器计数器.docx

《模块六单片机的定时器计数器.docx》由会员分享,可在线阅读,更多相关《模块六单片机的定时器计数器.docx(54页珍藏版)》请在冰点文库上搜索。

模块六单片机的定时器计数器.docx

模块六单片机的定时器计数器

模块六单片机的定时器/计数器

【教学聚焦】

知识目标:

1、了解单片机的中断定时计数器系统的结构

2、掌握单片机的定时计数器控制

3、掌握在程序设计中应用定时计数器的方法

技能目标:

1、能够熟悉单片机的定时计数器

2、能够掌握输入/输出的控制方式

3、能在程序设计中应用中断方式

【课时建议】6课时

教学重点:

单片机的定时计数器

教学难点:

应用中断定时计数器方式进行程序设计

【课堂随笔】

项目6.1定时器/计数器

6.1.1定时器/计数器概述

之前我们学习过用延时子程序实现一段时间的定时功能,但这种方法有它的局限性,在定时的过程中因延时子程序的运行会一直占用CPU,在延时时间段内单片机无法再做其它的事情了。

如果我们需要用到一种不占用CPU的定时方法,就要用到单片机自带的定时/计数器进行定时工作。

80C51的中断系统有5个中断源,2个优先级,可实现二级中断嵌套。

器属于五个中断源包含两个外部中断,两个定时/计数器,一个串行中断。

 

 

图1

如图1所示,80C51单片机共有五个中断源,每个中断源都可根据相应条件产生中断请求,中断请求会将相应的标志位置1,当单片机允许使用中断源时,会每过一个指令周期对相应中断标志位进行一次查询。

如发现该标志位为1,则会停下当前工作转到中断子程序处进行程序处理,之后再返回刚才中断处继续执行。

从中断请求的发生到处理完中断返回这一过程成为一个完整的中断过程。

 

图2

定时/计数器的原理图如图2所示,单片机共有两个定时计数器,每一个定时/计数器的主要组成部分是两个连续的8位的存储单元,这两个存储单元分为低8位和高8位,低位可向高位进位。

在定时计/数器进行定时工作时,每过一个机器周期(6MHZ晶振-----2us,12MHZ晶振-----1us),定时计数器的低8位存储单元会自动加一;当低8位(TL0或TL1)加满溢出后会向高8位存储单元(TH0或TH1)进位;当高、低两个8位存储单元全部加满溢出后会将与之对应的中断标志位(TF0或TH1)置1;当单片机允许使用定时/计数器这一中断源时,CPU会每过一个指令周期对与被使用的定时/计数器相应的中断标志位进行一次查询。

如发现中断标志位为1,则说明定时到时,会停下当前工作,进入中断子程序进行相应的中断处理,之后返回原来的工作位置继续之前的工作。

因此如果使用定时/计数器进行定时工作,在定时到时之前的时间里CPU可以不间断其他的程序运行,当定时到时后,因中断请求被CPU查询到,这时CPU会短暂地停下当前的程序任务转而执行中断子程序,之后返回原来的位置继续工作。

尽管用定时/计数器进行定时也会中断程序运行,但子程序的内容有限,而且执行速度较快,往往几十us即可完成,故不会对原来的程序造成什么影响。

6.1.2定时器/计数器控制分析

AT89S51单片机内部定时器/计数器结构如图3所示。

内部设有两个16位的可编程定时器/计数器。

可编程是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变。

在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。

 

图3定时/计数器的内部结构

从图3可看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:

T0由TH0和TL0构成;T1由TH1和TL1构成。

每个寄存器均可单独访问。

这些寄存器是用于存放定时或计数初值的。

此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。

这些工作方式;TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。

定时/计数器的的控制就是要对这些寄存器进行相应的赋值,使定时/计数器按照需要完成初始化,起到定时/技术作用。

6.1.3定时器/计数器的工作模式

定时计数器在使用时首先要对其工作模式进行设定,与之有关的特殊功能寄存器在上一节已经有了介绍,下面我们就对其各自的作用做详细的介绍。

1.定时/计数器控制寄存器TCON

TCON是定时/计数器控制寄存器,它包含两个定时/计数器的溢出中断标志及外部中断

的中断标志。

,TCON的内部结构如表1所示,TCON位定义如表2所示。

表1TCON位格式

TCON

D7

D6

D5

D4

D3

D2

D1

D0

位符号

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

位地址

8FH

8EH

8DH

8CH

8BH

8AH

89H

88H

表2TCON位定义

位符号

位功能描述

TF1

定时/计数器T1溢出标志位。

当定时/计数器1计满溢出时,由硬件使TF1置“1”,并且申请中断。

进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清“0”。

TR1

定时/计数器T1运行控制位。

由软件清“0”关闭定时器1。

当GATE=1,且

为高电平时,TR1置“1”启动定时器1;

当GATE=0,TR1置“1”启动定时器1。

IE1

外部中断

请求标志。

IT1

外部中断

触发方式选择位。

IT1=0,低电平触发;

IT1=1,下降沿触发。

TF0

定时器/计数T0溢出标志,其功能及操作情况同TF1。

TR0

定时/计数器T0运行控制位,其功能及操作情况同TR1。

IE0

外部中断

请求标志。

IT0

外部中断

触发方式选择位,其功能及操作情况同IT1。

2.定时/计数器工作模式控制寄存器TMOD

定时器方式控制寄存器TMOD,其结构如表3所示。

表3TMOD格式

位数

D7

D6

D5

D4

D3

D2

D1

D0

位符号

GATE

C/

M1

M0

GATE

C/

M1

M0

定时器

T1

T0

TMOD的高4位用控制于T1,低4用于控制T0,每一位的具体作用如下:

GATE:

门控制位。

GATE和软件控制位TR0(或TR1)、外部引脚信号

(或

)的状态,共同控制定时器/计数器的打开或关闭。

C/

定时器/计数器选择位。

C/

=1,为计数器方式;C/

=0,为定时器方式。

M1M0:

工作方式选择位,定时器/计数器工作方式由M1M0设定。

具体如表4所示。

表4定时/计数器的工作方式

M1M0

工作方式

功能描述

00

工作方式0

13位计数器

01

工作方式1

16位计数器

10

工作方式2

自动装入初值的8位计数器

11

工作方式3

定时器0:

分成两个8位计数器,定时器1:

停止计数

3.中断允许寄存器IE

IE控制CPU总断源的允许或禁止以及每个中断源是否允许中断。

IE内部结构如表5所示,IE位定义如表6所示。

IE

D7

D6

D5

D4

D3

D2

D1

D0

位符号

EA

ES

ET1

EX1

ET0

EX0

位地址

AFH

AEH

ADH

ACH

ABH

AAH

A9H

A8H

表5IE格式

 

表6IE位定义

IE位符号

功能描述

EA

EA=0:

关所有中断

EA=1:

开所有中断

ES

ES=0:

关串行通信中断

ES=1:

开串行通信中断

ET1

ET1=0:

关T1中断

ET1=1:

开T1中断

EX1

EX1=0:

中断

EX1=1:

中断

ET0

ET0=0:

关T0中断

ET0=1:

开T0中断

EX0

EX0=0:

中断

EX0=1:

中断

4.中断优先寄存器IP

IP用来控制各中断源优先级的选择,即设定中断源的中断响应优先级别,IP内部结构如表7所示,IP位定义如表8所示。

表7IP位格式

 

IP

D7

D6

D5

D4

D3

D2

D1

D0

位符号

PS

PT1

PX1

PT0

PX0

位地址

BFH

BEH

BDH

BCH

BBH

BAH

B9H

B8H

表8IP位定义

IP符号

IP定义

PS

PS=0:

串行口中断低优先级

PS=1:

串行口中断高优先级

PT1

PT1=0:

定时/计数器T1中断低优先级

PT1=1:

定时/计数器T1中断高优先级

PX1

PX1=0:

外部中断

中断低优先级

PX1=1:

外部中断

中断高优先级

PT0

PT0=0:

定时/计数器T0中断低优先级

PT0=1:

定时/计数器T0中断高优先级

PX0

PT1=0:

外部中断

中断低优先级

PT1=1:

外部中断

中断高优先级

单片机复位后,IP低五位全部清零,并将所有中断源设置为低优先级中断。

如果几个同优先级的中断源同时向CPU申请中断,哪一个申请得到服务,取决于它们在CPU内部登记排队的序号。

CPU通过内部硬件查询登记序号,按自然优先级响应各个中断请求。

其内部登记序号是由硬件形成的,先后顺序如下:

→T0→

→T1→RI/TI

6.1.4定时器/计数器的容量

在使用AT89S51的定时器/计数器之前,一般完成以下几个步骤:

1)确定定时/计数器工作方式,对TMOD赋值;

2)计算定时/计数器的初值,对TH0、TL0或TH1、TL1赋值;

3)开放CPU、定时/计数器中断,对IE中的EA、ET0、ET1赋值;

4)启动定时器/计数器,对TCON中TRl或TR0位赋值。

下面我们来学习定时/计数器的初值的具体方法:

因为在不同工作方式下计数器位数不同,因而最大计数值也不同。

现假设最大计数值为M,那么各方式下的最大值M值如下:

方式0:

M=213=8192

方式1:

M=216=65536

方式2:

M=28=256

方式3:

定时器0分成两个8位计数器,所以两个M均为256。

因为定时器/计数器是作“加1”计数,并在计数满溢出时产生中断,因此初值X可以这样计算:

X=M-N/(12/fosc)

其中N为定时时间,fosc为晶振频率。

在实际应用中经常采用16位的方式1,下面以16位的方式1说明如何确定初值。

例如,T0选用方式1用于定时,外接晶振频率为12MHz,定时时间为10ms,计算过程如下:

方式1时,M=65536,定时时间N=10×10-3s,fosc=12MHz=12×106Hz

X=M-N/(12/fosc)=65536-10×10-3/(12/12×106)

=65536-10000=55536

拆分X的高八位送TH0,低八位送TL0:

MOVTH0,#0D8H;

MOVTL0,#0F0H;

项目6.2应用项目五电子钟的制作及应用

6.2.1定时器/计数器应用步骤

经过以上学习我们知道要想使用定时/计数器必须先对其进行初始化,流程图如图4。

 

 

 

图4定时/计数器初始化流程

在初始化过程的每一步所对应的特殊功能寄存器已经列出,下面我们一起来学习怎样完成定时/计数器初始化程序的编写。

定时器/计数器初始化函数及中断服务函数格式:

T0方式1:

以10ms定时时间、12MHz晶振为例

ORG0000H

LJMPSTART

ORGOO13H

LJMPINTT0

ORG0040H

LCALLCSH

.....

SJMP$;

ORG0100H

CSH:

MOVEA,01H;

MOVET0,01H;

MOVTMOD,01H;

MOVTH0,0D8H;

MOVTL0,0F0H;

MOVTR0,01H;

RET

ORG0200H

INTT0:

MOVTH0,0D8H;

MOVTL0,0F0H;

...

RETI

6.2.2电子钟系统制作分析

1.任务要求

六位数码显示,采用动态扫描方式,两位显示时位,两位显示分位,两位显示秒位,初始时间为23点58分46秒,如图5所示。

 

2.任务分析

在本任务中要解决两个问题,一个是显示问题,一个是定时问题。

断码显示器的使用在之前的学习中我们已经掌握了,在本任务中我们要同时显示六位不同的数字,但是80C51单片机只有4组I/O驱动引脚,无法同时对六位断码显示器输出显示数据,这就需要用到动态扫描的方法来完成显示功能。

下面以两位数显示为例来说明动态扫描在断码显示中的应用。

电路图如图6所示。

 

图6动态扫描显示电路

ORG0000H

LJMPSTART

ORG0030H

START:

MOVR0,#40H;40H.41H是显示缓冲区,依次存放十,个位

MOVA,#06H;十位

MOV@R0,A;

INCR0;个位

MOVA,#00H

MOV@R0,A

DS1:

MOVR0,#40H;置显示缓冲区首址

MOVR2,#02H;置扫描初值,点亮最左边的LED6

DS2:

MOVA,@R0;得到的段显码输出到段数据口

ACALLTABLE

MOVP0,A

MOVA,R2;向位数据口P1输出位显码

CPLA

MOVP2,A

MOVR3,#0ffH;延时一小段时间

DEL:

NOP

DJNZR3,DEL

INCR0;显示缓冲字节加一

CLRC

MOVA,R2

RRCA;显码右移一位

MOVR2,A;最末一位是否显示完毕?

如无则

JNZDS2;继续往下显示

MOVA,TBF

MOVB,#10

DIVAB

MOV40H,A

MOVA,B

MOV41H,A

SJMPDS1

TABLE:

INCA;取与数字对应的段码

MOVCA,@A+PC

RET

DB0EDH,48H,0E6H,6EH,4BH

DB2FH,0AFH,68H,0EFH,6FH

END

图中使用两位共阳极段码显示器,P1口用来提供显示断码,P2.0、P2.1两位引脚用来提供显示器位选择码。

在显示时,先由P2.0引脚输出高电平,P2.1引脚输出低电平选择个位显示器工作,这时让P1口输出“0”的断码使各位显示内容为“0”。

这时开始一小段时间的延时(在视觉残留允许范围内,如10ms),之后改变P2.0、P2.1、P1的值使十位显示器工作,并显示“6”,再加入一小段时间的延时。

这时只要重复上面的过程就可以让两位显示器交替显示,达到同时显示“60”的动态显示效果了。

程序如下。

在动态扫描显示的时候,程序进入了无限循环的状态,无法在进行其他的工作了,要想完成一秒钟的定时以及到时后的显示内容修改工作就要中断当前的循环工作进程,在1S到时的时候进行中断,处理完显示内容修改后再返回动态扫描的显示程序中,这样就可以实现任务要求的数字钟设计了。

下面以60S倒计时为例,编程实现动态扫描与定时/计数器中断的使用方法。

BUFEQU23H;存放计数值

TBFEQU22H;存放显示值

ORG0000H

LJMPSTART

ORG000BH

LJMPCLOCK

ORG0030H

START:

MOVR0,#40H;40H.41H是显示缓冲区,依次存放十,个位

MOVA,#06H;十位

MOV@R0,A;

INCR0;个位

MOVA,#00H

MOV@R0,A

 

MOVTMOD,#01H;定时器0初始化为方式1

MOVTH0,#0D8H;置时间常数,延时0.1秒

MOVTL0,#0F0H

MOVBUF,#00H;置0

MOVTBF,#60

 

SETBET0

SETBEA

SETBTR0

DS1:

MOVR0,#40H;置显示缓冲区首址

MOVR2,#02H;置扫描初值,点亮最左边的LED6

DS2:

MOVA,@R0;得到的段显码输出到段数据口

ACALLTABLE

MOVP0,A

MOVA,R2;向位数据口P1输出位显码

CPLA

MOVP2,A

MOVR3,#0ffH;延时一小段时间

DEL:

NOP

DJNZR3,DEL

INCR0;显示缓冲字节加一

CLRC

MOVA,R2

RRCA;显码右移一位

MOVR2,A;最末一位是否显示完毕?

如无则

JNZDS2;继续往下显示

MOVA,TBF

MOVB,#10

DIVAB

MOV40H,A

MOVA,B

MOV41H,A

SJMPDS1

TABLE:

INCA;取与数字对应的段码

MOVCA,@A+PC

RET

DB0EDH,48H,0E6H,6EH,4BH

DB2FH,0AFH,68H,0EFH,6FH

CLOCK:

MOVTL0,#0D0H;置时间常数

MOVTH0,#0F0H

PUSHPSW

PUSHACC

INCBUF;计数加一

MOVA,BUF;计到10否?

没有则转到QUIT退出中断

CJNEA,#02H,QUIT

MOVBUF,#00H;置初值

MOVA,TBF

DECA;

MOVTBF,A

CJNEA,#00H,QUIT

CLRTR0

QUIT:

POPACC

POPPSW

RETI;中断返回

END

6.2.3编制程序

将这样的动态扫描内容进行扩充即可实现六位数的动态扫描显示效果。

在上一节两位数码显示中已经学习了如何显示、如何产生1秒计时,数字钟在此基础上又增加了分位和时位,我们知道当秒位计够60秒时,自身归0,同时让分位上加1,当分位计够60时,分为归0,时位加1,当时位计够24时,时位归0,数字钟的程序就是按照这样的逻辑关系进行编写的。

 

BUFEQU23H;存放计数值

SBFEQU22H;存放秒值

MBFEQU21H;存放分值

HBFEQU20H;存放时值

CSEGAT0000H

LJMPSTART

CSEGAT01BH

LJMPCLOCK

CSEGAT0030H

START:

MOVR0,#40H;40H-45H是显示缓冲区,依次存放时分秒

MOVA,#02H;时高位

MOV@R0,A;

INCR0;时、底位

MOVA,#03H

MOV@R0,A

INCR0;分高位

MOVA,#05H

MOV@R0,A

INCR0;存分低位

MOVA,#08H

MOV@R0,A

INCR0;秒高位

MOVA,#04H

MOV@R0,A

INCR0;秒低位

MOVA,#06H

MOV@R0,A

MOVTMOD,#10H;定时器1初始化为方式1

MOVTH1,#0D8H;置时间常数,延时0.1秒

MOVTL1,#0F0H

MOVBUF,#00H;置0

MOVHBF,#23

MOVSBF,#58

MOVMBF,#46

SETBET1

SETBEA

SETBTR1

DS1:

MOVR0,#40H;置显示缓冲区首址

MOVR2,#20H;置扫描初值,点亮最左边的LED6

DS2:

MOVA,@R0;得到的段显码输出到段数据口

ACALLTABLE

MOVP0,A

MOVA,R2;向位数据口P1输出位显码

CPLA

MOVP1,A

MOVR3,#0FFH;延时一小段时间

DEL:

NOP

DJNZR3,DEL

INCR0;显示缓冲字节加一

CLRC

MOVA,R2

RRCA;显码右移一位

MOVR2,A;最末一位是否显示完毕?

如无则

JNZDS2;继续往下显示

MOVR0,#45H

MOVA,SBF;把秒值分别放于44H,45H中

ACALLGET

MOVA,MBF;把分值分别放入40H,41H中

ACALLGET

MOVA,HBF

ACALLGET

SJMPDS1;转DS1从头显示起

TABLE:

INCA;取与数字对应的段码

MOVCA,@A+PC

RET

DB3FH

DB06H

DB5BH

DB4FH

DB66H

DB6DH

DB7DH

DB07H

DB7FH

DB6FH

DB40H

GET:

MOVR1,A;把从时。

分或秒字节中取来的值的高

ANLA,#0FH;位屏蔽掉,并送入缓冲区

MOV@R0,A

DECR0

MOVA,R1;把时。

从分或秒字节中取来的值的低

SWAPA;位屏蔽掉,并送入缓冲区

ANLA,#0FH

MOV@R0,A

DECR0;R0指针下移一位

RET

CLOCK:

MOVTL1,#0D8H;置时间常数

MOVTH1,#0F0H

PUSHPSW

PUSHACC

CPLP1.0

CPLP1.1

CPLP1.2

CPLP1.3

INCBUF;计数加一

MOVA,BUF;计到10否?

没有则转到QUIT退出中断

CJNEA,#0AH,QUIT

MOVBUF,#00H;置初值

MOVA,SBF

INCA;秒值加一,经十进制调整后放入

DAA;秒字节

MOVSBF,A

CJNEA,#60H,QUIT;计到60否?

没有则转到QUIT退出中断

MOVSBF,#00H;是,秒字节清零

MOVA,MBF

INCA;分值加一,经十进制调整后放入

DAA;分字节

MOVMBF,A

CJNEA,#60H,QUIT;分值为60否?

不是则退出中断

MOVMBF,#00H;是,清零

MOVA,HBF

INCA

DAA

MOVHBF,A

CJNEA,#24H,QUIT

MOVHBF,#00H

QUIT:

POPACC

POPPSW

RETI;中断返回

END

6.2.4系统调试

在Proteuse软件上自行设计电路图,并根据自己设计的电路图在Keilc软件中编译程序进行调试,观察仿真运行结果。

在程序中修改使数字钟的显示初始值为18点26分56秒,在进行运行观察变化。

项目6.3应用项目六智能抢答器的制作及应用

6.3.1电路原理分析及设计

抢答器可同时供不大于8名选手或8个代表队参加比赛,各用一个抢答按钮,按钮的编号与选手的编号是相对应的,分别是S1、S2、S3、S4、S5、S6、S7、S8;给节目主持人设置二个控制按钮开关,用来控制系统的清零和抢答的开始;抢答开始后,若有选手按动抢答按钮,在数码管上显示出选手的编号,同时蜂鸣器给出音响提示,禁止其他选手抢答,优先抢答选手的编号一直保持到

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2