版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块3中断控制的花样彩灯设计3.1项目描述 3.2项目目的与要求
3.3项目支撑知识链接3.4项目实施
项目小结项目拓展技能与练习
【项目导入】
早期的单片机系统中并没有引入中断机制,随着工业技术的发展,要求在工业控制系统中能实时、快速、准确地处理一些突发事件,由此促使了中断技术的出现。如今中断技术在单片机中的应用越来越广泛。在此,我们通过设计一个项目—中断控制的花样彩灯,让同学们掌握中断技术在单片机中的使用。
【项目目标】
1.知识目标
(1)理解中断的概念;
(2)熟悉单片机的中断结构和控制;
(3)理解中断控制寄存器的各位含义;
(4)掌握中断的处理过程。
(5)掌握C51中断函数的定义。
2.能力目标
(1)编程中会使用中断各寄存器;
(2)掌握中断的入口地址的安排;
(3)能运用C51语言编写中断应用程序。
3.1项目描述
单片机的中断技术在工业控制与测量领域有着广泛的应用。本项目通过用一个按键产生的中断信号来控制花样彩灯的闪亮方式。通过该项目的学习,学生可掌握单片机中断的基本概念、中断的处理过程以及中断服务程序的编写,为以后单片机系统的开发奠定扎实的基础。
3.2项目目的与要求
本项目采用外部中断方式控制彩灯的运行,通过按动按键产生中断,使得彩灯以三种方式闪亮。项目在实施过程中需要解决以下关键问题:
(1)各中断控制寄存器的每一位的值如何确定?
(2)采用何种中断信号?如何处理该中断过程?
(3)按键按下后,中断如何响应?
(4)中断服务程序如何编写?
3.3项目支撑知识链接
3.3.1中断系统概述
1.中断的概念
在现实生活中,往往会遇到这样的事情:你在看书—电话响了—接电话—通话完毕—从刚才停止的地方继续看书。这是一个典型的中断现象,为什么会出现此现象呢?就是因为当你正做一件事情(看书)时,突然出现了一个重要的事情要处理(接电话),而一个人又不能同时完成两项任务,这时就必须采取穿插着去做的方法来实现。与生活中的中断现象相似,在单片机执行程序的过程中,由于内部或者外部发生某一突发事件去请求CPU处理(中断发生);CPU暂时中断当前程序的执行,转去处理所发生的事件(中断响应和中断服务);待处理完毕后,再返回来执行原来被中断的程序(中断返回)。这一处理过程称为中断。在中断系统中,常用到以下几个概念:CPU正常情况下运行的程序称为主程序;向CPU提出中断申请的设备称为中断源;中断源向CPU所发出的请求中断的信号称为中断请求;CPU在满足条件的情况下,接受中断申请,终止现行的执行转而为申请中断的对象服务称为中断响应;为服务对象服务的程序称为中断服务程序;现行程序被中断的地址称为断点;中断服务程序结束后,返回到原来的程序称为中断返回。单片机中断过程示意图如图3-1所示。图3-1单片机中断过程示意图此处需要注意两点,分别是:保护断点和保护现场。
保护断点指的是当CPU响应外设提出的中断请求时,在转入中断服务程序之前,把主程序断点(程序计数器PC的当前值)保存起来,以便中断服务程序执行结束返回到主程序后,从断点处又开始继续执行主程序。保护现场指的是CPU执行中断处理程序时,可能要使用主程序中使用过的累加器、寄存器或标志位,为了使这些单元的值在中断服务程序中不被冲掉,在进入中断服务程序前,要将有关寄存器保护起来。中断服务程序执行完时,还必须恢复原寄存器的内容及原程序中断处的地址,即恢复现场和恢复断点。
2.89C51中断系统的结构
89C51系列单片机的中断系统有5个中断源,分别是、、T0、T1和串行端口。4个中断控制寄存器TCON、SCON、IE、IP用于控制中断类型、锁存中断标志以及控制中断的开/关和中断源的优先级别。5个中断源有两个优先级,可实现二级中断服务嵌套,由片内特殊功能寄存器中的中断允许寄存器IE控制CPU是否响应中断请求,由中断优先级寄存器IP安排各中断源的优先级,同一优先级内各中断同时提出中断请求时,由内部的查询逻辑确定其响应次序。
89C51单片机的中断系统包括中断请求标志位(在相关的特殊功能寄存器中)、中断允许寄存器IE、中断优先级寄存器IP及内部硬件查询电路,如图3-2所示,图中反映出了89C51单片机中断系统的功能和控制情况。图3-289C51中断系统内部结构图
3.中断的功能
随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下功能:
(1)提高CPU的工作效率。中断请求发生于时间不确定的事件(如定时时间到的处理)中,在中断请求发生时需要CPU暂停当前的工作。因此采用中断技术使CPU避免了不必要的等待和查询,大大提高了CPU的工作效率,实现了CPU与外围部件或外部设备的并行工作。
(2)处理故障。把那些可以预知的故障(如除数为0、掉电等)作为中断源,编制相应的故障处理中断服务程序,这样当故障发生时,CPU就能及时发现并自动进行处理。
(3)实现实时控制。在实时测控系统中,要求单片机能对现场的许多随机参数、信息进行快速分析、运算并及时处理,而中断机制正好满足了这种在任何时刻提出处理请求的实时控制。
(4)实现人机交互。用户需要对单片机的工作进行干预时,可以通过按键请求使单片机按照用户的意图进行工作。3.3.2中断的处理过程
1.中断源
89C51系列单片机有5个中断源:(P3.2),(P3.3),定时器/计数器T0、T1的溢出中断,串行端口的发送(TXD)和接收(RXD)中断(只占一个中断源)。下面分别作一介绍。
(1)
(P3.2):外部中断0请求信号输入引脚。可
由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,开始向CPU申请中断。
(2)
(P3.3):外部中断1请求信号输入引脚。可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当
CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,开始向CPU申请中断。
(3) T0(P3.4):内部中断,片内定时器/计数器T0溢出时发出中断请求。当定时器/计数器T0发生溢出时,置位TF0,向CPU申请中断。
(4) T1(P3.5):内部中断,片内定时器/计数器T1溢出
时发出中断请求。当定时器/计数器T1发生溢出时,置位TF1,向CPU申请中断。
(5)串行端口:内部中断,包括串行接收中断RI和串行发送中断TI。当接口接收完一帧串行数据时置位RI,或当串行接口发送完一帧串行数据时置位TI,向CPU申请中断。
2.中断申请标志(TCON和SCON)
在中断系统中,应用何种中断,采用何种触发方式,是由定时器/计数器控制寄存器TCON和串行端口控制寄存器SCON的相应位规定的。TCON和SCON均属于特殊功能寄存器,字节地址分别为88H和98H,两者都可以进行位寻址。
1)定时器/计数器控制寄存器TCON
TCON是定时器/计数器控制寄存器,其字节地址为88H,可进行位寻址。这个寄存器有两个作用,即除了控制定时器/计数器T0、T1的溢出中断和锁存T0、T1的溢出中断标志位外,还控制外部中断的触发方式和锁存外部中断请求标志。其格式如下:
TCON寄存器各控制位的含义如下:
IT0(TCON.0):选择外部中断的中断触发方式。当IT0=0时,为电平触发方式,低电平有效;当IT0=1时,为边沿触发方式,下降沿有效(即P3.2引脚信号出现负跳变有效)。
IT1(TCON.2):选择外部中断的中断触发方式。当IT1=0时外部中断的中断触发方式为电平触发方式,低电平有效;当IT1=1时,外部中断的中断触发方式为边沿触发方式,负跳变有效(1→0)。
IE0(TCON.1):外部中断的中断请求标志。当IE0=1时,表示外部中断向CPU请求中断。
IE1(TCON.3):外部中断的中断请求标志。当IE1=1时,表示外部中断向CPU请求中断。
TF0(TCON.5):片内定时器/计数器T0溢出中断请求标志。定时器/计数器的核心为加法器,当定时器/计数器T0发生定时或计数溢出时,由硬件置位TF0,向CPU申请中断,CPU响应中断后,会自动对TF0清零。
TF0(TCON.5):片内定时器/计数器T0溢出中断请求标志。定时器/计数器的核心为加法器,当定时器/计数器T0发生定时或计数溢出时,由硬件置位TF0,向CPU申请中断,CPU响应中断后,会自动对TF0清零。
TF1(TCON.7):片内定时器/计数器T1溢出中断请求标志。其操作功能与TF0类同。
TR0(TCON.4):定时器/计数器T0的启动/停止控制位,由软件进行设定。TR0=0,停止T0定时(或者计数);TR0=1,启动T0定时(或者计数)。
TR1(TCON.6):定时器/计数器T1的启动/停止控制位,由软件进行设定。TR1=0,停止T1定时(或者计数);TR1=1,启动T1定时(或者计数)。
2)串行端口控制寄存器SCON
SCON为串行端口控制寄存器,其字节地址为98H,也可以进行位寻址。串行端口的接收和发送数据中断请求标志位(RI、TI)被锁存在端口控制寄存器SCON中,其格式如下:
SCON寄存器各位的含义如下:
RI(SCON.0):串行端口接收中断请求标志位。在串行端口允许接收时,每接收完一帧数据,由硬件自动将RI位置1。同样,CPU响应中断时不会清除RI,RI位的清0必须由用户用指令来完成。
TI(SCON.1):串行端口发送中断请求标志位。CPU将一个数据写入发送缓冲器SBUF时,就启动发送,每发送完一帧串行数据后,硬件置位TI。但CPU响应中断时,并不清除TI,必须在中断服务程序中由软件对TI清0。在中断系统中,将串行端口的接收中断RI和发送中断TI经逻辑或运算后作为内部的一个中断源。当CPU响应串行端口中断请求时,CPU并不清楚是接收中断请求还是发送中断请求,所以用户在编写串行端口中断服务程序时,在程序中必须识别是RI还是TI产生的中断请求,从而执行相应的中断服务程序。另外,SCON其他各位的功能和作用与串行通信有关,将在项目5中介绍。
3.中断允许控制
89C51对中断源的开放或屏蔽是由中断允许寄存器IE控制的,IE的字节地址为A8H,既可以按字节寻址,也可以按位寻址。当单片机复位时IE被清为0。通过对IE各位的置1或清0操作,可实现打开或屏蔽某个中断。IE的格式如下:
IE寄存器各位的含义如下:
EA(IE.7):中断允许总控制位,其状态由用户通过程序进行控制。EA=0,中断禁止,即关中断;EA=1,中断总允许,即开中断。对各中断源的中断请求是否允许还取决于各中断源的中断允许控制位的状态。
EX0(IE.0):外中断0(即)的中断允许控制位。EX0=0,禁止中断;EX0=1,允许中断。
ET0(IE.1):定时器T0的中断允许控制位。ET0=0,禁止T0中断;ET0=1,允许T0中断。
EX1(IE.2):外中断1(即)的中断允许控制位。EX1=0,禁止中断;EX1=1,允许中断。
ET1(IE.3):定时器T1的中断允许控制位。中断总允许时,ET1=0,禁止T1中断;ET1=1,允许T1中断。
ES(IE.4):串行口中断允许控制位。中断总允许时,ES=0,禁止串行口中断;ES=1,允许串行口中断。
89C51系统复位后,IE寄存器中各位均被清0,禁止所有的中断。在应用时,由软件进行设定,既可以使用位操作,也可以使用字节操作来实现对IE的设置。
4.中断优先级控制及中断嵌套
1)中断优先级
89C51单片机有两个中断优先级,即可实现二级中断服务程序嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来控制的。IP的状态也由软件设定,某位设定为1时,相应的中断源为高优先级中断;某位设定为0时,相应的中断源为低优先级中断。IP寄存器的字节地址为B8H,既可以按字节访问,又可以按位访问。其格式如下:
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时,串行中断为高中断优先级。
若某几个控制位为1,则相应的中断源就规定为高级中断;反之,若某几个控制位为0,则相应的中断源就规定为低级中断。
对同时到来的优先级中断请求,将按照自然优先级来确定中断响应次序,如表3-1所示。
2)中断嵌套
当CPU正在执行中断服务程序时,如果出现了另一个优先级比它高的中断请求,则CPU就暂时中止执行原来优先级较低的中断源的服务程序,保护当前的断点,转去响应优先级更高的中断请求并为其服务。待服务结束后,再去执行优先级别较低的原中断服务程序。该过程被称为中断嵌套(类似于子程序的嵌套),该中断系统称为多级中断系统。中断嵌套的过程如图3-3所示。图3-3中断嵌套示意图
5.中断处理过程
89C51单片机的中断处理过程可分为三个阶段,即中
断响应、中断处理和中断返回,如图3-4所示。单片机工作时,在每个机器周期中都去查询各个中断标记位,如果是“1”,就说明有中断请求;接下来判断中断请求是否满足响应条件,若满足响应条件,就进入中断处理;中断处理完毕,进行中断返回,继续执行指令。图3-4中断处理过程的三个阶段
1)中断响应
中断响应的条件是:①中断源有中断请求;②此中断源的中断允许位为1;③ CPU开中断(即EA=1)。同时满足这三个条件时,CPU才有可能响应中断。
图3-5所示为某中断的响应时序。从中断源提出中断申请,到CPU响应中断(如果满足了响应中断响应条件),需要经历一定的时间。图3-5中断的响应时序
89C51的中断响应时间(从标志置1到进入相应的中断服务)至少有3个完整的机器周期。中断控制系统对各中断标志进行查询需要1个机器周期,如果响应条件具备,则CPU执行中断系统提供的相应向量地址的硬件长调用指令要占用2个机器周期。
此外,如果中断响应过程受阻,则要增加等待时间。若同级或高级中断正在进行,则所需要的附加等待时间取决于正在执行的中断服务程序的长短,等待的时间不确定。若没有同级或高级中断正在进行,则所需要的附加时间在3~5个机器周期之间。
2)中断处理
如果一个中断被响应,则按下列过程进行处理:
(1)给相应的优先级触发器状态置1,指明CPU正在响应的中断优先级的级别,同时屏蔽所有同级或更低级的中断请求,允许更高级的中断请求。
(2)执行一个硬件生成子程序调用指令,使控制转到相应的中断入口向量地址,并清除中断源的中断请求标志(TI和RI除外)。
(3)在执行中断服务程序之前,CPU只保护一个地址(PC的值),如果主程序和中断服务子程序都用到一些公共存储空间(如A、PSW、DPTR等),那么执行中断服务子程序前将这些数据保存起来,以免返回主程序时出现错误。
(4)转入相应的中断服务程序入口,即将被响应的中断入口向量地址送入PC中,执行中断服务程序。51单片机的五个中断源都有各自的入口地址,见表3-1。
6.中断的应用
1)具体的中断服务程序
CPU响应中断结束后即转至中断服务程序的入口,从中断服务程序的第一条指令开始到返回指令为止。不同的中断服务的内容及要求各不相同,其处理过程也有所区别。一般情况下,中断处理包括两部分内容:一是保护现场,二是为中断源服务。
C51编译器支持在C源程序中直接开发中断过程,在中断服务程序中,必须指定对应的中断号,用中断号确定该中断服务程序是哪个中断所对应的中断服务程序。
中断服务程序格式:
Void函数名(参数)interruptnusingm
{函数体语句;}
其中,interrupt后面的n是中断号;关键字using后面的m是所选择的寄存器组,取值范围为0~3,定义中断时using是个选项,可以省略不用。
2)中断服务程序举例
【例3-1】利用单片机的外部中断0响应按键开关信号,当有按键按下时会触发中断,中断发生时将LED状态取反,产生LED的亮灭由按键(中断)控制,电路图如图3-6所示。图3-6中断控制的单个LED灯
C51程序如下:
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitLED=P0^0;
/*********主程序************/
voidmain()
{LED=1;
EA=1; //允许中断
EX0=1; //使用外部中断0
T0=1; //选择外部的中断的中断触发方式
while(1);
}
/*********INT0中断函数************/
voidEX_INT0()interrupt0
{LED=~LED;//控制LED亮灭
}
【例3-2】设计中断计数,要求每次按下按键时触发中断,中断程序累加计数,计数值显示在3只数码管上,按下清零键时数码管清零,硬件电路如图3-7所示。图3-7中断控制的计数电路C51程序如下:
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
//0~9的段码
ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
//计数值分解后各个待显示的数位
ucharDSY_Buffer[]={0,0,0};
ucharCount=0;
sbitClear_Key=P3^6;
//数码管上显示计数值voidShow_Count_ON_DSY()
{ DSY_Buffer[2]=Count/100; //获取3个数
DSY_Buffer[1]=Count%100/10;
DSY_Buffer[0]=Count%10;
if(DSY_Buffer[2]==0) //高位为0时不显示
{ DSY_Buffer[2]=0x0a;
if(DSY_Buffer[1]==0)//高位为0,若第二位为0同样不显示
DSY_Buffer[1]=0x0a;
}
P0=DSY_CODE[DSY_Buffer[0]];
P1=DSY_CODE[DSY_Buffer[1]];
P2=DSY_CODE[DSY_Buffer[2]];
}
//主程序
voidmain(){ P0=0x00;
P1=0x00;
P2=0x00;
IE=0x81; //允许INT0中断
IT0=1; //下降沿触发
while(1) {
if(Clear_Key==0)Count=0; //清0
Show_Count_ON_DSY();
}
}
//INT0中断函数
voidEX_INT0()interrupt0
{
Count++; //计数值递增
}
3.4项目实施
3.4.1项目硬件设计
中断控制的花样彩灯系统的结构比较简单,其硬件电路模块包括电源电路、时钟电路、按键复位电路和LED灯接口电路,具体硬件电路如图3-8所示。图3-8中断控制的彩灯电路图3.4.2项目软件设计
设计中采用单片机的外部中断方式来实现对按键输入进行处理。一般中断函数和主函数之间的运行相当于两个程序并行运行,在本项目中,用中断函数控制彩灯的显示。在本程序设计中,采用的主函数和中断函数流程图如图3-9所示。图3-9彩灯设计的主函数和中断函数流程图另外,设计中我们采用了一个判断变量f,当不发生中断时,f的值不变,程序保持运行,使彩灯按照其中的一种花样闪亮,当按下S键时,单片机终止原来的程序运行,调用中断子函数,则f的值发生一次改变,在中断返回后,主程序再次执行到判断变量f的值,由于f的值已改变,所以将执行一个彩灯控制的子程序,彩灯将按照另一种花样变化显示。在按键时会有一定的延时,采用延时程序消除按键产生的抖动。根据程序流程图,写出单片机C51语言程序:
#include<reg51.h>
#defineucharunsignedchar
ucharlight,f,b;
/********延时0.5s的子函数*********/
voiddelay05s()
{uchari,j,k;
for(i=5;i>0;i--)
for(j=200;j>0;j--)
for(k=250;k>0;k--);
}/********延时10ms的子函数*********/
voiddelay10ms()
{uchari,k;
for(i=20;i>0;i--)
for(k=250;k>0;k--);
}
/********左移点亮彩灯*********/
voidleft(){light=light<<1;
if(light==0)light=0x01;
P2=~light;
}
/********右移点亮彩灯*********/
voidright()
{light=light>>1;
if(light==0)light=0x01;
P2=~light;
}/********用户自定义点亮彩灯*********/
voidassum()
{ucharcodedispcode[8]={0xff,0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e};
if(b==7)b=0;
elseb++;
P2=dispcode[b];
}
/********主函数*********/
voidmain(){IT0=1; //设置外部中断0下降沿触发
EX0=1; //开外部中断0
EA=1; //开总中断
f=1;
light=0x01;
b=0;
whi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考古遗址桥梁保护协议
- 债权转为股权投资协议
- 2025版电子商务供应链金融合作协议3篇
- 高铁建设机械费施工合同
- 联营合作项目管理误区
- 运输企业社会责任与可持续发展
- 临时娱乐市场建设合同
- 雕塑艺术任课教师聘用合同
- 宠物行业经纪人招聘协议
- 招投标项目环境保护要求
- 穿越河流工程定向钻专项施工方案
- 地球物理学进展投稿须知
- 机床精度检验标准 VDI3441 a ISO230-2
- 社会主义新农村建设建筑废料利用探究
- 解析电力施工项目的信息化管理
- 火炬介绍 音速火炬等
- 制剂申请书(共16页)
- 《质量守恒定律》评课稿
- 人教版七年级上册地理《第4章居民与聚落 第3节人类的聚居地——聚落》课件
- 对县委常委班子及成员批评意见范文
- 数据中心IDC项目建议书
评论
0/150
提交评论