(玩电子) 电子技术学习与研讨
当时方位:单片机教程网 >> 根底教程 >> 阅览文章

18课:单片机的中止体系

作者:佚名   来历:本站原创   点击数:x  更新时刻:2007年08月14日   【字体:

     有关单片机中止体系的概念:什么是中止,咱们从一个日子中的例程引进。你正在家中看书,忽然电话铃响了,你放下书本,去接电话,和来电话的人攀谈,然后放下电话,回来持续看你的书。这便是日子中的“中止”的现象,便是正常的作业进程被外部的作业打断了。细心研讨一下日子中的中止,关于咱们学习单片机的中止也很有优点。

榜首、什么可经引起中止,日子中许多作业能引起中止:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的作业,咱们把能引起中止的称之为中止源,单片机中也有一些能引起中止的作业,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,当然,咱们也能用位操作指令SETB EA

SETB ET1SETB EX1

来完结它。3、五个中止源的天然优先级与中止服务进口地址外中止0:0003H守时器0:000BH外中止1:0013H守时器1:001BH串行口:0023H它们的天然优先级由高到低摆放。写到这儿,咱们应当理解,为什么前面有一些程序一始咱们这样写:

ORG 0000HLJMP START

ORG 0030H

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指令,不就能把中止程序跳转到任何当地了吗?一个完好的主程序看起来应该是这样的:

ORG 0000HLJMP START

ORG 0003H

LJMP INT0 ;转外中止0ORG 000BH

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守时,到达守时值后引起中止,在中止服务程序中,使P1.0的状况取一次反,并再次守时1ms。
2、守时初值:机器周期MC=12/fosc=2us。所以守时lms所需的机器周期个数为500D,亦即0lF4H。设T0为作业办法1(16位办法),则守时初值是(01F4H)求补=FEOCH

START: MOV TMOD,#01H ;T0为守时器状况,作业办法1
  MOV TL0,#0CH ;T0的低位守时初值
  MOV TH0,#0FEH ;T0的高位守时初值
  MOV TCON,#10H ;翻开T0
  SETB ET0 ;1ET0,即答应T0中止
  SETB EA ;1EA,即充许大局中止
  AJMP $ ;动态暂存
000BH: AJMP IST0 ;转入T0中止服务程序进口地址IST0
IST0: MOV TL0,#0CH ;重置守时器初值
  MOV TH0,#0FEH ;重置守时器初值
  CPL P1.0 ;P1.0取反
  RET1 ;中止回来

串行端口的操控寄存器:

串行端口共有2个操控寄存器SCON和PCON,用以设置串行端口的作业办法、接纳/发送的运转状况、接纳/发送数据的特征、波特率的巨细,以及作为运转的中止标志等。
①串行口操控寄存器SCON
SCON的字节地址是98H,位地址(由低位到高位)别离是98H一9FH。SCON的格局如图五所示。

SMo,SMl:
串行口作业办法操控位。
00--办法0;01--办法1;
10--办法2;11--办法3。
SM2:
仅用于办法2和办法3的多机通讯操控位
发送机SM2=1(要求程控设置)。
当为办法2或办法3时:
接纳机 SM2=1时,若RB8=1,可引起串行接纳中止;若RB8=0,不
引起串行接纳中止。SM2=0时,若RB8=1,可引起串行接纳中止;若
RB8=0,亦可引起串行接纳中止。
REN:
串行接纳答应位。
0--制止接纳;1--答应接纳。
TB8:
在办法2,3中,TB8是发送机要发送的第9位数据。
RB8:
在办法2,3中,RB8是接纳机接纳到的第9位数据,该数据正好来自发
送机的TB8。
TI:
发送中止标志位。发送前有必要用软件清零,发送进程中TI坚持零电平,
发送完一帧数据后,由硬件主动置1。如要再发送,有必要用软件再清零。
RI:
接纳中止标志位。接纳前,有必要用软件清零,接纳进程中RI坚持零电
平,接纳完一帧数据后,由片内硬件主动置1。如要再接纳,有必要用软件
再清零。

电源操控寄存器PCON

PCON的字节地址为87H,无位地址,PCON的格局如图六所示。需指出的是,对80C31单片机而言,PCON还有几位有用操控位。

SMOD:波特率加倍位。在核算串行办法1,2,3的波特率时;0---不加倍;1---加倍。

串行中止的运用特色:

8031单片机的串行I/O端口是一个中止源,有两个中止标志RI和TI,RI用于接纳,TI用于发送。
串行端口不管在何种作业办法下,发送/接纳前都有必要对TI/RI清零。当一帧数据发送/接纳完后,TI/RI主动置1,如要再发送/接纳,有必要先用软件将其铲除。
在串行中止被翻开的条件下,对办法0和办法1来说,一帧数据发送/接纳完后,除置位TI/RI外,还会引起串行中止恳求,并履行串行中侧目务程序。但对办法2和办法3的接纳机而言,还要视SM2和RB8的状况,才可确认RI是否被置位以及串行中止的敞开:
SM2 RB8 接纳机中止标志与中止状况
0 1 激活RI,引起中止
1 0 不激活RI,不引起中止
1 1 激活RI,引起中止
单片机正是运用办法2,3的这一特色,完结多机间的通讯。串行端口的常用运用办法见相关章节。

波特率的确认:

对办法0来说,波特率已固定成fosc/12,跟着外部晶振的频率不同,波特率亦不相同。常用的fosc有12MHz和6MHz,所以波特率相应为1000×103和500×103位/s。在此办法下,数据将主动地按固定的波特率发送/接纳,彻底不用设置。
对办法2而言,波特率的核算式为2SMOD·fosc/64。当SMOD=0时,波特率为fm/64;当SMOD=1时,波特率为fosc/32。在此办法下,程控设置SMOD位的状况后,波特率就确认了,不需求再作其它设置。
对办法1和办法3来说,波特率的核算式为2SMOD/32×T1溢出率,依据SMOD状况位的不同,波特率有Tl/32溢出率和T1/16溢出率两种。因为T1溢出率的设置是便利的,因此波特率的挑选将非常灵敏。
前已叙及,守时器Tl有4种作业办法,为了得到其溢出率,而又不用进入中止服务程序,往往使T1设置在作业办法2的运转状况,也便是8位主动参加时刻常数的办法。因为在这种办法下,T1的溢出率(次/秒)核算式可表达到:

下面一段主程序和中止服务程序,是运用串行办法l从数据00H开端接二连三增大地串行发送一片数据的程序例。设单片机晶振的频率为6MHZ,波特率为1200位/秒。

ORG 2000H ;1200位/秒的守时器初值
MOV TL1,#0F3H  
MOV TH1,#0F3H ;使SMOD=0
MOV PCON,#00H ;T1办法2
MOV TMOD,#20H  
SETB EA  
CLR ET1 ;封闭T1中止
SETB ES ;开串行中止
SETB TR1 ;开T1守时
MOV SCON,#40H ;串行办法1
CLR A  
MOV SBUF,A ;串行发送
JNB T1,$ ;等候发送完
CLR T1, ;清标志
SJMP $  
ORG 0023H ;串行中止进口地址
MOV SBUF,A ;接连发送
JNB T1,$  
INC A  
CLR T1  
RET1 ;中止回来

casino
宣布谈论】【告知老友】【保藏此文】【封闭窗口

文章谈论

m88 188bet uedbet 威廉希尔 明升 bwin 明升88 bodog bwin 明升m88.com 18luck 188bet unibet unibet Ladbrokes Ladbrokes casino m88明升 明升 明升 m88.com 188bet m88 明陞 uedbet赫塔菲官网 365bet官网 m88 help