第5章MCS-51的中断系统_第1页
第5章MCS-51的中断系统_第2页
第5章MCS-51的中断系统_第3页
第5章MCS-51的中断系统_第4页
第5章MCS-51的中断系统_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、复习四个并行口的使用复习四个并行口的使用: :1.1.如果单片机内部有程序存贮器,不需要扩展外部存贮器如果单片机内部有程序存贮器,不需要扩展外部存贮器和和I/OI/O接口,单片机的四个口均可作接口,单片机的四个口均可作I/OI/O口使用。口使用。2.2.四个口在作输入口使用时,均应先对其写四个口在作输入口使用时,均应先对其写“1”1”,以避,以避免误读。免误读。3.3.P0P0口作口作I/OI/O口使用时应外接口使用时应外接10K10K的上拉电阻,其它口则可的上拉电阻,其它口则可不必。不必。4.4.P2P2的某几根线作地址使用时,剩下的线不能作的某几根线作地址使用时,剩下的线不能作I/OI/O

2、口线口线使用。使用。5.5.P3P3口的某些口线作第二功能时,剩下的口线可以单独作口的某些口线作第二功能时,剩下的口线可以单独作I/OI/O口线使用。口线使用。并口编程举例 下面举例说明端口作为通用下面举例说明端口作为通用I/O口时的功能,其口时的功能,其他功能的应用实例在后面章节说明。他功能的应用实例在后面章节说明。 例例1.设计一电路,监视某开关设计一电路,监视某开关K,用发光二极管用发光二极管LED显示开关状态:如果开关合上,显示开关状态:如果开关合上,LED 亮;亮; 开开关打开,关打开,LED熄灭。熄灭。 开关接在开关接在P1.1P1.1口线,口线,LEDLED接接P1.0P1.0口

3、线,当开关断开时,口线,当开关断开时,P1.1P1.1为为+5V+5V,对,对应数字量为应数字量为“1”1”,开,开 关合上时关合上时P1.1P1.1电平为电平为0V0V,对应数字量为,对应数字量为“0”0”,可以用位指令对开关状态进行检测可以用位指令对开关状态进行检测 。LEDLED+5V5VVccVcc-EAEARSTRST10uF 10uF 1K1KP1.0P1.089S5189S51P1.1P1.11K1K30P30P30P30PXTAL1XTAL1XTAL2XTAL2GNDGND89C5189C51+5V5VVccVcc-EAEARSTRST10uF10uF 1K1KP1.0P1.0

4、89S5189S51+5V+5VP1.1P1.11K1K30P30P30P30PXTAL1XTAL1XTAL2XTAL2GNDGND89C5189C51K K#include #include main()main() P1_0=0; / P1_0=0; /使发光二极管灭使发光二极管灭 while while(1 1) P1_1=1; / P1_1=1; /先对先对P1P1口写入口写入“1”1” if if( P1_1=1P1_1=1 ) /开关开,二极管灭开关开,二极管灭 P1_0=0; P1_0=0; else / else /开关合上,二极管亮开关合上,二极管亮 P1_0=1; P1_0

5、=1; +5V+5VP1.0P1.0LEDLED 在上述电路图中二极管亮度不够,按下面两在上述电路图中二极管亮度不够,按下面两种电路接法,增加了驱动能力,二极管更亮些。种电路接法,增加了驱动能力,二极管更亮些。接成灌电流形式:接成灌电流形式:P1.0P1.0+5V+5VLEDLED1加驱动电路:加驱动电路: 例例2 2. .在下图中在下图中P1.4P1.4P1.7P1.7接四个发光二极管接四个发光二极管LED,P1.0LED,P1.0P1.3P1.3接四个开关,编程将开关的状态反映到接四个开关,编程将开关的状态反映到发光二极管上。发光二极管上。 89C5189C51P1.0P1.0P1.1P1

6、.1P1.2P1.2P1.3P1.3P1.4P1.4P1.5P1.5P1.6P1.6P1.7P1.7+5V+5V+5V+5V1K1K4 4330330 4 4EA#includevoid main() char data a; P1=0 x0ff; /P1口置口置1 while(1) a=P1; /读入低四位读入低四位 P1=a4; /低四位送至高四位低四位送至高四位 P1=P1|0X0F; /低四位值低四位值1,高四位保持,高四位保持 例例3 3. .用用P1.0P1.0输出输出1KHz1KHz和和500Hz500Hz的音频信号驱动扬的音频信号驱动扬声器,作报警信号,要求声器,作报警信号,要

7、求1KHz1KHz信号响信号响100ms 100ms ,500Hz500Hz信号响信号响200ms200ms,交替进行,交替进行,P1.7P1.7接一开关进行接一开关进行控制,当开关合上响报警信号,当开关断开告警信控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。号停止,编出程序。 分析分析:500Hz500Hz信号周期为信号周期为2ms2ms,信号电平为每信号电平为每1ms1ms变反变反1 1次。次。1KHz1KHz的信号周期为的信号周期为1ms1ms,信号电平信号电平 每每500500 S S变反变反1 1次,编一个延时次,编一个延时500500 S S子程序,延时子程序,延时

8、1ms1ms只需调用只需调用2 2次。用次。用R2R2控制音响时间长短,控制音响时间长短,A A作音响频作音响频率的交换控制的标志。率的交换控制的标志。A=FFA=FF时产生时产生1KHz1KHz信号,信号,A=0A=0时产生时产生500Hz500Hz信号。信号。 P1.0 波波 形形 图图 1ms 1ms100个个T (变反变反200次即次即200ms)。500S500S100个个T (变反变反200次即次即100ms)。TT#includevoid Delay_n500us( );void main() unsigned char data i=0; char a= 0;/作为作为1khz

9、和和500hz的区分的区分 while(1) while(p1_7=0);/检测开关检测开关 for (i=0;i200;i+) p1_0=p1_0; /产生矩形波产生矩形波 Delay_n500us();/500us延时延时 if( a!=0) /如果是如果是500hz则需要则需要1ms延时延时 Delay_n500us(); a=a; /延时延时500usvoid Delay_n500us( ) int j=0; for ( j=0;j250;j+) ;流水灯的控制 单片机的最小系统板,在P1口接8个LED等。使得8个LED灯从P1_0-1_7循环点亮。#includevoid Delay

10、_n500ms( );void main() unsigned char data i=0; while(1) P1=1; for (i=0;i8;i+) Delay_n500ms();/500ms延时延时 P1=P11; 智能小车驱动Q1Q1,Q4Q4导通,正转导通,正转Q2Q2,Q3Q3导通,反转导通,反转Q1Q1和和Q2Q2,Q3Q3和和Q4Q4不能同时导通不能同时导通正转正转:ENABLE =1:ENABLE =1,L=0L=0,R=1R=1反转反转:ENABLE =1:ENABLE =1,L=1L=1,R=0R=0不动不动:ENABLE =0:ENABLE =0 ENABLE=1,L

11、=1,R=1ENABLE=1,L=1,R=1如何实现小车的停转,前进,后退,左转,右转?如何实现小车的停转,前进,后退,左转,右转?第第5章章 89C51的中断系统的中断系统 在在CPUCPU和外设交换信息时,存在着快速和外设交换信息时,存在着快速CPUCPU和慢速外设间和慢速外设间的矛盾,机器内部有时也可能出现突发事件,为此,计算机的矛盾,机器内部有时也可能出现突发事件,为此,计算机中通常采用中断技术。使得中通常采用中断技术。使得单片单片机机能及时地响应和处理单片能及时地响应和处理单片机外部事件或内部事件所提出的中断请求机外部事件或内部事件所提出的中断请求。对事件的整个处理过程,称为对事件的

12、整个处理过程,称为中断处理中断处理(或中断服务或中断服务)。)。CPUCPU正在执行程序;正在执行程序;单片机外部或内部发生的某一单片机外部或内部发生的某一事件事件,请求请求CPUCPU迅速去处理;迅速去处理;CPUCPU暂时中止当前的工作,转到中断暂时中止当前的工作,转到中断服务处理程序处理所发生的事件;服务处理程序处理所发生的事件;处理完该事件后,再回到原来被中处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称止的地方,继续原来的工作,这称为为中断中断。 CPUCPU处理事件的过程,称为处理事件的过程,称为CPUCPU的的中断响应过程。中断响应过程。中断方式中断方式优点优点:大大

13、地大大地提高了提高了CPUCPU的工作效率。的工作效率。5.1 5.1 中断的概念中断的概念能够实现中断处理功能的部件称为能够实现中断处理功能的部件称为中断系统中断系统;产生中断的请求源称为产生中断的请求源称为中断请求源中断请求源。中断源向中断源向CPUCPU提出的处理请求,称为提出的处理请求,称为中断请求中断请求( (或中断或中断申请申请) )。中断处理的过程:中断处理的过程: 进入中断进入中断保护现场保护现场中断处理恢复现场中断处理恢复现场 中断返回中断返回 5.2 5.2 89C5189C51中断系统的结构中断系统的结构有有5 5个中断请求源,两个中断优先级,可两级嵌套。个中断请求源,两

14、个中断优先级,可两级嵌套。5.5.2.1 2.1 中断请求源中断请求源五个中断请求源五个中断请求源 :(1 1)INT0INT0* *外部中断请求外部中断请求0 0,由引脚,由引脚INT0INT0* *(P3.2)(P3.2)输入,中断输入,中断请求标志为请求标志为IE0IE0。(2 2)INT1INT1* *外部中断请求外部中断请求1 1,由引脚,由引脚INT1INT1* *(P3.3)(P3.3)输入,中断输入,中断请求标志为请求标志为IE1IE1。(3 3)定时器定时器/ /计数器计数器T0T0溢出溢出中断请求,中断请求标志为中断请求,中断请求标志为TF0TF0。(4 4)定时器定时器/

15、 /计数器计数器T1T1溢出溢出中断请求,中断请求标志为中断请求,中断请求标志为TF1TF1。(5 5)串行口中断请求串行口中断请求,中断请求标志为,中断请求标志为TITI或或RIRI。符号符号 名名 称称 中中 断断 引引 起起 原原 因因 中断服务中断服务程序入口程序入口INT0INT0 外部中外部中断断0 0 P3.2P3.2引脚的低电平或下降引脚的低电平或下降沿信号沿信号 0003H0003HINT1INT1 外部中外部中断断1 1P3.3P3.3引脚的低电平或下降引脚的低电平或下降沿信号沿信号 0013H0013HT0T0定时器定时器0 0中断中断 定时计数器定时计数器0 0计数回零

16、溢出计数回零溢出 000BH000BHT1T1定时器定时器1 1中断中断 定时计数器定时计数器1 1计数回零溢出计数回零溢出 001BH001BHTI/RITI/RI 串行口串行口中断中断 串行通信完成一帧数据发串行通信完成一帧数据发送或接收引起中断送或接收引起中断 0023H0023HTCONTCON为定时器为定时器/ /计数器的控制寄存器计数器的控制寄存器, ,但同时可设置外部中断的中断方式。但同时可设置外部中断的中断方式。包含:包含:(1 1)T0T0和和T1T1的溢出中断请求标志位的溢出中断请求标志位TF1TF1和和TF0TF0(2 2)外部中断请求标志位外部中断请求标志位IE1IE1

17、与与IE0IE0。5.2.25.2.2中断控制中断控制1 1、TCONTCON1.1.IT0IT0和和IT1IT1为外中断为外中断INT0 INT0 和和INT1INT1中断触发方式选择,若选下降沿触发则相中断触发方式选择,若选下降沿触发则相应位置应位置1 1;若选低电平触发,;若选低电平触发,ITIT相应位置相应位置0 0。可由软件置。可由软件置“1”“1”或清或清“0”“0”. .2.2.TR0 TR0 和和 TR1 TR1 为定时器为定时器T0T0和和T1 T1 工作启动和停止控制。工作启动和停止控制。 3.3.某中断源有中断请求,该中断标志置某中断源有中断请求,该中断标志置1 1,无中

18、断请求,该中断标志置,无中断请求,该中断标志置0 0 。 IE0 IE0,IE1IE1由硬件清由硬件清“0”“0”; TF1 TF1,TFOTFO由硬件清由硬件清“0”“0”,也可由软件清,也可由软件清0 0 。4. 4. 当当5151单片机复位后,单片机复位后,TCONTCON被清被清0 0,则,则CPUCPU关中断,所有中断请求被禁止。关中断,所有中断请求被禁止。INT0方式方式下沿下沿/低低电平电平 INT0请求请求有有/无无 INT1方式方式下沿下沿/ 低低电平电平 INT1 请求请求有有/无无 T0 工作工作启启/停停 T0 请求请求有有/无无 T1工作工作启启/停停 T1 请求请求

19、有有/无无 IT0 IE0IT1IE1TR0 TF0 TR1 TF1中断请求标志及外部中断方式选择寄存器中断请求标志及外部中断方式选择寄存器TCONTCON外部中断使用外部中断使用定时器使用定时器使用外部中断的两种触发方式:外部中断的两种触发方式: 电平触发电平触发方式和方式和跳沿触发跳沿触发方式。方式。1 1 电平触发方式电平触发方式 CPU CPU在每个机器周期采样到的外部中断输入线的电平为低电平时触发中断。在每个机器周期采样到的外部中断输入线的电平为低电平时触发中断。 如在中断服务程序返回之前,低电平依然有效,则会再次响应中断。如在中断服务程序返回之前,低电平依然有效,则会再次响应中断。

20、2 2 跳沿触发方式跳沿触发方式 连续两次采样,一个机器周期采样到外部中断输入为高,下一个机器周期连续两次采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样为低,则置采样为低,则置“1”“1”中断请求标志,直到中断请求标志,直到CPUCPU响应此中断时,该标志才清响应此中断时,该标志才清0 0。这样不会丢失中断,但这样不会丢失中断,但输入的负脉冲宽度至少保持输入的负脉冲宽度至少保持1 1个机器周期个机器周期。 (2 2)SCONSCON为串行口控制寄存器,字节地址为为串行口控制寄存器,字节地址为9898H H。 串行口的串行口的发送中断发送中断和和接收中断接收中断的中断请求标志的中断

21、请求标志TITI和和RIRI。(1 1)TITI发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置置“1”“1”TITI。必须在中断服务程序中用必须在中断服务程序中用软件软件对对TITI标志清标志清“0”“0”。(2 2)RIRI接收中断请求标志位。串口接收完一个数据帧,硬件自动置接收中断请求标志位。串口接收完一个数据帧,硬件自动置“1”“1”RIRI标志。标志。必须在中断服务程序中用必须在中断服务程序中用软件软件对对RIRI标志清标志清“0”“0”。(3)(3)中断的允许和禁止中断的允许和禁止中断控制寄存器中断控制寄存器IEIE

22、控制控制CPUCPU对中断源的开放或屏蔽。对中断源的开放或屏蔽。EAEA - - - - ES ES ETIETI EX1EX1 ET0ET0 EX0EX0中断总中断总控允控允/ /禁禁 不不 用用 不不用用 串行口串行口允允/ /禁禁 定时器定时器T1T1允允/ /禁禁 INT1INT1允允/ /禁禁 定时器定时器T0T0允允/ /禁禁 INT0INT0允允/ /禁禁 IEIE对中断的开放和关闭为对中断的开放和关闭为两级两级控制控制EAEA:中断总控开关,是:中断总控开关,是CPUCPU是否响应中断的前提。是否响应中断的前提。 EA=1EA=1,CPUCPU开中断开中断; ; EA=0 EA

23、=0, CPUCPU关中断。关中断。ESES: 串行口中断允许位,串行口中断允许位, ES=1ES=1,允许串行口发送允许串行口发送/ /接收中断;接收中断; ES=0ES=0,禁止串行口中断。禁止串行口中断。ET1ET1:定时器定时器T1T1中断允许位,中断允许位, ET1=1ET1=1,允许允许T1T1计数溢出中断;计数溢出中断; ET1=0ET1=0,禁止禁止T1T1中断。中断。ET0ET0: 定时器定时器T0T0中断允许位中断允许位, , ET0=1 ET0=1,允许,允许T1T1计数溢出中断;计数溢出中断; ET0=0ET0=0,禁止,禁止T0T0中断。中断。EX1EX1: 外部中断

24、外部中断INT1INT1允许位,允许位, EX1=1EX1=1,允许,允许INT1INT1中断;中断; EX1= 0EX1= 0,禁止,禁止INT1INT1中断。中断。EX0EX0: 外部中断外部中断INT0INT0允许位,允许位, EX0=1EX0=1,允许,允许INT0INT0中断;中断; EX0= 0EX0= 0,禁止,禁止INT0INT0中断。中断。 MCS51MCS51复位后,复位后,IEIE清清0 0,所有中断请求被禁止。所有中断请求被禁止。若使某一个中断源被若使某一个中断源被允许中断,除了允许中断,除了IEIE相相应的位的被置应的位的被置“1” “1” ,还必须使还必须使EAEA

25、位位=1=1。IEIE的控制方法的控制方法改变改变IEIE的内容,可直接设置对应的位值,通过位操作实现实现的内容,可直接设置对应的位值,通过位操作实现实现也可设置也可设置IEIE字节的数值字节的数值例例5-15-1 若允许片内若允许片内2 2个定时器个定时器/ /计数器中断,禁止其它中断源的计数器中断,禁止其它中断源的中断请求。编写设置中断请求。编写设置IEIE的相应程序段的相应程序段(1 1)用位操作指令来编写如下程序段)用位操作指令来编写如下程序段: ES=0; /禁止串行口中断禁止串行口中断 EX1=0; /禁止外部中断禁止外部中断1 1中断中断 EX0=0; /禁止外部中断禁止外部中断

26、0 0中断中断 ET0=1; /允许定时器允许定时器/ /计数器计数器T0T0中断中断 ET1=1; /允许定时器允许定时器/ /计数器计数器T1T1中断中断 EA=1; /CPU/CPU开中断开中断(2 2)用字节操作指令来编写:)用字节操作指令来编写: IE= 0X8A; IE= 0X8A;可归纳为下面可归纳为下面两条基本规则两条基本规则:(1 1)低优先级可被高优先级中断,反之则不能。)低优先级可被高优先级中断,反之则不能。(2)同级中断不会被它的同级中断源所中断。)同级中断不会被它的同级中断源所中断。(4 4) 中断优先级寄存器中断优先级寄存器IPIP两个中断优先级,可实现两个中断优先

27、级,可实现两两级中断嵌套。级中断嵌套。 若若CPUCPU正在执行高优先级的中断,则不能被任何正在执行高优先级的中断,则不能被任何中断源所中断。中断源所中断。中断优先级管理寄存器中断优先级管理寄存器IPIP -PSPT1PX1PT0PX0无无用用位位无无用用位位无无用用位位串行串行 口口高高/低低 T1高高/低低 INT1高高/低低 T0高高/低低 INT0高高/低低 五个中断源的优先级别由五个中断源的优先级别由IP寄存器管理,相应位置寄存器管理,相应位置1 1,则该中断,则该中断源优先级别高,置源优先级别高,置0 0的优先级别低。的优先级别低。由软件可改变各中断源的中断优先级。由软件可改变各中

28、断源的中断优先级。 例例5-25-2 设置设置IPIP寄存器的初始值,使寄存器的初始值,使2 2个外中断请求为高优先级,个外中断请求为高优先级,其它中断请求为低优先级。其它中断请求为低优先级。(1 1)用位操作指令)用位操作指令 PX0=1PX0=1; /2 /2个外中断为高优先级个外中断为高优先级 PX1=1; PX1=1; PS =0; / PS =0; / 串口为低优先级中断串口为低优先级中断PT0=0; /PT0=0; /2 2个定时器个定时器/ /计数器低优先级中断计数器低优先级中断PT1=0;PT1=0;(2 2)用字节操作指令用字节操作指令 IP=0X05;IP=0X05;在同时

29、收到在同时收到几个同一优先级的中断请求几个同一优先级的中断请求时,时,即即当某几当某几个中断源在个中断源在IP寄存器相应位同为寄存器相应位同为1或同为零时,或同为零时,优优先响应哪一个中断,取决于先响应哪一个中断,取决于内部的查询顺序内部的查询顺序。 中断查询次序中断查询次序 中断源中断源 中断级别中断级别外部中断外部中断0 0最高最高T0T0溢出中断溢出中断外部中断外部中断1 1T1T1溢出中断溢出中断串行口中断串行口中断最低最低NNYY执执 行行 指指 令令中断响应条件满足中断响应条件满足?能否马上执行中断?能否马上执行中断?断点的断点的PC进栈进栈, 中断服务入口地址送中断服务入口地址送

30、PC撤撤 除除 中中 断断 标标 志志中中 断断 服服 务务中中 断断 返返 回回, 断断 点点 出出 栈栈 送送 PC 中断请求中断请求中断响应中断响应中断服务中断服务中断返回中断返回5.35.3中断处理过程中断处理过程1 1、 响应中断请求的条件响应中断请求的条件 一个中断请求被响应,需满足以下必要条件:一个中断请求被响应,需满足以下必要条件:(1 1)该中断源发出中断请求,即该中断源对应的)该中断源发出中断请求,即该中断源对应的中断请中断请求标志为求标志为“1”“1”。(2 2)IEIE寄存器中的中断总允许位寄存器中的中断总允许位EA=1EA=1。(3 3)该中断源的)该中断源的中断允许

31、位中断允许位=1=1,即该中断没有被屏蔽。,即该中断没有被屏蔽。2 2、中断处理会否被延时?、中断处理会否被延时? 遇到遇到下列三种情况下列三种情况之一时,中断响应被封锁:之一时,中断响应被封锁: (1 1)CPUCPU正在处理同级的或更高优先级的中断正在处理同级的或更高优先级的中断。 (2 2)所查询的机器周期所查询的机器周期不是所当前正在执行指令的最后一不是所当前正在执行指令的最后一个机器周期个机器周期。只有在当前指令执行完毕后,才能进行中断。只有在当前指令执行完毕后,才能进行中断响应。响应。 (3 3)正在执行的指令是正在执行的指令是RETI(RETI(中断返回指令中断返回指令) )或是

32、或是访问访问IEIE或或IPIP的指令。的指令。需要再去执行完一条指令,才能响应新的中断需要再去执行完一条指令,才能响应新的中断请求。请求。如果存在上述三种情况之一,如果存在上述三种情况之一,CPUCPU需要等待高级中断处理完需要等待高级中断处理完或者当前指令执行完方可响应中断。或者当前指令执行完方可响应中断。3 3、中断响应的主要过程:、中断响应的主要过程:首先由硬件自动生成一条长调用指令首先由硬件自动生成一条长调用指令: : LCALL addr16LCALL addr16接着就由接着就由CPUCPU执行该指令执行该指令, ,将将PCPC的内容压入堆栈以保护断点的内容压入堆栈以保护断点,再

33、,再将将中断入口地址装入中断入口地址装入PCPC。各中断源服务程序的各中断源服务程序的入口地址固定入口地址固定: 中断源中断源 入口地址入口地址 外部中断外部中断0 0 00030003H H定时器定时器/ /计数器计数器T0 T0 000BH000BH外部中断外部中断1 1 00130013H H定时器定时器/ /计数器计数器T1T1001BH001BH串行口中断串行口中断00230023H H4 4、外部中断的响应时间、外部中断的响应时间 外部中断的外部中断的最短最短的响应时间为的响应时间为3 3个机器周期个机器周期 外部中断响应的外部中断响应的最长最长的响应时间为的响应时间为8 8个机器

34、周期个机器周期 在一个单一中断的系统里,在一个单一中断的系统里,MCS-51MCS-51单片机单片机对外部中断请对外部中断请求的响应的时间总是在求的响应的时间总是在3 38 8个机器周期个机器周期之间。之间。 若已在处理同级或更高级中断,若已在处理同级或更高级中断,响应时间无法计算。响应时间无法计算。5 5、中断服务程序、中断服务程序各中断源服务程序的各中断源服务程序的入口地址入口地址: 中断源中断源 入口地址入口地址 外部中断外部中断0 0 00030003H H定时器定时器/ /计数器计数器T0 T0 000BH000BH外部中断外部中断1 1 00130013H H定时器定时器/ /计数

35、器计数器T1T1001BH001BH串行口中断串行口中断00230023H H通常将中断服务程序安排在程序存贮器的其他地址空间,通常将中断服务程序安排在程序存贮器的其他地址空间,而在矢量地址的单元中安排一条转移指令。而在矢量地址的单元中安排一条转移指令。常用的常用的主程序结构主程序结构:#include #include main()main() /设置中断参数设置中断参数 while(1) while(1) void void funcfunc() interrupt n() interrupt n /中断处理函数中断处理函数 C51C51中断程序的编制中断程序的编制 C51C51使用户能编

36、写高效的中断服务程序,编译器在规定的中断源的矢使用户能编写高效的中断服务程序,编译器在规定的中断源的矢量地址中放入无条件转移指令,使量地址中放入无条件转移指令,使CPUCPU响应中断后自动地从矢量地响应中断后自动地从矢量地址跳转到中断服务程序的实际地址,而无需用户去安排。址跳转到中断服务程序的实际地址,而无需用户去安排。中断服务程序定义为函数,函数的完整定义如下:中断服务程序定义为函数,函数的完整定义如下:返回值返回值 函数名函数名()() interrupt ninterrupt nusing musing m 其中必选项其中必选项 interrupt ninterrupt n表示将函数声明

37、为中断服务函数,表示将函数声明为中断服务函数,n n为中断源编号,可以是为中断源编号,可以是0 03131间的整数间的整数 ,不允许是带运算符,不允许是带运算符的表达式,的表达式,n n通常取以下值:通常取以下值:0 0 外部中断外部中断0 0;1 1 定时器定时器/ /计数器计数器0 0溢出中断溢出中断2 2 外部中断外部中断1 1;3 3 定时器定时器/ /计数器计数器1 1溢出中断溢出中断4 4 串行口发送与接收中断串行口发送与接收中断5 5 定时器定时器/ /计数器计数器2 2中断中断 各可选项的意义如下:各可选项的意义如下:using musing m 定义函数使用的工作寄存器组。定

38、义函数使用的工作寄存器组。 m m的取值范围为的取值范围为0 03 3,可缺省。,可缺省。 它对目标代码的影响是:函数入口处将当前它对目标代码的影响是:函数入口处将当前寄存器保存,使用寄存器保存,使用 m m 指定的寄存器组,函数指定的寄存器组,函数退出时退出时 原寄存器组恢复。选不同的工作寄存原寄存器组恢复。选不同的工作寄存器组,可方便实现寄存器组的现场保护。器组,可方便实现寄存器组的现场保护。主程序设计主程序设计 用户对中断的控制和管理,实际是对用户对中断的控制和管理,实际是对4 4个与中断有关的个与中断有关的寄存器寄存器IEIE、TCONTCON、IPIP、SCONSCON进行控制。这几

39、个寄存器在单片进行控制。这几个寄存器在单片机复位时是清零的,因此必须根据需要对这几个寄存器的有机复位时是清零的,因此必须根据需要对这几个寄存器的有关位进行预置,这些设置放在主程序中:关位进行预置,这些设置放在主程序中:开中断总控开关开中断总控开关EAEA,置位中断源的中断允许位。置位中断源的中断允许位。对外部中断对外部中断INT0INT0、INT1INT1应选择中断触发方式。应选择中断触发方式。多个中断源中断,应设定中断优先级,预置多个中断源中断,应设定中断优先级,预置IPIP。#include#includemain()main() EA=1; / CPU EA=1; / CPU开中断开中断

40、 ET0=1; / ET0=1; /允许外中断允许外中断0 0产生中断产生中断 PX0=1; / PX0=1; /外中断外中断0 0为高级中断为高级中断 IT0=1; / IT0=1; /外中断外中断0 0为跳沿触发方式为跳沿触发方式 while(1); while(1); Int0()interrupt 0Int0()interrupt 0 P1=0X0FF; P1=0X0FF; 例例5-35-3 假设允许外部中断假设允许外部中断0 0中断,并设定它为高级中断,其中断,并设定它为高级中断,其它中断源为低级中断,采用跳沿触发方式。它中断源为低级中断,采用跳沿触发方式。中断服务程序设计中断服务程

41、序设计编写中断服务程序,并注意用保护现编写中断服务程序,并注意用保护现场和恢复现场,以免中断返回时,丢场和恢复现场,以免中断返回时,丢失原寄存器、累加器中的信息。失原寄存器、累加器中的信息。若要在执行当前中断程序时禁止更若要在执行当前中断程序时禁止更高优先级中断,可以采用软件关高优先级中断,可以采用软件关CPUCPU中断,或禁止某中断源中断,在中中断,或禁止某中断源中断,在中断返回前再开放中断。断返回前再开放中断。编程时候的注意事项:编程时候的注意事项:1 1、中断服务函数不允许用于外部函数;、中断服务函数不允许用于外部函数;2 2、中断服务程序尽量简短。、中断服务程序尽量简短。3 3、对于全

42、局变量,服务程序中如果修改了、对于全局变量,服务程序中如果修改了数值,退出出中断后,数值保持被修改后数值,退出出中断后,数值保持被修改后的数值。的数值。例例5-5.5-5.在图中在图中P1.4P1.4P1.7P1.7接有接有四个发光二极管,四个发光二极管,P1.0P1.0P1.3P1.3接有四个开关,消抖电路用于接有四个开关,消抖电路用于 产生中断请求信号,当消抖电产生中断请求信号,当消抖电路的开关来回拔动一次将产生路的开关来回拔动一次将产生一个下降沿信号,通过一个下降沿信号,通过INT0INT0向向CPUCPU申请中断。申请中断。要求:初时发光二极管全黑,要求:初时发光二极管全黑,每中断一次

43、,每中断一次,P1.0P1.0P1.3P1.3所接所接的开关状态反映到发光二极管的开关状态反映到发光二极管上,且要求开关断开的对应发上,且要求开关断开的对应发光二极管亮。光二极管亮。例例5-6 用用C C语言编程语言编程#include#includeint0() interrupt 0int0() interrupt 0 / /* *INT0INT0中断函数中断函数* */ / P1=0 x0f; / P1=0 x0f; /* *输入端先置输入端先置1 1,灯灭,灯灭* */ / P1=4; / P1=4; /* * 读入开关状态,并左移四读入开关状态,并左移四 位,使开关反映在发光二极管上

44、位,使开关反映在发光二极管上* */ / main()main() P1=0X0F; P1=0X0F; EA=1; / EA=1; /* *开中断总开关开中断总开关* */ / EX0=1; / EX0=1; /* *允许允许INT0INT0中断中断* */ / IT0=1; / IT0=1; /* *下降沿产生中断下降沿产生中断* */ / while(1); / while(1); /* *等待中断等待中断* */ / 例例5-7,正常工作时,单片机的,正常工作时,单片机的P1口的口的8个个LED循环左移,右循环左移,右移,外部中断移,外部中断0产生时,产生时,LED亮灭亮灭10次。次。#

45、include #include Void main()Void main() unsigned char i; unsigned char i; P1=0; P1=0; TCON=0X5; TCON=0X5; IE=0X85; IE=0X85; while(1) while(1) P1=0 x1; P1=0 x1; for(jfor(j=0;j8;j+)=0;j8;j+) delay(); delay(); P1=1; P1=1; P1=8; P1=8; for(jfor(j=0;j8;j+)=0;j=1; P1=1; void intx0_isr() interrupt 0void int

46、x0_isr() interrupt 0 intint i=0; i=0; for(ifor(i=0;i10;i+)=0;i10;i+) P1=0X0FF; P1=0X0FF; delay(); delay(); P1=0; P1=0; delay(); delay(); unsigned char a=P1;unsigned char a=P1;P1=a;P1=a;例例5-8,正常工作时,单片机的,正常工作时,单片机的P1口的口的8个个LED循环左移,外部中循环左移,外部中断断0产生时,产生时,1,3,5,7LED亮灭亮灭10次,外部中断次,外部中断1产生时,产生时,0,2,4,6LED亮灭

47、亮灭10次。次。#include #include Void main()Void main() unsigned char i=0 x1; unsigned char i=0 x1; P1=0; P1=0; TCON=0X5; TCON=0X5; IE=0X85; IE=0X85; P1=i; P1=i; while(1) while(1) i=1; i=1; if(iif(i=0)i=0 x1;=0)i=0 x1; P1=i; P1=i; delay(); delay(); void intx0_isr() interrupt 0void intx0_isr() interrupt 0 i

48、ntint i=0; i=0; for(ifor(i=0;i10;i+)=0;i10;i+) P1=0XAA; P1=0XAA; delay(); delay(); P1=0; P1=0; delay(); delay(); void intx1_isr() interrupt 1void intx1_isr() interrupt 1 intint i=0; i=0; for(ifor(i=0;i10;i+)=0;i10;i+) P1=0X55; P1=0X55; delay(); delay(); P1=0; P1=0; delay(); delay(); #include #includ

49、e unsigned unsigned intint LedNumValLedNumVal =0; =0;unsigned char code unsigned char code Disp_TabDisp_Tab = 0 x3f,0 x06,0 x5b,0 x4f, = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x40; 0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x40; / /* * 主程序主程序 * */ /void void main(voidmain(void) ) I

50、T0=1; / IT0=1; /下降沿触发下降沿触发 EA=1;EA=1; EX1=1; EX1=1; while(1) while(1) P1=Disp_TabLedNumVal%10; P1=Disp_TabLedNumVal%10; / /* * INT1 INT1中断函数中断函数* */ /void void counter(voidcounter(void) interrupt 2) interrupt 2 EX1=0; EX1=0; LedNumValLedNumVal+; /+; /中断计数中断计数 EX1=1;EX1=1; 中断请求的撤消中断请求的撤消CPU响应中断后,应撤除该

51、中断请求标志,否则会再次中断。响应中断后,应撤除该中断请求标志,否则会再次中断。1 1定时器定时器/ /计数器中断请求计数器中断请求的撤消的撤消 中断请求被响应后。硬件会中断请求被响应后。硬件会自动清自动清TF0TF0或或TF1TF1。2 2外部中断请求外部中断请求的撤消的撤消 (1 1)跳沿跳沿方式外部中断请求的撤消是方式外部中断请求的撤消是自动撤消自动撤消的。的。(2 2)电平电平方式外部中断请求的撤消方式外部中断请求的撤消: : 对电平触发的外部中断,对电平触发的外部中断,CPU在响应中断时也不会自动清除在响应中断时也不会自动清除中断标志,因此,在中断标志,因此,在CPU响应中断后应立即

52、撤除响应中断后应立即撤除INT1或或INT0的低电平信号。的低电平信号。P1.0P1.0端输出一个负脉冲就可以使端输出一个负脉冲就可以使D D触发器置触发器置“1”“1”,从而撤消了,从而撤消了低电平的中断请求信号。低电平的中断请求信号。所需的负脉冲可增加如下两条指令得所需的负脉冲可增加如下两条指令得到:到: P1=P1|0X01 P1=P1|0X01 ;P1.0P1.0为为“1”“1”P1=P1&0X0FEP1=P1&0X0FE;P1.0P1.0为为“0”“0” 电平方式的外部中断请求信号的完全撤消,是通过软硬件相结电平方式的外部中断请求信号的完全撤消,是通过软硬件相结合合的方法来实现的。的方法来实现的。3 3串行口中断请求的撤消串行口中断请求的撤消 响应串行口的中断后,响应串行口的中断后,CPUCPU无法知道是接收中无法知道是接收中断还是发送中断,没有用硬件清除中断请求标志断还是发送中断,没有用硬件清除中断请求标志TITI、RIRI,即这些中断标志,即这些中断标志 不会自动清除,必须用软件不会自动清除,必须用软件清除,这是在编串行通信中断服务中应该注意的。清除,这是在编串行通信中断服务中应该注意的。TI =0 TI =0 ;清清TITI标志位标志位RI =0 RI =0 ;清清RIRI标志位标志位5.4.3 5.4.3 多外部中断源

温馨提示

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

评论

0/150

提交评论