第6章 输入输出和中断系统_第1页
第6章 输入输出和中断系统_第2页
第6章 输入输出和中断系统_第3页
第6章 输入输出和中断系统_第4页
第6章 输入输出和中断系统_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

第6章输入/输出和中断系统

单片机原理及应用16.1微机的输入/输出方式CPU与外部设备交换信息通常有以下几种方式:(1)程序控制传送方式,又分为无条件传送方式和查询传送方式(2)中断传送方式(3)直接存储器存取(DMA)方式

无条件传送流程图查询传送流程图2◆无条件传送的缺点必须确认外设是准备好的◆查询传送的缺点

CPU在查询过程中什么都不能做,CPU的工作效率低下◆解决的方法采用中断方式◆中断方式与以上两种方式的根本区别

CPU由数据传送的主动方变为被动方外设需要传送数据,向CPU发出中断请求,CPU响应后,转去为外设服务(传送数据),服务后CPU继续执行原来的程序3◆应用程序的一般形式从本章开始,涉及到单片机的应用(设计单片机的应用电路、编制单片机的应用程序)许多单片机的初学者都普遍存在这样的问题:对自己要设计的作品的功能很清楚,但不知道如何安排各个部分程序,也就是不太会设计程序流程图4◆应用程序的一般形式(以你们为例)初始化主程序无限循环执行的几件事(可能包含几个子程序)其中如果有紧急事情的话,还需要有中断服务程序56.2中断系统概念中断的定义:

当中央处理器CPU正在处理某事件时,外界发生了更为紧急的请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完毕后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。主程序断点正在执行中的某条指令中断服务程序RETI响应中断请求返回主程序中断响应中断返回中断服务中断过程流程6◆当CPU正在处理一个中断源请求时,发生了另一个优先级比它高的中断源请求。如果CPU能够暂停对原来的中断源的处理程序,转而去处理优先级更高的中断源请求,处理完以后,再回到原来的低级中断处理程序,这样的过程称为中断嵌套。◆具有这种功能的中断系统称为多级中断系统;没有中断嵌套功能的则称为单级中断系统。主程序响应低级别中断请求响应高级别中断请求二级中断嵌套示意76.3MCS-51中断系统结构80C51单片机有5个中断源,具有两个中断优先级,可以实现二级中断嵌套5个中断源的排列顺序由中断优先级控制寄存器IP和顺序查询逻辑电路(图6-4中的自然优先级排队电路)共同决定5个中断源对应5个固定的中断入口地址(中断矢量,见p.146)与中断系统有关的特殊功能寄存器(4个):

定时器控制寄存器TCON、串口控制寄存器SCON、中断允许寄存器IE、中断优先级控制寄存器IP5个中断源:外部中断:INT0和INT1

定时器/计数器溢出中断:定时器/计数器T0和T1

串口中断:TX或RX(发送或接收中断)89

6.3.1中断源与中断请求标志

MCS-51单片机设有5个中断源,中断请求标志分别是:2个外部中断请求标志:IE0(INT0)、IE1(INT1)2个内部定时器/计数器溢出中断请求标志:TF0(定时器/计数器T0)、TF1(定时器/计数器T1)1个内部串行口中断请求标志:TI或RI

这些中断请求标志分别由特殊功能寄存器TCON和SCON的相应位锁存10定时器/计数器控制寄存器(TCON)TF1TF0IE1IT1IE0IT088HT1溢出中断请求标志T0溢出中断请求标志外中断0触发方式0:低电平触发1:边沿触发外中断0中断请求标志0:无中断请求1:有中断请求外中断1触发方式外中断1中断请求标志CPU相应中断后,将TF1自动清0若查询方式,则需软件清011串口控制寄存器(SCON)TIRI98H串口发送中断请求标志每发送1帧数据后硬件置1软件清0串口接收中断请求标志每接收1帧数据后硬件置1软件清0注:CPU响应中断后,并不清除TI或RI,所以必须由软件清0126.3.2MCS-51的中断控制中断的开放和屏蔽中断 中断允许寄存器IE的作用,是控制所有中断源的开放或禁止,以及每个中断源是否被允许。寄存器IE的位格式如下:中断允许寄存器(IE)EA××ESET1EX1ET0EX0A8H总允许位串口外中断0定时器T0外中断1定时器T11:允许中断0:禁止中断13中断优先级别的设定MCS-51系列单片机具有两个中断优先级。对于所有的中断源,均可由软件设置为高优先级中断或低优先级中断每个中断源的中断优先级都可以通过程序来设定,由中断优先级寄存器IP统一管理中断优先级寄存器(IP)×××PSPT1PX1PT0PX0B8H串口外中断0定时器T0外中断1定时器T10:低优先级1:高优先级14例如CPU开中断可由以下两条指令来实现:

SETBEA;EA置1或ORLIE,#80H;按位“或”,EA置1CPU关中断可由以下两条指令来实现:

CLREA;EA清0或ANLIE,#7FH;按位“与”,EA清0

又如设置外部中断源0为高优先级,外部中断源1为低优先级,可由下面指令来实现:

SETBPX0;PX0置1CLRPX1;PX1清015

优先级结构在工作过程中中断系统对各中断源的处理遵循以下基本原则:低优先级中断可以被高优先级中断所中断,反之不能。中断源的自然优先级中断源同级自然优先级外部中断0最高级定时器0中断↓外部中断1┆

定时器1中断↓串行口中断最低级16例:设80C51的片外中断为高优先级,片内中断为低优先级,试设置IP相应值。解:(a)用字节操作指令

MOVIP,#05H

(b)用位操作指令

SETBPX0SETBPX1CLRPSCLRPT0CLRPT1176.3.3中断处理过程中断处理过程可分为三个阶段,即中断响应、中断处理和中断返回。

(1)中断响应◆响应条件有中断源发出中断请求中断总允许位EA=1,即CPU开中断申请中断的中断源的中断允许位为1,即中断没有被屏蔽无同级或更高级中断正在被服务当前的指令周期已经结束若现行指令为RETI或者是访问IE或IP指令时,该指令以及紧接着的另一条指令已执行完18◆

中断响应操作过程

MCS-51的CPU在第1个机器周期按优先级顺序查询中断标志,如查询到某个中断标志为1,将在接下来的2个机器周期按优先级进行中断处理:中断系统首先将断点地址进栈保护,并通过硬件自动将相应的中断矢量地址装入PC,以便进入相应的中断服务程序。◆

中断响应时间

在一般情况下,MCS-51响应中断的时间至少为3个机器周期。中断源中断矢量地址中断源中断矢量地址外中断00003H定时器T0000BH外中断10013H定时器T1001BH串口0023H19(2)中断处理◆各中断源的入口矢量地址之间只相隔8个单元,一般的中断服务程序是容纳不下的,因而最常用的方法是在中断入口地址单元处存放一条无条件转移指令,转至存储器其他的任何空间。◆若在执行当前中断程序时禁止更高优先级中断,应用软件关闭CPU中断(屏蔽该高级中断),在中断返回前再开放中断。◆在保护现场和恢复现场时,为了不使现场信息受到破坏或造成混乱,一般应关闭CPU中断,使CPU暂不响应新的中断请求(用于在应用中使用了两个以上的中断)0003H(INT0的中断矢量):LJMPINT_0(INT0程序入口地址)中断服务程序:保护现场

…………中断服务恢复现场

RETI20(3)中断返回在中断服务程序中,最后一条指令必须为中断返回指令RETI

返回到程序断点处继续执行6.4中断请求的撤除6.4.1.定时器/计数器中断请求的撤除 其中断请求是自动撤除的,无需采取其他措施。6.4.2.串行口中断请求的撤除通过如下指令将RI和TI撤除:

CLRRI;撤除接收中断

CLRTI;撤除发送中断216.4.3.外部中断请求的撤除(电平触发)

INSVR:ANLP1,#0FEHORLP1,#01H┇RETIEND22用单稳态触发器构成的外部中断请求电路(电平触发)单稳态触发器中断请求信号由于电平触发的外部中断请求需人为撤消,所以,外部中断请求一般设置为边沿触发236.5中断系统的初始化及应用6.5.1.中断系统的初始化(1)开放某中断源的中断请求

(2)设定所用中断的中断优先级*(3)若为外部中断,则应规定中断触发方式(低电平或边沿触发)(4)CPU开中断24例6-2:写出INT1为低电平触发、高优先级的中断系统初始化程序。解:(1)采用位操作指令

SETBEX1

;外中断1开中断

SETBPX1;令其为高优先级

CLRIT1;令其为电平触发

SETBEA;CPU开总中断

(2)采用字节型指令

MOVIE,#84H

;开中断

ORLIP,#04H;高优先级

ANLTCON,#0FBH;电平触发256.5.2.中断系统的应用(中断处理)

ORGADDRESS;ADDRESS为中断矢量(5个中断矢量之一)

LJMPINTVS;INTVS为中断服务程序入口MAIN: ……..┇

LJMPMAIN

INTVS:CLREA;关中断

PUSHPSW;保护现场

PUSHACC┇SETBEA;开中断,允许CPU响应高级中断┇中断服务┇

CLREA;关中断

POPACC;恢复现场

POPPSW┇SETBEA;开中断

RETI;中断返回若系统中只使用了一个中断源,则CPU开、关中断可以略去26

中断源及其对应的中断矢量(表6-1p.146)外部中断0(INT0):0003H

定时器0中断:000BH

外部中断1(INT1):0013H

定时器1中断:001BH

串口中断:0023H

中断矢量的间隔为8个单元,所以应在中断矢量地址处安排一条无条件转移指令LJMP中断服务程序标号(或AJMP)6.5.3中断应用举例例6-3P1.7~P1.4为输入口,P1.3~P1.0为输出口,反映输入口开关的状态,输入为高电平时,相应的LED亮。每中断一次,对外部状态检测一次,外部中断采用边沿触发方式。(R-S触发器作用:消除开关抖动

1-S2-R)27流程图28;机器码必须从0000H开始存放;转到主程序;INT0的中断矢量;转到INT0中断服务程序;定义主程序;允许INT0中断;设为边沿触发;CPU开中断;CPU等中断;定义中断服务程序;设P1口高4位输入和低4位输出初态;将状态送到P1口;读开关状态;将高4位状态交换到低4位;输出到低4位;中断返回 ORG0000HLJMPMAIN

ORG0003H

LJMPINSER

ORG0050HMAIN:SETBEX0

SETBIT0

SETBEAHERE:SJMPHERE

ORG0200H

INSER:MOVA,#0F0HMOVP1,A

MOVA,P1

SWAPA

MOVP1,A

RETIEND

初始化296.6MCS-51外部中断扩展方法

MCS-51单片机有两个外部中断请求输入端

INT0和INT1。在实际应用中,若外部中断源有两个以上时,就需要进行外部中断扩展。扩展外部中断源的方法有两种:用定时器扩展外部中断源(定时器章节介绍)I/O口查询方式扩展外部中断源306.6.2.硬件申请软件查询扩展中断源注:反相器一定是OC门输出,否则输出短路!用4个反相器构成的4输入或非门31中断服务程序是一个查询程序32 ORG0003H LJMPINTRP ………INTRP:PUSHPSW PUSHACC JBP1.0,DV1 JBP1.1,DV2 JBP1.2,DV3 JBP1.3,DV4EXIT: POPACC POPPSW RETIDV1: ……..

装置1中断服务

AJMPEXITDV2: ……..

装置2中断服务

AJMPEXITDV3: ……..

装置3中断服务

AJMPEXITDV4: ……..

装置4中断服务

AJMPEXIT33例6-4利用中断显示系统故障正常时监测点为低电平故障时监测点为高电平系统工作正常时,4个监测点均为低电平,LED不亮某个部分出现故障时,相应的监测点为高电平,对应的LED点亮LED1LED2LED3LED434

ORG0000H

AJMPMAIN

;上电复位,转向主程序

ORG0003H

;外部中断0入口地址

AJMPINSER

;转向中断服务程序

ORG0050HMAIN:ANLP1,#55H;P1.0,P1.2,P1.4,P1.6为输入;P1.1,P1.3,P1.5,P1.7输出为0SETBEX0;允许外部中断0中断

SETBIT0;选择边沿触发方式

SETBEA;CPU开中断HERE:SJMPHERE

;等待中断INSER:JNBP1.0,L1;查询中断源,P1.0=0,转L1SETBP1.1;是P1.0引起的中断,使相应的二极管亮L1:JNBP1.2,L2;继续查询

SETBP1.3L2:JNBP1.4,L3SETBP1.5L3:JNBP1.6,L4SETBP1.7L4:RETIEND

注意查询的方法监测点低电平为正常P1.0、P1.2、P1.4、P1.6接监测点

设置堆栈35中断应用:

1.LED控制S1S2用按键开关S1、S2控制LED闪亮与熄灭P1.0=0,LED亮P1.0=1,LED灭36流程图延时子程序(略)控制熄灭控制闪亮37

LIANGBIT00H ORG0000H LJMPST ORG0003H LJMPINT_0

ORG0013H LJMPINT_1

ORG0050HST: SETBP1.0

SETBEX0

SETBIT0

SETBEX1

SETBIT1

SETBEA CLRLIANG

MOVSP,#60H;定义一个位标志,LIANG=1,LED闪亮;转到主程序;转到INT0服务,控制熄灭;转到INT1服务,控制闪亮;定义主程序;外设初始化,LED熄灭;允许INT0中断;INT0边沿触发;允许INT1中断;INT1边沿触发;CPU开中断;标志初始化;设置堆栈38MAIN: JNBLIANG,LED_MIE CLRP1.0 LCALLDELAY SETBP1.0 LCALLDELAY SJMPMAINLED_MIE:SETBP1.0 SJMPMAININT_0:CLRLIANG RETIINT_1:SETBLIANG RETI;亮标志≠1,转LED灭;否则LED闪亮;LED熄灭;亮标志=0;中断返回;亮标志=1;中断返回CPLP1.0LCALLDELAY39DELAY: MOVR7,#250DL1: MOVR6,#250DL2: NOP;1机器周期(1uS)

NOP;1机器周期(1uS)

DJNZR6,DL2;2机器周期(2uS)

DJNZR7,DL1 RET;延时250mS END ;fosc=12MHz40中断应用:

2.中断控制流水灯循环方向用开关控制流水灯的循环方向采用中断控制方式在中断服务程序中设置循环方向标志41主程序流程图中断服务程序流程图(有键按下进入)F_L为循环方向标志42 F_LBIT00H ORG0000H LJMPMAIN ORG0003H LJMPINT_0 ORG0050H;********主程序初始化********MAIN: SETBEX0 SETBIT0 SETBEA MOVSP,#60H MOVA,#0FEH SET

温馨提示

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

评论

0/150

提交评论