第5章单片机的中断系统重点与难点:单片机中断与定时的基.ppt

上传人:explodesoak291 文档编号:373669 上传时间:2018-10-05 格式:PPT 页数:51 大小:1.14MB
下载 相关 举报
第5章单片机的中断系统重点与难点:单片机中断与定时的基.ppt_第1页
第1页 / 共51页
第5章单片机的中断系统重点与难点:单片机中断与定时的基.ppt_第2页
第2页 / 共51页
第5章单片机的中断系统重点与难点:单片机中断与定时的基.ppt_第3页
第3页 / 共51页
第5章单片机的中断系统重点与难点:单片机中断与定时的基.ppt_第4页
第4页 / 共51页
第5章单片机的中断系统重点与难点:单片机中断与定时的基.ppt_第5页
第5页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第 5 章 单片机的中断系统 重点与难点: 单片机中断与定时的基本概念、单片机的中断系统、单片机外部中断源的扩展。 教学基本要求: 掌握单片机中断与定时的基本概念; 掌握单片机的中断源、中断控制、中断响应过程的基本概念及单片机中断系统的功能和使用方法; 了解单片机外部中断源扩展的常用方法和步骤。,在CPU与外设交换信息时,存在一个快速的CPU与慢速的外设间的矛盾。为解决这个问题,采用了中断技术。良好的中断系统能提高计算机实时处理的能力,实现CPU与外设分时操作和自动处理故障,从而扩大了计算机的应用范围。 当CPU正在处理某项事务的时候,如果外界或内部发生了紧急事件,要求CPU暂停正在处理的工作

2、转而去处理这个紧急事件,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序,这样的过程称为中断。向CPU提出中断请求的源称为中断源。微型计算机一般允许有多个中断源。当几个中断源同时向CPU发出中断请求时,CPU应优先响应最需紧急处理的中断请求。为此,需要规定各个中断源的优先级,使CPU在多个中断源同时发出中断请求时能找到优先级最高的中断源,响应它的中断请求。在优先级高的中断请求处理完了以后。再响应优先级低的中断请求。如图5-1中断流程示意图。,当CPU正在处理一个优先级低的中断请求的时候,如果发生另一个优先级比它高的中断请求,CPU能暂停正在处理的中断源的处理程序,转去处理优先级高

3、的中断.请求,待处理完以后,再回到原来正在处理的低级中断程序,这种高级中断源能中断低级中断源的中断处理称为中断嵌套。如图5-2中断嵌套流程图。,图5-1中断流程示意图 图5-2中断嵌套流程图,MCS-51系列单片机允许有五个中断源,提供两个中断优先级(能实现二级中断嵌套)。每一个中断源的优先级的高低都可以通过编程来设定。中断源的中断请求是否能得到响应,受中断允许寄存器IE的控制;各个中断源的优先级可以由中断优先级寄存器IP中的各位来确定;同一优先级中的各中断源同时请求中断时,由内部的查询逻辑来确定响应的次序。,5. 1.1 中断请求源和中断请求标志 1、中断请求源 MCS-51中断系统可用图5

4、-3来表示。五个中断源是:, 来自P3.2引脚上的外部中断请求(外中断0); 来自P3.3引脚上的外部中断请求(外中断1); T0 片内定时器/计数器0溢出(TF0)中断请求; T1 片内定时器/计数器1溢出(TF1)中断请求; 串行口 片内串行口完成一帧发送或接收中断请求源TI或RI。,5. 1 中断的概念,每一个中断源都对应有一个中断请求标志位,它们设置在特殊功能寄存器TCON和SCON中。当这些中断源请求中断时,分别由TCON和SCON中的相应位来锁存。,图5-3 中断系统,2、中断标志 定时器控制寄存器TCON TCON是定时器/计数器0和1(T0,T1)的控制寄存器,它同时也用来锁存

5、T0,T1的溢出中断请求源和外部中断请求源。TCON寄存器中与中断有关的位如下图所示。, TF1定时器/计数器1(T1)的溢出中断标志。 TF0定时器/计数器0(T0)的溢出中断标志。 IE1 外中断1中断请求标志。 IT1 外部中断1触发方式控制位。 IE0外中断0中断请求标志。 IT0 外部中断源0触发方式控制位。,、串行口控制寄存器SCON 串行口控制寄存器SCON中的低2位用作串行口中断标志,如下图所示。,其中: RI 串行口接收中断标志。在串行口方式0中,每当接收到第8位数据时,由硬件置位RI;在其他方式中,当接收到停止位的中间位置时置位RI。注意,当CPU转入串行口中断服务程序入口

6、时不复位RI,必须由用户用软件来使RI清0。 TI 串行口发送中断标志。在方式0中,每当发送完8位数据时由硬件置位TI;在其他方式中于停止位开始时置位。TI也必须由软件来复位。,5.1.2 中断控制 1、中断允许和禁止 在MCS-51中断系统中,中断允许或禁止是由片内的中断允许寄存器IE(IE为特殊功能寄存器)控制的,IE中的各位功能如下:,EA CPU中断允许标志。 ES 串行口中断允许位。 ET1 定时器/计数器1(T1)的溢出中断允许位。 EX1 外部中断1中断允许位。 ET0 定时器/计数器0(T0)的溢出中断允许位。 EX0 外部中断0中断允许位。,EA CPU中断允许标志。EA=0

7、,CPU禁止所有中断,即CPU屏蔽所有的中断请求;EA=1,CPU开放中断。但每个中断源的中断请求是允许还是被禁止,还需由各自的允许位确定。ES 串行口中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。ET1 定时器/计数器1(T1)的溢出中断允许位。ET1=1,允许T1中断;ET1=0,禁止T1中断。EX1 外部中断1中断允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。ET0 定时器/计数器0(T0)的溢出中断允许位。ET0=1,允许T0中断;ET0=0,禁止T0中断。EX0 外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断

8、0中断。中断允许寄存器中各相应位的状态,可根据要求用指令置位或清0,从而实现该中断源允许中断或禁止中断,复位时IE寄存器被清0。,2、中断优先级控制 MCS-51中断系统提供两个中断优先级,对于每一个中断请求源都可以编程为高优先级中断源或低优先级中断源,以便实现二级中断嵌套。中断优先级是由片内的中断优先级寄存器IP(特殊功能寄存器)控制的。IP寄存器中各位的功能说明如下:,PS 串行口中断优先级控制位。 PT1 T1中断优先级控制位。 PX1 外部中断1中断优先级控制位。 PT0 定时器/计数器0(T0)中断优先级控制位 。 PX0 外部中断0中断优先级控制位。,PS 串行口中断优先级控制位。

9、PS=1,串行口定义为高优先级中断源;PS=0,串行口定义为低优先级中断源。PT1 T1中断优先级控制位。PT1=1,定时器/计数器1定义为高优先级中断源;PT1=0,定时器/计数器1定义为低优先级中断源。PX1 外部中断1中断优先级控制位。PX1=1,外中断1定义为高优先级中断源;PX1=0,外中断1定义为低优先级中断源。PT0 定时器/计数器0(T0)中断优先级控制位。功能同PT1。PX0 外部中断0中断优先级控制位。功能同PX1。中断优先级控制寄存器IP中的各个控制位都可由编程来置位或复位(用位操作指令或字节操作指令),单片机复位后IP中各位均为0,各个中断源均为低优先级中断源。,3 中

10、断优先级结构 MCS-51中断系统具有两级优先级(由IP寄存器把各个中断源的优先级分为高优先级和低优先级),它们遵循下列两条基本规则: (1)低优先级中断源可被高优先级中断源所中断,而高优先级中断源不能被任何中断源所中断; (2)一种中断源(不管是高优先级或低优先级)一旦得到响应,与它同级的中断源不能再中断它。 为了实现上述两条规则,中断系统内部包含两个不可寻址的优先级状态触发器。其中一个用来指示某个高优先级的中断源正在得到服务,并阻止所有其它中断的响应;另一个触发器则指出某低优先级的中断源正得到服务,所有同级的中断都被阻止,但不阻止高优先级中断源。,当同时收到几个同一优先级的中断时,响应哪一

11、个中断源取决于内部查询顺序。其优先级排列如下: 中断源 同级内的中断优先级 外部中断0 最高 定时器/计数器0溢出中断 外部中断1 定时器/计数器1溢出中断 串行口中断 最低,5. 2中断处理过程 5. 2.1 中断响应 1、中断响应过程 CPU在每个机器周期的S5P2时刻采样中断标志,而在下一个机器周期对采样到的中断进行查询。如果在前一个机器周期的S5P2有中断标志,则在查询周期内便会查询到并按优先级高低进行中断处理,中断系统将控制程序转入相应的中断服务程序。下列三个条件中任何一个都能封锁CPU对中断的响应: (1)CPU正在处理同级的或高一级的中断; (2)现行的机器周期不是当前所执行指令

12、的最后一个机器周期; (3)当前正在执行的指令是返回(RETI)指令或是对IE或IP寄存器进行读/写的指令。,上述三个条件中,第二条保证把当前指令执行完,第三条保证如果在当前执行的是RETI指令或是对IE,IP进行访问的指令时,必须至少再执行完一条指令之后才会响应中断。中断查询在每个机器周期中重复执行,所查询到的状态为前一个机器周期的S5P2时采样到的中断标志。这里要注意的是:如果中断标志被置位,但因上述条件之一而未被响应,或上述封锁条件已撤消,但中断标志位已不再存在(已不再是置位状态)时,被拖延的中断就不再被响应,CPU将丢弃中断查询的结果。也就是说,CPU对中断标志置位后,如未及时响应而转

13、入中断服务程序的中断标志不作记忆。CPU响应中断时,先置相应的优先级激活触发器,封锁同级和低级的中断。然后根据中断源的类别,在硬件的控制下,程序转向相应的向量入口单元,执行中断服务程序。,外部中断 和 的电平在每个机器周期的S5P2时被采样并锁存到IE0和IE1中,这个置入到IE0和IE1的状态在下一个机器周期才被查询电路查询,如果产生了一个中断请求,而且满足响应的条件,CPU响应中断,由硬件生成一条长调用指令转到相应的服务程序入口,这条指令是双机器周期指令。因此,从中断请求有效到执行中断服务程序的第一条指令的时间间隔至少需要三个完整的机器周期。如果中断请求被前面所述的三个条件之一所封锁,将需

14、要更长的响应时间。若一个同级的或高优先级的中断已经在进行,则延长的等待时间显然取决于正在处理的中断服务程序的长度,如果正在执行的一条指令还没有进行到最后一个周期,则所延长的等待时间不会超过三个机器周期,这是因为MCS-51指令系统中最长的指令(MUL和DIV)也只有四个机器周期;假若正在执行的是RETI指令或者是访问IE或IP指令,则延长的等待时间不会超过五个机器周期(为完成正在执行的指令还需要一个周期,加上为完成下一条指令所需要的最长时间四个周期,如MUL和DIV指令)。因此,在系统中只有一个中断源的情况下,响应时间总是在三个机器周期到八个机器周期之间。,2、中断响应时间,5.2.2 外部中

15、断触发方式MCS-51的外部中断 ( 和 )可以用程序控制为电平触发或负边沿触发(通过编程对定时器/计数器控制寄存器TCON中的IT0和IT1位进行清“0”或置“1”)。若ITx(X=0,1)为0,则外部中断 程控为电平触发,由 引脚上所检测到的低电平(必须保持到CPU响应该中断时为止,并且还应在中断返回前变为高电平)触发。若ITx=1,则外部中断 由负边沿触发。即在相继的两个机器周期中,前一个周期从 引脚上检测到高电平,而在后一个周期检测到低电平,则置位TCON寄存器中的中断请求标志IEx(IE0或IE1),由IEx发出中断请求。由于外部中断引脚在每个机器周期内被采样一次,所以中断引脚上的电

16、平应至少保持12个振荡周期,以保证电平信号能被采样到。对于负边沿触发方式的外部中断,要求输入的负脉冲宽度至少保持12个振荡周期(若晶振频率为6MHz,则宽度为2s),以确保检测到引脚上的电平跳变,而使中断请求标志IEX置位。 对于电平触发的外部中断源,要求在中断返回前撤销中断请求(使引脚上的电平变高)是为了避免在中断返回后又再次响应该中断而出错。电平触发方式适用于外部中断输入为低电平,而且能在中断服务程序中撤销外部中断请求源的情况。 (1)电平触发即MCS-51每执行完一个指令都将 的信号读入IEx( =0,IEX=1;=1,IEx=0),因此IEx的中断请求信号随着 变化。如果送入 的中断请

17、求信号, MCS-51单片机未能即时检查到,而 的信号也产生变化,IEX的信号亦发生变化,这样就会漏掉 的中断要求。 (2)负边沿触发即只要检测到送至 上的信号由1变成0时,中断请求标志位IEX就被设定为1,并且一直维持着1,直到此中断请求被接收为止,且必须用软件来清除IEX,如JBC IE1,LOOP。,5.2.3 多个外部中断源系统设计MCS-51有两个外部中断源 ,但在实际的应用系统中,外部中断请求源往往比较多,下面讨论两种多中断源系统的设计方法。,1、定时器中断作为外部中断使用把MCS-51的两个定时器/计数器(T0和T1)选择为计数器方式,每当P3.4(T0)或P3.5(T1)引脚上

18、发生负跳变时,T0和T1的计数器加1。利用这个特性,可以把P3.4和P3.5引脚作为外部中断请求输入线,而定时器的溢出中断作为外部中断请求标志。应用举例如下:设T0为方式2(自动装入常数)外部计数方式,时间常数为0FFH,允许中断,并CPU开放中断。其初始化C51代码为:TMOD = 0x06; /数00000110B送方式寄存器TMOD。设T0为方式2,计数器方式工作;TL0 = 0xFF; /时间常数0FFH送T0的低8位TL0和高8位TH0寄存器。TH0 = 0xFF; TR0 = 1; /置TR0为1,启动T0。IE = 0x82; /置中断允许,即置中断允许寄存器IE中的EA位,ET

19、0位为1:当接在P3.4引脚上的外部中断请求输入线发生负跳变时,TL0加1溢出,TF0被置“1”向CPU发出中断请求。同时TH0的内容自动送入TL0,使TL0恢复初始值0FFH。这样,每当P3.4引脚上有一次负跳变时都置“1”于TF0,向CPU发中断请求,P3.4引脚就相当于边沿触发的外部中断请求源输入线。同理,也可以把P3.5引脚作类似的处理。,图5-4 多个外部中断源系统设计,外部中断1的中断服务汇编指令程序如下: INTR: PUSH PSW ;程序状态字PSW内容压入堆栈保存PUSH A ;累加器A内容压入堆栈保存JNB P1.0,DVT1 ; P1.0引脚为0,转至设备1中断服务程序

20、JNB P1.1,DVT2 ; P1.1引脚为0,转至设备2中断服务程序JNB P1.2,DVT3 ; P1.2引脚为0,转至设备3中断服务程序JNB P1.3,DVT4 ; P1.3引脚为0,转至设备4中断服务程序 INTR1:POP A ; 压入堆栈的内容送回到APOP PSW ; 恢复程序状态字PSW的内容RETI ; 中断返回 DVT1: ;设备1中断服务程序入口AJMP INTR1 ;跳转到INTR1所指示的指令 DVT2: ;设备2中断服务程序入口AJMP INTR1 ;跳转到INTR1 DVT3: ;设备3中断服务程序入口AJMP INTR1 ;跳转到INTR1 DVT4: ;设

21、备4中断服务程序入口AJMP INTR1 ;跳转到INTR1,5 . 2.4 中断请求的撤除 在中断请求被响应前,中断源发出的中断请求被锁存在特殊功能寄存器TCON和SCON的相应的中断标志位中的。一旦某个中断请求得到响应,CPU必须把它的相应中断标志位复位成“0”状态。否则,MCS-51就会因为中断标志位未能得到及时撤除而重复响应同一中断请求,这是绝对不能容许的。 AT89C51有5个中断源,但实际.分属于三种中断类型。这三种类型是:外部中断、定时器溢出中断和串行口中断。对于这三种中断类型的中断请求,其撤除方法是不相同的。,1、定时器溢出中断请求的撤除 定时器溢出中断得到响应而自动复位成“0

22、”状态。因此,定时器溢出中断源的中断请求是自动撤除的。2、串行口中断请求的撤除 用指令将它们撤除。 CLR TI ;撤除发送中断 CLR RI ;撤除接收中断 若采用字节型指令,则也可采用如下汇编指令:ANL SCON,#0FCH;撤除发送和接收中断3、外部中断请求的撤除 外部中断请求有二种触发方式;电平触发和负边沿触发。对于这两种不同的中断触发方式,MCS-51撤除它们的中断请求的方法是不相同的。 在负边沿触发方式下,外部中断标志IE0或IE1,是依靠CPU两次检测或上触发电平状态而置位的。因此,芯片 设计者使CPU在响应中断时自动复位IE0或IE1就可撤除 或 上的中断请求,因为外部中断源

23、在得到CPU的中断服务时是不可能再在 或 上产生负边沿而使中断标志位IE0或IE1置位的。,图5-5 电平外部中断的撤除电路,INSVR:ANL P1,#0FEHORL P1,#01HCLR IE0. 51单片机执行上述程序就可在P1.0上产生一个宽度为二个机器周期的负脉冲。在该负脉冲作用下,Q触发器被置位成“1”状态, 上电平也因此而变高,从而撤除了其上的中断请求。,5. 2.5 MCS-51中断系统的初始化MCS-51中断系统功能,是可以通过上述特殊功能寄存器统一管理的,中断系统初始化是指用户对这些特殊功能寄存器中的各控制位进行赋值。1、中断系统初始化 中断系统初始化步骤如下: 开相应中断

24、源的中断; 设定所用中断源的中断优先级; 若为外部中断,则应规定低电平还是负边沿的中断触发方式。,例5-1请写出 为低电平触发的中断系统初始化程序。,解:采用汇编指令系统中的位操作指令 SETB EA SETB EX1 ;开 中断 SETB PX1 ;令 为高优先级 CLR IT1 ;令 为电平触发 采用汇编指令系统中的字节型指令 MOV IE,#84H ;开 中断 ORL IP,#04H ;令 为高优先级 ANL TCON,#0FBH ;令 为电平触发,显然,采用位操作指令进行中断系统初始化是比较简单的,因为用户不必记住各控制位寄存器中的确切位置,而各控制位名称是比较容易记忆的。,3、TIM

25、ER0或TIMER1的中断请求 当计数溢出时会设定TFx=1,而对51提出中断请求。TIMER0或TIMER1中断请求设定的汇编指令步骤如下:定中断起始地址 ORG 0BH ;TIMER0 ORG 1BH ;TIMER1 定工作方式 MOV TMOD ,#XXXXXXXXB 设定计数值 MOV THX,#XXXX MOV TLX,#XXXX 设定中断使能 MOV IE,#1000X0X0,为了让学生理解中断的全过程,可在Keil软件仿真中调试如下程序,调试时打开Protues硬件P1、P3口仿真图,置P3.2为低电平时,才能进入中断服务程序,P1口指示灯移位程序,中断一次指示灯移动一位。若不变

26、低,程序就不向下执行。仿真图如图5-6所示。,图5-6 中断控制P1口亮灯图,#include /插入52特殊功能寄存器头文件 unsigned char i;/设置循环计数器变量 unsigned char temp;/设置显示位变量 unsigned char a,b;/设置计算显示输出位变量 /- int0() interrupt 0 /K0中断程序 a=temp(8-i);/变量右移8-i位P1=a|b;/计算左移的显示位,并送显示控制位i+; if(i=8)i=0; / /= void main(void)temp=0xfe;/设置初始显示位i = 0; /设移位指针初值P1=0xF

27、F ;/送显示位数据输出IT0 = 1 ;/设外部中断0为边沿中断EX0 = 1 ;/设外部中断0中断允许EA = 1 ;/设CPU中断允许while(1); ,例1.DNS,5. 3 中断编程和应用举例使用MCS-51的中断,为使用到的中断源编写中断服务程序。C51为中断服务程序的编写提供了方便的方法。C51的中断服务程序是一种特殊的函数,它的说明形式为:void函数名(void) interrupt n using m函数体语句)这里interrupt和using是为编写C51中断服务程序而引入的关键字,interrupt表示该函数是一个中断服务函数,interrupt后面的整数,n表示该

28、中断服务函数对应哪一个中断源。每个中断源都有系统指定的中断编号(如表5-4所示)。,using指定该中断服务程序要使用的工作寄存器组号,m为03。若不使用关键字using,则编译系统会将当前工作寄存器组的8个寄存器都压入堆栈。,例5-2 外部中断( / ), 功能说明 主程序将P1的8个LED做左移右移,中断时(按 时)使P1的8个LED闪烁5次。 硬件:如图5-6只是在第12脚( )接一个按键K0,按键两端一端接12脚,另一端接地。, 程序: #include /插入52特殊功能寄存器头文件 #include “delay.h“ /- unsigned char i;/设置循环计数器变量 u

29、nsigned char temp;/设置显示位变量 unsigned char a,b;/设置计算显示输出位变量 /- int0() interrupt 0 /K0中断程序 char k;for(k=0;k=4;k+), P1= 0x00;/发光二极管全亮delay02s( ); /调用0.2秒延时函数delay02s( ); /调用0.2秒延时函数P1= 0xFF;/发光二极管全灭delay02s( ); /调用0.2秒延时函数delay02s( ); /调用0.2秒延时函数 /= void main(void)temp=0xfe;/设置初始显示位P1=0xFF ;/送显示位数据输出IT0

30、 = 0 ;/设外部中断0为低电平中断EX0 = 1 ;/设外部中断0中断允许IP0 = 1 ;/外部中断0中断优先EA = 1 ;/设CPU中断允许while(1) delay02s( ); /调用0.2秒延时函数for(i=0;i(8-i);/变量右移8-i位P1=a|b;/计算左移的显示位,并送显示控制位delay02s( );/调用0.2秒延时函数for(i=1;ii;/计算右移显示位,变量右移i位b=temp(8-i);/变量左移8-i位P1=a|b;/计算右移的显示位,并送显示控制位delay02s( );/调用0.2秒延时函数,例2.DNS,例5-3 两个中断( , )同时使用,

31、 功能说明主程序:P1接8个LED,使8个LED闪烁。INT0控制的中断要求:使P1口的8个LED做一个灯的左移右移3次。INT1控制的中断要求:使P1口的8个LED做二个灯的左移右移3次。 硬件:见图5-6只是在第12脚( )和第13( )脚各接一个按键, 程序: #include /插入52特殊功能寄存器头文件 #include “delay.h“ /- unsigned char i;/设置循环计数器变量 unsigned char temp;/设置显示位变量 unsigned char a,b;/设置计算显示输出位变量 /- int0() interrupt 0 /K0中断程序 cha

32、r k;temp=0xFE;for(k=0;k=2;k+) for(i=0;i8;i+) /左移7次,a=temp(8-i);/变量右移8-i位P1=a|b;/计算左移的显示位,并送显示控制位delay02s( );/调用0.2秒延时函数for(i=1;ii;/计算右移显示位,变量右移i位b=temp(8-i);/变量左移8-i位P1=a|b;/计算右移的显示位,并送显示控制位delay02s( );/调用0.2秒延时函数 ,int1() interrupt 2 /K1中断程序 char k;temp=0xFC;for(k=0;k(8-2*i);/变量右移8-i位P1=a|b;/计算左移的显示

33、位,并送显示控制位delay02s( );/调用0.2秒延时函数for(i=1;i2*i;/计算右移显示位,变量右移i位b=temp(8-2*i);/变量左移8-i位P1=a|b;/计算右移的显示位,并送显示控制位delay02s( );/调用0.2秒延时函数 ,void main(void) P1=0xFF ;/送显示位数据输出IT0 = 0 ;/设外部中断0为低电平中断IT1 = 0 ;/设外部中断1为低电平中断EX0 = 1 ;/设外部中断0中断允许EX1 = 1 ;/设外部中断1中断允许PX1 = 1 ;/外部中断2中断优先EA = 1 ;/设CPU中断允许while(1) P1= 0

34、x00;/发光二极管全亮delay02s( ); /调用0.2秒延时函数delay02s( ); /调用0.2秒延时函数P1= 0xFF;/发光二极管全灭delay02s( ); /调用0.2秒延时函数delay02s( ); /调用0.2秒延时函数 ,例3.DNS,例5-4 广告灯左移(计时中断法) 功能说明 令P1的8个LED每隔1秒左移1次 令TIMER0工作在MODE1(16bit定时器),每隔10000s产生一次中断,而中断100次就是1秒。 硬件:见图5-6 程序:,#include /插入52特殊功能寄存器头文件 #include “delay.h“ /- unsigned ch

35、ar i,k;/设置循环计数器变量 unsigned char temp;/设置显示位变量 unsigned char a,b;/设置计算显示输出位变量 bit T1S_flag;/1秒时间到标志 /- time0() interrupt 1 /Time0中断程序 TH0 = (65536-10000)/256;/取初值TL0 = (65536-10000)%256;k+;/百分之秒变量加1if(k=100)T1S_flag=1;k=0; /如果到了1秒,设1秒到标志,清1/100变量 ,void main(void) TMOD = 0x01;/定时器0设为方式1TH0 = (65536-10

36、000)/256;TL0 = (65536-10000)%256;k=0;i=0;temp = 0xFE;/设置输出初始值P1=0xFF ;/送显示位数据输出ET0 = 1 ;/定时器中断允许 EA = 1 ;/设CPU中断允许TR0 = 1 ;/启动定时器0while(1)if(T1S_flag=1) T1S_flag = 0;/清1s时间到标志a=temp(8-i);/变量右移8-i位P1=a|b;/计算左移的显示位,并送显示控制位i+ ;if(i=8) i=0;,例4.DNS,例5-5 计时中断与外部中断同时存在 功能说明 令P1的8个LED每隔1秒左移1次。 按INT0时,8个LED闪

37、烁5次。 硬件:见图5-6只是在第12脚( )接一个按键,按键两端一端接12脚,另一端接地。 程序:,#include /插入52特殊功能寄存器头文件 #include “delay.h“ /- unsigned char i,k;/设置循环计数器变量 unsigned char temp;/设置显示位变量 unsigned char a,b;/设置计算显示输出位变量 bit T1S_flag;/1秒时间到标志 /- int0() interrupt 0 /K0中断程序 char k;for(k=0;k=4;k+) P1= 0x00;/发光二极管全亮delay02s( ); /调用0.2秒延时

38、函数delay02s( ); /调用0.2秒延时函数,P1= 0xFF;/发光二极管全灭delay02s( ); /调用0.2秒延时函数delay02s( ); /调用0.2秒延时函数 /- time0() interrupt 1 /Time0中断程序 TH0 = (65536-10000)/256;/取初值TL0 = (65536-10000)%256;k+;/百分之秒变量加1if(k=100)T1S_flag=1;k=0; /如果到了1秒,设1秒到标志,清1/100变量 /= void main(void) TMOD = 0x01;/定时器0设为方式1TH0 = (65536-10000)

39、/256;TL0 = (65536-10000)%256;k=0;i=0;temp = 0xFE;/设置输出初始值,P1=0xFF ;/送显示位数据输出ET0 = 1 ;/定时器中断允许 IT0 = 1 ;/设外部中断0为下降沿触发中断EX0 = 1 ;/设外部中断0中断允许PX0 = 1 ;/外部中断0中断优先EA = 1 ;/设CPU中断允许TR0 = 1 ;/启动定时器0while(1)if(T1S_flag=1) T1S_flag = 0;/清1s时间到标志a=temp(8-i);/变量右移8-i位P1=a|b;/计算左移的显示位,并送显示控制位i+ ;if(i=8) i=0;,例5.

40、DNS,图5-7所示的数码管显示与按键电路图,#include char led_mod=0x3f, 0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/字模 char led1_mod=0x01, 0x40,0x08,0x06,0x30;/字模 char led2_mod=0x01, 0x02,0x04,0x08,0x10,0x20,0x40,0x80;/字模sbit D1= P30;void delay(unsigned int time) /延时unsigned char j ;for(j= 255;time0;time-)for(;j0;j-);

41、/延时256key0() interrupt 0 /K0中断函数unsigned char i;D1= IE0; /IE0状态输出for(i=0;i=4;i+) /闪灯循环一圈P2= led1_modi;delay( 35000); P2= 0x40; /结束符“-” ,Key1() interrupt 2 /K1中断函数 unsigned char i;for(i=0;i=7;i+) /跑马灯循环一圈Dl= IE0; /IE0状态输出Pl= led2_modi;delay( 35000); P1= 0x40; /结束符“-” /=void main()unsigned char i;TCON

42、=0x05; /脉冲触发方式PX0=0;PX1=1; /INT1优先Dl=0;P1= P2= 0x40; /输出初值IE=0x85; /开中断while(l)for(i=0;i=9;i+) /字符09无限循环P0= led_modi;delay(35000);,图5- 8 例6程序运行效果,例6.DNS,本章小结 1中断是指在突发事件到来时先中止当前正在进行的工作,转而去处理突发事件。待处理完成后,再返回到原先被中止的工作处,继续进行随后的工作。 2中断的核心问题包括:51单片机的中断源、中断控制寄存器、中断处理过程。 3C51中断服务函数声明的格式为: void 函数名(void) interrupt n using m (函数体语句) 4介绍了单片机外部中断源扩展和中断应用实例。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1