单片机原理与接口技术(第七版)课件 项目3 中断_第1页
单片机原理与接口技术(第七版)课件 项目3 中断_第2页
单片机原理与接口技术(第七版)课件 项目3 中断_第3页
单片机原理与接口技术(第七版)课件 项目3 中断_第4页
单片机原理与接口技术(第七版)课件 项目3 中断_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

单片机指令和程序设计DANPIANJIYUANLIYUJIEKOUJISHU单片机原理与接口技术(第七版)“十四五”职业教育国家规划教材项目规划12中断控制LED345多个外部中断源控制LED自动防盗报警器硬件和软件设计并仿真调试自动防盗报警器制作调试6自动防盗报警器改进首前后一旦有未经允许的闯入,本报警器立即警报声大作,同时显示闯入者方位。报警期间再有信号输入要准确显示,声音连续不停直到人为解除。项目规划以放置于关键部位的光电传感器、振动传感器、磁性传感器、微动开关等产生的开关信号输入单片机,单片机检测到信号之后产生输出,推动显示发光二极管发光,同时输出驱动报警喇叭发声。声音连续不停直到人为解除。项目规划1.中断的概念、信号源、优先级、控制方法。2.中断入口地址。3.中断编程(初始化、中断服务)。项目规划1.使用软件设计电路图、编写并调试程序2.使用工具制作电路板并测试其正确性3.软硬件联调,完成要求功能项目规划采取不同的传感器,可以对不同的环境进行保护;采用不同的输出,可以有不同的保护措施。参考样本:光盘仿真文件:自动防盗报警器.DSN(包括电路和程序)有关提示:可以用复位按钮来解除警报,用电源开关来关闭功能。项目规划1.掌握有关中断、中断源、中断优先级等概念;理解中断系统结构,了解中断响应过程、中断优先级排列;2.掌握五个中断源的中断请求标志、中断允许寄存器IE、中断优先级寄存器IP各位的含义及设置;3.掌握外部中断的两种触发方式以及中断服务程序编程方法;项目规划中断控制LED

任务3.1

按钮按动一次,产生一次中断,中断服务程序中控制LED亮灯移位。任务要求MCS-51的中断系统及其控制。知识要求●任务1中断控制LED

3.1.1中断控制LED电路设计技能训练3-1中断控制移灯目的:感受中断作用及编程控制方法说明:这个技能训练是个模仿型项目。按钮与外部中断0相连,P0口接8只发光二极管,每按一次按钮,按顺序循环移动点亮一位发光二极管,电路如图所示。P0口没有内部上拉电阻,所以要外加(其实这种用法不加上拉电阻也是可以的)。设计成P0低电平有效(灯亮),是因为P0口低电平输出负载能力比较强。●任务1中断控制LED

3.1.1中断控制LED电路设计技能训练3-1中断控制移灯

参考源程序:;-------------------------------------------------------------------分隔线1 ORG 0000H ;PC复位地址 LJMP START;转主程序入口地址 ORG 0003H ;外部中断0入口地址 LJMP INT_0;转外部中断0服务程序入口地址 ORG 0100H ;主程序入口地址;-------------------------------------------------------------------分隔线2START: MOVSP,#60H ;堆栈初始化----主程序开始 MOVP0,#0FFH;8个LED全灭 MOVA,#0FEH ;设置发光二极管第一次中断时状态,1个亮 SETBIT0 ;将外部中断0设置为下降沿触发方式 SETBEA ;CPU开中断 SETBEX0 ;外部中断0开中断 SJMP$ ;等待中断----主程序结束;-------------------------------------------------------------------分隔线3 ORG0200H;外部中断0服务程序----开始INT_0: MOVP0,A ;点亮相应指示灯 RLA ;修改灯状态,为下一次使用。 RETI;中断返回,外部中断0服务程序----结束;-------------------------------------------------------------------分隔线4 END ;所有程序结束●任务1中断控制LED

3.1.1中断控制LED电路设计技能训练3-1中断控制移灯

以上程序可以分为3个部分:即分割线1到分割线2,是各个程序的入口地址,这是不可改变的。然后是主程序,即分割线2到分割线3;以后,即分割线3到分割线4,是中断服务程序,END是程序结束伪指令。主程序中,是中断初始化。这个项目中,主程序就是初始化,完后就是等待中断,没有其他功能。中断服务程序功能也很简单,每次进入中断,把之前准备好的亮灯状态送给P0口,然后为下一次准备状态,最后中断返回。有关中断的具体知识请往下看。●任务1中断控制LED

3.1.2中断源中断源:单片机的CPU正在处理某个任务时,遇到其它事件请求(比如按钮按下或定时器溢出),暂时停止目前的任务,转去处理请求的事件,处理完后再回到原来的地方,继续原来的工作,这一过程称为“中断”。我们把请求的事件称为中断源。引起中断和处理中断的软、硬件共同构成单片机的中断系统。中断过程示意图如图示。1、中断概念●任务1中断控制LED

3.1.2中断源2、中断源向CPU提出中断请求的器件或设备就是中断源,中断源是中断控制的起点。中断源向CPU提出的“中断请求”通常是一种电信号。一个单片机系统通常有若干个中断源。这些中断源有的来自单片机内部,有的来自单片机外部。MCS-51系列单片机的中断系统具有三类共五个中断源,两个来自单片机的外部,三个来自单片机的内部,并为每个中断源设置了中断请求标志位。检测到中断请求信号后,单片机为相应的中断标志位置位,以便在下一个机器周期进行下一步的控制和处理。外部中断源定时器/计数器中断源串行中断源●任务1中断控制LED

3.1.2中断源2、中断源(1)外部中断源MCS-51系列单片机有两个外部中断源,分别通过引脚(P3.2)和(P3.3)引入中断请求信号。外中断源有两种中断触发方式:电平方式和脉冲方式。当外中断源以电平方式触发时,低电平有效。CPU采样到(或者)引脚上为低电平时,就认为是外中断0(或者外中断1)的一个有效的中断请求信号。当外中断源以脉冲方式触发时,负脉冲有效。CPU在一个机器周期采样到(或者)引脚上为高电平,在接下来的一个机器周期采样到(或者)引脚上是低电平,即出现了下降沿的跳变(负脉冲)时,就认为是外中断0(或者外中断1)的一个有效的中断请求信号。因为两次检测的间隔时间为一个机器周期,负脉冲对应的高低电平持续时间都应至少维持一个机器周期,从而保证CPU能够检测到电平的跳变。联系:仿真项目中断控制移灯.DSN就是利用了一个外部中断源,并且是负脉冲触发。●任务1中断控制LED

3.1.2中断源(2)定时器/计数器中断源MCS-51系列单片机内部有两个定时器/计数器T0和T1,用于进行定时和计数控制,是内部中断源。T0和T1在内部时钟脉冲(或者外部计数脉冲)的作用下进行定时(或者计数),定时(或者计数)结束时,由硬件产生溢出中断信号向CPU提出中断请求。由CPU对定时(或者计数)结果进行处理。(定时器的使用在项目4中详细说明)52子系列单片机还有定时/计数器2,也能引起中断。2、中断源●任务1中断控制LED

3.1.2中断源(3)串行中断源MCS-51系列单片机有一个全双工异步串行口,用于进行串行通信,是内部中断源。当串行发送结束时,由硬件向CPU请求提供下一次发送的数据;当串行接收结束时,同样由硬件向CPU请求把接收的数据送入单片机内部。串行发送中断请求信号和串行接收中断请求信号通过一个或门连接成为一个中断源。(串行口的使用在项目5中详细说明)2、中断源●任务1中断控制LED

3.1.2中断源中断系统图2、中断源●任务1中断控制LED

3.1.2中断源3、中断标志MCS-51系列单片机为每个中断源设置了中断请求标志位。检测到中断请求信号后,先将相应的中断标志位置位,以便在后续的机器周期里进行下一步的控制和处理。这些中断请求标志位集中锁存在专用寄存器TCON和SCON中。定时控制寄存器TCON中的中断标志串行控制寄存器SCON中的中断标志●任务1中断控制LED

3.1.2中断源(1)定时控制寄存器TCON中的中断标志外中断请求标志和定时/计数溢出中断标志锁存在定时控制寄存器TCON中,这个寄存器字节地址88H,可以位寻址,各位定义如下:3、中断标志

位序号D7D6D5D4D3D2D1D0位地址8FH8EH8DH8CH8BH8AH89H88H位名称TF1TR1TF0TR0IE1IT1IE0IT0●任务1中断控制LED

3.1.2中断源(1)定时控制寄存器TCON中的中断标志

TCON的高四位进行定时/计数控制,其中高两位(D6、D7位)控制定时器/计数器1,低两位(D4、D5位)控制定时器/计数器0。有阴影的是中断标志位。TF1(TCON.7)——定时器/计数器T1的溢出中断标志位,当T1定时(或者计数)溢出时,由硬件自动置1。TF0(TCON.5)——定时器/计数器T0的溢出中断标志位,当T0定时(或者计数)溢出时,由硬件自动置1。TR1(TCON.6)——定时器/计数器T1的启动停止控制位,由软件进行设定。TR1=0,停止T1定时(或者计数);TR1=1,启动T1定时(或者计数)。TR0(TCON.4)——定时器/计数器T0的启动停止控制位,由软件进行设定。TR0=0,停止T0定时(或者计数);TR0=1,启动T0定时(或者计数)。3、中断标志

●任务1中断控制LED

3.1.2中断源(1)定时控制寄存器TCON中的中断标志

TCON的低四位进行外中断控制,其中高两位(D2、D3位)进行外中断1的控制,低两位(D0、D1位)进行外中断0的控制。IE1(TCON.3)——外中断1的中断请求标志位,当在引脚得到有效的外中断请求电信号时,由硬件自动置1。IE0(TCON.1)——外中断0的中断请求标志位,当在引脚得到有效的外中断请求电信号时,由硬件自动置1。IT1(TCON.2)——外中断1的触发方式控制位,由软件进行设定。IT1=0,外中断1为电平方式触发;IT1=1,外中断1为脉冲方式触发。IT0(TCON.0)——外中断0的触发方式控制位,由软件进行设定。IT0=0,外中断0为电平方式触发;IT0=1,外中断0为脉冲方式触发。请回答:4个中断标志位在哪里?3、中断标志

●任务1中断控制LED

3.1.2中断源(2)串行控制寄存器SCON中的中断标志串行收发结束的中断标志位被锁存在串行控制寄存器SCON中,这个寄存器字节地址是98H,可以位寻址,各位定义如下:3、中断标志

位序号D7D6D5D4D3D2D1D0位地址9FH9EH9DH9CH9BH9AH99H98H位名称SM0SM1SM2RENTB8RB8TIRI

这里只介绍SCON中与串行中断控制有关的低两位(TI、RI),其他各位将在串行口项目中详细介绍。TI(SCON.1)——串行发送中断标志位,当串行口完成一次数据发送后,由硬件自动置1。RI(SCON.0)——串行接收中断标志位,当串行口完成一次数据接收后,由硬件自动置1。●任务1中断控制LED

3.1.2中断源!串行口有2个中断标志位。8051有5个中断源,6个中断标志位。!注意:CPU响应某个中断之后,会自动撤除该中断源的请求标志(只适用于定时器和下降沿触发的外中断。串行口的中断标志不会自动撤除,低电平触发的外部中断标志无法自动撤除)。*3.关于中断请求标志撤除的讨论*见光盘文件?现在知道按钮为什么会引起中断了吧?按钮中断还可以接在哪个引脚上?答案是另外一个外部中断引脚,……。3、中断标志

●任务1中断控制LED

3.1.3中断控制1、中断允许MCS-51系列单片机中断系统通过中断允许控制寄存器IE实现开中断和关中断的功能。IE寄存器对IE的设置方法●任务1中断控制LED

●任务1中断控制LED

3.1.3中断控制MCS-51系列单片机中断系统通过中断允许控制寄存器IE实现开中断和关中断的功能。(参见图3-4,在图中找到IE)(1)IE寄存器IE寄存器由一个中断允许总控制位和各中断源的中断允许控制位构成,从而进行两级中断允许控制。IE寄存器可以位寻址,各位定义如下:1、中断允许

位序号D7D6D5D4D3D2D1D0位地址AFHACHABHAAHA9HA8H位名称EA--ESET1EX1ET0EX0●任务1中断控制LED

3.1.3中断控制

注意:IE寄存器的各位名称均是“E”开头。EA的内容为1(或0)说明对于所有的中断源“开”(或“关”)中断。在EA为1的前提下,某一位的内容为1(或0)说明与其对应的中断源“开”(或“关”)中断。结合图3-4看。最高位是中断允许总控制位EA。EA(IE.7)——中断允许总控制位,其状态由用户通过程序进行控制。EA=0,中断总禁止,即关中断;EA=1,中断总允许,即开中断,此时由各中断源的中断允许控制位决定各中断源的中断允许或禁止。

提醒:从第D0位开始往前看,依次是外中断0、定时器T0、外中断1、定时器T1、串行传送的中断允许控制位,这个次序在MCS-51系列单片机的中断控制中十分有用。1、中断允许

●任务1中断控制LED

3.1.3中断控制EX0(IE.0)——外中断0的中断允许控制位。中断总允许时,EX0=0,禁止外中断0中断;EX0=1,允许外中断0中断。ET0(IE.1)——定时器T0的中断允许控制位。中断总允许时,ET0=0,禁止T0中断;ET0=1,允许T0中断。EX1(IE.2)——外中断1的中断允许控制位。中断总允许时,EX1=0,禁止外中断1中断;EX1=1,允许外中断1中断。ET1(IE.3)——定时器T1的中断允许控制位。中断总允许时,ET1=0,禁止T1中断;ET1=1,允许T1中断。ES(IE.4)——串行中断的中断允许控制位。中断总允许时,ES=0,禁止串行中断;ES=1,允许串行中断。1、中断允许

●任务1中断控制LED

3.1.3中断控制(2)对IE的设置方法MCS-51系列单片机系统复位后,IE寄存器中各位均被清0,禁止所有的中断。在应用时,由软件进行设定。既可以使用位操作,也可以使用字节操作来实现对IE的设置。例如,开放外中断0和定时中断1。使用位操作: SETB EA;EA=1,总允许SETB EX0;EX0=1,外中断0允许SETB ET1;ET1=1,定时器1中断允许使用字节操作: MOVIE,#89H;IE=10001001B,3个1?在【技能训练3-1】的程序里找到中断允许的指令?1、中断允许

3.1.3中断控制2、中断优先级当多个中断源同时向CPU请求中断时,就出现了CPU应该先响应哪个中断请求的问题。单片机往往根据中断源引发事件的轻重缓急为其设置不同的优先级。优先级是单片机对中断源响应次序的规定。优先级高的中断请求先响应,优先级低的中断请求后响应。IP寄存器

自然优先级●任务1中断控制LED

●任务1中断控制LED

3.1.3中断控制(1)IP寄存器MCS-51系列单片机的每个中断源具有高低两个中断优先级,可以实现两级中断嵌套。由中断优先级寄存器IP来设置各中断源的优先级状态。IP寄存器可以位寻址,其中各位与各中断源一一对应,具体定义如下:2、中断优先级

位序号D7D6D5D4D3D2D1D0位地址BCHBBHBAHB9HB8H位名称---PSPT1PX1PT0PX0注意:IP寄存器的各位名称均是“P”开头,是优先的意思。某一位的内容为1(或0)说明与其对应的中断源的优先级为“高”(或“低”)。从第0位开始,依次是外中断0、定时器T0、外中断1、定时器T1、串行口的中断优先级控制位。●任务1中断控制LED

3.1.3中断控制(1)IP寄存器PX0(IP.0)——外中断0的中断优先级控制位。PX0=0,外中断0为低中断优先级;PX0=1,外中断0为高中断优先级。PT0(IP.1)——定时器T0的中断优先级控制位。PT0=0,T0为低中断优先级;PT0=1,T0为高中断优先级。PX1(IP.2)——外中断1的中断优先级控制位。PX1=0,外中断1为低中断优先级;PX1=1,外中断1为高中断优先级。PT1(IP.3)——定时器T1的中断优先级控制位。PT1=0,T1为低中断优先级;PT1=1,T1为高中断优先级。PS(IP.4)——串行中断源的中断优先级控制位。PS=0,串行中断为低中断优先级;PS=1,串行中断为高中断优先级。MCS-51系列单片机系统复位后,IP寄存器中各控制位均被清0,设为低优先级。与IE寄存器一样,由软件对IP进行设定,既可以使用位操作,也可以使用字节操作。2、中断优先级

●任务1中断控制LED

3.1.3中断控制(2)自然优先级当两个不同优先级的中断源同时进行中断请求时,单片机将先处理高优先级中断,后处理低优先级中断。对同时到来的同级中断请求,将按照自然优先级来确定中断响应次序,自然优先级由硬件控制,排列如表3-1所列。2、中断优先级

中断源标志自然优先级外部中断0TF0高低定时器T0中断IE0外部中断1TF1定时器T1中断IE1串行口中断TI/RI●任务1中断控制LED

3.1.3中断控制例如,(IE)=8FH,(IP)=06H,中断请求标志TI、TF1、IE1、IE0同时为1,则响应的次序将按下面的步骤进行:①分析IE寄存器的内容,确定对哪些中断源关中断,则不予响应。由(IE)=8FH,得知对串行口禁止中断,对中断标志TI不予响应。②分析IP寄存器的内容,确定哪些中断源是高优先级,哪些中断源是低优先级,把需要响应的中断源分为先响应组和后响应组。由(IP)=06H,得知外中断1和定时器0为高优先级中断源,又由于此优先级中只有外中断1进行了中断请求,因此最先响应中断标志IE1。③在同级响应组中,按照自然优先级进行排序,从而确定响应的最终次序。由(IP)=06H,得知外中断0和定时器1同为低优先级中断源,于是由自然优先级决定在响应IE1结束后,将先响应IE0,后响应TF1。注意:在确定中断响应次序时,应依次考虑IE的内容、IP的内容、自然优先级。?在【技能训练3-1】中断控制移灯中,按钮中断的优先级如何?2、中断优先级

3.1.3中断控制3、中断的嵌套CPU在进行中断响应时可以响应更高级的中断请求,这种情况称为中断的嵌套。需要注意的是,引起中断嵌套的中断源的优先级一定要高于当前响应中断源的优先级,同优先级或低优先级中断源的中断请求不能引起中断的嵌套,中断嵌套如图所示。●任务1中断控制LED

●任务1中断控制LED

3.1.3中断控制除草的农民正在吃饭,拿起馒头咬了一口,手机铃声响起。农民赶忙放下馒头,拿起手机,咽下口中的馒头,“……啊谁?”,原来是合作社通知,明天有收购商来谈农产品收购合同。“知道了,谢谢哈!”农民放下电话,赶紧吃饭,吃完了还要除草呢,不然天下雨,草就长疯了,还拿什么卖给收购商?----送饭的打断了农民除草,电话又打断了农民吃饭,这叫中断嵌套。电话可以看做高优先级中断。3、中断嵌套

3.1.4中断处理过程中断请求中断响应中断服务中断返回中断处理过程●任务1中断控制LED

●任务1中断控制LED

3.1.4中断处理过程1.中断请求中断源只有在有请求时,CPU才可能响应它,不同的中断源产生中断请求的方式是不同的。外部中断产生请求是在外中断的引脚上加低电平或脉冲下降沿信号,而定时/计数器中断请求是在内部的计数单元计满溢出时产生,串行口中断请求是在完成一次发送或接收时产生。●任务1中断控制LED

3.1.4中断处理过程2.中断响应CPU响应中断的条件:(1)有中断源发出中断请求;(2)中断总允许位EA=1(IE寄存器最高位),即CPU允许所有中断源申请中断;(3)申请中断的中断源的中断允许位为1,即此中断源可以向CPU申请中断;(4)CPU没有正在执行一个同级或更高级的中断服务程序;(5)正在执行的指令完成;(6)正在完成的指令不是返回(RETI)指令或者对专用寄存器IE、IP进行读/写的指令。此时,在执行RETI或者读/写IE或IP之后,不会马上响应中断请求,至少要执行一条其他指令,才会响应中断。●任务1中断控制LED

3.1.4中断处理过程2.中断响应CPU响应中断时的操作:当CPU响应中断时,它首先使优先级状态触发器置位,这样可以阻断同级或低级的中断;然后,中断系统自动把断点地址压入堆栈保护(但不保护状态寄存器PSW及其他寄存器内容,),再将对应的中断入口地址装入程序计数器PC,使程序转向该中断入口,开始执行中断服务程序。?中断入口在哪里?答案是在程序存储器里,……。●任务1中断控制LED

3.1.4中断处理过程3.程序存储器的中断入口CPU响应中断请求、为中断源事件进行处理,是通过执行中断服务程序实现的。MCS-51系列单片机在内部程序存储器中为五个中断源定义了固定的中断服务程序入口地址,其中:0003H~000AH 外中断0的中断入口地址,C51语言用中断序号0000BH~0012H 定时器T0的中断入口地址,C51语言用中断序号10013H~001AH 外中断1的中断入口地址,C51语言用中断序号2001BH~0022H 定时器T1的中断入口地址,C51语言用中断序号30023H~002AH 串行中断入口地址,C51语言用中断序号4002BH~定时器T2的中断入口地址(52子系列才有用),C51语言用中断序号5●任务1中断控制LED

3.1.4中断处理过程3.程序存储器的中断入口响应中断请求后,CPU按照中断源的不同,自动转到各中断源对应的入口首地址去执行程序。中断的入口地址,是中断控制的要点之一。但8个字节的中断服务区难以存下一般的中断服务程序,解决办法是在中断区的入口地址处存放一条无条件转移指令,将流程转入中断服务程序的真正入口。例如,外中断0的中断服务程序存放在程序存储器INT_0(INT_0是中断服务程序第一条指令前面的标号)开始的地方,则编程如下:ORG0003H;指定开始地址,这是外中断0的入口地址LJMPINT_0;无条件转移到外中断0服务程序开始处?在【技能训练3-1】中断控制移灯中,按钮中断入口在哪里?●任务1中断控制LED

3.1.4中断处理过程4.中断服务中断服务,就是完成中断源请求的任务。这需要编程者用指令来实现。也就是说,我们需要编写一个中断服务程序,来完成中断源请求的任务。详情后述。●任务1中断控制LED

3.1.4中断处理过程5.中断返回中断服务完成任务后,要返回原来被打断的程序继续执行。中断返回由专门的中断返回指令RETI实现。RETI指令将断点地址从堆栈中取出,送回到程序计数器PC中,并通知中断系统已完成中断处理,清除优先级状态触发器。注意:中断返回和子程序的返回类似,需要执行一条返回指令RETI。注意RETI不是RET,不可混淆。?在【技能训练3-1】中断控制移灯中,在程序中找到中断返回指令了吗?●任务1中断控制LED

3.1.4中断处理过程【技能训练3-2】中断优先级演示目的:理解中断系统工作原理,学习中断编程内容:运行随书光盘仿真文件夹\中断优先级.DSN,观察仿真运行结果。这个项目演示了单片机的中断系统的大部分特性和程序设计方法。单片机主程序控制P0口数码管循环显示0~8;外中断0(INT0)、外中断1(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。借proteus仿真功能形象直观地演示了MCS-51系列单片机高、低两级优先级工作原理。高优先级可中断低优先级,但低优先级的中断请求不能中断高优先级,同一优先级不能相互中断,中断优先级仿真电路原理见图3-6。●任务1中断控制LED

3.1.4中断处理过程【技能训练3-2】中断优先级演示目的:理解中断系统工作原理,学习中断编程内容:运行随书光盘仿真文件夹\中断优先级.DSN,观察仿真运行结果。这个项目演示了单片机的中断系统的大部分特性和程序设计方法。单片机主程序控制P0口数码管循环显示0~8;外中断0(INT0)、外中断1(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。借proteus仿真功能形象直观地演示了MCS-51系列单片机高、低两级优先级工作原理。高优先级可中断低优先级,但低优先级的中断请求不能中断高优先级,同一优先级不能相互中断,中断优先级仿真电路原理见图3-6。【技能训练3-2】中断优先级●任务1中断控制LED

3.1.4中断处理过程【技能训练3-2】中断优先级演示

【技能训练3-2】中断优先级●任务1中断控制LED

3.1.4中断处理过程中断优先级演示汇编语言程序清单:(1);外中断0(INT0)、外中断1(INT1)发生时,分别在P2、P1口依次显示1~8;;INT1为高优先级,INT0为低优先级。;高优先级可中断低优先级,但低优先级的中断请求不能中断高优先级,;同一优先级不能相互中断;------------------------------------------分隔线1 ORG0000H;复位入口地址 LJMPSTART;转移到主程序 ORG0003H;外中断0入口地址 LJMPINTS0; ORG0013H;外中断1入口地址 LJMPINTS1; ORG0100H;主程序开始地址;------------------------------------------分隔线2

【技能训练3-2】中断优先级●任务1中断控制LED

3.1.4中断处理过程中断优先级演示汇编语言程序清单:(2);-------------------------------------------分隔线2START: MOVIE,#10000101B;主程序开始初始化,中断允许外中断0,1 MOVTCON,#00000101B;初始化,外中断0,1下降沿触发 MOVP0,#0FFH; MOVP3,#0FFH; SETBPX1;初始化,外中断1高优先L0: MOVA,#01;主程序循环开始,要显示的数,从1开始L1: PUSHACC;保护累加器的值,就是要显示的数 ACALLSEG7;调用查表子程序,查出要显示的数对应的字型码 MOVP0,A;返回的字型码送P0口,显示 ACALLDELAY;延时,约半秒 POPACC;恢复保存的值,就是要显示的数 INCA;就是要显示的数,加1 CJNEA,#9,L1;不到9转移,循环8次,显示1到8 SJMPL0;主程序循环结束,主程序结束;--------------------------------------------分隔线3

【技能训练3-2】中断优先级●任务1中断控制LED

3.1.4中断处理过程中断优先级演示汇编语言程序清单:(3);-------------------------------------------------分隔线3INTS0:PUSHACC;外中断0服务程序开始,保护累加器MOVA,#0;外中断0显示数初值TS0: INCA;外中断0显示数加1,循环8次执行8次 PUSHACC;保护累加器的值,就是外中断0要显示的数 ACALLSEG7;调用查表子程序,查出要显示的数对应的字型码 MOVP2,A;返回的字型码送P2口,显示 ACALLDELAY;延时,约半秒 POPACC;恢复保存的值,就是外中断0要显示的数 CJNEA,#8,TS0;不等于8转移,循环8次 MOVP2,#0FFH;等于8,没转移,P2口数码管熄灭 POPACC;恢复累加器值 RETI;外中断0服务程序结束,返回主程序;-------------------------------------------------分隔线4

【技能训练3-2】中断优先级●任务1中断控制LED

3.1.4中断处理过程中断优先级演示汇编语言程序清单:(4);--------------------------------------------------分隔线4INTS1:PUSHACC;外中断1服务程序开始,保护累加器MOVA,#0;外中断1显示数初值TS1: INCA;外中断1显示数加1,循环8次执行8次 PUSHACC;保护累加器的值,就是外中断1要显示的数 ACALLSEG7;调用查表子程序,查出要显示的数对应的字型码 MOVP1,A;返回的字型码送P1口,显示 ACALLDELAY;延时,约半秒 POPACC;恢复保存的值,就是外中断1要显示的数 CJNEA,#8,TS1;不等于8转移,循环8次 MOVP1,#0FFH;等于8,没转移,P2口数码管熄灭 POPACC;恢复累加器值 RETI;外中断1服务程序结束,返回主程序;--------------------------------------------------分隔线5

【技能训练3-2】中断优先级●任务1中断控制LED

3.1.4中断处理过程中断优先级演示汇编语言程序清单:(5);--------------------------------------------------分隔线5DELAY:MOVR7,#255;延时子程序入口D1: MOVR6,#255;D2:NOP;;此处省略5个字,NOP,越多延时越长,DJNZR6,D2; DJNZR7,D1; RET;延时子程序结束,返回调用程序;-----------------------------------------------分隔线6SEG7: INCA;查表子程序开始,表偏移量加1MOVCA,@A+PC;查表指令,查到字型码,在累加器A中 RET;子程序结束,返回调用程序 DB0CH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;0,1,2,3,4,5,6,7,8,9字形表 END;全部程序结束【技能训练3-2】中断优先级●任务1中断控制LED

3.1.4中断处理过程中断优先级演示汇编语言程序分析:分隔线1到分隔线2之间是各种程序规定入口,有必要时,用无条件转移指令转移到实际入口。分隔线2到分隔线3之间是主程序,实际地址由伪指令ORG0100H决定,具体位置以不占用规定的入口地址和不超出存储器空间为限。入口标号是:START。主程序的功能除了初始化,就是在P0口循环显示1—8.分隔线3到分隔线4之间是外中断0服务程序,实际地址没有指定,那就紧随其后。入口标号是:ITNS0。程序的功能就是在P2口循环显示1—8.分隔线4到分隔线5之间是外中断1服务程序。入口标号是:ITNS1。程序的功能就是在P2口循环显示1—8.分隔线5到分隔线6之间是延时子程序。入口标号是:DELAY。程序的功能就是延时,大约半秒左右。分隔线6之后到结束是查表子程序。入口标号是:SEG7。程序的功能就是把要显示的数字转换成对应的字型码,保存在累加器A中。查表指令和程序在项目2中已经学过,忘记的请回头看看。

【技能训练3-2】中断优先级●任务1中断控制LED

3.1.4中断处理过程★这个算是个验证型项目。通过分析仿真程序,查看中断允许寄存器IE的设置方法、中断优先级寄存器IP的设置方法,还有中断服务程序入口地址的使用方法和外中断触发方式的使用方法。通过电路分析,查看中断信号的来源和产生方法。这些都在报警器中需要使用。★采用查询方式,中断程序如何编写?,参考仿真文件夹:控制移灯-查询.DSN,观察程序写法。在CPU不忙的时候,这种查询方法也很好。

看不懂?继续看下去,下面就告诉你程序设计的方法。看完程序设计方法,再回头看这个程序,应该就没有什么问题了。【技能训练3-2】中断优先级3.1.5中断程序设计方法中断处理过程是一个和硬件、软件都有关的过程,其编程方法具有一定的特殊性,由图可知,与中断有关的程序一般包含两部分:主程序的中断初始化部分以及中断响应后的处理程序。●任务1中断控制LED

3.1.5中断程序设计方法(1)开中断

(2)设置中断优先级

(3)中断源的相关控制

(4)编写中断服务程序

前面3项在主程序中,一般称为中断的初始化,第4项一般要放在主程序之后。

1.主程序中的中断初始化●任务1中断控制LED

3.1.5中断程序设计方法2.中断服务程序设计中断服务程序是为中断源的特定要求服务的独立程序段,以中断返回指令结束。如图所示为中断服务程序框图,在中断响应过程中,断点的保护与恢复是由硬件自动完成的。用户在编写中断服务程序时要考虑需要保护的现场,在恢复现场时,要注意压栈与出栈指令必须成对使用,先入栈的内容应该后弹出,同时还要及时清除需用软件清除的中断标志。●任务1中断控制LED

●任务1中断控制LED

3.1.5中断程序设计方法通过仿真项目:中断优先级.DSN和中断控制移灯.DSN,分析他们的程序,可以看到并验证中断程序设计方面的方法。下面的扩展外部中断.DSN,其程序设计也是按照以上要求实现的。现在,中断及其编程,应该可以了!剩下的问题就是:应用。多个外部中断源控制LED任务3.2

●扩展外中断源有8个外部中断请求信号,每个请求信号要求实现不同的功能。任务要求学会扩展外部中断。巩固中断知识和程序设计方法。目的●扩展外中断源51单片机只有2个外部中断输入端口,如果不够用,可以设法扩展。扩展的基本方法是使用并行口。可以使用单片机自己有的,也可以使用扩展的并行口。当然也可以使用专用的中断管理器件。3.2.1扩展外中断源的方法●任务1中断控制LED

3.2.1扩展外中断源的方法例如,现在有8个信号都要求提供中断服务,需要8个信号输入端。可以将不用的其他并行口作为信号输入端,再将每个输入端的信号经过一个逻辑电路送给一个外部中断输入端口。当任意一个输入信号有效,都可以引起中断。

【技能训练3-3】扩展8路外部中断源控制LED目的:中断控制和编程内容:扩展外部中断源说明:这是个模仿项目。重点理解程序设计方法。参考文件:扩展外部中断.DSN设:8个外部中断请求端连接手动开关K0~K7,每个开关按动一次产生一个负脉冲,作为一个中断请求信号。按动K0要求D0~D7全部熄灭,K1要求全亮,K2要求间隔亮,K3要求3个灯一起灭,等等。技能训练3-3扩展8路外部中断源●任务1中断控制LED

3.2.1扩展外中断源的方法例如,现在有8个信号都要求提供中断服务,需要8个信号输入端。可以将不用的其他并行口作为信号输入端,再将每个输入端的信号经过一个逻辑电路送给一个外部中断输入端口。当任意一个输入信号有效,都可以引起中断。

【技能训练3-3】扩展8路外部中断源控制LED目的:中断控制和编程内容:扩展外部中断源说明:这是个模仿项目。重点理解程序设计方法。参考文件:扩展外部中断.DSN设:8个外部中断请求端连接手动开关K0~K7,每个开关按动一次产生一个负脉冲,作为一个中断请求信号。按动K0要求D0~D7全部熄灭,K1要求全亮,K2要求间隔亮,K3要求3个灯一起灭,等等。技能训练3-3扩展8路外部中断源●任务1中断控制LED

3.2.1扩展外中断源的方法在中断控制移灯的基础上,增加8个中断源,将8个外中断源经与非门连接后由P3.3()引入单片机(图3-8)。当K0~K7任意按下一个,即可进入外中断1服务程序,在这个程序中,检测P1口内容,判断是那个信号的请求,然后进入对应的服务程序执行。本例题就是由P0口连接的发光二极管反应各外中断请求的差别;原来的移位功能继续有效。光盘提供proteus仿真文件,运行仿真文件夹\扩展外部中断.DSN,可供模仿。观察运行结果,并进一步分析源程序。然后自己实施这个小项目。技能训练3-3扩展8路外部中断源●任务1中断控制LED

3.2.1扩展外中断源的方法汇编语言参考源程序:(1) ;--------------------------------------------------分隔线1 ORG 0000H ;PC复位地址 LJMP START ;主程序入口地址 ORG 0003H ;外部中断0入口地址 LJMP INT_0 ;外部中断0服务程序入口地址 ORG 0013H ;外部中断1入口地址 LJMP INT_1 ;外部中断1服务程序入口地址;--------------------------------------------------分隔线2

技能训练3-3扩展8路外部中断源●任务1中断控制LED

3.2.1扩展外中断源的方法汇编语言参考源程序:(2) ;-----------------------------------------------分隔线2 ORG 0050H ;主程序入口地址START: MOV SP,#60H ;堆栈初始化 MOV P0,#0FFH;开始全都不亮 MOV A,#0FEH ;设置发光二极管初始状态 SETB IT0 ;外部中断0设置为下降沿触发方式 SETB IT1 ;外部中断1设置为下降沿触发方式SETBPX0;外部中断0设置为高优先级 SETB EA ;CPU开中断 SETB EX0 ;外部中断0开中断 SETB EX1 ;外部中断1开中断 SJMP $ ;等待中断;------------------------------------------------分隔线3技能训练3-3扩展8路外部中断源●任务1中断控制LED

3.2.1扩展外中断源的方法汇编语言参考源程序:(3) ;-------------------------------------------------分隔线3 ORG0100H ;外部中断0服务程序开始地址INT_0: MOV P0,A ;点亮相应指示灯 RL A ;修改灯状态 RETI ;中断返回;------------------------------------------------分隔线4

技能训练3-3扩展8路外部中断源●任务1中断控制LED

3.2.1扩展外中断源的方法汇编语言参考源程序:(4) ;---------------------------------------------分隔线4ORG0150H;外部中断1服务程序开始地址INT_1:MOVB,P1;读取P1口状态,以便判断信号来源K0:JBB.0,K1;判断K0,如果不是,继续判断下一个,请注意这条指令!MOVP0,#0FFH;灯全灭LJMPINT_1Z;转移到中断结束K1:JBB.1,K2;判断K1,如果不是,继续判断下一个MOVP0,#0;灯全亮LJMPINT_1Z;转移到中断结束K2:JBB.2,K3MOVP0,#55H;灯间隔亮LJMPINT_1Z;转移到中断结束K3:JBB.3,K4MOVP0,#07H;灯3个亮LJMPINT_1Z;转移到中断结束技能训练3-3扩展8路外部中断源●任务1中断控制LED

3.2.1扩展外中断源的方法汇编语言参考源程序:(5) K4:JBB.4,K5;判断K4,如果不是,继续判断下一个MOVP0,#0FH;灯4亮LJMPINT_1Z;转移到中断结束K5:JBB.5,K6MOVP0,#1FHLJMPINT_1Z;转移到中断结束K6:JBB.6,K7MOVP0,#03FHLJMPINT_1Z;转移到中断结束K7:JBB.7,K8MOVP0,#07FHINT_1Z:RETI END;全部程序结束;--------------------------------------------分隔线5技能训练3-3扩展8路外部中断源●任务1中断控制LED

3.2.1扩展外中断源的方法?请与中断控制移灯技能训练的程序比较,哪里不一样?其实,主要就是多了分隔线4到分隔线5之间的外中断1的服务程序。在这个中断服务程序里,检测扩展的中断源,确定执行的内容。每个扩展中断源要求的服务很简单,就是在P0口显示一个不同的样式。?当然,初始化也不一样,找找看,还有哪里不同?标号为K0的一条语句值得注意,这是看懂程序的关键。B寄存器里是按钮来的数据,任意按钮按下就会出现一个低电平,这个低电平的下降沿会引起外中断1中断。在中断服务程序里,将按钮状态读入到B寄存器里。K0:JBB.0,K1这是一条条件转移指令,当指定的位(B.0)等于1说明K0没有按下,转移到标号K1继续检测;如果指定位(B.0)等于0说明K0按下了,不转移,顺序执行下一条指令,完成K0按下时要做的事情,灯全灭,然后就直接转移到中断服务程序结束处。每次中断只处理一个按钮,如果同时有2个以上按钮按下,也只处理K0一个。这里K0相对于其他按钮处于高优先。先检测谁,谁就是高优先。思考:如果要求高优先处理完毕还要检测其他按键,如何修改程序?技能训练3-3扩展8路外部中断源●扩展外中断源基本方法是在中断服务程序中,查询中断信号来源,然后根据不同的信号源执行不同的程序。扩展8路外部中断源的程序看懂了,程序设计方法就会了。3.2.2扩展外中断源的程序设计方法自动防盗报警器

硬件和软件设计并仿真调试任务3.3

●自动防盗报警器设计调试按照项目规划单要求,设计硬件电路和程序。任务要求巩固中断知识和程序设计方法。重点外部中断应用。目的●自动防盗报警器设计调试3.3.1硬件设计●自动防盗报警器设计调试3.3.2软件设计按照自动防盗报警器的功能要求,在关键部位安放的若干传感器任意一个发出低电平,报警器就要鸣响并显示传感器编号。报警后有其他位置的传感器又送来低电平,喇叭应当继续响,显示会随之改变,增加新来信号的传感器编号。也就是记忆之前所有低电平,直到按复位键,清除记忆,停止报警。每个输入信号出现低电平,都可以引起外中断0的中断。在外中断0的中断服务程序中,查询P2口的每个输入信号,判断中断信号来自哪里,然后输出报警信号:显示和声音。●自动防盗报警器设计调试3.3.2软件设计按照以上电路,设计软件,使报警器完成应有的功能。为了调试方便,我们采用WAVE软件来编写汇编语言程序。输入源程序之后,可以编译,执行,初步验证程序的正确性。WAVE软件的使用很简单,有困难的可以看光盘中的使用说明以及视频资料。当然也可以使用keil软件来进行软件设计。

汇编语言程序与前面的差不多,主要在中断服务程序上有点不同,请见下页:●自动防盗报警器设计调试3.3.2软件设计;-----------------------------------------------------分隔线4;以下外中断0的中断服务程序;程序循环检测扩展的中断输入信号,;只要某输入端产生过负脉冲,就自动记忆,;脉冲过去了也还记得,显示也不会消失。;只要开始报警,本服务程序就不结束,直到复位INT_0:MOVA,P2;读取传感器状态ANLOUT,A;保存当前报警状态MOVP1,OUT;输出SJMPINT_0;复位前不停RETI;----------------------------------------------------分隔线5●自动防盗报警器设计调试3.3.2软件设计程序分析:主程序很简单,就是初始化,将中断条件准备好,然后就是等待中断的发生。这时候单片机进入待机状态,降低功耗。中断服务程序:只要有一个传感器输出低电平,就会引起中断。单片机被中断唤醒,开始工作,执行中断服务程序。中断服务程序首先读取传感器的信息到累加器,然后和保存传感器状态的单元内容进行“与”运算,保持原有的低电平,增加新来的低电平。然后将运算结果输出。这个过程会一直继续下去,直到单片机复位,或是断电。与运算不会改变原来就有的低电平,只能增加新的低电平,所以报警灯会一直亮,喇叭会一直响。●自动防盗报警器设计调试3.3.2软件设计利用proteus软件,设计好硬件电路,添加程序,编译,仿真运行,观察结果。按下任意一个按键,看到对应的发光二极管亮,听到喇叭响,就对了。仿真也会响的,计算机声卡会发出声音。再按下另外一个按键,就增加一个对应LED亮,喇叭继续响。发现不符合要求,就要检查电路和程序,找出

温馨提示

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

评论

0/150

提交评论