单片机的定时器计数器_第1页
单片机的定时器计数器_第2页
单片机的定时器计数器_第3页
单片机的定时器计数器_第4页
单片机的定时器计数器_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章MCS-51单片机

的定时器/计数器2/4/202316.1计数/定时器的结构CPU计数器/定时器T1计数器/定时器T0TL0TH07070168CH8AH8位的加1计数器TL1TH170708DH8B16TMOD(89H)方式寄存器机器周期定时模式P3.5P3.4计数模式只能字节寻址TCON(88H)控制寄存器TMOD(89H)GATEC/TM0M0GATEC/TM1M0D7D6D5D4D3D2D1D0TMOD:计数器/定时器方式寄存器定时/计数器0定时/计数器11:计数模式分别对P3.5P3.4的脉冲计数脉冲频率<晶振频率0:定时模式对机器周期脉冲计数TCON88hTF1TR1TF0TR0IE1IT1IE0IT0D7D6D5D4D3D2D1D0计数器/定时器控制寄存器TR1=1计数/定时器1开始计数TR1=0计数/定时器1停止计数TR0=1计数/定时器0开始计数TR0=0计数/定时器0停止计数计数/定时器0的工作原理16位计数器TL0TH0TR0工作模式选择定时计数TF0启动与停止控制振荡器12P3.4晶振频率fosc=12MHz123456789101112计数频率fc=1MHz1s机器周期机器周期&GATE1T0启动方式两种:软件(GATE0=0):

TR0=1硬件(GATE0=1,TR0=1):门控位0定时计数00000123456555300000123455556300000TMOD(89H)GATEC/TM0M0GATEC/TM1M0D7D6D5D4D3D2D1D0TMOD:计数器/定时器方式寄存器定时/计数器0定时/计数器1M1M0工作方式功能说明00方式013位定时器/计数器01方式116位定时器/计数器10方式28位自动重装定时器/计数器11方式3

T0分成两个独立的8位定时器/计数器;T1在该方式下停止计数,在其他方式下可工作,但不能产生溢出中断请求标志6.3.1方式0图6-4定时器/计数器工作于方式0时的逻辑结构图选择开关接通的计数脉冲是机器周期脉冲,T0对内部机器周期计数。定时时间由如下公式确定。定时时间

=

计数值

×

机器周期

=

(213−计数初值)

×

机器周期其中,机器周期

=

时钟周期

×

12213是T0在方式0时的最大计数值。1.当=

0时,为定时模式在定时应用中,只要根据需要定时的时间值计算出计数初值,送入TH0、TL0中,便可以实现精确定时,计数初值按如下公式计算。计数初值

=

213

定时时间/机器周期如果晶振频率为12MHz,则时钟周期为(1/12)s,机器周期为1s,当初值为0时,方式0的最长定时时间为8.192ms。解:根据公式,计算如下。计数初值

=

213

定时时间/机器周期

=

213

2ms/1s

=

6192

=

1100000110000B

即TH0应装入计数初值的高8位为C1H,TL0应装入计数初值的低5位为10H。【例6-1】若单片机使用的晶振频率为12MHz。请计算采用T0方式0定时2ms所需的定时器初值。MOVTH0,#0C1HMOVTL0,#10H6.3.2方式1图6-5定时器/计数器工作于方式1时的逻辑结构图方式1的计数位数是16位,由TL0作为低8位,TH0作为高8位,组成了16位加1计数器。计数模值为216。计数初值的计算公式如下。计数初值

=

216

定时时间/机器周期如果晶振频率为12MHz,则时钟周期为1/12s,机器周期为1s,方式1的最长定时时间为65.536ms。解:根据公式,计算如下。计数初值

=

216

定时时间/机器周期

=65536

2ms/1s

=

63536

=

F830H

即TH0应装入计数初值的高8位为F8H,TL0应装入计数初值的低8位为30H。【例6-2】若单片机使用的晶振频率为12MHz。请计算采用T0方式1定时2ms所需的定时器初值。MOVTH0,#0F8HMOVTL0,#30H上述两种方式,应先装入计数初始值,并设定工作方式,然后启动计数/定时器,当计数器计满溢出时,回到全0,自动向CPU发出溢出中断请求,计数器从0开始计数。注意:若需要定时器/计数器工作,从需要的初始值进行计数,必须重装初值。

ORG0000HLJMPMAINORG000BHCPLP1.0MOVTH0,#7fHMOVTL0,#7fH ;重装计数初值

RETIMAIN:MOVTMOD,#01H ;置T0为定时方式1MOVTH0,#7fHMOVTL0,#7fH;送入计数初值

SETBEA ;开放总中断

SETBET0 ;允许T1中断

SETBTR0 ;启动T1工作

SJMP$END6.3.3方式2图6-6定时器/计数器工作于方式2时的逻辑结构图1初值寄存器定时器初始化时,必须将计数初值同时送入TL0和TH0 计数初值

=

28

定时时间/机器周期当TL0计满溢出时,由硬件电路使TF0置1,向CPU发出中断请求,并将TH0中的计数初值自动送入TL0,TL0从初值重新进行加1计数。不需软件重装初值,适用于较精确的脉冲信号发生器。如果晶振频率为12MHz,则时钟周期为(1/12)s,机器周期为1s,方式2的最长定时时间为0.256ms。6.3.4方式3定时器T1不能工作在方式3,一旦设定T1为方式3,则T1自动停止工作。

图6-7定时器/计数器工作方式3逻辑结构图1方式3:T0分为两个独立的8位计数器TL0和TH0。TL0使用T0的所有控制位:

GATE、TR0、TF0和。当TL0计数溢出时,由硬件电路使TF0置1,向CPU发出中断请求。

TH0固定为定时方式使用T1的控制位:TR1、TF16.4定时器/计数器应用举例【例6-3】

利用T0扩展一个外部中断源的初始化程序。解:将T0设置为计数器方式从P3.4引脚输入下降沿信号,向CPU发出中断请求按方式0工作软件启动计数初值6.4.1定时器/计数器用于外部中断扩展

ORG0000H

LJMPMAIN

ORG000BH

LJMPT0INTT0INT:

CPLP1.0

MOV TL0,#1FH ;送入计数初值

MOV TH0,#0FFH

RETIMAIN:MOV

TMOD,#04H ;置T0为计数方式0

MOV

TL0,#1FH ;送入计数初值

MOV

TH0,#0FFH

SETB

EA ;开放总中断

SETB

ET0 ;允许T1中断

SETB

TR0 ;启动T1工作

SJMP$

END初始化程序解:将T0设置为计数器方式从P3.4引脚输入下降沿信号,向CPU发出中断请求按方式1工作软件启动计数初值【例6-3】

利用T0扩展一个外部中断源的初始化程序。

ORG0000H

LJMPMAIN

ORG000BH

LJMPT0INTT0INT:

CPLP1.0

MOV TL0,#0FFH ;送入计数初值

MOV TH0,#0FFH

RETIMAIN:MOV

TMOD,#05H ;置T0为计数方式0

MOV

TL0,#0FFH ;送入计数初值

MOV

TH0,#0FFH

SETB

EA ;开放总中断

SETB

ET0 ;允许T1中断

SETB

TR0 ;启动T1工作

SJMP$

END解:将T0设置为计数器方式从P3.4引脚输入下降沿信号,向CPU发出中断请求按方式2工作软件启动计数初值【例6-3】

利用T0扩展一个外部中断源的初始化程序。

ORG0000H

LJMPMAIN

ORG000BH

CPLP1.0

RETIMAIN:MOV

TMOD,#06H ;置T0为计数方式0

MOV

TL0,#0FFH ;送入计数初值

MOV

TH0,#0FFH

SETB

EA ;开放总中断

SETB

ET0 ;允许T1中断

SETB

TR0 ;启动T1工作

SJMP$

END解:将T0设置为计数器方式从P3.4引脚输入下降沿信号,向CPU发出中断请求按方式3工作软件启动计数初值【例6-3】

利用T0扩展一个外部中断源的初始化程序。

ORG0000H

LJMPMAIN

ORG000BH

CPLP1.0

MOV

TL0,#

0FFH ;重装计数初值

RETIMAIN:MOV

TMOD,#07H ;置T0为计数方式0

MOV

TL0,#0FFH ;送入计数初值

SETB

EA ;开放总中断

SETB

ET0 ;允许T1中断

SETB

TR0 ;启动T1工作

SJMP$

END结论:P3.4引脚每输入一个下降沿信号,都将TF0置1,向CPU发出一次中断请求。相当于扩展了一个边沿触发的外部中断源,中断入口地址为000BH。6.4.2定时器/计数器在秒表项目中的应用1.时基的设计2.实时时钟的实现3.定时器初值的计算4.定时器的初始化5.时钟程序分析1.时基的设计利用单片机的内部定时器T0产生中断来实现计时。设定定时器T0工作在定时工作方式1,定时时间为50ms(0.05s),T0启动后,定时时间到,便会产生溢出中断请求,在其中断服务程序中,通过指令重装定时初值,于是,T0便会每隔50ms产生一次中断,周而复始,获得一个0.05s的时基信号。由于应用项目选用的单片机外接晶振频率为12MHz,所以时钟周期为1/12s,一个机器周期等于12个时钟周期,机器周期为1s。2.秒表项目的实现计数器0定时50ms溢出机器周期脉冲计数器1计数10次溢出中断中断1SP1.0S设置定时器T0工作于定时方式1(16位定时器/计数器),定时时间为50ms(0.05s)。因此,T0的定时器初值即计数初值为:计数初值

=

216

定时时间/机器周期

=

216

50ms/1s

=

15536

=

3CB0H3.定时器初值的计算定时器0初值的计算定时器1初值的计算设置定时器T0工作于计数方式1,计数初值

=

216

10

=65526

=

FFF6H或MOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256MOVTH0,#3CHMOVTL0,#0B0H或MOVTH1,#(65536-10)/256MOVTL1,#(65536-10)MOD256MOVTH1,#0FFHMOVTL1,#0F6H(1)根据设定的定时器工作方式,给定时器/计数器方式寄存器TMOD送入一个相应的方式控制字,以设定定时器/计数器的工作方式。(2)将计算好的定时器初值(计数初值)送入定时器,以确定需要的定时时间或计数初值。4.定时器的初始化对定时器T0、定时器T1进行初始化的程序如下。MOVTMOD,#59H ;定时器0定时方式1,定时器1计数方式MOVTH0,#3CH ;置T0初值MOVTL0,#0B0HMOVTH1,#0FFH ;置T1初值MOVTL1,#0F6HMOVIE,#8AH ;允许中断SETBIT1SETBTR0 ;启动定时器T0SETBTR1 ;启动定时器T0

定时器启动后,在初值基础上不断进行加1计数,直到计满溢出时,向CPU发出溢出中断请求。这里定时时间为50ms,在P1.0引脚输出周期为100ms的方波,10个脉冲(1秒)后,计满溢出。

ORG0000HLJMPMAIN ;转主程序

ORG000BHLJMPBREAK0;转定时器T0中断

ORG001BHLJMPCLOCK;转定时器T1中断

MAIN:MOVTMOD,#59H;定时器0定时方式1,定时器1计数方式

MOVTH0,#3CH ;置T0初值

MOVTL0,#0B0HMOVTH1,#0FFH ;置T1初值

MOVTL1,#0F6HMOVIE,#8AH ;允许中断

SETBTR0 ;启动定时器T0SETBTR1 ;启动定时器T15.秒表程序分析

SECONDEQU30HORG0000HLJMPMAIN ;转主程序

ORG000BHLJMPBREAK0;转定时器T0中断

ORG001BHLJMPCLOCK;转定时器T1中断 BREAK0:CPLP1.0MOVTH0,#3CH ;置T0初值

MOVTL0,#0B0HRETICLOCK:CLREAPUSHACCPUSHPSWSETBEAINCSECONDMOVTH1,#0FFH ;置T1初值

MOVTL1,#0F6HCLREAPOPPSWPOPACCSETBEARETIMAIN:MOVSECOND,#00HMOVTMOD,#59H;定时器0定时方式1,硬件启动,定时器1计数方式

MOVTH0,#3CH ;置T0初值

MOVTL0,#0B0HMOVTH1,#0FFH ;置T1初值

MOVTL1,#0F6HMOVIE,#8AH ;允许中断

SETBTR0 ;启动定时器T0SETBTR1 ;启动定时器T1CLRP1.0LOOP:MOVA,SECONDACALLBINBCDMOVR0,AANLA,#0FHMOVDPTR,#TAB;使用DPTR指向表首地址

MOVCA,@A+DPTR;查表

MOVP2,AMOVP0,#0FEHACALLDELAYMOVP0,#0FFH

MOVA,R0SWAPAANLA,#0FHMOVDPTR,#TAB;使用DPTR指向表首地址

MOVCA,@A+DPTR;查表

MOVP2,AMOVP0,#0FDHACALLDELAYMOVP0,#0FFH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论