第4章中断系统和定时/计数器本章学习目标:理解中断概念,能正确描绘单片机中断响应过程熟记80C51单片机的5个中断源及其中断入口地址能按要求正确设置特殊功能寄存器IE、IP、TCON、SCON和TMOD熟悉中断优先控制的方法能正确描绘定时/计数器的4种工作方式,重点掌握方式1、方式2的应用学会定时/计数初值的计算能读懂教材中的控制实例,学会编写同等难度的中断、定时/计数程序4.1中断系统4.1.1中断系统的基本概念某人看书——某人正在处理一件事A电话铃响——出现另一件须立即解决的事B暂停看书——中止A书中作记号——记录断点,便于接续电话谈话——处理B继续看书——继续A的工作保护断点中断响应中断请求中断返回1.中断的概念(1)现实生活中的中断:中断原因:一个人不可能同时完成两项任务。单片机只有一个CPU,一旦面临多任务,它也会中断吗?先接电话,然后再继续看书,这样效率最高!4.1.1中断系统的基本概念(2)单片机中的中断•CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生或中断请求);•CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);•待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。中断请求→中断响应→中断服务→中断返回中断过程事件B的处理过程事件A事件B什么是中断?2.中断技术的应用•并行处理CPU可以与多台外设并行工作,并分时与他们进行信息交换,提高了CPU的工作效率。•实时控制单片机应用系统可能随机请求CPU提供服务。有了中断系统,CPU就可以立即响应并予以处理。•故障处理单片机系统在工作时可能会出现一些突发故障,如电源断电,存储器出错,程序执行错误(如除数为0)等,一旦出现故障,CPU就可及时转去执行故障处理程序,而不必停机。3.中断系统为实现中断功能而配置的硬件和编写的软件就是中断系统。中断由谁来实施?中断功能由中断系统来执行。图4-1中断系统的结构框图4.1.2中断源——中断的申请方能够向CPU发出中断申请的部件称为中断源。80C51单片机有5个中断源。见下表那些部件可以向CPU申请中断呢?中断源说明外部中断从P3.2引脚引入的外部中断申请定时器T0中断定时器T0溢出时引发中断申请外部中断从P3.3引脚引入的外部中断申请定时器T1中断定时器T1溢出时引发中断申请串行口中断一次串行发送或接收完成后,发出中断申请0INT1INT4.1.3中断控制——中断的控制“工具”•中断允许寄存器IE•中断优先级寄存器IP•定时/计数器及外部中断控制寄存器TCON•串口控制寄存器SCON单片机通过对4个特殊功能寄存器实施中断控制:1.中断允许寄存器IE•功能:控制单片机是否接受中断申请,以及接受哪一种中断申请•字节地址:A8H其格式和每位的含义如下:图4-2IE的格式由位操作指令或数据传送指令实现。例:同时打开外部中断0和串行口中断,可设置为:法1:MOVIE,#10010001B法2:SETBEASETBESSETBEX0〈想一想〉还可以怎样实现?如何对IE进行设置?IE的设置方法:2.中断优先级寄存器IP•功能:对80C51单片机进行高级别或低级别中断的设置,•IP的字节地址:B8H格式和每位的含义如下:图4-3IP的格式举例例:令串行口为高优先级中断,外部中断0为低优先级中断。设置方法:法1:MOVIE,#10010001B;开中断MOVIP,#00010000B;设优先级法2:MOVIE,#10010001BSETBPS说明:此时串口的优先级高于外部中断0的优先级答案:此时CPU按自然优先级顺序确定该响应哪个中断请求。如果几个同级别的中断源同时申请中断,CPU如何响应?注意:自然优先级由硬件决定,用户不能更改。排列见表4-2表4-2中断入口地址及自然优先级3.定时/计数器及外部中断控制寄存器TCON•功能:•字节地址:88H可设置外部中断申请的形式:低电平触发还是下降沿触发控制定时/计数器的计时开始或停止是各中断源(串口中断除外)是否申请中断的标志位格式如下,各位含义见表4-3TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0形式符号位地址功能说明中断控制IT088H外部中断0的触发控制位IT0=0:低电平触发IT0=1:下降沿触发IT0的状态由用户通过初始化程序定义IE089H外部中断0请求标志位。CPU采样到外部中断0的中断请求时,IE0=1CPU响应该中断时,IE0=0IE0的状态由单片机自动设置IT18AH外部中断1的触发控制位IT1=0:低电平触发IT1=1:下降沿触发IT1的状态由用户通过初始化程序定义IE18BH外部中断1的中断请求标志位CPU采样到外部中断1的中断请求时,IE1=1CPU响应该中断时,IE1=0IE1的状态由单片机自动设置表4-3TCON的功能说明形式符号位地址功能说明定时/计数控制TR08CHTR0=1:启动定时/计数器T0TR0=0:停止定时/计数器T0TR0的状态由用户通过初始化程序定义TF08DH定时/计数器T0溢出中断请求位T0定时或计数完成时TF0=1,同时申请中断CPU响应该中断时,TF0=0TF0的状态由单片机自动设置TR18EHTR1=1:启动定时/计数器T1TR1=0:停止定时/计数器T1TR1的状态由用户通过初始化程序定义TF18FH定时/计数器T1溢出中断请求位T1定时或计数完成时TF1=1,同时申请中断CPU响应该中断时,TF1=0TF1的状态由单片机自动设置续表4-3例1编程设定TCON为低电平触发的高优先级中断源。分析:这是典型的中断初始化问题,方法一般如下:1)对TCON的相关位赋值2)设定所用中断源的优先级——赋值IP3)开中断——置位IE解:法1:CLRIT1SETBPX1SETBEX1SETBEA例1法2:CLRIT1MOVIP,#04HMOVIE,#84H4.串口控制寄存器SCON•功能:只有D1和D0位用于中断,作为串口中断请求标志,即串口中断请求寄存器•字节地址:98H格式如下:RI为接收中断请求标志位。当串口接收完一帧串行数据时,RI自动置1;CPU响应中断后,用软件对RI清0。TI为串行口发送中断请求标志。当串口发送完一帧串行数据时,TI自动置1,请求中断。CPU响应中断后,由软件对TI清零。其他几位的含义及用法见第5章。4.1.4中断响应•无同级或高级中断正在服务•有中断请求信号•相应的中断源已打开,即EA=1,中断源对应中断允许位也为1。•当前的指令周期已经结束•如果当前指令为RETI或访问IE和IP的指令,至少还要再执行完一条指令。1.中断响应条件2.中断响应过程图4-4中断响应过程将当前寄存器内容压入堆栈,如PUSHACC在中断服务程序中实现,解决单片机中断后要干什么的问题。把保存在堆栈中的寄存器内容取出,送回原来的位置,如POPACC☆4.1.5中断嵌套答案:CPU要进行分析判断,决定是否响应:当CPU正在执行中断服务程序时,又有新的中断源发出中断申请,响应吗?情况1:同级或低级中断源申请中断,CPU不予理睬情况2:高级别中断源申请中断,CPU就要响应。待执行完高级别中断服务程序后再转回低级中断服务程序继续执行,这就是中断嵌套。图4-5二级中断嵌套的执行过程•软件构成:主程序+中断服务程序•程序编制的关键点:要对题目要求进行精确分析,明确哪些环节应该安排在主程序中,哪些环节应该安排在中断服务程序中,再分别编制主程序和中断服务程序。4.2中断的应用4.2.1中断应用指导1.中断系统的程序编制1.中断系统的程序编制(1)编制主程序第一部分:主程序初始化功能:第二部分:须由主程序完成的其它功能。此部分必须编写用于设置堆栈位置;定义触发方式(低电平触发或脉冲下降沿触发)对IE和IP赋值等;(2)选择中断服务程序的入口地址。(3)编制中断服务程序。1.中断系统的程序编制即明确中断服务程序的起始位置注意1:一般要保护断点,即保护进入中断时累加器A、进/借位标志CY和SFR的状态,并在退出中断之前将其恢复;注意2:必须在中断服务程序中设定是否允许再次中断(即中断嵌套),由用户对EX0(或EX1)位置位或清0决定。说明:一般在中断服务程序中涉及到关键数据的设置时应关中断,即禁止嵌套。2.中断应用举例——三相交流电的故障检测电路例2图4-6是三相交流电的故障检测电路。当A相缺电时,发光二极管LEDA亮;当B相缺电时,发光二极管LEDB亮;当C相缺电时,发光二极管LEDC亮。硬件特点:①外部中断由3个交流继电器的触点和一个或非门扩展而成;②3个220V的交流继电器的线圈ZA、ZB、ZC分别接在A、B、C各相和交流地之间。►图4-6三相交流电的故障检测电路(1)检测原理①三相电正常情况下3个线圈同时得电3个常开触点全都闭合0001不申请外部中断②故障情况下(假设A相掉电)(1)检测原理线圈ZA失电常开触点ZA断开0申请外部中断,在外部中断服务程序中读取P1.0引脚状态0011产生A相掉电状态信号送入P1.01在中断服务程序中对该引脚输出1A相故障指示灯亮线圈ZB、ZC有电常开触点ZB、ZC闭合B、C相故障指示灯不亮(2)软件设计ORG0000HLJMPMAIN;跳至主程序ORG0013H;的中断入口地址LJMPTEST;转至中断服务程序ORG0100HMAIN:MOVP1,#15H;P1.0、P1.2、P1.4作输入;P1.1、P1.3、P1.5输出0SETBEX1;开中断CLRIT1;为低电平触发SETBEA;CPU开中断SJMP$;等待中断TEST:JNBP1.0,LB;A相正常,转测B相SETBP1.1;A相掉电,点亮LEDALB:JNBP1.2,LC;B相正常,转测C相SETBP1.3;B相掉电,点亮LEDBLC:JNBP1.4,LL;C相正常,返回SETBP1.5;C相掉电,点亮LEDCLL:RETIEND4.2.2课题与实训7中断控制流水灯一.实训目的学习外部中断的基本用法掌握中断处理程序的编程方法二.课题要求在程序正常运行时P1口的8个LED灯作单灯左移8次而后单灯右移7次,如此循环;中断时(即按键按下)则P1口的8个LED闪烁3次(即全亮全灭3次)。三.背景知识1.中断程序的设计主要涉及开中断、设定优先级,外中断还涉及触发方式的设定。2.在软件设计中,首先要对主程序和中断服务程序所完成的任务进行划分。根据该课题提出的要求,在主程序中应该完成的任务是8个LED循环左移右移;在中断服务程序中应该完成的功能是8个LED闪烁3次。四.硬件电路硬件结构如图,12引脚的按键点动表示有中断请求发出。图4-7实训7电路五.参考程序ORG0000HLJMPSTARTORG0003HLJMPINT0ORG0100HSTART:MOVSP,#60HMOVIE,#81H;开INT0中断SETBIT0;INT0下降沿触发L1:MOVA,#0FFH;设初值MOVR0,#8;设定左移八次CLRC;将CY清0L2:RLCA;带进位位循环左移一位MOVP1,A;送P1口,P1.0灯亮ACALLDELAY;延时0.2秒DJNZR0,L2;判断是否左移8次MOVR0,#7;移动7次L3:RRCA;带进位位循环右移MOVP1,A;送P1口ACALLDELAYDJNZR0,L3;是否右移7次?AJMPL1;重新开始DELAY:MOVR5,#4;延时0.2秒D1:MOVR6,#200D2:MOVR7,#123NOPDJNZR7,$DJNZR6,D2DJNZR5,D1RETINT0:PUSHPSW;保护PSW,ACC值PUSHACCMOVA,#00H;使8个LED全亮MOVR2,#6;闪烁3次(全亮全灭各3次)L4:MOVP1,A;A值送出LCALLDELAY;延时0.2秒CPLA;A值取反DJNZR2,L4;闪烁3次?POPACC;恢复保护的A值POPPSW;恢复保护的PSW值RETI;返回主程序END六.总结与提高1.总结:中断服务程序与子程