1、第第5 5章章 5151单片机的内部资源单片机的内部资源 本章介绍了51单片机的内部资源,包括:1、中断系统 2、定时/计数器 3、串口接口。中断功能使单片机具有了实时处理能力,定时功能使中断功能使单片机具有了实时处理能力,定时功能使单片能够处理与时间和计数相关的问题的能力,串口通信单片能够处理与时间和计数相关的问题的能力,串口通信使单片机可以与其他单片机、计算机或其它设备相连。使单片机可以与其他单片机、计算机或其它设备相连。5.1 515.1 51单片机的中断系统单片机的中断系统 中断系统主要用于实时测控,要求单片中断系统主要用于实时测控,要求单片机机能及时地响应和能及时地响应和处理单片机外
2、部事件或内部事件所提出的中断请求处理单片机外部事件或内部事件所提出的中断请求。中断方中断方式式大大地大大地提高了提高了CPUCPU的工作效率。的工作效率。一、中断的概念一、中断的概念 CPU CPU正在执行程序时,单片机外部或内部发生的某一正在执行程序时,单片机外部或内部发生的某一事件事件,请求请求CPUCPU迅速去处理。迅速去处理。CPUCPU暂时中止当前的工作,转到中断服暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。务处理程序处理所发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称为的工作,这称为中断中断。C
3、PUCPU处理事件的过程,称为处理事件的过程,称为CPUCPU的的中断中断响应过程。响应过程。如下图所示。对事件的整个处理过程,称为如下图所示。对事件的整个处理过程,称为中断处理中断处理(或或中断服务中断服务)。执行主程序继续执行主程序断点断点中断请求中断响应执行中断处理程序中断返回13:194主程序:主程序:CPU正常情况下运行的程序称为主程序。正常情况下运行的程序称为主程序。中断源:中断源:把向把向CPU提出中断申请的设备称为中断源。提出中断申请的设备称为中断源。中断请求中断请求:由中断源向:由中断源向CPU所发出的请求中断的信号称中断所发出的请求中断的信号称中断请求。请求。中断响应:中断
4、响应:CPU在满足条件情况下接受中断申请,终止现行在满足条件情况下接受中断申请,终止现行程序执行转而为申请中断的对象服务称中断响应。程序执行转而为申请中断的对象服务称中断响应。中断服务程序:中断服务程序:为服务对象服务的程序称为中断服务程序。为服务对象服务的程序称为中断服务程序。断点:断点:现行程序被中断的地址称为断点。现行程序被中断的地址称为断点。中断返回:中断返回:中断服务程序结束后返回到原来程序称中断返回。中断服务程序结束后返回到原来程序称中断返回。二、二、MCS-51MCS-51中断系统的结构中断系统的结构 MCS-51 MCS-51有有5 5个中断请求源个中断请求源,两个中断优先级两
5、个中断优先级,可两级嵌套。,可两级嵌套。MCS-51 MCS-51五个中断源中包括五个中断源中包括二个外部中断源二个外部中断源和和三个内部中三个内部中断源断源。二个外部中断源二个外部中断源INT0INT0和和INT1INT1,外部设备的中断请求信,外部设备的中断请求信号、掉电等故障信号都可以从号、掉电等故障信号都可以从INT0INT0或或INT1INT1引脚输入。引脚输入。三个内部中断源为定时器三个内部中断源为定时器/计数器计数器T0T0和和T1T1的定时的定时/计数计数谥出中断源和串行口发送或接收中断源。谥出中断源和串行口发送或接收中断源。中断系统结构示意图中断系统结构示意图如下图所示。如下
6、图所示。三、中断请求源三、中断请求源 5151单片机的五个中断请求源单片机的五个中断请求源 :(1 1)INT0INT0外部中断请求外部中断请求0 0,由引脚,由引脚INT0(P3.2)INT0(P3.2)输入,中断输入,中断请求标志为请求标志为IE0IE0。(2 2)INT1INT1外部中断请求外部中断请求1 1,由引脚,由引脚INT1(P3.3)INT1(P3.3)输入,中断输入,中断请求标志为请求标志为IE1IE1。外部中断请求外部中断请求有二种信号触发方式有二种信号触发方式,即,即电平电平有效方式和有效方式和跳变跳变有效方式,可通过设置有关控制位进行定义。有效方式,可通过设置有关控制位
7、进行定义。当设定为当设定为电平有效方式电平有效方式时,若时,若INT0INT0或或INT1INT1引脚上采样到引脚上采样到有效的有效的低电平低电平,则向,则向CPUCPU提出中断请求;当设定为提出中断请求;当设定为跳变有效跳变有效方式方式时,若时,若INT0INT0或或INT1INT1引脚上采样到有效引脚上采样到有效负跳变负跳变,则向,则向CPUCPU提出中断请求。提出中断请求。(3 3)定时器)定时器/计数器计数器T0T0溢出溢出中断请求,中断请求标志为中断请求,中断请求标志为TF0 TF0(P3.4)(P3.4)。(4 4)定时器)定时器/计数器计数器T1T1溢出溢出中断请求,中断请求标志
8、为中断请求,中断请求标志为TF1 TF1(P3.5)(P3.5)。定时中断是为满足定时或计数的需要而设置的。当计数定时中断是为满足定时或计数的需要而设置的。当计数器发生计数溢出时,表明设定的定时时间到或计数值已满,器发生计数溢出时,表明设定的定时时间到或计数值已满,这时可以向这时可以向CPUCPU申请中断。由于定时器申请中断。由于定时器/计数器在单片微机芯计数器在单片微机芯片内部,所以定时中断属于内部中断。片内部,所以定时中断属于内部中断。(5 5)串行口中断请求串行口中断请求,中断请求标志为,中断请求标志为TITI或或RIRI。串行中断是为串行数据传送的需要而设置的。每当串行串行中断是为串行
9、数据传送的需要而设置的。每当串行口发送或接收一组串行数据时,就产生一个中断请求。口发送或接收一组串行数据时,就产生一个中断请求。四、中断有关的寄存器四、中断有关的寄存器 1.1.特殊功能寄存器特殊功能寄存器TCONTCON特殊功能寄存器特殊功能寄存器TCONTCON和和SCONSCON的相应位的相应位锁存各中断请求标志锁存各中断请求标志。TCONTCON为定时器为定时器/计数器的控制寄存器,计数器的控制寄存器,字节地址为字节地址为8888H H。包含包含INT0,INT1,T0 INT0,INT1,T0 及及 T1T1的中断标志的中断标志。(1 1)T0T0和和T1T1的溢出中断请求标志位的溢
10、出中断请求标志位TF1TF1和和TF0TF0(2 2)外部中断请求标志位)外部中断请求标志位IE1IE1与与IE0IE0。各标志位的功能:各标志位的功能:(1 1)IT0IT0选择外中断请求选择外中断请求0 0为为跳沿触发跳沿触发方式还是方式还是电平触发电平触发方方式:式:IT0=0IT0=0,为,为电平触发电平触发方式。方式。IT0=1IT0=1,为,为跳沿触发跳沿触发方式。方式。可由软件置可由软件置“1 1”或清或清“0 0”。(2 2)IE0IE0外部中断请求外部中断请求0 0的中断请求标志位。的中断请求标志位。IE0=0 IE0=0,无中断请求。,无中断请求。IE0=1IE0=1,外部
11、中断,外部中断0 0有中断请求。当有中断请求。当CPUCPU响应该中断,转向中响应该中断,转向中断服务程序时,由硬件清断服务程序时,由硬件清“0 0”IE0IE0。(3 3)IT1IT1外部中断请求外部中断请求1 1为跳沿触发方式还是电平触发方式,为跳沿触发方式还是电平触发方式,意义与意义与IT0IT0类似。类似。(4 4)IE1IE1外部中断请求外部中断请求1 1的中断请求标志位,意义与的中断请求标志位,意义与IE0IE0类似。类似。(5 5)TF0TF0T0T0溢出中断请求标志位。溢出中断请求标志位。T0 T0计数后,溢出时,由硬件置计数后,溢出时,由硬件置“1 1”TF0TF0,向,向C
12、PUCPU申请中断,申请中断,CPUCPU响应响应TF0TF0中断时,中断时,硬件自动清硬件自动清“0 0”TF0TF0,TF0TF0也可由软件也可由软件清清0 0。(6 6)TF1TF1T1T1的溢出中断请求标志位,功能和的溢出中断请求标志位,功能和TF0TF0类似。类似。TR1 TR1、TR0 TR0 2 2个位与中断无关。个位与中断无关。当当MCS-51MCS-51复位后复位后,TCONTCON被清被清0 0,则,则CPUCPU关中断,关中断,所有中断所有中断请求被禁止。请求被禁止。2.SCON2.SCON为串行口控制寄存器为串行口控制寄存器SCONSCON为串行口控制寄存器,字节地址为
13、为串行口控制寄存器,字节地址为9898H H。串行口的。串行口的发送中断发送中断和和接收中断接收中断的中断请求标志的中断请求标志TITI和和RIRI,格式如下:,格式如下:各标志位的功能:各标志位的功能:(1 1)TITI发送中断请求标志位。串口每发送完一帧串行数据发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置后,硬件自动置“1 1”TITI。响应中断后,。响应中断后,必须在中断服务程必须在中断服务程序中用序中用软件软件对对TITI标志清标志清“0 0”。(2 2)RIRI接收中断请求标志位。串口接收完一个数据帧,硬接收中断请求标志位。串口接收完一个数据帧,硬件自动置件自动置“1
14、1”RIRI标志。响应中断后,标志。响应中断后,必须在中断服务程序必须在中断服务程序中用中用软件软件对对RIRI标志清标志清“0 0”。3 3 中断允许寄存器中断允许寄存器IE IE CPU CPU对中断源的开放或屏蔽,由片内的对中断源的开放或屏蔽,由片内的中断允许寄存器中断允许寄存器IEIE控制。控制。字节地址字节地址A8HA8H,可位寻址。格式如下:,可位寻址。格式如下:IEIE寄存器中各位设置:寄存器中各位设置:为为0 0时,禁止中断;为时,禁止中断;为 1 1时,允许中断。时,允许中断。系统复位后系统复位后IEIE寄存器中各位均为寄存器中各位均为0 0,即此时禁止所有中断。,即此时禁止
15、所有中断。MCS-51 MCS-51复位后复位后,IEIE清清0 0,所有中断请求被禁止。所有中断请求被禁止。若使某一个中断源被允许中断,若使某一个中断源被允许中断,除了除了IEIE相应的位的被置相应的位的被置“1 1”,还必须使,还必须使EAEA位位=1=1。IEIE对中断的开放和关闭为对中断的开放和关闭为两级两级控制控制 总的开关中断控制位总的开关中断控制位EAEA(IE.7IE.7位)位):EA=0 EA=0,所有中断请求被屏蔽。,所有中断请求被屏蔽。EA=1 EA=1,CPUCPU开放中断,但五个中断源的中断请求是否允许,开放中断,但五个中断源的中断请求是否允许,还要由还要由IEIE中
16、的中的5 5个中断请求允许控制位决定。个中断请求允许控制位决定。IEIE中各位的功能如下:中各位的功能如下:(1 1)EAEA:中断允许总控制位:中断允许总控制位0 0:CPUCPU屏蔽所有的中断请求屏蔽所有的中断请求(CPUCPU关中断关中断);1 1:CPUCPU开放所有中断开放所有中断(CPUCPU开中断开中断)。(2 2)ESES:串行口中断允许位:串行口中断允许位0 0:禁止串行口中断;禁止串行口中断;1 1:允许串行口中断。允许串行口中断。(3 3)ET1ET1:定时器:定时器/计数器计数器T1T1的溢出中断允许位的溢出中断允许位0 0:禁止禁止T1T1溢出中断;溢出中断;1 1:
17、允许允许T1T1溢出中断。溢出中断。(4 4)EX1EX1:外部中断:外部中断1 1中断允许位中断允许位0 0:禁止外部中断禁止外部中断1 1中断;中断;1 1:允许外部中断允许外部中断1 1中断。中断。(5 5)ET0ET0:定时器:定时器/计数器计数器T0T0的溢出中断允许位的溢出中断允许位0 0:禁止禁止T0T0溢出中断;溢出中断;1 1:允许允许T0T0溢出中断。溢出中断。(6 6)EX0EX0:外部中断:外部中断0 0中断允许位。中断允许位。0 0:禁止外部中断禁止外部中断0 0中断;中断;1 1:允许外部中断允许外部中断0 0中断。中断。改变改变IEIE的内容,可由位操作指令来实现
18、,即:的内容,可由位操作指令来实现,即:SETB bitSETB bit;CLR bit CLR bit。例例1 1 若允许片内若允许片内2 2个定时器个定时器/计数器中断,禁止其它中断源的中计数器中断,禁止其它中断源的中断请求。编写设置断请求。编写设置IEIE的相应程序段的相应程序段(1 1)用位操作指令来编写如下程序段)用位操作指令来编写如下程序段:CLR ES CLR ES ;禁止串行口中断;禁止串行口中断 CLR EX1 CLR EX1 ;禁止外部中断;禁止外部中断1 1中断中断CLR EX0CLR EX0 ;禁止外部中断;禁止外部中断0 0中断中断 SETB ET0 SETB ET0
19、 ;允许定时器;允许定时器/计数器计数器T0T0中断中断 SETB ET1 SETB ET1 ;允许定时器;允许定时器/计数器计数器T1T1中断中断 SETB EA SETB EA ;CPUCPU开中断开中断(2 2)用字节操作指令来编写)用字节操作指令来编写:MOV IEMOV IE,#8AH#8AH或者用:或者用:MOV 0A8HMOV 0A8H,#8AH#8AH ;A8HA8H为为IEIE寄存器字节地址寄存器字节地址 若若CPUCPU正在执行高优先级的中断,则不能被任何中断源正在执行高优先级的中断,则不能被任何中断源所中断所中断。中断优先级寄存器中断优先级寄存器IPIP,其字节地址为,其
20、字节地址为B8HB8H。IPIP各个位的含义:各个位的含义:(1 1)PSPS串行口中断优先级控制位串行口中断优先级控制位1 1:高优先级中断;:高优先级中断;0 0:低优先级中断。:低优先级中断。(2 2)PT1PT1定时器定时器T1T1中断优先级控制位中断优先级控制位1 1:高优先级中断;:高优先级中断;0 0:低优先级中断。:低优先级中断。4 4 中断优先级寄存器中断优先级寄存器IPIP(3 3)PX1PX1外部中断外部中断1 1中断优先级控制位中断优先级控制位1 1:高优先级中断;:高优先级中断;0 0:低优先级中断。:低优先级中断。(4 4)PT0PT0定时器定时器T0T0中断优先级
21、控制位中断优先级控制位1 1:高优先级中断;:高优先级中断;0 0:低优先级中断。:低优先级中断。(5 5)PX0PX0外部中断外部中断0 0中断优先级控制位中断优先级控制位1 1:高优先级中断;:高优先级中断;0 0:低优先级中断:低优先级中断 由软件可改变各中断源的中断优先级。由软件可改变各中断源的中断优先级。系统复位后系统复位后IPIP寄存器中各位均为寄存器中各位均为0 0,即此时全部设定为,即此时全部设定为低中断优先级。低中断优先级。中断源中断源 中断级别中断级别外部中断外部中断0 0 最高最高T0T0溢出中断溢出中断外部中断外部中断1 1T1T1溢出中断溢出中断串行口中断串行口中断
22、最低最低 MCS-51 MCS-51是一个二级中断系统。是一个二级中断系统。在同时收到在同时收到几个几个同一优先级同一优先级的中断请求的中断请求时,时,优先响应哪一个中优先响应哪一个中断,取决于断,取决于内部的查询顺序内部的查询顺序。查询顺序查询顺序如下:如下:CPU同时接收到几个中断时,首先响应同时接收到几个中断时,首先响应优先级别最高的中断请求。优先级别最高的中断请求。正在进行的中断过程不能被新的同级或正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。低优先级的中断请求所中断。正在进行的低优先级中断服务,能被高正在进行的低优先级中断服务,能被高优先级中断请求所中断。这称之为优先级
23、中断请求所中断。这称之为“中中断嵌套断嵌套”。优先级对中断响应的影响优先级对中断响应的影响事件事件1事件事件2子程序子程序2子程序子程序1中断嵌套的概念:中断嵌套的概念:主程序主程序中断中断中断中断例例2 2 设置设置IPIP寄存器的初始值,使寄存器的初始值,使2 2个外中断请求为高优先级,个外中断请求为高优先级,其它中断请求为低优先级。其它中断请求为低优先级。(1 1)用位操作指令)用位操作指令 SETB PX0 SETB PX0 ;2 2个外中断为高优先级个外中断为高优先级 SETB PX1 SETB PX1 CLR PS CLR PS ;串口为低优先级中断;串口为低优先级中断CLR PT
24、0 CLR PT0 ;2 2个定时器个定时器/计数器低优先级中断计数器低优先级中断CLR PT1CLR PT1(2 2)用字节操作指令)用字节操作指令 MOV IPMOV IP,#05H#05H或:或:MOV 0B8HMOV 0B8H,#05H#05H;B8HB8H为为IPIP寄存器的字节地址寄存器的字节地址五、响应中断请求的条件五、响应中断请求的条件 一个中断请求被响应,需满足以下必要条件:一个中断请求被响应,需满足以下必要条件:(1 1)IEIE寄存器中的中断总允许位寄存器中的中断总允许位EA=1EA=1。(2 2)该中断源发出中断请求,即该中断源对应的)该中断源发出中断请求,即该中断源对
25、应的中断请求标中断请求标志为志为“1 1”。(3 3)该中断源的)该中断源的中断允许位中断允许位=1=1,即该中断没有被屏蔽。,即该中断没有被屏蔽。(4 4)无同级或更高级中断正在被服务。)无同级或更高级中断正在被服务。中断响应是有条件的,遇到中断响应是有条件的,遇到下列三种情况下列三种情况之一时,中断之一时,中断响应被封锁:响应被封锁:(1 1)CPUCPU正在处理同级的或更高优先级的中断正在处理同级的或更高优先级的中断。(2 2)所查询的机器周期所查询的机器周期不是所当前正在执行指令的最后一个不是所当前正在执行指令的最后一个机器周期机器周期。只有在当前指令执行完毕后,才能进行中断响应。只有
26、在当前指令执行完毕后,才能进行中断响应。(3 3)正在执行的指令是正在执行的指令是RETIRETI或是或是访问访问IEIE或或IPIP的指令。的指令。需要再需要再去执行完一条指令,才能响应新的中断请求。去执行完一条指令,才能响应新的中断请求。六、中断请求的撤消六、中断请求的撤消 CPU CPU响应中断请求,转向中断服务程序执行,在其执行中响应中断请求,转向中断服务程序执行,在其执行中断返回指令(断返回指令(RETIRETI)之前,中断请求信号必须撤除,否则将)之前,中断请求信号必须撤除,否则将会再一次引起中断而出错。会再一次引起中断而出错。中断请求撤除的方式有三种,即:中断请求撤除的方式有三种
27、,即:1 1 由单片微机内部硬件自动复位由单片微机内部硬件自动复位(定时器定时器/计数器中断计数器中断请求请求的撤消的撤消 )。对于定时器计数器对于定时器计数器T0T0、T1 T1 的溢出中断和采用跳变触发的溢出中断和采用跳变触发方式的外部中断请求,在方式的外部中断请求,在CPUCPU响应中断后,由内部硬件自动响应中断后,由内部硬件自动清除清除中断标志中断标志TF0TF0和和TF1TF1、IE0IE0和和IE1IE1,而自动撤除中断请求。,而自动撤除中断请求。(硬件置位,硬件清除硬件置位,硬件清除)。2 2采用外加采用外加 硬件结合软件清除中断请求(硬件结合软件清除中断请求(外部中断请求外部中
28、断请求的撤消)的撤消)(1 1)跳沿跳沿方式外部中断请求的撤消是方式外部中断请求的撤消是自动撤消自动撤消的。的。(2 2)电平电平方式外部中断请求的撤消,需外接电路来取消。方式外部中断请求的撤消,需外接电路来取消。在中断响应后把中断请求信号引脚从低电平强制改变为高电平。在中断响应后把中断请求信号引脚从低电平强制改变为高电平。可可在系统中加入如图所示电路。在系统中加入如图所示电路。3 3应用软件清除相应标志(串行口中断请求的撤消)应用软件清除相应标志(串行口中断请求的撤消)对于串行接收发送中断请求,在对于串行接收发送中断请求,在CPUCPU响应中断后,必响应中断后,必须在中断服务程序中应用软件清
29、除须在中断服务程序中应用软件清除RIRI、TITI中断标志,才能撤中断标志,才能撤除中断。除中断。(硬件置位,软件清除硬件置位,软件清除)。响应串行口的中断后,响应串行口的中断后,CPUCPU无法知道是接收中断还是发无法知道是接收中断还是发送中断,送中断,还需测试这两个中断标志位的状态,还需测试这两个中断标志位的状态,以判定是接收以判定是接收操作还是发送操作,然后才能清除。所以操作还是发送操作,然后才能清除。所以串行口中断请求的串行口中断请求的撤消撤消只能用软件清除只能用软件清除CLR TI CLR TI ;清;清TITI标志位标志位CLR RI CLR RI ;清;清RIRI标志位标志位 当
30、当CPUCPU响应中断时,由硬件直接响应中断时,由硬件直接产生一个固定的地址,即矢量地址产生一个固定的地址,即矢量地址,由矢量地址指出每个中断源设备,由矢量地址指出每个中断源设备的中断服务程序的入口,这种方法的中断服务程序的入口,这种方法通常称为矢量中断。很显然,每个通常称为矢量中断。很显然,每个中断源分别有自已的中断服务程序中断源分别有自已的中断服务程序,而每个中断服务程序又有自已的,而每个中断服务程序又有自已的矢量地址。当矢量地址。当CPUCPU识别出某个中断源识别出某个中断源时,由硬件直接给出一个与该中断时,由硬件直接给出一个与该中断源相对应的矢量地址,从而转入各源相对应的矢量地址,从而
31、转入各自中断服务程序。自中断服务程序。中断源中断源中断矢量中断矢量地址地址外部中断外部中断0(INT0INT0)0003H定时器定时器/计数器计数器0(T0)000BH外部中断外部中断1(INT1INT1)0013H定时器定时器/计数器计数器1(T1)001BH串行口(串行口(RI、TI)0023H七、中断矢量(中断入口地址):七、中断矢量(中断入口地址):1 1、中断服务程序设计的任务、中断服务程序设计的任务 基本任务:基本任务:(1 1)设置中断允许控制寄存器)设置中断允许控制寄存器IEIE。(2 2)设置中断优先级寄存器)设置中断优先级寄存器IPIP。(3 3)对外中断源,是采用电平触发
32、还是跳沿触发。)对外中断源,是采用电平触发还是跳沿触发。(4 4)编写中断服务程序,处理中断请求)编写中断服务程序,处理中断请求。前前2 2条一般放在主程序的初始化程序段中。条一般放在主程序的初始化程序段中。例例3 3 假设允许外部中断假设允许外部中断0 0中断,并设定它为高级中断,其它中中断,并设定它为高级中断,其它中断源为低级中断,采用跳沿触发方式。断源为低级中断,采用跳沿触发方式。在主程序中编写如下在主程序中编写如下程序段:程序段:SETB EA SETB EA ;CPUCPU开中断开中断 SETB ET0 SETB ET0;允许外中断;允许外中断0 0产生中断产生中断 SETB PX0
33、 SETB PX0;外中断;外中断0 0为高级中断为高级中断 SETB IT0 SETB IT0 ;外中断;外中断0 0为跳沿触发方式为跳沿触发方式 八、中断服务程序的设计八、中断服务程序的设计2 2、中断服务程序的流程、中断服务程序的流程 中断响应很突出的一点是它的随机性。中断响应很突出的一点是它的随机性。中断服务程序和子程序一样,在调用和中断服务程序和子程序一样,在调用和返回时,也有一个保护断点和现场、恢复返回时,也有一个保护断点和现场、恢复断点和现场的问题。断点和现场的问题。在中断响应过程中,断点的保护主要由在中断响应过程中,断点的保护主要由硬件电路自动实现。它将断点压入堆栈,硬件电路自
34、动实现。它将断点压入堆栈,再将中断服务程序的入口地址送入程序计再将中断服务程序的入口地址送入程序计数器数器PCPC,使程序转向中断服务程序,即为,使程序转向中断服务程序,即为中断源的请求服务。中断源的请求服务。在结束中断服务程序返回断点处之前要恢复现在结束中断服务程序返回断点处之前要恢复现场,与保护现场的方法相对应。而恢复断场,与保护现场的方法相对应。而恢复断点也是由硬件电路自动实现的,中断服务点也是由硬件电路自动实现的,中断服务程序的最后一条指令必须是程序的最后一条指令必须是RETIRETI指令。指令。例例4 4 根据上图的中断服务程序流程,编出中断服务程序。假根据上图的中断服务程序流程,编
35、出中断服务程序。假设,现场保护只需将设,现场保护只需将PSWPSW和和A A的内容压入堆栈中保护。典型的内容压入堆栈中保护。典型的中断服务程序如下:的中断服务程序如下:INT INT:CLR EACLR EA;CPUCPU关中断关中断PUSH PSWPUSH PSW;现场保护;现场保护PUSH ACCPUSH ACC;SETB EASETB EA;CPUCPU开中断开中断 中断处理程序段中断处理程序段 CLR EACLR EA;CPUCPU关中断关中断POP ACCPOP ACC;现场恢复;现场恢复POP PSW POP PSW SETB EA SETB EA;CPUCPU开中断开中断RETI
36、RETI;中断返回,恢复断点;中断返回,恢复断点例:若要把例:若要把“INT1INT1”中断的优先级提高。中断的优先级提高。、MOV IP,#00000100B、SETB IP.2、MOV 0B8H,#04H、SETB PX1例:若想例:若想“INT1INT1”中断拟采用负缘触发的信号。中断拟采用负缘触发的信号。、MOV Tcon,#00000100B、SETB Tcon.2、MOV 088H,#04H、SETB IT1“中断子程序”就是一种子程序,其与一般子程序的最大差异是其的返回指令是“RETI”,而不是“RET”。中断应用实例:中断_int0 单片机的单片机的P1P1口接个口接个LEDL
37、ED发光二极管,发光二极管,P3.2P3.2引脚保持引脚保持高电平,另外接一按钮开关。主程序运行时高电平,另外接一按钮开关。主程序运行时LEDLED同时闪同时闪烁,若按开关,进入中断状态单灯左右移烁,若按开关,进入中断状态单灯左右移3 3次。次。;一开始即允许所有中断产生一开始即允许所有中断产生,并特意指明启用并特意指明启用INT0INT0中断中断ORG 0000H ;ORG 0000H ;源程序从源程序从0 0地址开始地址开始AJMP START ;AJMP START ;跳过中断向量跳过中断向量ORG 0003H ORG 0003H ;INT0;INT0中断向量中断向量AJMP INT_0
38、 AJMP INT_0 ;执行执行INT_0INT_0中断子程序中断子程序;=;=START:START:MOV IE,#10000001B ;MOV IE,#10000001B ;打开总开关与打开总开关与EX0EX0分路开关分路开关 MOV SP,#30H ;MOV SP,#30H ;设定堆栈地址设定堆栈地址 SETB IT0 ;SETB IT0 ;采用负触发信号采用负触发信号 MOV A,#0 ;MOV A,#0 ;将将ACCACC清零清零LOOP:LOOP:MOV P1,A ;MOV P1,A ;输出到输出到LED LED CALL DELAY ;CALL DELAY ;调用延时子程序调
39、用延时子程序 CPL A ;CPL A ;将将A A的内容反相的内容反相 AJMP AJMP LOOP LOOP ;=INT0;=INT0中断子程序开始中断子程序开始=INT_0:INT_0:PUSH ACC ;PUSH ACC ;累加器入出栈时不能用简称累加器入出栈时不能用简称A A PUSH PSW ;PUSH PSW ;将程序状态控制字入栈将程序状态控制字入栈 SETB RS0 ;SETB RS0 ;切换到切换到RB1RB1 MOV R0,#3 ;MOV R0,#3 ;设定三次循环设定三次循环INT_LOOP0:INT_LOOP0:MOV A,#0FEH ;MOV A,#0FEH ;单灯
40、左移初始值单灯左移初始值 MOV R1,#8 ;MOV R1,#8 ;设定八次左移设定八次左移INT_LOOP1:INT_LOOP1:MOV P1,A ;MOV P1,A ;输出输出LED LED 到到P2P2口口 CALL DELAY ;CALL DELAY ;调用延时子程序调用延时子程序 RL A ;RL A ;将将A A的内容左移的内容左移 DJNZ R1,INT_LOOP1DJNZ R1,INT_LOOP1 MOV A,#07FH ;MOV A,#07FH ;单灯右移初始值单灯右移初始值 MOV R1,#8 ;MOV R1,#8 ;设定八次右移设定八次右移INT_LOOP2:INT_L
41、OOP2:MOV P1,A ;MOV P1,A ;输出输出LED LED 到到P2P2口口 CALL DELAY ;CALL DELAY ;调用延时子程序调用延时子程序 RR A ;RR A ;将将A A的内容右移的内容右移 DJNZ R1,DJNZ R1,INT_LOOP2INT_LOOP2 DJNZ R0,DJNZ R0,INT_LOOP0INT_LOOP0 POP PSW POP PSW POP ACC ;POP ACC ;累加器入出栈时不能用简称累加器入出栈时不能用简称A A RETI ;RETI ;返加主程序返加主程序 ;=;=;INT0 ;INT0中断子程序结束中断子程序结束;=;
42、=DELAY:DELAY:MOV R7,#200 MOV R7,#200D1:D1:MOV R6,#250 MOV R6,#250 DJNZ R6,$DJNZ R6,$DJNZ R7,D1 DJNZ R7,D1 RET RET END END该程序的该程序的C51C51代码代码如下:如下:#include#include#include#include sbit k1=P32;sbit k1=P32;void delay_ms(unsigned int xms);void delay_ms(unsigned int xms);/ms/ms级延时子程序级延时子程序void key_scan()i
43、nterrupt 0 void key_scan()interrupt 0 /使用了外部中断使用了外部中断0 0的键盘的键盘 /扫描子函数。扫描子函数。int i=0,j=0,num;int i=0,j=0,num;if(k1=0)if(k1=0)/有键按下吗?(有键按下吗?(k1=0?k1=0?)delay_ms(10);delay_ms(10);/延时消抖延时消抖if(k1=0)if(k1=0)/确实是否有键按下确实是否有键按下 for(j=0;j3;j+)for(j=0;j3;j+)num=0 xfe;num=0 xfe;for(i=0;i8;i+)for(i=0;i8;i+)P2=nu
44、m;P2=num;delay_ms(600);delay_ms(600);num=_crol_(num,1);num=_crol_(num,1);num=0 x7f;num=0 x7f;for(i=0;i8;i+)for(i=0;i0;x-)for(x=xms;x0;x-)for(y=130;y0;y-);for(y=130;y0;y-);5.2 515.2 51单片机的定时计数器单片机的定时计数器 我们通常采用以下三种方法来实现定时或计数:我们通常采用以下三种方法来实现定时或计数:1 1、硬件定时(采用时基电路定时)、硬件定时(采用时基电路定时)硬件定时是指由硬件电路来实现定时的功能硬件定时
45、是指由硬件电路来实现定时的功能 。例如采用例如采用555555电路,外接必要的元器件(电阻和电容),即可电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程,且定时时间容易漂移。由软件进行控制和修改,即不可编程,且定时时间容易漂移。2 2、软件定时、软件定时 软件定时是执行一段循环程序来进行时间延时,优点是无额外软件定时是执行一段循环程序来进行时间延时,优点是无额外的硬件开销,时间比较精确。但占用了的硬件开销,时间比较精确。但占用了CPUCPU的时间,降低了
46、的时间,降低了CPUCPU的利的利用率。例如延时程序。用率。例如延时程序。3 3、可编程定时、可编程定时/计数器计数器 最方便的办法是利用单片机内部的定时器最方便的办法是利用单片机内部的定时器/计数器。结合了软计数器。结合了软件定时精确和硬件定时电路独立的特点。由于纯软件要占用件定时精确和硬件定时电路独立的特点。由于纯软件要占用CPUCPU,而纯硬件又欠灵活。而纯硬件又欠灵活。定时定时/计数器是单片机系统一个重要的部件,其工作方式灵活、计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉定时控制、延时、频率测
47、量、脉宽测量、信号发生、信号检测宽测量、信号发生、信号检测等。此外,定时等。此外,定时/计数器还可作为串计数器还可作为串行通信中波特率发生器。行通信中波特率发生器。5.2 515.2 51单片机的定时计数器单片机的定时计数器 T0T0和和T1T1有都具有以下有都具有以下2 2种种工作模式工作模式:(1 1)计数器工作模式)计数器工作模式 对外来脉冲进行计数,对外来脉冲进行计数,T0T0(P3.4P3.4)和)和T1T1(P3.5P3.5)为计数)为计数脉冲输入端,等计数输入引脚的脉冲发生负跳变时,计数器脉冲输入端,等计数输入引脚的脉冲发生负跳变时,计数器加加1 1。定时/计数器作为计数器时,外
48、部事件脉冲必须从规定的引脚输入。且外部脉冲的最高频率不能超过时钟频率的1/24。(2 2)定时器工作模式)定时器工作模式 通过计数片内脉冲来实现定时功能:每个机器周期产生通过计数片内脉冲来实现定时功能:每个机器周期产生1 1个计数脉冲,即每经过个计数脉冲,即每经过1 1个机器周期的实践,计数器加个机器周期的实践,计数器加1 1。MCS-51MCS-51的两个可编程的定时器的两个可编程的定时器/计数器均有计数器均有4 4种种工作方式工作方式(方式方式0-0-方式方式3)3)。用户通过对相应的特殊功能寄存器编程,可以选择定时用户通过对相应的特殊功能寄存器编程,可以选择定时器器/计数器的计数器的2
49、2种工作模式和种工作模式和4 4种工作方式。种工作方式。47 定时器定时器/计数器的工作原理概述计数器的工作原理概述计数器输入的计数脉冲源计数器输入的计数脉冲源 1 1、系统的时钟振荡器输出脉冲经、系统的时钟振荡器输出脉冲经1212分频后产生;分频后产生;2 2、T0T0或或T1T1引脚输入的外部脉冲源。引脚输入的外部脉冲源。计数过程计数过程每来一个脉冲计数器加每来一个脉冲计数器加1 1,当加到计数器为全,当加到计数器为全1 1(即即FFFFHFFFFH)时,再输入一个脉冲就使计数器回零,且计数器的)时,再输入一个脉冲就使计数器回零,且计数器的溢出使溢出使TCONTCON中中TF0TF0或或T
50、F1TF1置置1 1,向,向CPUCPU发出中断请求(定时器发出中断请求(定时器/计数器中断允许时)。计数器中断允许时)。如果定时器如果定时器/计数器工作于定时模计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。计数值已满。设置为定时应用时 用作定时器:此时设置为定时器模式,加用作定时器:此时设置为定时器模式,加1 1计数器是对计数器是对内部机器周期计数(内部机器周期计数(1 1个机器周期等于个机器周期等于1212个振荡周期,个振荡周期,即计数频率为晶振频率的即计数频率为晶振频率的1/121/12)。计数值)。计数