51单片机Word文件下载.docx

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

51单片机Word文件下载.docx

《51单片机Word文件下载.docx》由会员分享,可在线阅读,更多相关《51单片机Word文件下载.docx(76页珍藏版)》请在冰点文库上搜索。

51单片机Word文件下载.docx

四、溢出

让我们再来看水滴的例程,当水持续落下,盆中的水持续变满,最终有一滴水使得盆中的水满了。

这个时候如果再有一滴水落下,就会发生什么现象?

水会漫出来,用个术语来讲就是“溢出”。

水溢出是流到地上,而计数器溢出后将使得TF0变为“1”。

至于TF0是什么我们稍后再谈。

一旦TF0由0变成1,就是产生了变化,产生了变化就会引发事件,就象定时的时间一到,闹钟就会响一样。

至于会引发什么事件,我们下次课再介绍,现在我们来研究另一个问题:

要有多少个计数脉冲才会使TF0由0变为1。

五、任意定时及计数的办法刚才已研究过,计数器的容量是16位,也就是最大的计数值到65536,因此计数计到65536就会产生溢出。

这个没有问题,问题是我们现实生活中,经常会有少于65536个计数值的要求,如包装线上,一打为12瓶,一瓶药片为100粒,怎么样来满足这个要求呢?

提示:

如果是一个空的盆要1万滴水滴进去才会满,我在开始滴水之前就先放入一勺水,还需要10000滴嘛?

对了,我们采用预置数的办法,我要计100,那我就先放进65436,再来100个脉冲,不就到了65536了吗。

定时也是如此,每个脉冲是1微秒,则计满65536个脉冲需时65.536毫秒,但现在我只要10毫秒就能了,怎么办?

10个毫秒为10000个微秒,所以,只要在计数器里面放进55536就能了

从上一节我们已经得知,单片机中的定时/计数器都能有多种用途,那么我怎样才能让它们工作于我所需要的用途呢?

这就要通过定时/计数器的方式控制字来设置。

在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。

顺便说一下,TMOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也就是直接用地址,汇编软件帮你翻译一下而已)。

从图1中我们能看出,TMOD被分成两部份,每部份4位。

分别用于控制T1和T0,至于这里面是什么意思,我们下面介绍。

从图2中我们能看出,TCON也被分成两部份,高4位用于定时/计数器,低4位则用于中断(我们暂不管)。

而TF1(0)我们上节课已提到了,当计数溢出后TF1(0)就由0变为1。

原来TF1(0)在这儿!

那么TR0、TR1又是什么呢?

看上节课的图。

计数脉冲要进入计数器还真不不难,有层层关要通过,最起码,就是TR0

(1)要为1,开关才能合上,脉冲才能过来。

因此,TR0

(1)称之为运行控制位,可用指令SETB来置位以启动计数器/定时器运行,用指令CLR来关闭定时/计数器的工作,一切尽在自已的掌握中。

单片机定时器/计数器结构>

定时/计数器的四种工作方式

工作方式0

定时器/计数器的工作方式0称之为13位定时/计数方式。

它由TL(1/0)的低5位和TH(0/1)的8位组成13位的计数器,此时TL(1/0)的高3位未用。

我们用这个图来讨论几个问题:

M1M0:

定时/计数器一共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。

C/T:

前面我们说过,定时/计数器即可作定时用也可用计数用,到底作什么用,由我们根据需要自行决定,也说是决定权在我们&

#0;

&

编程者。

如果C/T为0就是用作定时器(开关往上打),如果C/T为1就是用作计数器(开关往下打)。

顺便提一下:

一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用的,这是个极普通的常识,几乎没有教材会提这一点,但很多开始学习者却会有此困惑。

GATE:

看图,当我们选择了定时或计数工作方式后,定时/计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去,那么开关什么时候过去呢?

有两种情况

GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR1是1,开关就合上,计数脉冲得以畅通无阻,而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR1。

GATE=1,在此种情况下,计数脉冲通路上的开关不仅要由TR1来控制,而且还要受到INT1管脚的控制,只有TR1为1,且INT1管脚也是高电平,开关才合上,计数脉冲才得以通过。

这个特性能用来测量一个信号的高电平的宽度,想想看,怎么测?

为什么在这种模式下只用13位呢?

干吗不用16位,这是为了和51机的前辈48系列兼容而设的一种工作式,如果你觉得用得不顺手,那就干脆用第二种工作方式。

工作方式1

工作方式1是16位的定时/计数方式,将M1M0设为01即可,其它特性与工作方式0相同。

工作方式2

在介绍这种式方式之前先让我们思考一个问题:

上一次课我们提到过任意计数及任意定时的问题,比如我要计1000个数,可是16位的计数器要计到65536才满,怎么办呢?

我们讨论后得出的办法是用预置数,先在计数器里放上64536,再来1000个脉冲,不就行了吗?

是的,但是计满了之后我们又该怎么办呢?

要知道,计数总是持续重复的,流水线上计满后马上又要开始下一次计数,下一次的计数还是1000吗?

当计满并溢出后,计数器里面的值变成了0(为什么,能参考前面课程的说明),因此下一次将要计满65536后才会溢出,这可不符合要求,怎么办?

当然办法很简单,就是每次一溢出时执行一段程序(这常常是需要的,要不然要溢出干吗?

)能在这段程序中做把预置数64536送入计数器中的事情。

所以采用工作方式0或1都要在溢出后做一个重置预置数的工作,做工作当然就得要时间,一般来说这点时间不算什么,可是有一些场合我们还是要计较的,所以就有了第三种工作方式&

自动再装入预置数的工作方式。

既然要自动得新装入预置数,那么预置数就得放在一个地方,要不然装什么呢?

那么预置数放在什么地方呢?

它放在T(0/1)的高8位,那么这样高8位不就不能参与计数了吗?

是的,在工作方式2,只有低8位参与计数,而高8位不参与计数,用作预置数的存放,这样计数范围就小多了,当然做任可事总有代价的,关键是看值不值,如果我根本不需要计那么多数,那么就能用这种方式。

看图4,每当计数溢出,就会打开T(0/1)的高、低8位之间的开关,计预置数进入低8位。

这是由硬件自动完成的,不需要由人工干预。

常常这种式作方式用于波特率发生器(我们将在串行接口中讲解),用于这种用途时,定时器就是为了供给一个时间基准。

计数溢出后不需要做事情,要做的仅仅只有一件,就是重新装入预置数,再开始计数,而且中间不要任何延迟,可见这个任务用工作方式2来完成是最妙不过了。

工作方式3

这种式作方式之下,定时/计数器0被拆成2个独立的定时/计数器来用。

其中,TL0能组成8位的定时器或计数器的工作方式,而TH0则只能作为定时器来用。

我们知道作定时、计数器来用,需要控制,计满后溢出需要有溢出标记,T0被分成两个来用,那就要两套控制及、溢出标记了,从何而来呢?

TL0还是用原来的T0的标记,而TH0则借用T1的标记。

如此T1不是无标记、控制可用了吗?

是的。

一般情况处,只有在T1以工作方式2运行(当波特率发生器用)时,才让T0工作于方式3的。

定时器/计数器的定时/计数范围

工作方式0:

13位定时/计数方式,因此,最多能计到2的13次方,也就是8192次。

工作方式1:

16位定时/计数方式,因此,最多能计到2的16次方,也就是65536次。

工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多能计到2的8次方,也说是256次。

预置值计算:

用最大计数量减去需要的计数次数即可。

流水线上一个包装是12盒,要求每到12盒就产生一个动作,用单片机的工作方式0来控制,应当预置多大的值呢?

对了,就是8192-12=8180。

以上是计数,明白了这个道理,定时也是一样。

这在前面的课程已提到,我们不再重复,请参考前面的例程。

有关单片机中断系统的概念:

什么是中断,我们从一个生活中的例程引入。

你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。

这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。

仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。

第一、什么可经引起中断,生活中很多事件能引起中断:

有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把能引起中断的称之为中断源,单片机中也有一些能引起中断的事件,8031中一共有5个:

两个外部中断,两个计数/定时器中断,一个串行口中断。

第二、中断的嵌套与优先级处理:

设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?

如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。

如果不是这两者(即不等电话,也不是等人上门),你可能会按你常常的习惯去处理。

总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。

优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。

考虑一下我们会怎么办吧。

第三、中断的响应过程:

当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不一样的事情(因为处理完了,我们还要回来继续看书):

电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不一样的中断,我们要在不一样的地点处理,而这个地点常常还是固定的。

计算机中也是采用的这种办法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。

具体地说,中断响应能分为以下几个步骤:

1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。

2、寻找中断入口,根据5个不一样的中断源所产生的中断,查找5个不一样的入口地址。

以上工作是由计算机自动完成的,与编程者无关。

在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。

3、执行中断处理程序。

4、中断返回:

执行完中断指令后,就从中断处返回到主程序,继续执行。

究竟单片机是怎么样找到中断程序所在位置,又怎么返回的呢?

我们稍后再谈。

MCS-51单片机中断系统的结构:

5个中断源的符号、名称及产生的条件如下。

INT0:

外部中断0,由P3.2端口线引入,低电平或下跳沿引起。

INT1:

外部中断1,由P3.3端口线引入,低电平或下跳沿引起。

T0:

定时器/计数器0中断,由T0计满回零引起。

T1:

定时器/计数器l中断,由T1计满回零引起。

TI/RI:

串行I/O中断,串行端口完成一帧字符发送/接收后引起。

整个中断系统的结构框图见下图一所示。

51单片机中断系统结构>

如图所示,由与中断有关的特殊功能寄存器、中断入口、次序查询逻辑电路等组成,包括5个中断请求源,4个用于中断控制的寄存器IE、IP、ECON和SCON来控制中断类弄、中断的开、关和各种中断源的优先级确定。

中断请求源:

(1)外部中断请求源:

即外中断0和1,经由外部管脚引入的,在单片机上有两个管脚,名称为INT0、INT1,也就是P3.2、P3.3这两个管脚。

在内部的TCON中有四位是与外中断有关的。

IT0:

INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。

这两种方式的差异将在以后再谈。

IE0:

INT0中断请求标志位。

当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。

IT1、IE1的用途和IT0、IE0相同。

(2)内部中断请求源TF0:

定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。

当CPU响应中断后,再由硬件将TF0清0。

TF1:

与TF0类似。

TI、RI:

串行口发送、接收中断,在串行口中再讲解。

2、中断允许寄存器IE在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。

见下表EAX

其中EA是总开关,如果它等于0,则所有中断都不允许。

ES-串行口中断允许ET1-定时器1中断允许EX1-外中断1中断允许。

ET0-定时器0中断允许EX0-外中断0中断允许。

如果我们要设置允许外中断1,定时器1中断允许,其它不允许,则IE能是EAX

即8CH,当然,我们也能用位操作指令SETBEA

SETBET1SETBEX1

来实现它。

3、五个中断源的自然优先级与中断服务入口地址外中断0:

0003H定时器0:

000BH外中断1:

0013H定时器1:

001BH串行口:

0023H它们的自然优先级由高到低排列。

写到这里,大家应当明白,为什么前面有一些程序一始我们这样写:

ORG0000HLJMPSTART

ORG0030H

START:

这样写的目的,就是为了让出中断源所占用的向量地址。

当然,在程序中没用中断时,直接从0000H开始写程序,在原理上并没有错,但在实际工作中最好不这样做。

优先级:

单片机采用了自然优先级和人工设置高、低优先级的策略,即能由程序员设定那些中断是高优先级、哪些中断是低优先级,由于只有两级,必有一些中断处于同一级别,处于同一级别的,就由自然优先级确定。

开机时,每个中断都处于低优先级,我们能用指令对优先级进行设置。

看表2中断优先级中由中断优先级寄存器IP来高置的,IP中某位设为1,对应的中断就是高优先级,不然就是低优先级。

XX

X

PS

PT1

PX1

PT0

PX0

设有如下要求,将T0、外中断1设为高优先级,其它为低优先级,求IP的值。

IP的首3位没用,可任意取值,设为000,后面根据要求写就能了XX

因此,最终,IP的值就是06H。

在上例中,如果5个中断请求同时发生,求中断响应的次序。

响应次序为:

定时器0->外中断1->外中断0->实时器1->串行中断。

MCS-51的中断响应过程:

1、中断响应的条件:

讲到这儿,我们依然对于计算机响应中断感到神奇,我们人能响应外界的事件,是因为我们有多种“传感器“――眼、耳能接受不一样的信息,计算机是如何做到这点的呢?

其实说穿了,一点都不希奇,MCS51工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1“,如果是1,就说明有中断请求了,所以所谓中断,其实也是查询,不过是每个周期都查一下而已。

这要换成人来说,就相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话。

很蠢,不是吗?

可计算机本来就是这样,它根本没人聪明。

了解了上述中断的过程,就不难解中断响应的条件了。

在下列三种情况之一时,CPU将封锁对中断的响应:

CPU正在处理一个同级或更高级别的中断请求。

现行的机器周期不是当前正执行指令的最后一个周期。

我们知道,单片机有单周期、双周期、三周期指令,当前执行指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断(因为中断查询是在每个机器周期都可能查到的)。

当前正执行的指令是返回批令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才应中断。

这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级,而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束,再执行一条指令才能响应中断。

2、中断响应过程CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将对应的中断入口地址送入PC,PC是程序指针,CPU取指令就根据PC中的值,PC中是什么值,就会到什么地方去取指令,所以程序就会转到中断入口处继续执行。

这些工作都是由硬件来完成的,不必我们去考虑。

这里还有个问题,大家是否注意到,每个中断向量地址只间隔了8个单元,如0003-000B,在如此少的空间中如何完成中断程序呢?

很简单,你在中断处安排一个LJMP指令,不就能把中断程序跳转到任何地方了吗?

一个完整的主程序看起来应该是这样的:

ORG0003H

LJMPINT0;

转外中断0ORG000BH

RETI;

没有用定时器0中断,在此放一条RETI,万一“不小心“产生了中断,也不会有太大的后果。

中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。

注意:

CPU所做的保护工作是很有限的,只保护了一个地址,而其它的所有东西都不保护,所以如果你在主程序中用到了如A、PSW等,在中断程序中又要用它们,还要保证回到主程序后这里面的数据还是没执行中断以前的数据,就得自己保护起来。

中断系统的控制寄存器:

中断系统有两个控制寄存器IE和IP,它们分别用来设定各个中断源的打开/关闭和中断优先级。

此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位。

1.中断允许寄存器--IE

IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH。

IE用来打开或关断各中断源的中断请求,基本格式如下图二所示:

EA:

全局中断允许位。

EA=0,关闭全部中断;

EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。

×

无效位。

ES:

串行I/O中断允许位。

ES=1,打开串行I/O中断;

ES=0,关闭串行I/O中断。

ETl;

定时器/计数器1中断允许位。

ETl=1,打开T1中断;

ETl=O,关闭T1中断。

EXl:

外部中断l中断允许位。

EXl=1,打开INT1;

EXl=0,关闭INT1。

ET0:

定时器/计数器0中断允许位。

ET0=1,打开T0中断;

ET0=0,关闭TO中断。

EXO:

外部中断0中断允许位。

Ex0=1,打开INT0;

EX0=0,关闭INT0.

中断优先寄存器--IP:

IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH,IP用来设定各个中断源属于两级中断中的哪一级,IP的基本格式如下图三所示:

PS:

串行I/O中断优先级控制位。

PS=1,高优先级;

PS=0,低优先级。

PTl:

定时器/计数器1中断优先级控制位。

PTl=1,高优先级;

PTl=0,低优先级。

Pxl:

外部中断1中断优先级控制位。

Pxl=1,高优先级;

PXl=O,低优先级。

PT0:

定时器/计数器o中断优先级控制位。

PT0=1,高优先级;

PTO=0,低优先级。

Px0:

外部中断0中断优先级控制位。

Px0=1,高优先级;

Px0=0,伤优先级。

在MCS-51单片机系列中,高级中断能够打断低级中断以形成中断嵌套;

同级中断之间,或低级对高级中断则不能形成中断嵌套。

若几个同级中断同时向CPU请求中断响应,则CPU按如下顺序确定响应的先后顺序:

INT0一T0---INT1一T1一RI/T1.

中断的响应过程

若某个中断源通过编程设置,处于被打开的状态,并满足中断响应的条件,而且①当前正在执行的那条指令已被执行完

1、当前末响应同级或高级中断

2、不是在操作IE,IP中断控制寄存器或执行REH指令则单片机响应此中断。

在正常的情况下,从中断请求信号有效开始,到中断得到响应,通常需要3个机器周期到8个机器周期。

中断得到响应后,自动清除中断请求标志(对串行I/O端口的中断标志,要用软件清除),将断点即程序计数器之值(PC)压入堆栈(以备恢复用);

然后把相应的中断入口地址装入PC,使程序转入到相应的中断服务程序中去执行。

各个中断源在程序存储器中的中断入口地址如下:

中断源入口地址

INT0(外部中断0)0003H

TF0(TO中断)000BH

INT1(外部中断1)0013H

TFl(T1中断)001BH

RI/TI(串行口中断)0023H

由于各个中断入口地址相隔甚近,不便于存放各个较长的中断服务程序,故通常在中断入口地址开始的二三个单元中,安排一条转移类指令,以转入到安排在那儿的中断服务程序。

以T1中断为例,其过程下如图四所示。

由于5个中断源各有其中断请求标志0,TF0,IEl,TFl以及RI/TI,在中断源满足中断请求的条件下,各标志自动置1,以向CPU请求中断。

如果某一中断源提出中断请求后,CPU不能立即响应,只要该中断请求标志不被软件人为清除,中断请求的状态就将一直保持,直到CPU响应了中断为止,对串行口中断而言,这一过程与其它4个中断的不同之处在于;

即使CPU响应了中断,其中断标志RI/TI也不会自动清零,必须在中断服务程序中设置清除RI/TI的指令后,才会再一次地提出中断请求。

CPU的现场保护和恢复必须由被响应的相应中断服务程序去完成,当执行RETI中断返回指令后,断点值自动从栈顶2字节弹出,并装入PC寄存器,使CPU继续执行被打断了的程序。

下面给出一个应用定时器中断的实例。

现要求编制一段程序,使P1.0端口线上输出周期为2ms的方波脉冲。

设单片机晶振频率

Fosc=6MHZ.

1、方法:

利用定时器T0作1ms定时,达到定时值后引起中断,在中

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

当前位置:首页 > 人文社科 > 法律资料

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

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