⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dpjjx20.htm

📁 单片机入门的好书
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>单片机第二十课:中断系统</TITLE>
<META NAME="Template" CONTENT="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot">
</HEAD>
<BODY LINK="#0000ff" VLINK="#800080" background="../back.jpg">
<FONT FACE="宋体" LANG="ZH-CN">
<P ALIGN="JUSTIFY">单片机第二十课:中断系统</P>
</FONT><OL><FONT FACE="宋体" LANG="ZH-CN">

<P ALIGN="JUSTIFY"><LI>有关中断的概念</LI><p></P>
<P ALIGN="JUSTIFY">什么是中断,我们从一个生活中的例子引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。</P>
</font><P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。第一、什么可经引起中断,生活中很多事件可以引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了</font><FONT FACE="System" LANG="ZH-CN">….</FONT><FONT FACE="宋体" LANG="ZH-CN">等等诸如此类的事件,我们把可以引起中断的称之为中断源,单片机中也有一些可以引起中断的事件,</FONT><FONT FACE="System" LANG="ZH-CN">8031</FONT><FONT FACE="宋体" LANG="ZH-CN">中一共有</FONT><FONT FACE="System" LANG="ZH-CN">5</FONT><FONT FACE="宋体" LANG="ZH-CN">个:两个外部中断,两个计数</FONT><FONT FACE="System" LANG="ZH-CN">/</FONT><FONT FACE="宋体" LANG="ZH-CN">定时器中断,一个串行口中断。</font></P><FONT FACE="宋体" LANG="ZH-CN">
<P ALIGN="JUSTIFY">第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是等人上门),你可能会按你通常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。</P>
</FONT><P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">第三、中断的响应过程:当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应可以分为以下几个步骤:</font><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。</FONT><FONT FACE="System" LANG="ZH-CN">2</FONT><FONT FACE="宋体" LANG="ZH-CN">、寻找中断入口,根据</FONT><FONT FACE="System" LANG="ZH-CN">5</FONT><FONT FACE="宋体" LANG="ZH-CN">个不同的中断源所产生的中断,查找</FONT><FONT FACE="System" LANG="ZH-CN">5</FONT><FONT FACE="宋体" LANG="ZH-CN">个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这</FONT><FONT FACE="System" LANG="ZH-CN">5</FONT><FONT FACE="宋体" LANG="ZH-CN">个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。</FONT><FONT FACE="System" LANG="ZH-CN">3</FONT><FONT FACE="宋体" LANG="ZH-CN">、执行中断处理程序。</FONT><FONT FACE="System" LANG="ZH-CN">4</FONT><FONT FACE="宋体" LANG="ZH-CN">、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。</font></P><FONT FACE="宋体" LANG="ZH-CN">
<P ALIGN="JUSTIFY">究竟单片机是怎么样找到中断程序所在位置,又怎么返回的呢?我们稍后再谈。</P>
</FONT><FONT FACE="System" LANG="ZH-CN"><P ALIGN="JUSTIFY"></FONT><LI><FONT FACE="System" LANG="ZH-CN">MCS-51</font><FONT FACE="宋体" LANG="ZH-CN">中断系统的结构:</font></LI><FONT FACE="宋体" LANG="ZH-CN"><p></P></font></OL><P ALIGN="JUSTIFY">

<FONT FACE="宋体" LANG="ZH-CN">如图(抱歉,本图请找本</font><FONT FACE="System" LANG="ZH-CN">51</FONT><FONT FACE="宋体" LANG="ZH-CN">书看一下)所示,由与中断有关的特殊功能寄存器、中断入口、顺序查询逻辑电路等组成,包括</FONT><FONT FACE="System" LANG="ZH-CN">5</FONT><FONT FACE="宋体" LANG="ZH-CN">个中断请求源,</FONT><FONT FACE="System" LANG="ZH-CN">4</FONT><FONT FACE="宋体" LANG="ZH-CN">个用于中断控制的寄存器</FONT><FONT FACE="System" LANG="ZH-CN">IE</FONT><FONT FACE="宋体" LANG="ZH-CN">、</FONT><FONT FACE="System" LANG="ZH-CN">IP</FONT><FONT FACE="宋体" LANG="ZH-CN">、</FONT><FONT FACE="System" LANG="ZH-CN">ECON</FONT><FONT FACE="宋体" LANG="ZH-CN">和</FONT><FONT FACE="System" LANG="ZH-CN">SCON</FONT><FONT FACE="宋体" LANG="ZH-CN">来控制中断</FONT> <FONT FACE="宋体" LANG="ZH-CN">类弄、中断的开、关和各种中断源的优先级确定。</font></P><FONT FACE="宋体" LANG="ZH-CN">
<OL>

<P ALIGN="JUSTIFY"><LI>中断请求源:</LI><p></P></OL>
</FONT><DIR><P ALIGN="JUSTIFY">

<FONT FACE="宋体" LANG="ZH-CN">(</font><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">)外部中断请求源:即外中断</FONT><FONT FACE="System" LANG="ZH-CN">0</FONT><FONT FACE="宋体" LANG="ZH-CN">和</FONT><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">,经由外部引脚引入的,在单片机上有两个引脚,名称为</FONT><FONT FACE="System" LANG="ZH-CN">INT0</FONT><FONT FACE="宋体" LANG="ZH-CN">、</FONT><FONT FACE="System" LANG="ZH-CN">INT1</FONT><FONT FACE="宋体" LANG="ZH-CN">,也就是</FONT><FONT FACE="System" LANG="ZH-CN">P3.2</FONT><FONT FACE="宋体" LANG="ZH-CN">、</FONT><FONT FACE="System" LANG="ZH-CN">P3.3</FONT><FONT FACE="宋体" LANG="ZH-CN">这两个引脚。在内部的</FONT><FONT FACE="System" LANG="ZH-CN">TCON</FONT><FONT FACE="宋体" LANG="ZH-CN">中有四位是与外中断有关的。</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">IT0</font><FONT FACE="宋体" LANG="ZH-CN">:</FONT><FONT FACE="System" LANG="ZH-CN">INT0</FONT><FONT FACE="宋体" LANG="ZH-CN">触发方式控制位,可由软件进和置位和复位,</FONT><FONT FACE="System" LANG="ZH-CN">IT0=0</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">INT0</FONT><FONT FACE="宋体" LANG="ZH-CN">为低电平触发方式,</FONT><FONT FACE="System" LANG="ZH-CN">IT0=1</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">INT0</FONT><FONT FACE="宋体" LANG="ZH-CN">为负跳变触发方式。这两种方式的差异将在以后再谈。</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">IE0</font><FONT FACE="宋体" LANG="ZH-CN">:</FONT><FONT FACE="System" LANG="ZH-CN">INT0</FONT><FONT FACE="宋体" LANG="ZH-CN">中断请求标志位。当有外部的中断请求时,这位就会置</FONT><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">(这由硬件来完成),在</FONT><FONT FACE="System" LANG="ZH-CN">CPU</FONT><FONT FACE="宋体" LANG="ZH-CN">响应中断后,由硬件将</FONT><FONT FACE="System" LANG="ZH-CN">IE0</FONT><FONT FACE="宋体" LANG="ZH-CN">清</FONT><FONT FACE="System" LANG="ZH-CN">0</FONT><FONT FACE="宋体" LANG="ZH-CN">。</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">IT1</font><FONT FACE="宋体" LANG="ZH-CN">、</FONT><FONT FACE="System" LANG="ZH-CN">IE1</FONT><FONT FACE="宋体" LANG="ZH-CN">的用途和</FONT><FONT FACE="System" LANG="ZH-CN">IT0</FONT><FONT FACE="宋体" LANG="ZH-CN">、</FONT><FONT FACE="System" LANG="ZH-CN">IE0</FONT><FONT FACE="宋体" LANG="ZH-CN">相同。</font></P><P ALIGN="JUSTIFY">
<FONT FACE="宋体" LANG="ZH-CN">(</font><FONT FACE="System" LANG="ZH-CN">2</FONT><FONT FACE="宋体" LANG="ZH-CN">)内部中断请求源</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">TF0</font><FONT FACE="宋体" LANG="ZH-CN">:定时器</FONT><FONT FACE="System" LANG="ZH-CN">T0</FONT><FONT FACE="宋体" LANG="ZH-CN">的溢出中断标记,当</FONT><FONT FACE="System" LANG="ZH-CN">T0</FONT><FONT FACE="宋体" LANG="ZH-CN">计数产生溢出时,由硬件置位</FONT><FONT FACE="System" LANG="ZH-CN">TF0</FONT><FONT FACE="宋体" LANG="ZH-CN">。当</FONT><FONT FACE="System" LANG="ZH-CN">CPU</FONT><FONT FACE="宋体" LANG="ZH-CN">响应中断后,再由硬件将</FONT><FONT FACE="System" LANG="ZH-CN">TF0</FONT><FONT FACE="宋体" LANG="ZH-CN">清</FONT><FONT FACE="System" LANG="ZH-CN">0</FONT><FONT FACE="宋体" LANG="ZH-CN">。</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">TF1</font><FONT FACE="宋体" LANG="ZH-CN">:与</FONT><FONT FACE="System" LANG="ZH-CN">TF0</FONT><FONT FACE="宋体" LANG="ZH-CN">类似。</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">TI</font><FONT FACE="宋体" LANG="ZH-CN">、</FONT><FONT FACE="System" LANG="ZH-CN">RI</FONT><FONT FACE="宋体" LANG="ZH-CN">:串行口发送、接收中断,在串口中再讲解。</font></P></DIR>

<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">2</font><FONT FACE="宋体" LANG="ZH-CN">、中断允许寄存器</FONT><FONT FACE="System" LANG="ZH-CN">IE</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">在</font><FONT FACE="System" LANG="ZH-CN">MCS</FONT><FONT FACE="宋体" LANG="ZH-CN">-</FONT><FONT FACE="System" LANG="ZH-CN">51</FONT><FONT FACE="宋体" LANG="ZH-CN">中断系统中,中断的允许或禁止是由片内可进行位寻址的</FONT><FONT FACE="System" LANG="ZH-CN">8</FONT><FONT FACE="宋体" LANG="ZH-CN">位中断允许寄存器</FONT><FONT FACE="System" LANG="ZH-CN">IE</FONT><FONT FACE="宋体" LANG="ZH-CN">来控制的。见下表</font></P>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=607>
<TR><TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="JUSTIFY">EA</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="JUSTIFY">X</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="JUSTIFY">X</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="JUSTIFY">ES</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="JUSTIFY">ET1</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="JUSTIFY">EX1</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="JUSTIFY">ET0</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="JUSTIFY">EX0</FONT></TD>
</TR>
</TABLE>

<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">其中</font><FONT FACE="System" LANG="ZH-CN">EA</FONT><FONT FACE="宋体" LANG="ZH-CN">是总开关,如果它等于</FONT><FONT FACE="System" LANG="ZH-CN">0</FONT><FONT FACE="宋体" LANG="ZH-CN">,则所有中断都不允许。</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">ES</font><FONT FACE="宋体" LANG="ZH-CN">-串行口中断允许</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">ET1</font><FONT FACE="宋体" LANG="ZH-CN">-定时器</FONT><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">中断允许</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">EX1</font><FONT FACE="宋体" LANG="ZH-CN">-外中断</FONT><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">中断允许。</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">ET0</font><FONT FACE="宋体" LANG="ZH-CN">-定时器</FONT><FONT FACE="System" LANG="ZH-CN">0</FONT><FONT FACE="宋体" LANG="ZH-CN">中断允许</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">EX0</font><FONT FACE="宋体" LANG="ZH-CN">-外中断</FONT><FONT FACE="System" LANG="ZH-CN">0</FONT><FONT FACE="宋体" LANG="ZH-CN">中断允许。</font></P><P ALIGN="JUSTIFY">
<FONT FACE="宋体" LANG="ZH-CN">如果我们要设置允许外中断</font><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">,定时器</FONT><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">中断允许,其它不允许,则</FONT><FONT FACE="System" LANG="ZH-CN">IE</FONT><FONT FACE="宋体" LANG="ZH-CN">可以是</font></P>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=607>
<TR><TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="CENTER">EA</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="CENTER">X</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="CENTER">X</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="CENTER">ES</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="CENTER">ET1</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="CENTER">EX1</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="CENTER">ET0</FONT></TD>
<TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="CENTER">EX0</FONT></TD>
</TR>
<TR><TD WIDTH="13%" VALIGN="TOP">
<FONT FACE="System" LANG="ZH-CN"><P ALIGN="CENTER">1</FONT></TD>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -