1、第1章 单片机概述 1、何谓单片机 个人PC机:CPU、RAM、ROM、输入/输出设备 安装在主板上 单 片 机:以上部分全部集成到一块芯片中,就称为单片(单芯片)机,而且还可以集成其它部份如A/D,D/A等。 价格从几元到几十元,体积也不大,8到 68引脚(40),原因 技术成熟 微控制器MCU:强调其控制功能 嵌入式控制器EMCU:强调其“嵌入”的特点 嵌入式系统:一般指非PC系统,以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 硬件包括处理器/微处理器、存储器及外设器件和I/O
2、端口、图形控制器等。 软件部分包括操作系统软件和应用程序编程。有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。 2、8031、8051、8751、89C51等的关系 共同点:8位CPU,128字节RAM,4个8位并行I/O口、1个全双工串行口,21个特殊功能寄存器,2个16位定时器/计数器,5个中断源 不同点:8031无程序存储器 8051有4K的ROM 8751有4K的EPROM 89C51有4K的E2PROM(ATMEL) 第2章
3、 MCS-51单片机的硬件结构 1、MCS-51单片机的硬件结构 CPU RAM 中断源 优先权 定时/计数器 并行I/O口 串行口 SFR 8位 128 5个 2级 16位2个 8位4个 全双工1个 21个 2、MCS-51的引脚 电源,时钟,复位(2个机器周期),ALE地址锁存允许,PSEN(ROM允许输出),EA内外ROM选择,I/O 3、MCS-51的微处理器 运算器:ALU(位操作),累加器A,寄存器B,PSW 控制器:程序计数器PC,指令寄存器IR 4、MCS-51存储器的结构 程序存储器:一个微处理器能按照人们预先编写的程
4、序而执行任务,程序员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。 内部无ROM的,程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。 内部有ROM的,正常运行时,则需接高电平,使CPU先从内部的程序存储器中读取程序,当PC值超过内部ROM容量时,会自动转向外部的ROM读取程序。 在程序存储中有些特殊的单元,在使用中应加以注意: 0
5、000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。 0003H—000AH 外部中断0中断地址区。 000BH—0012H 定时/计数器0中断地址区。 0013H—001AH 外部中断1中断地址区。 001BH—0022H 定时/计数器1中断地址区。 0023H—002AH 串行中断地址区。 以上5组40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断
6、的类型,自动转到各自的中断区去执行程序。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,8个地址单元是不能存下完整的中断服务程序的,因而一般也在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行 内部数据存储器:也称随机存取数据存储器。用于存放执行的中间结果和过程数据。MCS-51单片机的RAM在物理和逻辑上都分为内部数据存储区和外部数据存储区两个地址空间。部分单元还可以位寻址。 8051内部RAM共有256个单元,这256个单元共分为两部分。00H—7FH单元为用户数据RAM。80H—FFH地址单元为特殊
7、寄存器(SFR)单元。 特殊功能寄存器(SFR):也称专用寄存器,共21个,它们反映了单片机的运行状态。很多功能也通过特殊功能寄存器来定义和控制程序的执行。这些寄存的功能已作了专门的规定,用户不能修改其结构,SFR离散地分布在内部RAM的80H—FFH地址中。特殊功能寄存器分布一览表见书本,这里只对主要的寄存器作简单的介绍。 累加器ACC(Accumulator) 累加器A是一个最常用的专用寄存器,大部分的数据操作都会通过累加器A进行,它形象于一个交通要道,在程序比较复杂的运算中,累加器成了制约软件效率的“瓶颈”,它的功能较多,地位也十分重要。以至于后来发展的单片机,有
8、的集成了多累加器结构,或者使用寄存器阵列来代替累加器,即赋予更多寄存器以累加器的功能,目的是解决累加器的“交通堵塞”问题,提高单片机的软件效率。 寄存器B 在乘除法指令中,乘法指令中的两个操作数分别取自累加器A和寄存器B,其结果存放于AB寄存器对中。除法指令中,被除数取自累加器A,除数取自寄存器B,结果商存放于累加器A,余数存放于寄存器B中。 程序状态字(Program Status Word) 程序状态字是一个8位寄存器,用于存放程序运行的状态信息,这个寄存器的一些位可由软件设置,有些位则由硬件运行时自动设置的。各个位的定义介绍如下: 程序状态字PSW
9、 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 AC F0 RS1 RS0 OV - P PSW.7(CY) 进位标志位,此位有两个功能:一是存放执行某写算数运算时,存放进位标志,可被硬件或软件置位或清零。二是在位操作中作累加位使用。 PSW.6(AC) 辅助进位标志位,当进行加、减运算时当有低4位向高4位进位或借位时,AC置位,否则被清零。AC辅助进位位也常用于十进制调整。 PSW.5(F0) 用户标志位,供用户设置的标志位。 PSW.4、PSW.3(RS1和 RS0) 寄存器组选择位。
10、可参见本章的图2定义。 PSW.2(OV) 溢出标志。带符号加减运算中,超出了累加器A所能表示的符号数有效范围(-128—+127)时,即产生溢出,OV=1。表明运算运算结果错误。如果OV=0,表明运算结果正确。 执行加法指令ADD时,当位6向位7进位,而位7不向C进位时,OV=1。或者位6不向位7进位,而位7向C进位时,同样OV=1。 乘法指令,乘积超过255时,OV=1,此时乘积在AB寄存器对中。若OV=0,则说明乘积没有超过255,乘积只在累加器A中。 除法指令,OV=1,表示除数为0,运算不被执行。否则OV=0。 PSW.0(P)
11、奇偶校验位。声明累加器A的奇偶性,每个指令周期都由硬件来置位或清零,若值为1的位数奇数,则P置位,否则清零。 程序计数器PC(program Counter) 程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。 堆栈指针SP(Stack Pointer) 堆栈的设立是为了中断操作和子
12、程序的调用而用于保存数据的,即常说的断点保护和现场保护。微处理器转入中、子程序的执行,执行完后,还是要回到主程序中来,在转入之前,必须先将现场的数据进行保存,否则返回时,CPU并不知道原来的程序执行到哪一步,原来的中间结果如何?这种自动的数据保护就由堆栈来实现。 转入中断服务程序或子程序时,需要保存的数据可能有若干个,都需要一一地保留。如果微处理器进行多重子程序或中断服务程序嵌套,那么需保存的数据就更多,这要求堆栈还需要有相当的容量。否则会造成堆栈溢出,丢失应备份的数据。轻者使运算和执行结果错误,重则使整个程序紊乱。 MCS-51的堆栈是在RAM中开辟的,由堆栈指针SP来实现管理,它是一个
13、8位寄存器,它指示堆栈顶部在内部RAM中的位置。系统复位后,SP的初始值为07H,使得堆栈实际上是从08H开始的。由于08H—1FH隶属1—3工作寄存器区,编程时常用到这些单元,容量也只有24个,必须对堆栈指针SP进行初始化,原则上设在任何一个区域均可,但一般设在30H—1FH之间较为适宜。 堆栈是一种特殊的数据结构,最主要特征是数据“后进先出”规则。堆栈的操作只有两种:,进栈时,先SP+1,后 将数据放到SP+1中 出栈时,先将SP的内容弹出,后SP-1 数据指针(DPTR) 数据指针为16位寄存器,编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用,
14、即DPH和DPL。DPTR主要是用来保存16位地址 当对64kB外部数据存储器寻址时,可作为间址寄存器使用,使用如下两条指令: MOVX A, @DPTR MOVX @DPTR, A 在访问程序存储器时,DPTR可用来作基址寄存器,采用基址+变址寻址方式访问程序存储器,这条指令常用于读取程序存储器内的表格数据: MOVC A, @A+@DPTR I/O口专用寄存器(P0、P1、P2、P3) I/O口寄存器P0、P1、P2和P3分别是MCS-51单片机的四组I/O口锁存器。MCS-51单片机
15、并没有专门的I/O口操作指令,而是把I/O口也当作一般的寄存器来使用,数据传送都统一使用MOV指令来进行,这样的好处在于,四组I/O口还可以当作寄存器直接寻址方式参与其他操作。 定时/计数器(TL0、TH0、TL1和TH1) MCS-51单片机中有两个16位的定时/计数器T0和T1,它们由四个8位寄存器组成的,两个16位定时/计数器却是完全独立的。我们可以单独对这四个寄存器进行寻址,但不能把T0和T1当作16位寄存来使用。 定时/计数器方式选择寄存器(TMOD) TMOD寄存器是一个专用寄存器,用于控制两个定时计数器的工作方式,TMOD可以用字节传送指令设置
16、其内容,但不能位寻址。 串行数据缓冲器(SBUF) 串行数据缓冲器SBUF用来存放需发送和接收的数据,它由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器,要发送和接收的操作其实都是对串行数据缓冲器进行。 其他控制寄存器 还有IP、IE、TCON、SCON和PCON等几个寄存器,主要用于中断和定时的。 位地址空间: 内部RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共16个字节,128个位,位地址为00H—7FH。CPU能直接寻址这些位,执行置“1”、清“0”、求“反”、转移,传送和逻辑等
17、操作。这就是单片机的布尔处理功能,布尔处理的存储空间指的就是这些为寻址区,见图。 外部数据存储器:如果内部的128个字节RAM不够时可外扩到64K字节的RAM和I/O 单元地址 MSB 位地址 LSB 2FH 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H 2EH 77H 76H 75H 74H 73H 72H 71H 70H 2DH 6FH 6EH 6DH 6CH 6BH 6AH 69H 68H 2CH 67H 66H 65H 64H 63H 62H 61H
18、 60H 2BH 5FH 5EH 5DH 5CH 5BH 5AH 59H 58H 2AH 57H 56H 55H 54H 53H 52H 51H 50H 29H 4FH 4EH 4DH 4CH 4BH 4AH 49H 48H 28H 47H 46H 45H 44H 43H 42H 41H 40H 27H 3FH 3EH 3DH 3CH 3BH 3AH 39H 38H 26H 37H 36H 35H 34H 33H 32H 31H 30H 25H 2FH 2EH 2DH 2C
19、H 2BH 2AH 29H 28H 24H 27H 26H 25H 24H 23H 22H 21H 20H 23H 1FH 1EH 1DH 1CH 1BH 1AH 19H 18H 22H 17H 16H 15H 14H 13H 12H 11H 10H 21H 0FH 0EH 0DH 0CH 0BH 0AH 09H 08H 20H 07H 06H 05H 04H 03H 02H 01H 00H 5、并行I/O端口P0、P1
20、P2、P3 8051有4组8位I/O口,P1、P2和P3为准双向口,P0口则为双向三态输入输出口: P0口和P2口: 见图为P0口和P2口其中一位的电路图,由图可见,电路中包含一个数据输出锁存器和两个三态数据输入缓冲器,另外还有一个数据输出的驱动和控制电路。这两组口线用来作为CPU与外部数据存储器、外部程序存储器和I/O扩展口,而不能象P1、P3直接用作输出口。它们一起可以作为外部地址总线,P0口身兼两职,既可作为地址总线,也可作为数据总线。P2口作为外部数据存储器或程序存储器的地址总线的高8位输出口AB8-AB15,P0口由ALE选通作为地址总线的低8位输出口AB0-AB7。外部的程
21、序存储器由PSEN信号选通,数据存储器则由WR和RD信号选通,因为216=64k,所以8051最大可外接64kB的程序存储器和数据存储器。 ·P1口: P3口的电路如图所示,P1口为8位准双向口,每一位均可单独定义为输入或输出口,当作为输入口时,1写入锁存器,Q非=0,T2截止,内上拉电阻将电位拉至"1",此时该口输出为1,当0写入锁存器,Q非=1,T2导通,输出则为0。 作为输入口时,锁存器置1,Q(非)=0,T2截止,此时该位既可以把外部电路拉成低电平,也可由内部上拉电阻拉成高电平,正因为这个原因,所以P1口常称为准双向口。需要说明的是,作为输入口使用时,有两种情况,其一
22、是:首先是读锁存器的内容,进行处理后再写到锁存器中,这种操作即读—修改—写操作,象JBC(逻辑判断)、CPL(取反)、INC(递增)、DEC(递减)、ANL(与逻辑)和ORL(逻辑或)指令均属于这类操作。其二是:读P1口线状态时,打开三态门G2,将外部状态读入CPU。 ·P3口: P3口的电路如图所示,P3口为准双向口,为适应引脚的第二功能的需要,增加了第二功能控制逻辑,在真正的应用电路中,第二功能显得更为重要。由于第二功能信号有输入输出两种情况,我们分别加以说明。 P3口的输入输出及P3口锁存器、中断、定时/计数器、串行口和特殊功能寄存器有关,P3口的第一功能和P1口一样
23、可作为输入输出端口,同样具有字节操作和位操作两种方式,在位操作模式下,每一位均可定义为输入或输出。 我们着重讨论P3口的第二功能,P3口的第二功能各管脚定义如下: ·P3.0 串行输入口(RXD) ·P3.4 定时/计数器0的外部输入口(T0) ·P3.1 串行输出口(TXD) ·P3.5 定时/计数器1的外部输入口(T1) ·P3.2 外中断0(INT0) ·P3.6 外部数据存储器写选通(WR) ·P3.3 外中断1(INT1) ·P3.7 外部数据存储器读选通(RD)
24、对于第二功能为输出引脚,当作I/O口使用时,第二功能信号线应保持高电平,与非门开通,以维持从锁存器到输出口数据输出通路畅通无阻。而当作第二功能口线使用时,该位的锁存器置高电平,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出。对于第二功能为输入的信号引脚,在口线上的输入通路增设了一个缓冲器,输入的第二功能信号即从这个缓冲器的输出端取得。而作为I/O口线输入端时,取自三态缓冲器的输出端。这样,不管是作为输入口使用还是第二功能信号输入,输出电路中的锁存器输出和第二功能输出信号线均应置“1”。 6、时钟电路与时序 8051的时钟有两种方式,一种是片内时钟振荡方
25、式,在18和19脚外接石英晶体(2-12MHz)和振荡电容,振荡电容的值一般取10p-30p。另一种是外部时钟方式,即将18脚接地,外部时钟信号从19脚输入。 时钟周期:基本单位时间Tosc=1/fosc 机器周期:MCS-51有固定的机器周期,规定一个机器周期有6个状态,分别表示为S1-S6,而一个状态包含两个时钟周期,那么一个机器周期就有12个时钟周期,我们可以记着S1P1、S1P2……S6P1、S6P2,即机器周期就是振荡脉冲的12分频,Tcy=12/fosc,6MHz,2us,12MHz,1us。 指令周期:执行一条指令所需要的时间称为指令周期,MCS-51的指令有单字节
26、双字节和三字节的,所以它们的指令周期不尽相同,也就是所需的机器周期不相同。 MCS-51的指令时序: MCS-51指令系统中,有下面几种形式的指令: ·单字节指令单机器周期·双字节指令双机器周期 ·单字节指令双机器周期·三字节指令双机器周期 ·双字节指令单机器周期·单字节指令四机器周期(如单字节的乘除法指令) 见MCS-51系列单片机的指令时序图,图中的ALE脉冲是为了锁存地址的选通信号,显然,每出现一次该信号单片机即进行一次读指令操作。从时序图中可看出,该信号是时钟频率6分频后得到,在一个机器周期中,ALE信号两次有效,第一次在S1P2和S2P1期间,第二次在S
27、4P2和S5P1期间。我们分别对几个典型的指令时序加以说明。 ·单字节单周期指令: 单字节单周期指令只进行一次读指令操作,当第二个ALE信号有效时,PC并不加1,那么读出的还是原指令,属于一次无效的读操作。 ·双字节单周期指令: 这类指令两次的ALE信号都是有效的,只是第一个ALE信号有效时读的是操作码,第二个ALE信号有效时读的是操作数。 ·单字节双周期指令: 两个机器周期需进行四读指令操作,但只有一次读操作是有效的,后三次的读操作均为无效操作。 单字节双周期指令有一种特殊的情况,象执行MOVX这类指令时,先在ROM中
28、读取指令,然后对外部数据存储器进行读或写操作,头一个机器周期的第一次读指令的操作码为有效,而第二次读指令操作则为无效的。在第二个指令周期时,则访问外部数据存储器,这时,ALE信号对其操作无影响,即不会再有读指令操作动作。 外部程序存储器(ROM)读时序 见图 从图中可看出,P0口提供低8位地址,P2口提供高8位地址,S2结束前,P0口上的低8位地址是有效的,之后出现在P0口上的就不再是低8位的地址信号,而是指令数据信号,当然地址信号与指令数据信号之间有一段缓冲的过度时间,这就要求,在S2其间必须把低8位的地址信号锁存起来,这时是用ALE选通脉冲去控制锁存器把低8位地址予以锁存,而P
29、2口只输出地址信号,而没有指令数据信号,整个机器周期地址信号都是有效的,因而无需锁存这一地址信号。 从外部程序存储器读取指令,必须有两个信号进行控制,除了上述的ALE信号,还有一个PSEN(外部ROM读选通脉冲),显然可看出,PSEN从S3P1开始有效,直到将地址信号送出和外部程序存储器的数据读入CPU后方才失效。而又从S4P2开始执行第二个读指令操作。 外部数据存储器(RAM)读时序 见图 从ROM中读取的需执行的指令,而CPU对外部数据存储的访问是对RAM进行数据的读或写操作,属于指令的执行周期,值得一提的是,读或写是两个不同的机器周期,但他们的时序却是相似的,我们只对
30、RAM的读时序进行分析。 上一个机器周期是取指阶段,是从ROM中读取指令数据,接着的下个周期才开始读取外部数据存储器RAM中的内容。在S4结束后,先把需读取RAM中的地址放到总线上,包括P0口上的低8位地址A0-A7和P2口上的高8位地址A8-A15。当RD选通脉冲有效时,将RAM的数据通过P0数据总线读进CPU。第二个机器周期的ALE信号仍然出现,进行一次外部ROM的读操作,但是这一次的读操作属于无效操作。 对外部RAM进行写操作时,CPU输出的则是WR(写选通信号),将数据通过P0数据总线写入外部存储中。 7、MCS-51的复位和复位电
31、路 8051的复位方式可以是自动复位,也可以是手动复位,见下图。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。 复位操作不会对内部RAM有所影响 特殊功能寄存器 初始态 特殊功能寄存器 初始态 ACC 00H B 00H PSW 00H SP 07H DPH 00H TH0 00H DPL 00H TL0 00H IP xxx00000B TH1 00H IE 0xx00000B TL1 00H TMOD 00H TCON 00H SCON xxxxxxx
32、xB SBUF 00H P0-P3 1111111B PCON 0xxxxxxxB 第3章 MCS-51单片机指令系统 1、指令系统概述 MCS-51系列单片机共有111条6类指令,有如下几个方面的特点: 指令执行时间快:64条执行时间为1个机器周期,45条为2个机器周期,2条为4个机器周期。如果单片机外接晶体的频率为12MH2,则执行时间为1us,2us,4us。 指令短:49条为单字节指令,45条为双字节指令,17条为三字节指令。 用一条指令就可实现2个一字节数的相乘或相除运算。
33、具有丰富的位操作类指令。 可直接用传送指令实现端口的输入/输出操作。 ' 总之,单片机的这些指令特点使之具有极强的实时控制和数据运算功能。 2、指令格式 单字节指令:操作码和操作数同在一个字节中 双字节指令:操作码和操作数各占一个字节 三字节指令:操作码一个字节,操作数二个字节(数据,地址均可) 3、指令系统的寻址方式(7种) 1. 寄存器寻址方式:以通用寄存器的内容为操作数的寻址方式 ① 寄存器寻址的主要对象是通用寄存器即:R0~R7,选择的是当前寄存器组 ② 部分专用寄存器。例如累加器A、B寄存器对以及数据指针DPTR等。 2. 直接寻址方
34、式:指令中操作数直接以单元地址的形式给出的寻址方式 ① 内部数据RAM。除用直接寻址外,还可用寄存器间接寻址。例: MOV A, 3AH ② 特殊功能寄存器。这一存储器空间只能用直接寻址。 3. 寄存器间接寻址方式:以寄存器的内容为地址,该地址中的内容为操作数 即操作数是通过寄存器间接得到的。能够用于寄存器间接寻址的寄存器:R0,Rl,DPTR和SP。 MOVX A,@DPTR 片外数据存储器64K寻址 MOVX A,@R0 片外数据存储器低256字节寻址 POP A 堆栈操作是寄存器间接寻址 4. 立即寻址方式:指令中直接给出操作数的寻
35、址方式 有8位和(DPTR) 16位两种形式,在立即数前面加“#”标志。 5. 变址寻址方式 由基址寄存器PC或DPTR加上偏移量寄存器A中内容之和形成操作数地址的寻址方式。访问空间为程序存储器,只读不写。 只有三条:MOVC A,@A+DPTR MOVC A,@A+PC JMP A,@A+DPTR 6. 位寻址方式:对位地址中的内容作位操作的寻址方式 注意:位地址与字节地址的区别,如: MOV C,3AH MOV A,3AH 7. 相对寻址方式 相对寻址方式是为解决程序转移而专门设置的,为转移指令所采用。在相对寻址的转移指令中,给出了地址偏移量(在MCS
36、51指令系统中以“rel”表示),把PC的当前值加上偏移量就构成了程序转移的目的地址。但这里的PC当前值是指执行完该转移指令后的PC值,即转移指令的PC值加上它的字节数。因此转移的目的地址可用如下公式表示: 目的地址=转移指令地址+转移指令字节数+rel 偏移量rel是一个带符号的8位二进制补码数。所能表示的数的范围是-128~+127,因此相对转移是以转移指令所在地址为基点,向前最大可转移(127+转移指令字节数)个单元地址,向后最大可转移(128-转移指令字节数)个单元地址。 对于偏移量的计算,大多可通过编译程序进行计算,要求同学计算偏移量。 4、指令系统分类
37、介绍 数据传送类指令(29条) 算术运算类指令(24条) 逻辑运算及移位类指令(24条) 控制转移类指令(17条) 位操作类指令(17条) 5、伪指令 ORG:汇编起始地址命令 DB:定义字节命令 END:汇编结束命令 DW:定义数据字命令 EQU:赋值命令 第4章 MCS-51单片机的中断系统 1、中断的概念 一个人只有一个大脑,在一特定的时间内,可能会面对着两、三个甚至更多的任务。但一个人又不可能在同一时间去完成多样任务,因此你只能去分析任务的轻重缓急,采用中断的方法穿插去完成它们
38、那么这种情况对于单片机中的中央处理器也是如此,单片机中CPU只有一个,但在同一时间内可能会面临着处理很多任务的情况,如运行主程序、数据的输入和输出,定时/和计数时间已到要处理、可能还有一些外部的更重要的中断请求(如超温超压)要先处理。此时也得象人的思维一样停下某一样(或几样)工作先去完成一些紧急任务的中断方法。 这样的一样处理方法上升到计算机理论,就是一个资源面对多项任务的处理方式,由于资源有限,面对多项任务同时要处理时,就会出现资源竞争的现象。中断技术就是为了解决资源竞争的一个可行的方法,采用中断技术可使多项任务共享一个资源,所以有些文献也称中断技术是一种资源共享技术。 总之,
39、中断有:同步工作,实时处理,故障处理的优点。 2、MCS-51中断系统的结构 MCS-51单片机中断系统有5个中断源,具有2个中断优先级,可实现二级中断服务程序嵌套。可由CPU屏蔽/开启所有或单独的某个中断。 3、中断请求源 8051有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内定时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制。 TCON寄存器结构 88H TCON D7 D
40、6 D5 D4 D3 D2 D1 D0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 位地址 8FH 定 8DH 时 8BH 8AH 89H 88H · IT0:外部中断0触发方式控制位,由软件置位和复位,IT0=0,低电平触发方式,IT0=1,负跳变触发方式。 · IE0:外部边沿触发中断0请求标志位,当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。 · IT1:外部中断1触发方式控制位,其功能和操作同IT0 · IE1:外部边沿触发中断1请求标志位,其功能和
41、操作同IE0。 · TF0:定时/计数器TO的溢出状态标志,溢出时由硬件置位,当中断被CPU响应时,转入中断时硬件清“0”,也可由程序查询和清“0” · TF1:定时/计数器T1的溢出状态标志,同TF0 SCON寄存器结构 98H SCON D7 D6 D5 D4 D3 D2 D1 D0 - - - - - - TI RI 位地址 99H 98H · TI:串行口发送中断请求标志位,CPU向串行口数据缓冲器SBUF写入一个数据后就立即启动发送器,当发送完8位数据后,硬件自动置位TI,表示串行
42、发送器正向CPU申请中断(数据已发送)。但是CPU响应中断请求后,转向执行中断服务程序时,并不清零TI,TI必须由用户的中断服务程序清“0”。 · RI:串行口接收中断请求标志位,若串行口接收器允许接收,每当接收到8位数据时,RI被置1,表示串行口接收器正向CPU申请中断(数据收到)。同样RI标志必须由用户的软件清“0”。 注:若以方式1、2、3发送时,在发送停止位的开始时TI被置1 若以方式1、2、3接收时,当接收到半个停止位时,TI被置1,当串行口以方式2或3工作,且当SM2=1时,仅当接收到第9位数据RB8为1后,同时还要在接收到半个停止位时,RI被置1 4、中断控制
43、 中断允许寄存器IE结构 IE D7 D6 D5 D4 D3 D2 D1 D0 EA - - ES ET1 EX1 ET0 EX0 位地址 AFH ACH ABH AAH A9H A8H ·EA:中断总控制位,EA=1,CPU开放中断。EA=0,CPU禁止所有中断。 ·ES:串行口中断控制位,ES=1允许串行口中断,ES=0,屏蔽串行口中断。 ·ET1:定时/计数器T1中断控制位。ET1=1,允许T1中断,ET1=0,禁止T1中断。 ·EX1:外中断1中断控制位,EX1=1允许外中断1中断,EX1=0禁止外中
44、断1中断。 ·ET0:定时/计数器T0中断控制位。ET1=1,允许T0中断,ET1=0,禁止T0中断。 ·EX0:外中断0中断控制位,EX1=1允许外中断0中断,EX1=0禁止外中断0中断。 中断优先级寄存器IP结构 IP D7 D6 D5 D4 D3 D2 D1 D0 - - - PS PT1 Px1 PT0 PX0 位地址 BCH BBH BAH B9H B8H MCS-51有两个中断优先级,即高优先级和低优先级,每个中断源都可设置为高或低中断优先级。 低优先级的中断可被高优先级的中断打断 中断不
45、会被同级或低级中断打断,而是继续执行正在执行的中断服务程序,一直到程序结束,执行最后一条返回指令,返回主程序然后再执行一条指令后才会响应新的中断请求。 · PS:串行口中断口优先级控制位,PS=1高优先级中断,PS=0低优先级中断。 · PT1:定时器1优先级控制位。PT1=1,高优先级中断,PT1=0低优先级中断。 · PX1:外中断1优先级控制位。PX1=1,高优先级中断,PX1=0低优先级中断。 · PT0:定时器0优先级控制位。PT0=1,高优先级中断,PT0=0低优先级中断。 · PX0:外中断0优先级控制位。PX0=1,高优先级中断,PX0
46、0低优先级中断。 在同时收到几个同一优先级的中断请求时,取决于内部查询顺序: 中断源 中断级别 外部中断0 定时/计数器0 外部中断1 定时/计数器1 串行中断 最高 最低 5、中断响应 MCS-51CPU在每一个机器周期顺序检查每一个中断源,在机器周期的S6按优先级处理所有被激活的中断请求,此时必须满足: 如果CPU没有正在处理更高或相同优先级的中断 现在的机器周期不是所执行指令的最后一个机器周期 CPU不是正在执行RETI指令或访问IE和IP的指令(MCS-51规定,在执行完这些指令之后,还要在继续执行一条指令,才会响应中断
47、 则CPU将在下一个机器周期响应激活了的最高级中断请求。 中断响应的主要内容就是由硬件自动生成一条长调用LCALL addr16指令,这里的addr16就是程序存储器中相应的中断区入口地址,分配见下表。生成LCALL指令后,CPU紧跟着便执行之。首先将PC(程序计数器)的内容压入堆栈保护断点,然后把中断入口地址赋予PC,CPU便按新的PC地址(即中断服务程序入口地址)执行程序。 中断源 入口地址 外部中断0 定时/计数器0 外部中断1 定时/计数器1 串行中断 0003H 000BH 0013H 001BH 0023H 值得一提的是,各中断区只有8个单元
48、一般情况下(除非中断程序非常简单),都不可能安装下一个完整的中断服务程序。因此,通常是在这些入口地址区放置一条无条件转移指令,使程序按转移的实际地址去执行真正的中断服务程序。 6、外部中断的响应时间 CPU并不是在任何情况下都对中断请求立即响应的,而且,不同的情况对中断响应的时间也不同,下面以外部中断为例,说明中断响应时间。外部中断请求信号的电平在每个机器周期的S5P2期间,经反相后锁存到IE0或IEl标志位,CPU在下一个机器周期才会查询到这些值,这时如果满足响应条件,CPU响应中断时,需执行一条两个机器周期的调用指令,以转到相应的中断服务程序人口。这样,从外部中断请求有效到开始执
49、行中断服务程序的第一条指令,至少需要3个机器周期。 如果在申请中断时,若CPU正在执行RETI或访问IE、IP指令,则额外等待时间增加2个机器周期,执行完这些指令之后,还要在继续执行一条指令,若是处理最长指令(如乘、除法指令),则额外等待时间增加3个机器周期;综合估算,若系统中只有一个中断源,则响应时间为3—8个机器周期。 如果加上此时正有其他中断正在执行,则响应时间就无法计算了。 7、外部中断的触发方式选择 电平触发方式:IT0/1=0,在这种方式下,CPU在每个机器周期的S5P2期间采样外部中断引脚的输入电平,若采到低电平,则认为有中断请求,随即置位IE0;若采到高电平,则
50、认为无中断请求或中断请求已撤除,随即对IE0清0。在电平触发方式中,CPU响应中断后不能自动使IE0清0,也不能由软件使IE0清0,故在中断返回前必须清除外部引脚上的低电平,否则会再次响应中断,造成出错。 边沿触发方式:IT0/1=l,CPU在每个机器周期的S5P2期间采样外部中断引脚的输入电平,若相继的两次采样中,一个周期采样为高电平,接着的下一个周期采样为低电平,则置IE0=1,表示外部中断0正在向CPU请求中断,直到该中断被CPU响应时,IE0由硬件自动清0。在边沿触发方式中,为了保证CPU在两个机器周期内检测到先高后低的负跳变,输入高低电平的持续时间起码要保持1个机器周期。 8






