MCS-51单片机的内部资源及应用-定时计数_第1页
MCS-51单片机的内部资源及应用-定时计数_第2页
MCS-51单片机的内部资源及应用-定时计数_第3页
MCS-51单片机的内部资源及应用-定时计数_第4页
MCS-51单片机的内部资源及应用-定时计数_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

第3章

MCS-51单片机的内部资源及应用

3.1MCS-51单片机的并行I/O口应用3.2MCS-51单片机的中断系统

3.3MCS-51单片机的定时器/计数器3.4MCS-51单片机的串行通信应用问题:每秒数字自动加“1”,如何实现?定时中断如何实现动态显示?每20ms去扫描刷新一次利用定时器定时去完成!(1)计数:计数是指对外部事件的个数进行计量。实质是对外部输入脉冲的个数进行计量。实现计数功能的器件称为计数器。(2)定时:定时器和计数器是一个部件, 计数器记录的是外界发生的事件; 定时器记录的是单片机内部提供的脉冲,这个脉冲是晶振脉冲经过12分频后的脉冲源。3.3.1定时器/计数器3.3MCS-51单片机的定时器/计数器

有2个16位可编程的定时器/计数器,简称为T0和T1;均是二进制加法计数器,回零溢出时产生中断请求;适用于定时控制、延时、外部计数和检测等;计数器:对引脚T0(P3.4)和T1(P3.5.)输入的外部脉冲计数;信号负跳变,计数器自动加1。最高频率:一般为fosc/24。定时器:对振荡脉冲的12分频输出进行计数,即对机器周期计数。MCS-51内部定时器/计数器

8051单片机内部的定时器/计数器的结构如下图所示。定时器/计数器的结构组成:16位加法计数器、工作方式寄存器TMOD和控制寄存器TCON。

T0:TL0(低8位)和TH0(高8位)

T1:TL1(低8位)和TH1(高8位)控制寄存器TCON(88H)

TF0/TF1:T0/1计数溢出标志位。可用于申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。

=1:计数溢出;

=0:计数未满。TR0/TR1:T0/1启停控制位。

=1:启动计数;=0:停止计数。IE0/IE1和IT0/IT1:管理外部中断(前面已介绍过)。TF1TR1TF0TR0IE1IT1IE0IT0TCON:GATE:门控位

=0:软件控制即由TR0控制启/停。

=1:硬件控制 由INT0

和TCON中TR0组合控制启/停。工作方式寄存器TMOD

GATEC/TM1M0GATEC/TM1M0T1T0同时为1:启任一为0:停定时器计数器工作方式寄存器TMODGATEC/TM1M0GATEC/TM1M0T1T0C/:定时方式/计数方式选择位。

=1:选择计数器工作方式,对T0/T1引脚输入的外部事件的负脉冲计数;

=0:选择定时器工作方式,对机器周期脉冲计数定时。M1,M0:工作方式选择位。

=00:13位定时器/计数器;

=01:16位定时器/计数器(常用);

=10:可自动重装的8位定时器/计数器(常用);

=11:T0分为2个8位定时器/计数器;仅适用于T0。3.3.2定时器/计数器的工作方式四种工作模式,以T0为例介绍,T1与T0的工作原理相同工作方式0(M1M0=00,13位定时器/计数器)

TH0的8位和TL0的低5位共13位,13位计数满溢出时, TF0置“1”,产生中断;最大计数M=2^13工作方式1

(M1M0=01,16位定时器/计数器)

由TH0和TL0构成16位加1计数器,其他特性与工作方式0相同。最大计数M=2^16GATEC/TM1M0GATEC/TM1M0T1T0工作方式2(

M1M0=10,计数初值自动重装,8位)两个8位寄存器TH0和TL0装入相同初值,TL0作计数器,TH0作预置寄存器计数满溢出时,TF0置“1”,同时硬件使TL0=TH0应用:串行数据通信的波特率发生器。3.3.2定时器/计数器的工作方式

GATEC/TM1M0GATEC/TM1M0T1T0工作方式3

(M1M0=11,2个8位定时器/计数器,仅适用于T0)TL0:8位定时器/计数器,和T0方式0或方式1完全相同。TH0:8位定时器,用T1的控制位TR1和TF1。不能对外计数。在方式3模式下,定时器/计数器0可以构成两个定时器或者一个定时器和一个计数器。

T0方式3下,T1方式2,定时初值能自动恢复,常用作波特率发生器。3.3.2定时器/计数器的工作方式

定时器/计数器初始化的步骤

(1)写TMOD,设置定时器/计数器的工作方式;(2)计算定时器/计数器的初值,写入TH0/TH1、TL0/TL1。(3)设置IE、IP,以开放相应的中断和设定中断优先级。(4)置位TR0/TR1,启动计数。定时器/计数器的定时/计数范围(1)工作方式0:13位定时器/计数器方式最大计数值=213=8192

(2)工作方式1:16位定时器/计数器方式最大计数值=216=65536

(3)工作方式2和工作方式3:8位的定时器/计数器方式最大计数值=28=2563.3.3定时器/计数器的应用

计数器初值的计算

方法:用最大计数量减去需要的计数次数。即:

TC=MC

其中:TC:计数器需要预置的初值;

M:计数器的模值(最大计数值);

方式0:M=213;方式1:M=216; 方式2,3:M=28;

C:计满回0所需的计数值,即设计任务要求计数值。3.3.3定时器/计数器的应用

计数器初值的计算例题例:流水线上一个包装是12盒,要求每到12盒就产生一个动作,用计数器来实现控制,请计算应当预置的初值。TC=MC,C=12,M=13,16,8,8(1)方式0:13位TC=MC=2^1312=8180=1FF4H1111111110100B,TH0=0FFH,

TL0=14H(2)方式1:16位定时器初值的计算

定时时间的计算公式为:

T=(MTC)×T0(或TC=MT/T0)其中:T——定时器的定时时间,即设计任务要求的定时时间;

T0——计数器计数脉冲的周期,即单片机系统主频周期的12倍;

M——计数器的模值;

TC——定时器需要预置的初值。若设初值TC=0,则定时器定时时间为最大。若设单片机系统主频为12MHz,则各种工作方式定时器的最大定时时间为:工作方式0:

Tmax=213×1s=8.192ms工作方式1:

Tmax=216×1s=65.536ms工作方式2和3:Tmax=28×1s=0.256ms3.3.3定时器/计数器的应用

定时器/计数器应用举例Li_333_1:利用定时器T0定时,在P1.7端输出一方波,方波周期为20ms,已知晶振频率为12MHZ.解:周期为20ms,定时为10ms=10000us

方式1(TMOD=01H):16位 2^16-10000=55536=0D8F0H

TH0=0D8H;TL0=0F0H3.3.3定时器/计数器的应用

Li_333_1定时器/计数器应用举例1源程序: ORG 0000H

AJMP MAIN

ORG OOOBH

AJMP INTT0 ORG 0100H MAIN: MOV TMOD,#01H ;方式1,16位 MOV TL0,#0F0H ;2^16-10000us=0D8F0H

MOV TH0,#0D8H MOV IE,#82H ;开中断,T0开中断

SETB TR0 ;启动T0 HERE: SJMP HERE ;循环等待 INTT0:

MOV TL0,#0F0H MOV TH0,#0D8H CPL P1.7 RETI定时器/计数器应用举例2

设发光二极管LED和8051的P1.0脚相连。当P1.0脚是高电平时,LED发亮;当P1.0脚是低电平时,LED不亮。编制程序用定时器来实现发光二极管LED的闪烁功能,设置LED每1s闪烁一次。已知单片机系统主频为12MHz。解:最长定时是65.536ms,无法实现1s的定时。需要采用软件计数器来进行设计。1s=1000ms=5*200=10*100=20*50=25*403.3.3定时器/计数器的应用

设计思想:

先做一个50ms的定时器,完成20次定时中断则为1s。软件计数器单元30H,每50ms软件计数器的值加1,完成20次则P1.0取反,软件计数器清零,否则直接返回。定时时间就为50×20=1000ms=1s。

工作方式1,TMOD=00000001B=01H其初值为:21650ms/1s=6553650000=15536=3CB0H

若:5ms定时,方式0:2135ms/1s=81925000=3192=C78HC78H=0110001111000B→01100011000

11000=6318H方式0,5ms定时,初值为:6318H,计数器计到200时P1.0取反。定时器/计数器应用举例2程序如下:(LI3_6_2.asm)

ORG0000H AJMPSTART;转入主程序

ORG000BH ;定时器/计数器0的中断服务程序入口地址

AJMPTIME0;跳转到定时器中断服务程序处

ORG0030H START:MOVSP,#60H;设置堆栈指针

MOVP1,#00H;关发光二极管LED(使其灭)

MOV30H,#00H;软件计数器预清0 MOVTMOD,#01H;定时器/计数器0工作于方式1 MOVTH0,#3CH;设置定时器/计数器的初值

MOVTL0,#0B0H

SETBEA ;开总中断允许

SETBET0 ;开定时器/计数器0中断允许

SETBTR0 ;启动定时器/计数器0LOOP:AJMPLOOP ;循环等待定时器/计数器应用举例2定时器/计数器T0的中断服务程序如下:

TIME0:PUSHACC ;保护现场

PUSHPSW ;将PSW和ACC推入堆栈保护 INC30H ;软件计数器加1 MOVA,30H CJNEA,#20,LP2 ;软件计数器单元中的值到了20了吗?到了,继续执行;否则,转入LP2LP1:CPLP1.0 ;到了,P1.0取反

MOV30H,#00H ;清软件计数器

LP2:MOVTH0,#3CH ;重置定时器/计数器的初值

MOVTL0,#0B0H

SETBTR0 ;重新启动定时器/计数器0

POPPSW ;恢复PSW和ACC POPACC RETI ;中断返回

END 定时器/计数器应用举例2(LI3_6_2.asm)定时器/计数器应用举例3(Li333-3)用定时器1按方式1工作,每50ms中断一次,通过P1口控制8个发光二极管:第1秒:1、3亮第2秒:2、4亮第3秒:5、7亮第4秒:6、8亮第5秒:1、3、5、7亮第6秒:2、4、6、8亮第7秒:8个全亮第8秒:8个全灭以后循环实现:P1第1秒:1、3亮: 05H第2秒:2、4亮 0AH第3秒:5、7亮 50H第4秒:6、8亮A0H第5秒:1、3、5、7亮55H第6秒:2、4、6、8亮AAH第7秒:8个全亮FFH第8秒:8个全灭00H代码-1:主程序 ORG0000H AJMPSTART;转入主程序

ORG0001BH ;定时器/计数器1的中断服务程序入口地址

AJMPTIME1;跳转到定时器1中断服务程序处

ORG0030H START:MOVSP,#60H;设置堆栈指针

MOVP1,#00H;关发光二极管LED(使其灭)

MOVR0,#00;用于计次序

MOVR1,#20;软件计数器20 MOVTMOD,#10H;定时器/计数器1工作于方式1 MOVTH0,#3CH;设置定时器/计数器的初值:延时50ms

MOVTL0,#0B0H SETBEA ;开总中断允许

SETBET1 ;开定时器/计数器1中断允许

SETBTR1 ;启动定时器/计数器1LOOP:JMP$ ;循环等待代码-2:中断服务程序TIME1:PUSHACC ;保护现场 PUSHPSW PUSHDPL PUSHDPH CLRTR1 ;停T1 MOVTH1,#3CH ;延时50ms MOVTL1,#0B0H SETBTR1 ;启T1 DJNZR1,EXIT ;R1=0? MOVR1,#20 ;20次 MOVDPTR,#DATA MOVA,R0 ;第?秒 MOVCA,@A+DPTR

MOVP1,A INCR0 ANLR0,#07H;第8次清0EXIT: POPDPH POPDPL POPPSW POPACC RETIDATA:DB05H,0AH,50H,0A0H DB55H,0AAH,0FFH,00H

Li333-3定时器/计数器应用举例4用定时器1方式2计数,要求每计满100次,将P1.0端取反。解:解题意设置TMOD计算初值X1、TMOD=60H

2、方式2具有初值自动装入功能,初始化后不必再置初值。

3、初值X=256-100=156D=9CH

4、TH1=TL1=9CH5、计数信号由T1(P3.5)脚引入,下

温馨提示

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

评论

0/150

提交评论