课件第7章-带中断的交通灯控制系统_第1页
课件第7章-带中断的交通灯控制系统_第2页
课件第7章-带中断的交通灯控制系统_第3页
课件第7章-带中断的交通灯控制系统_第4页
课件第7章-带中断的交通灯控制系统_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

视察与思索1、实际交通灯限制是怎样的?2、此程序会出现问题吗?3、是什么缘由出现问题的?4、如何改正?答案见KEILC程序中的注释,可单步执行,视察现象,再说明。第七章单片机的中断系统

学问目标:理解单片机中断系统的结构,驾驭其限制寄存器,驾驭中断嵌套的概念,理解单片机中断的执行过程。技能目标:能运用中断的方法编写交通灯限制程序,能利用中断的方法设计中等难度的单片机限制系统。素养目标:养成不断提升学问水平及技能水平的学习习惯。养成将学习内容与日常生活类比的学习习惯。交通灯限制系统前面存在的主要问题:无法在随意时间通过S1及S2强制使交通灯到所需的状态.怎么办?通过中断的方式:强制执行所需的工作(暂停现在的工作)项目二任务2改进的交通灯限制器

要求:用中断的方法限制交通灯限制器中的S1、S2.任务分析:交通灯限制系统存在的主要问题:无法在随意时间通过S1及S2强制使交通灯到所需的状态.分析就可知道,必需等交通灯的一个转换循环结束,S1及S2的强制作用才能生效,通过仿真也可视察到这一现象,但这在现实中是不允许的,如有地方发生火灾或有重病病人要紧急送往医院,这类事情是耽搁不得的。硬件电路及限制方法流程图起先东西向通行60秒黄灯亮3秒南北向通行120秒黄灯亮3秒中断的初始化:开中断;电平触发方式;外中断0为低优先级,外中断1为高优先级东西向通行3S中断返回中断入口南北向通行3S中断返回中断入口S1按下,产生外部中断0S2按下,产生外部中断1要求驾驭中断的概念;驾驭8051中断的限制方法:开关中断;外部中断的中断触发方式;优先级;驾驭中断处理函数的编制方法;能应用中断的方法处理交通灯限制及其它中断问题;中断要做哪些工作中断处位置的记录。因为中断后还要回来,回到何处,只有记录了位置,才能回到正确的位置。中断前的重要信息存储。因为去处理中断事务,可能更改原来的记录信息,故必需将原来的重要信息保存起来,回到原来处理的事情时,才能利用原有的信息,而不是被中断程序更改过的信息。正在执行显示程序键盘按下处理键盘扫描接着处理键盘扫描接着执行显示程序处理定时器动作定时时间到图7.3显示及键盘中断流程图中断处理的去向。要处理中断的事情,必需知道到哪里去处理。中断允许。因为,假如现在处理的问题很重要,现在的进程就不能被打断。只有在重要的事情处理完之后,才去响应中断的恳求。中断的优先级。假犹如时出现几个中断事由要求处理,必需依据轻重缓急处理,因此,必需对它们编制一个优先等级。单片机的中断系统的结构中断是指在突发事务到来时先中止当前正在进行的工作,转而去处理突发事务。待处理完成后,再返回到原先被中止的工作处,接着进行随后的工作。MCS-51单片机的中断系统结构执行主程序主程序接着执行主程序断点中断恳求中断响应执行中断处理程序中断返回引起突发事务的来源称为中断源中断源要求服务的恳求称为中断恳求对中断恳求供应的服务称为中断服务中断管理系统处理事务的过程称为中断响应过程引起CPU中断的根源,称为中断源。中断源向CPU提出的中断恳求。CPU短暂中断原来的事务A,转去处理事务B。对事务B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。8051的中断源

一、(P3.2)。可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标记IE0(TCON.1)置1,向CPU申请中断。二、(P3.3)。可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标记IE1(TCON.3)置1,向CPU申请中断。以上两个中断源称作外部中断源,因为它们都是由外部输入的。三、定时器T0。TF0(TCON.5),片内定时/计数器T0溢出中断恳求标记。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。四、定时器T1。TF1(TCON.7),片内定时/计数器T1溢出中断恳求标记。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。五、串行通信。RI(SCON.0)或TI(SCON.1),串行口中断恳求标记。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。二、中断恳求标记1、TCON的中断标记IT0(TCON.0),外部中断0触发方式限制位。当IT0=0时,为电平触发方式。当IT0=1时,为边沿触发方式(下降沿有效)。IE0(TCON.1),外部中断0中断恳求标记位。IT1(TCON.2),外部中断1触发方式限制位。IE1(TCON.3),外部中断1中断恳求标记位。TF0(TCON.5),定时/计数器T0溢出中断恳求标记位。TF1(TCON.7),定时/计数器T1溢出中断恳求标记位。2、SCON的中断标记RI(SCON.0),串行口接收中断标记位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。同样,RI必需由软件清除。TI(SCON.1),串行口发送中断标记位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必需由软件清除。一、中断允许限制CPU对中断系统全部中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE限制的。80C51中断的限制EX0(IE.0),外部中断0允许位;ET0(IE.1),定时/计数器T0中断允许位;EX1(IE.2),外部中断1允许位;ET1(IE.3),定时/计数器T1中断允许位;ES(IE.4),串行口中断允许位;EA(IE.7),CPU中断允许(总允许)位。以上各位为1时,允许相应的中断,为0时禁止相应的中断,其中,EA为中断的总开关。二、中断优先级限制80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的。PX0(IP.0),外部中断0优先级设定位;PT0(IP.1),定时/计数器T0优先级设定位;PX1(IP.2),外部中断0优先级设定位;PT1(IP.3),定时/计数器T1优先级设定位;PS

(IP.4),串行口优先级设定位;PT2(IP.5),定时/计数器T2优先级设定位。上面各位为1时,是高优先级,为0时为低优先级。同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:80C51单片机的中断优先级有三条原则:CPU同时接收到几个中断时,首先响应优先级别最高的中断恳求。正在进行的中断过程不能被新的同级或低优先级的中断恳求所中断。正在进行的低优先级中断服务,能被高优先级中断恳求所中断。中断的入口

单片机响应中断时,系统会自动跳到相应的地址,即中断入口地址执行中断程序。这一过程是由中断系统自动支配的,不须要人为干预。中断入口地址表如上表所示,它们位于程序最起先的一段区间(0003H-0023H)。80C51单片机中断处理过程

一、中断响应条件中断源有中断恳求;此中断源的中断允许位为1;CPU开中断(即EA=1)。同时满足时,CPU才有可能响应中断。

中断响应条件和时间

二、中断服务的进入与返回进入中断服务是单片机自动支配的,如进入前会保存中断处地址及重要信息。进入中断服务程序后则执行相应的服务程序,执行完后还要复原原来的地址及重要信息,然后返回到原来被中断处断续执行原来的程序。三、中断响应时间

即从发出中断恳求到响应中断之间的时间,这一时间不长,一般为3-8个机器周期。中断服务程序的编制一、中断服务程序编制的格式中断响应过程就是自动调用并执行中断函数的过程。C51编译器支持在C源程序中干脆以函数形式编写中断服务程序。常用的中断函数定义语法如下:中断处理函数void

函数名()interruptn

中断源 n入口地址 外部中断0 0 0003H

定时/计数器01 000BH

外部中断1 2 0013H

定时/计数器13001BH

串行口 4 0023H中断要做哪些工作呢?中断处位置的记录。中断前的重要信息存储。中断处理的去向。中断允许。中断的优先级。二、项目二任务2解答:交通灯中断限制器设计1、电路图图7.11交通灯电路图2电路与原来的不同是将两个限制开关S1及S2移到了外部中断输入端口处。当开关合上时,输入低电平产生中断,断开时不产生中断。2、限制程序流程图

限制程序流程图如图7.1所示。中断的产生是随机的,并没有固定的时刻。只有S1或S2按下则产生中断,还可对它们设置中断优先级,从而避开以前同时按下时,不好确定响应哪个中断的状况。#include<reg51.h>voiddelay(unsignedint);main(){IE=0x85;//开中断TCON=0x00;//电平触发方式IP=0x04;//外中断0为低优先级,外中断1为高优先级3、限制程序while(1){P1=0x21;delay(200);P1=0x12;delay(20);P1=0x0c;delay(400);P1=0x12;delay(20);}}voidint0()interrupt0//外中断0{P1=0x21;delay(100);}voidint1()interrupt2//外中断1{P1=0x0c;delay(100);}voiddelay(unsignedintj){unsignedinti,k;for(k=0;k<j;k++)for(i=0;i<500;i++){;}

}三、关于中断触发方式及程序编制的探讨1、关于边沿触发与电平触发的探讨1)电平触发中断电平触发方式比较好理解.处理器每个指令周期查询中断引脚,当发觉引脚电平为低时,触发中断.假如信号从1变为0,一个周期后又变为1,中断并不会被清除,直到中断执行完毕并用RETI指令返回之后.但是假如输入信号始终为低,那么将始终触发中断,当要求中断服务的器件在中断服务结束一段时间之后才释放信号线时就会发生这种状况.这时你会发觉中断被执行了多次,所消耗的时间比预期的要长很多,这时应运用边沿触发方式2)边沿触发方式当外部中断引脚电平由高向低变更时,将触发中断处理器.每个指令周期查询中断引脚,当前一个指令周期是引脚电平为高,紧接着下一个指令周期检测到引脚电平为低时,将触发中断.像前面所提到的那样,这种方法适用于恳求中断服务的器件在中断服务结束一段时间之后才释放信号线时的状况.因为这时只有下降沿才会触发中断,假如你还想触发下一个中断就必需把电平先置高.当设计中断结构时,你要记住边沿触发适用于那些器件发出的中断恳求信号不须要软件清除的场合.最为普遍的例子是系统的时标.这种信号一般由实时时钟电路产生,这些器件一般供应一个占空比为50%的信号(即信号的一半是高电平,另一半为低电平).假如运用电平触发,将将产生很多中断,这样即使不扰乱程序的运行也将奢侈系统的资源.关于程序文档的规范化问题探讨尽量用易于理解的文字、符号替换专业等号为使程序简化,可定义简洁的符号代替常用的沉长的符号或关键字延时程序单独作为一个子程序主程序要尽量简洁化,让读者明白程序的骨干、主旨每一功能,无论简洁或困难,最好编为一子程序下面是交通灯限制的另一种程序写法,请留意它的规范性。中断限制的交通灯#include<reg51.h>//宏定义#defineucharunsignedchar#defineuintunsignedint//位变量定义sbitEAST_REDLIGHT=P1^0;sbitEAST_YELLOWLIGHT=P1^1;sbitEAST_GREENLIGHT=P1^2;sbitSOUTH_REDLIGNT=P1^3;sbitSOUTH_YELLOWLIGHT=P1^4;sbitSOUTH_GREENLIGHT=P1^5;//延时子程序voiddelay(uintk){uinti,j;for(i=0;i<1000;i++)for(j=0;j<k;j++);}//外部中断0响应程序

voidint0()interrupt0{EAST_REDLIGHT=1;//东西路口红灯开启

EAST_YELLOWLIGHT=0;//黄绿灯关闭

EAST_GREENLIGHT=0;SOUTH_REDLIGHT=1;//南北路口红灯开启SOUTH_YELLOWLIGHT=0;//黄绿灯关闭SOUTH_GREENLIGHT=0;delay(850);}//东西路口通行的子程序

voideast(){EAST_REDLIGHT=0;EAST_YELLOWLIGHT=0;EAST_GREENLIGHT=1;SOUTH_REDLIGHT=1;SOUTH_YELLOWLIGHT=0;SOUTH_GREENLIGHT=0;delay(850);EAST_REDLIGHT=0;EAST_YELLOWLIGHT=1;EAST_GREENLIGHT=0;delay(85);}//南北路口通行子程序

voidsouth(){EAST_REDLIGHT=1;EAST_YELLOWLIGHT=0;EAST_GREENLIGHT=0;SOUTH_REDLIGHT=0;SOUTH_YELLOWLIGHT=0;SOUTH_GREENLIGHT=1;delay(850);SOUTH_REDLIGHT=0;SOUTH_YELLOWLIGHT=1;SOUTH_GREENLIGHT=0;delay(85);}//主程序

main(){IE=0x81;//开中断

TCON=0x00;//触发方式为电平方式

IP=0x00;//while(1){east();//东西路口通行

south();//南北路口通行}}中断嵌套上面列举的几个例子中都有中断嵌套的问题。中断嵌套,即中断被中断。千万是留意,多次中断并不是中断嵌套!要求驾驭中断嵌套的概念;能运用中断嵌套处理简洁的嵌套问题;能仿真中断嵌套试验;中断嵌套8051具有2个响应优先级,可以实现中断的嵌套,即高优先级的中断恳求可以打断低优先级的中断程序程序。等高优先级的中断程序执行完后再转到低优先级的中断服务程序接着执行。中断嵌套即中断被中断;日常生活中中断嵌套的例子如科代表交作业中断了老师的备课,在老师处理科代表交作业时,老师又补系领导叫去有其它事情,老师回来后接着与科代表交谈,了解班级学习状况,科代表离开后老师接着备课。项目二任务3中断嵌套仿真仿真试验如图所示,正常时与P0中相接的数码管显示0-9;假如低优先级的开关按下,则P0中的数码管停止不动,与P1口相接的数码管显示0-9;假如这时高优先级的开关按下,则与P2口相接的数码管显示0-9;断开高优先级的开关后,等0-9一次循环显示完后,转到低优先级的数码管接着显示;低优先级的开关断开后,转到正常的与P0口相连的数码管接着循环显示0-9.任务分析:这里有三个显示程序,即P0、P1、P2口的数码管都循环显示0-9。正常是P0口的显示,假如发生开关按下的状况,则要运程其它两个口的显示程序,既然有中断的状况有两个,就要对它们排队,这就是中断嵌套的问题。程序//中断嵌套试验//头文件引用#include"reg51.h"//宏定义#defineucharunsignedchar#defineuintunsignedint//延时子程序voiddelay(uintk){uinti,j;for(i=0;i0;i++)for(j=0;j<k;j++);}//外部中断0响应程序voidint0()interrupt0{uchari;for(i=0x00;i<0x0a;i++){P1=i;delay(850);}P1=0;}//外部中断1响应程序voidint1()interrupt2{uchari;for(i=0xf0;i<0xfa;i++){P2=i;delay(850);}P2=0;}//主程序main(){uchari;IE=0x85;//开中断总开关及开外部中断0与1//EA=1;EX0=1;EX1=1;TCON=0x00;//外部中断为电平触发//IT0=0;IT1=0;IP=0x04;//外部中断0为低级中断,外部中断1为高级中断//PX0=0;PX1=1;while(1){for(i=0;i<10;i++){P0=i;delay(850);//延时1秒

}}}留意:假如P0口不接上拉电阻,则P0口的数码管显示不正常;这说明P0口的高阻状态;即P0口没有输出高电平的实力;因为P0口是集电极(漏极)开路的;三个数码管分别通过BCD码-七段码译码器CD4511与P0、P1、P2的低四位的四根引脚相连,故送入三个端口的数据干脆为十进制数,无需送七段码。两个开关接到外部中断输入端,按下开关就可产生中断。程序更改与思索变更IE的值,如为0x81/84,看看再按下中断开关,状况是怎样的?为什么?变更IP的值,如为0x00/01/11,看看在按下开关时,状况是怎样的?为什么?变更TCON的值,如为0x05,即为边沿触发,看看按下开关时,状况是怎样的,分析为什么。启示按下中断开关,立刻停止主程序中的P0口的显示,转到中断的显示;反应出中断响应的实时性;高级中断中断低级中断服务程序时,也是实时性的;即立刻停止低级显示,转到高级显示。高级中断撤消时,一次轮回显示0-9必需进行完后才回到低级中断限制的显示;反应出高级中断程序必需进行完才去执行低级的中断,即高级中断服务程序执行的完整性;低级中断撤消,回到主程序时,也是如此。留意74ls47(cd4511)为LED译码驱动器;74LS47是输出低电平有效的;CD4511是输出高电平有效的;故用74LS47时接共阳的数码管,而用CD4511时,应接共阴的数码管;思索假如不用译码器,干脆将数码管接

温馨提示

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

评论

0/150

提交评论