Chapter4 定时器、中断和串口_第1页
Chapter4 定时器、中断和串口_第2页
Chapter4 定时器、中断和串口_第3页
Chapter4 定时器、中断和串口_第4页
Chapter4 定时器、中断和串口_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

第四章MCS-51单片机的定时器、中断和串口主要内容定时器/计数器的相关寄存器1定时器/计数器的四种工作方式2串口的四种工作方式5串口相关的寄存器4中断系统的结构和相关寄存器6中断的响应过程7串行通信的一些概念3学习目标了解MCS-51单片机的定时器/计数器的工作模式1能够根据指定的定时间隔,编写MCS-51单片机定时程序2了解MCS-51单片机串口结构和串口的使用方法3能够搭建80C51单片机的多机串行通信电路,同时编写相应的串行通信程序。4了解中断系统的概念、结构和相关寄存器5掌握80C51单片机中断系统的响应过程,能够设计一个中断系统。6MCS-51单片机的定时器/计数器—基本情况2个16位的定时/计数器,有四种工作方式,简称定时器0、定时器1,分别用T0、T1表示。定时/计数器工作在定时模式时,计数脉冲信号来自单片机的内部,计数速率是晶振频率的1/12,当计数器启动后,每个机器周期计数器自动加1。定时/计数器工作在计数模式时,计数器对外部脉冲进行计数,计数器计P3.4(T0脚)P3.5(T1脚)负跳变次数。每产生一次负跳变,计数器自动加1。计数器最高计数频率为振荡频率的1/24。定时器计数器定时/计数器

内部计数器外部计数器CPU可以用软件设定定时器/计数器的工作方式,定时器/计数器工作时,会按照设定的工作方式独立运行,不占用CPU的操作时间,一旦定时器/计数器计满溢出,将向CPU提出中断申请,中断CPU当前操作。还有2个8位的专用寄存器TMOD(88H)和TCON(89H)

。其中TMOD是定时器的工作方式和工作模式寄存器,TCON是控制寄存器,主要用于定时/计数器管理与控制。MCS-51单片机的定时器/计数器—基本情况定时器/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1)。当加到计数器为全“1”时,再输入一个脉冲,就使计数器回零,同时产生溢出脉冲使TCON中溢出中断标志TF0或TF1置1,并可向CPU申请中断。MCS-51单片机的定时器/计数器—基本情况MCS-51单片机的定时器/计数器—基本情况3bit计数器(a)原理图.(b)时序图MCS-51单片机的定时器/计数器—基本情况T0和T18051单片机有2个16位的定时/计数器,即定时器0(T0)和定时器1(T1)。T0由2个特殊功能寄存器TH0(高字节,地址8CH)和TL0(低字节,地址8AH)构成,T1则由TH1(高字节,地址8DH)和TL1(低字节,地址8BH)构成。MOVTL0,#9CHMCS-51单片机的定时器/计数器—寄存器定时器/计数器工作方式控制寄存器:TMOD8bit寄存器,地址89H工作模式寄存器TMOD每一位都定义了不同的功能,但只能字节寻址,即要配置其中某一位信息,必须对TMOD整体赋值。低四位用来设置T0的工作方式,高四位用来设置T1的工作方式。MCS-51单片机的定时器/计数器—寄存器GATEC/TM1M0GATEC/TM1M0Timer1Timer0(MSB)(LSB)工作模式寄存器TMOD的格式(1)GATE——门控位门控位用来确定定时器/计数器的启动除了受TR0(TR1)的影响,是否还要受外部中断输入引脚()的信号控制。①GATE=1:当外部中断输入引脚()为高电平时,TR0(TR1)设置为1,启动定时器/计数器T0(T1);当外部中断输入引脚()为低电平时,不能启动T0(T1)。②GATE=0:只要将TR0(TR1)设置为1,即可启动定时器/计数器T0(T1)。D7D6D5D4D3D2D1D0GATE

M1M0GATE

M1M0T1T0MCS-51单片机的定时器/计数器—寄存器(2)——定时器/计数器功能模式选择位①C/T=1:T0(T1)用作计数器。②C/T=0:T0(T1)用作定时器。作计数器用时,对单片机引脚P3.4(T0)或P3.5(T1)上的输入信号进行计数。在每个机器周期的S5P2期间,CPU采样引脚的输入电平。若前一周期采样值为1,下一周期的采样值为0,则计数单元加1,加满后溢出引发定时器/计数器中断。作定时器用时,对内部时钟脉冲信号计数。希望定时多长时间就给计数单元赋相应的初始值,启动定时器后,每过一个机器周期计数单元加1,加满后溢出引发定时器/计数器中断。MCS-51单片机的定时器/计数器—寄存器(3)M1、M0——工作方式选择位由M1、M0两位的组合可以确定4种工作方式,如表4-2所示。这4种工作方式在定时时间长度、计数单元赋值等方面存在较大差异,下一节将举例说明其应用特点。M1M0

工作方式

功能描述00方式013位定时/计数器01方式116位定时/计数器10方式28位定时/计数器,自动重装初始值11方式3T0分为两个8位计数器,T1无此项定时器/计数器工作方式MCS-51单片机的定时器/计数器—寄存器控制寄存器TCON控制寄存器TCON每一位都定义了不同的功能,既可以字节寻址,也可以位寻址,即,如果要配置其中某一位信息,可以对该位单独赋值。TCON格式如表所示。控制寄存器TCON各位定义TCON的高4位用来定义定时器/计数器中断控制信息,低4位用来定义外部中断控制信息。下面分别介绍关于定时器/计数器中断控制的各位的具体含义。D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0T1T0外部中断MCS-51单片机的定时器/计数器—寄存器TF1(TF0):中断标志位。计数单元溢出时,硬件置位。若开启了定时器/计数器中断,则中断响应后硬件自动清除该标志位;若没有开启中断,则由软件清零。TR1(TR0):定时器/计数器启动控制位。若门控GATE=0,则软件设置TR1(TR0)为1时,启动定时器/计数器T1(T0)开始工作;软件清除TR1(TR0)为0时,定时器/计数器T1(T0)停止工作。

复位后TCON中的所有位都清零,定时器/计数器T1(T0)均没有工作。MCS-51单片机的定时器/计数器—寄存器单片机复位时,特殊功能寄存器TCON被清0TFx(x=0,1)和TRx(x=0,1)由软件方法置1或清0。既可按单元操作的方式,也可以按位操作方式。如启动定时/计数器T0和T1,清除溢出标志位TF0和TF1操作如下:

SETBTR0SETBTR1CLRTF0CLRTF1

或:MOVTCON,#01010000B定时/计数器控制寄存器(TCON)MCS-51单片机的定时器/计数器—寄存器注意:使用定时器/计数器时应注意以下几个方面:(1)MCS-51的定时器/计数器为加1计数器。(2)定时器/计数器T1的工作方式没有方式3,如果设置它为方式3(M1M0=11),定时器/计数器T1停止工作。(3)一般情况下,定时器/计数器T1溢出后,TF1自动置1,可以以此为判断标志,检测定时或计数是否完成,但在定时器/计数器T0设置为方式3时,TF1为1时意味着8位计数器TH0溢出,TF0为1表示8位计数器TL0溢出。(4)在计数器模式时,计数脉冲的频率不高于振荡器频率的1/24.MCS-51单片机的定时器/计数器—寄存器方式0方式0:13位定时器/计数器。设置TMOD的M1=0、M0=0时,定时器/计数器以方式0工作,此时计数单元由13位组成,即TLx的低5位(D0~D4)和THx的8位,TLx的高3位没有使用。这一方式主要是为了和早期4位单片机兼容,因此现在的单片机应用设计中很少将定时器/计数器设为方式0,大家对方式0的结构和工作特点有基本了解就足够了。MCS-51单片机的定时器/计数器—工作方式如图所示,以定时器/计数器T0为例,当GATE=0时,TR0控制定时器/计数器工作状态,只要设置TR0=1,定时器/计数器就开始工作,TL0和TH0组成的13位计数单元开始计数;当GATE=1时,TR0与引脚信号共同确定定时器/计数器工作状态。MCS-51单片机的定时器/计数器—工作方式

当=0时,MUX开关接通内部振荡器的12分频输出,此时T0就是对机器周期进行计数,即T0作为定时器使用,定时时间为:

t:定时时间。

TC:机器周期。

X:定时器/计数器初始值。

fOSC:晶体振荡器频率。

L:计数单元的长度。XXMCS-51单片机的定时器/计数器—工作方式

当=1时,MUX开关接通计数引脚(P3.4),此时T0对外部引脚P3.4上的脉冲信号进行计数,即T0作为计数器使用,计数个数为:

S=2L-X

S:脉冲信号计数值。

L:计数单元的长度。

X:计数单元初始值。当TL0的低5位计满溢出时,向TH0进位,当计数单元的值为全“1”时,再来一个有效信号将使计数单元溢出复位为全“0”,同时使中断标志位TF0置位,申请中断。如果程序中没有开启定时器/计数器中断,则可以通过软件查询标志位TF0是否为“1”来判断定时/计数是否结束。在方式0下,计数器计数范围是1~8192(213)。定时时间范围为1~8192个机器周期。MCS-51单片机的定时器/计数器—工作方式【例】设系统晶振为12MHz,试编程实现在P1.0管脚输出周期为10ms的方波。分析:定时器/计数器应用要考虑选择T0还是T1、工作在定时模式还是计数器模式、采用哪种工作方式、计数单元初始值计算等问题。因此对应程序设计中定时器初始化步骤通常有如下几步:

①配置TMOD(写入工作方式控制字);②计数单元THx、TLx赋初值;③启动定时器/计数器(设置TRx);④开中断(如采用查询方式可省略这一步)。MCS-51单片机的定时器/计数器—工作方式

根据题意,定时器/计数器应工作在定时模式,且定时时间为周期的一半,即5ms,假设选择T0,确定工作方式0,套用前面的公式计算计数单元初始值。

X=2L-t×fOSC/12=213-5×10-3×12×106/12=8192-5000=3192=0C78H=110001111000B

由于方式0的计数单元由TL0的低5位和TH0的8位共同组成,因此将上述计算结果拆分成低5位和高8位的组合,则初始值赋值为:

TL0=11000B=18H,TH0=1100011B=63H。MCS-51单片机的定时器/计数器—工作方式如果用查询方式,程序代码如下:

ORG0000H AJMPSTART ;跳转到主程序开始处

ORG0030H START: MOVSP,#68H ;堆栈指针上移

SETBP1.0 ;初始化P1.0 MOVTMOD,#00H ;设置T0工作在定时模式,方式0 MOVTH0,#63H;定时器计数单元赋初值

MOVTL0,#18H SETBTR0 ;启动定时器T0LED_LOOP: JNBTF0,$ ;定时时间没有到,继续等待

CLRTF0 ;手动清除中断标志位

CPLP1.0 ;改变P1.0状态使之输出方波

MOVTH0,#63H ;重新赋初值

MOVTL0,#18H SJMPLED_LOOP ENDMCS-51单片机的定时器/计数器—工作方式如果用中断方式,程序代码如下:

ORG0000H AJMPSTART;跳转到主程序开始处

ORG000BH ;定时器/计数器T0中断入口

AJMPINT_T0;跳转到T0中断服务程序处

ORG0030HSTART: MOVSP,#68H;堆栈指针上移

SETBP1.0 ;初始化P1.0 MOVTMOD,#00H;设置T0工作在定时模式,方式0 MOVTH0,#63H;定时器计数单元赋初值

MOVTL0#18H SETBTR0;启动定时器

SETBEA;开总中断

SETBET0;开定时中断T0 SJMP$;等待中断MCS-51单片机的定时器/计数器—工作方式INT_T0: ;中断服务程序

PUSHACC PUSHPSW MOVTH0,#63H

;重新赋初值

MOVTL0,#18H CPLP1.0 ;改变P1.0状态使之输出方波

POPPSW POPACC RETI ENDMCS-51单片机的定时器/计数器—工作方式

例:设定时器T0选择工作模式0,定时时间为1ms,fOSC=6MHz。试确定T0初值,计算最大定时时间T。

解:当T0处于工作模式0时,加1计数器为13位。设T0的初值为X。则

X=7692

转换为二进制数X=1111000001100B=1E0CHT0的低5位:01100B=0CHT0的高8位:11110000B=F0HT0最大定时时间对应于13位计数器T0的各位全为1,即(TH0)=FFH,(TL0)=1FH。则MCS-51单片机的定时器/计数器—工作方式

例:设T0工作在模式0,定时时间为1ms,fOSC=6MHz。编程实现其定时功能。

MCS-51单片机的定时器/计数器—工作方式解:

(1)计算T0初值X

结果为(TH0)=0F0H,(TL0)=0CH。(2)程序清单

ORG0000HRESET:AJMPMAIN;跳过中断服务程序区

ORG000BH;中断服务程序固定入口

AJMPITOP

主程序

ORG0100HMAIN:MOVSP,#60H;设堆栈指针

ACALLPTOMDHERE:AJMPHERE;等待时间到,转入中断PTOMD:MOVTL0,#0CH;装入初值

MOVTH0,#0F0HSETBTR0;启动定时

SETBET0;开中断

SETBEARET;子程序返回中断服务程序

ORG0120HITOP:MOVTL0,#0CH;重装入初值

MOVTH0,#0F0HCPLP1.0;P1.0输出取反

;产生周期2ms的方波

RETI;中断返回MCS-51单片机的定时器/计数器—工作方式

例:利用T0的工作模式0产生1ms的定时,在P1.0引脚上输出2ms的方波。设单片机晶振=12MHz。解:

(1)选择工作模式要在P1.0引脚输出周期为2ms方波,只要使P1.0每隔1ms取反一次即可。T0的模式字节TMOD=00H,即

TMOD.1~TMOD.0M1M0=00,T0为模式0;

TMOD.2C/T=0,T0为定时状态;

TMOD.3GATE=0,表示计数不受INT0控制;TMOD.4~TMOD.7可为任意值。因T1不用,这里取0

MCS-51单片机的定时器/计数器—工作方式(2)计算1ms定时时T0的初值机器周期

设T0的计数初值为X,则

=8192-1000=7192D=1110000011000BTH0初值为E0H,TL0初值为18H。可查询TF0的状态来控制P1.0输出。

7192÷32商为高8位,余数为低5位MCS-51单片机的定时器/计数器—工作方式

(3)查询方式采用查询方式的程序很简单,但在定时器计数过程中,CPU要不断查询溢出标志位TF0的状态。这就占用了很多CPU的工作时间,使CPU的效率下降。程序清单:

MOVTMOD,#00H;设置T0为模式0MOVTL0,#18H;送初值

MOVTH0,#0E0HSETBTR0;启动T0

LOOP:JBCTF0,NEXT;查询定时时间到否?

SJMPLOOPNEXT:MOVTL0,#18H;重装计数初值

MOVTH0,#0E0HCPLP1.0;输出取反

SJMPLOOP;重复循环MCS-51单片机的定时器/计数器—工作方式(4)定时器溢出中断方式主程序

MAIN:MOVTMOD,#00H;设置T0为模式0MOVTL0,#18H;送初值

MOVTH0,#0E0HSETBEA;CPU开中断

SETBET0;T0中断允许

SETBTR0;启动T0

HERE:SJMPHERE;等待中断中断服务程序

ORG000BH;T0入口

AJMPCTC0;转中断服务程序

CTC0:MOVTL0,#18H;重装初值

MOVTH0,#0E0HCPLP1.0;输出方波

RETI;中断返回MCS-51单片机的定时器/计数器—工作方式方式1方式1:16位定时器/计数器。设置TMOD的M1=0、M0=1时,定时器/计数器以方式1工作,此时计数单元由两个完整的8位寄存器TLx、THx共同组成。定时器/计数器对应方式1的结构框图如下所示。MCS-51单片机的定时器/计数器—工作方式启动定时器/计数器后,计数单元开始计数,TLx加满后溢出向THx进位,THx加满(全1)后再计一次后溢出,此时TLx、THx自动清零,同时系统将定时器/计数器中断标志位TFx置位,表明定时时间到或外部信号计数达到目标。如果允许中断,那么CPU自动响应中断并转入中断处理程序,此时TLx、THx已经恢复为全0,中断处理程序中必须重新给TLx、THx赋初始值。中断返回时系统自动将标志位TFx清零。方式1通常应用于需要实现较长时间定时的场合。下面我们通过一个简单的例子来说明方式1的使用特点。MCS-51单片机的定时器/计数器—工作方式

【例】电路如图所示。试编程实现单片机控制8盏灯循环点亮,每盏灯点亮时间为50ms,系统晶振为12MHz。

MCS-51单片机的定时器/计数器—工作方式分析:根据题意,确定定时时间为50ms,每次定时时间到,即控制相邻的下一盏灯点亮,采用定时器T1,工作方式1,计数单元初始值计算如下:

X=2L-t×fOSC/12=216-50×10-3×12×106/12=15536=3CB0H

则TH1=3CH,TL1=B0H。MCS-51单片机的定时器/计数器—工作方式

ORG0000H AJMPSTART ;跳转到程序开始处

ORG0030HSTART: MOVSP,#68H ;堆栈指针上移

MOVP2,#0FFH ;初始化,LED全灭

MOVA,#0FEH ;初始化,累加器A保存 ;LED控制位状态信息

MOVTMOD,#10H ;设置T1工作在定时模式,方式1 MOVTH1,#3CH;定时器计数单元赋初值

MOVTL1,#0B0H SETBTR1 ;启动定时器LED_LOOP:

JNBTF1,$

;定时时间没有到,继续等待

CLRTF1

;手动清除中断标志位

MOVP2,A ;改变LED状态

RLA ;循环左移一位

MOVTH1,#3CH MOVTL1,#0B0H SJMPLED_LOOP ENDMCS-51单片机的定时器/计数器—工作方式中断方式、程序代码如下:

ORG0000H AJMPSTART ;跳转到程序开始处

ORG001BH AJMPINT_T1 ;跳转到定时中断1处理程序处

ORG0030HSTART: MOVSP,#68H ;堆栈指针上移

MOVP2,#0FFH ;初始化,LED全灭

MOVA,#0FEH ;初始化,累加器A保存LED状态信息

MOVTMOD,#10H;设置T1工作在定时模式,方式1 MOVTH1,#3CH ;定时器计数单元赋初值

MOVTL1,#0B0H SETBTR1 ;启动定时器

SETBEA ;开总中断

SETBET1 ;开定时中断T1 SJMP$ ;等待中断MCS-51单片机的定时器/计数器—工作方式INT_T0: PUSHPSW ;本次需要利用累加器A传递LED状态,

;故不必将A的内容压入堆栈

MOVTH1,#3CH ;重新赋初值

MOVTL1,#0B0H MOVP2,A ;改变LED状态

RLA ;循环左移一位

POPPSW RETI ENDMCS-51单片机的定时器/计数器—工作方式【例】系统晶振为12MHz,利用定时器T0的工作方式1实现P1.0管脚输出周期为2s的方波。分析:在晶振为12MHz时,方式1最大能实现的定时时间为216×1μs=65536μs,要使P1.0输出周期为2s的方波,定时时间为1s。对于类似的长时间定时要求,可以采用基准定时加循环的方法。比如要求定时1s,选择T0的方式1,基准定时50ms,循环20次即为1s。程序流程图如图所示。MCS-51单片机的定时器/计数器—工作方式MCS-51单片机的定时器/计数器—工作方式程序代码如下:

ORG0000H AJMPSTART ;跳转到程序开始处

ORG000BH AJMPINT_T0;跳转到定时中断0处理程序处

ORG0030HSTART: MOVSP,#68H SETB P1.0

;初始化P10 MOVR7,#20

;循环次数赋初值

MOVTMOD,#01H;设置T0工作在定时模式,方式1 MOVTH0,#3CH;定时器计数单元赋初值

MOVTL0,#0B0H SETBTR0 ;启动定时器

SETBEA ;开总中断

SETBET0 ;开定时中断T0 SJMP$MCS-51单片机的定时器/计数器—工作方式;***************中断服务程序***************INT_T0:PUSHACC PUSHPSW MOVTH0,#3CH

;重新赋初值

MOVTL0,#0B0H DJNZR7,EXIT

;循环次数未到, ;即未到1s,退出中断

MOVR7,#20 ;循环次数重新赋初值

CPLP1.0 ;1s定时时间到,改变P1.0状态EXIT: POPPSW POPACC RETI ENDMCS-51单片机的定时器/计数器—工作方式方式2

方式2:8位自动重装初始值的定时器/计数器。设置TMOD的M1=1、M0=0时,定时器/计数器以方式2工作,此时计数单元THx作为备分寄存器保存和TLx同样的初始值。定时器/计数器对应方式2的结构框图如图所示。MCS-51单片机的定时器/计数器—工作方式启动定时器/计数器后,计数单元开始计数,TLx加满(全1)后再加1溢出,此时TLx自动清零,同时系统将定时器/计数器中断标志位TFx置位,表明定时时间到或外部信号计数达到目标。如果允许中断,CPU自动响应中断并转入中断处理程序。在方式2中,系统会自动从备分寄存器THx取得初始值赋给TLx,因此不需要在中断处理程序中重新给TLx、THx赋初始值。中断返回时系统自动将标志位TFx清零。方式2通常应用于短时间定时的场合。MCS-51单片机的定时器/计数器—工作方式【例】电路如图所示,系统晶振为12MHz,程序控制8盏灯轮流点亮,但要求看起来8盏灯同时点亮。分析:人眼的视觉停留时间大约为20ms,要想8盏灯轮流点亮而看起来一齐亮,则每盏灯第一次点亮和第二次点亮的时间间隔不能超过20ms。不妨设计为每盏灯点亮200μs。然后依次循环,则每盏灯中途熄灭的时间间隔可以定为大约为14ms,远远小于人眼视觉停留时间,这样人眼将不会分辨出灯曾经熄灭过,从而达到看起来一齐亮的效果。这一设计思路在数码管动态扫描显示中常常用到。选择定时器T1,短时间定时采用方式2,定时200μs,初始值计算如下:

X=2L-t×fOSC/12=28-200×10-6×12×106/12=56=38H

MCS-51单片机的定时器/计数器—工作方式 ORG0000H AJMPSTART ;跳转到程序开始处

ORG001BH AJMPINT_T1 ;跳转到定时中断1处理程序处

ORG0030HSTART: MOVSP,#68H ;堆栈指针上移

MOVP2,#0FFH ;初始化,LED全灭

MOVA,#0FEH ;初始化,累加器A保存LED状态信息

MOVTMOD,#20H ;设置T1工作在定时模式,方式2 MOVTH1,#38H ;定时器计数单元赋初值

MOVTL1,#38H SETBTR1 ;启动定时器

SETBEA ;开总中断

SETBET1 ;开定时中断T1 SJMP$ ;等待中断MCS-51单片机的定时器/计数器—工作方式INT_T0: PUSHPSW MOVP2,A;改变LED状态

RLA;循环左移一位

POPPSW RETI ENDMCS-51单片机的定时器/计数器—工作方式方式3方式3:T0分解为2个独立的8位定时器/计数器。设置TMOD的M1=1、M0=1时,定时器/计数器以方式3工作,只有T0可以设置为方式3,此时T0分解为2个独立的8位定时器/计数器TL0和TH0。其中TL0占用原T0的相关资源,包括T0控制位、GATE、TR0、TF0,外部信号输入引脚P3.4(T0)、P3.2(),T0中断入口地址。除了计数单元只有8位寄存器TL0外,其余功能和用法与方式1完全相同,可用作8位定时器,也可用作8位计数器模式。此时TH0使用原T1的部分资源,包括T1控制位TR1、TF1,T1中断入口地址。TH0只用作8位定时器模式。MCS-51单片机的定时器/计数器—工作方式MCS-51单片机的定时器/计数器—工作方式

当定时器/计数器T0用作方式3时,T1仍然可以设置为方式0~2。由于当前T1的控制位和中断源都被TH0占用,此时T1一般用作不需要中断的串口波特率发生器,定时控制串口数据传输速率,详细说明可参见本章串口部分。前面列举了很多定时器应用的例子,接下来看一个计数器应用的例子。MCS-51单片机的定时器/计数器—工作方式【例】假设某生产线的一个流程有5套工序,5套工序全部结束后工作人员应停止其他工作,来检测5套工序后的产品。电路设计人员将5套工序对应传感器的输出信号(低有效)相与后接入到单片机引脚P3.4,蜂鸣器接P1.0(低电平有效),手动按键接P1.7,要求5套工序结束后蜂鸣器鸣叫提醒工作人员,直到工作人员按下按键(给P1.7一个低电平信号)为止。分析:根据题意,可以设置T0工作在方式3,利用TL0作8位计数器,P3.4管脚收到5次有效信号后引发T0中断,则计数单元赋初值为TL0=28-5=250=FAH。MCS-51单片机的定时器/计数器—工作方式

ORG0000H AJMPSTART;跳转到程序开始处

ORG000BH AJMPINT_T0;跳转到定时中断0处理程序处

ORG0030HSTART: MOVSP,#68H SETBP1.0 ;初始化蜂鸣器

SETBP1.7 ;初始化按键

MOVTMOD,#07H;设置T0工作在计数模式,方式3 MOVTL0,#0FAH;计数器计数单元赋初值

SETBTR0;启动计数器

SETBEA;开总中断

SETBET0;开中断T0 SJMP$MCS-51单片机的定时器/计数器—工作方式INT_T0: PUSHACC PUSHPSW MOVTL0,#0FAH;重新赋初值

CLRP1.0 ;5套工序结束,控制蜂鸣器鸣叫

JBP1.7,$ ;工作人员没有按键,蜂鸣器继续鸣叫

SETBP1.0 ;工作人员按下停止键,蜂鸣器停止鸣叫

POPPSW POPACC RETI ENDMCS-51单片机的定时器/计数器—工作方式思考与练习1.定时器/计数器有几种工作方式?各有何特点?2.与定时器/计数器相关的寄存器有哪些?3.定时器/计数器初始化包括哪些步骤?4.已知系统晶振为12MHz,编程实现P1.0输出50ms的方波。5.设计一个8灯闪烁的控制电路,系统晶振为12MHz,编程实现8灯轮流闪烁,其中每盏灯点亮时间为3ms。6.设计一个8灯闪烁的控制电路,系统晶振为12MHz,编程实现8灯轮流闪烁,其中每盏灯点亮时间为2s。有条件的在硬件电路板上运行查看效果。7.设计一个流水灯控制电路,系统晶振为12MHz,编程实现第1min8灯从左至右轮流闪烁,每盏点亮时间为1s,第2min8灯从右至左闪烁,第3min再从左至右,周期交替。8.利用T0测量外部信号的正脉冲宽度,已知系统的晶振频率为12MHz,将所测得值高位存入片内71H,低位存入片内70H。定时器/计数器初始化定时/计数器的初始化包括设置工作方式、计数器或定时器模式、计算计数初始值、启动定时/计数器、设置中断控制位等。定时和计数可以采用查询方式和中断方式实现。MCS-51单片机的定时器/计数器—使用总结(一)采用查询方式实现定时和计数(1)确定工作方式、计数器或定时器模式及启动控制方式,构造方式控制码并写入特殊功能寄存器TMOD:MOVTMOD,#控制码。(2)计算定时器或计数器的计数初始值,根据工作方式把初始值送人TH0、TL0或TH1、TL1。(3)启动定时/计数器:SETBTRx,x=0,1。定时/计数器开始工作,通过查询TFx是否为1来判断定时或计数是否达到要求。定时器/计数器设置MCS-51单片机的定时器/计数器—使用总结(二)采用中断方式实现定时和计数(1)确定工作方式、计数器或定时器模式及启动控制方式,构造控制码并写入特殊功能寄存器TMOD。(2)计算定时器或计数器的计数初始值,根据工作方式把初始值送人TH0、TL0或TH1、TL1。(3)开放CPU中断,允许定时/计数器溢出中断CPU的工作:对IE寄存器编程。(4)启动定时/计数器:SETBTRx,x=0,1。当计数器溢出时,定时或计数达到要求,CPU响应中断,程序转移到相应的中断处理程序入口处。MCS-51单片机的定时器/计数器—使用总结定时器/计数器设置定时/计数器有多种工作方式,每一种工作方式都能提供定时和计数功能,我们在应用中如何选择合适的工作方式呢?(1)掌握每种工作方式下定时/计数器的工作原理和特点。(2)了解每种工作方式下定时/计数器的最大计数次数和最大定时时间。MCS-51单片机的定时器/计数器—使用总结定时器/计数器应用13位定时/计数器(方式0)最大计数次数为8192,当晶振频率12MHz时,最大定时时间为8.192ms。16位定时/计数器(方式1)最大计数次数为65536,当晶振频率12MHz时,最大定时时间为65.536ms。8位定时/计数器(方式2和方式3)最大计数次数为256,当晶振频率12MHz时,最大定时时间为0.256ms。定时器/计数器应用MCS-51单片机的定时器/计数器—使用总结

前面几节分别介绍了定时器/计数器的结构、工作特点和几种主要工作方式的简单应用,下面通过一个综合实例说明定时器/计数器的应用。工作原理【例】试设计一个不带显示的电子时钟,要求根据系统预定初始值,每隔1sLED1闪亮一次,表明1s时间到;每隔1minLED2闪亮2次,表明1min时间到;每隔1h蜂鸣器鸣叫1次,表明整点报时。MCS-51单片机的定时器/计数器—综合应用

分析:单片机应用系统设计包括两部分内容:一是硬件设计,二是软件设计。首先要弄清楚系统功能要求,确定I/O口规划、芯片选型、外围器件选择等,然后设计硬件电路。在此基础上再着手软件设计工作,也分为程序流程图规划设计和代码编写两个步骤。最后是系统调试。当然这里只是关于单片机开发流程的简要说明,具体内容见第10章。根据题意,系统需要的硬件设备有单片机、2只LED、蜂鸣器,以及其他常用元件如晶振、电阻、电容、电源等。选择12MHz晶振,分配P2.3接LED1,P2.2接LED2,P2.0接蜂鸣器。MCS-51单片机的定时器/计数器—综合应用程序设计根据题目要求,选择定时器T0工作在定时模式、方式1,基准定时50ms。为了提高程序运行效率和可靠性,尽可能减少中断程序的程序量,大部分工作在主程序中完成。中断服务程序判断1s时间是否到并设置相应的标志位,主程序完成初始化后循环查看1s到标志位是否为1。为1则执行对应的闪灯操作,然后依次判断1min是否到、1h是否到等,并设置相应的标志位,根据标志位内容执行各自对应的操作。MCS-51单片机的定时器/计数器—综合应用程序代码如下:NUM_S EQU 30H;存放基准定时(50ms)的循环次数DATE_S EQU 31H;存放当前秒值DATE_M EQU 32H;存放当前分钟值DATE_H EQU 33H;存放当前小时值LED1 BIT P2.3;定义发光二极管LE

温馨提示

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

评论

0/150

提交评论