单元三 外部中断应用
- 格式:ppt
- 大小:1.14 MB
- 文档页数:85
由于不少同学们,学习51单片机到了中断课程的时候,就开始进入一知半解的状态了,为此,开题一篇,以供大家搞明白,中断这回事。
我们还是用清晰点的逻辑来分析,围绕这四个部分来介绍,当然重点在于3和4部分。
通篇我会以让初学者都能看懂的语言来说明。
如果有专业一点的术语名词,我也尽量用简单易懂的描述。
注:本文旨在让大家理解什么是中断和怎么去设置。
具体的东西有些考虑到深浅问题,则跳过不讲。
如需了解,可自行查询资料1.什么是中断?2.为什么要有中断?3.中断怎么触发?4.怎么设置中断?什么是中断?举个老生常谈的例子——接电话。
在一个风和日丽的下午,你在电脑前看着视频,突然间,你桌上的手机来电话了,这时候你就该暂停视频,拿起手机接电话。
OK,回到单片机里来,我们之前写程序,都是在main函数里,甚至main 函数里的while(1)里执行我们的程序。
这就相当于这个例子中的【看视频】,而【电话响了】这个过程,就相当于产生了中断,而【接电话】就是你在中断里做的事情。
为什么要有中断?为什么要有中断,再举一个例子好了。
简单来讲,就是一些程序我们平时不执行,但到了某个特殊时刻,我们才去执行。
所以我们就让这个特殊时刻产生一个中断,这时候,就跳去了我们特殊时刻才执行的函数里了。
什么情况会触发中断?那么,我们什么情况下,单片机才会识别到中断,或者说,什么情况下,单片机才会跳入我们中断的函数里呢?简单来讲,我们的中断大致分为三种,外部中断、定时器中断、串口中断。
这三种的触发方式不一样。
外部中断:顾名思义,就是单片机外部出现了一定的情况,才进入了中断。
89c51有两个外部中断,一个是P3.2引脚,一个是P3.3引脚。
分别是外部中断0和外部中断1。
我们以外部中断0为例,当P3.2这个脚读到一个低电平(0)或者下降沿(由高电平变低电平)的时候,这时单片机自己就识别到了,所以就会自己跳入中断。
定时器中断:定时器中断不再这详细说明,大致是讲,我们可以设置一个时间(或者叫闹钟),然后这个单片机会开始计时,当到了这个时间点,单片机就会跳入中断。
实验三外部中断实验报告班级:学号:姓名:教师:一、实验目的1、掌握单片机外部中断的原理及过程。
2、掌握单片机外部中断程序的设计方法。
3、掌握单片机外部中断时中断方式的选择方法。
二、实验内容如下图所示,P3.2设为输入,P2设为输出位,连有8个发光二极管D1~D8。
每当发生外部中断时,发光二极管以向下流水灯的方式点亮。
分别选择边沿触发外部中断放是和电平触发外部中断方式两种。
三、编程提示1、P3口是8位准双向口,具有双重功能:第一功能和P1口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可分别定义为输入或输出;第二功能定义如下:P3.0 RXD 串行输入口P3.1 TXD 串行输出口P3.2 INT0 外部中断0请求输入线P3.3 INT1 外部中断1请求输入线P3.4 T0定时器/计数器T0外部计数器脉冲输入线P3.5 T1定时器/计数器T1外部计数器脉冲输入线P3.6 WR外部数据存贮器写脉冲输出线P3.7 RD外部数据存贮器读脉冲输出线2、各中断服务程序入口地址:外部中断0 03H定时器/计数器T1溢出中断0BH外部中断1 13H定时器/计数器1BH串行口中断23H3、外部中断的产生条件中断允许寄存器IE:EA ES ET1 EX1 ET0 EX0(1)外部中断源允许中断(中断0:EX0=1;中断1:EX1=1)。
(2)CPU开中断(EA=1)。
(3)外部中断方式CPU发出中断申请。
4、外部中断方式的选择控制TCON:TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0IT0是选择文字则外部中断0请求(INT0)边沿触发方式或电平触发方式的控制位。
前一方式IT0=1,后一方式IT0=0。
IT1是选择外部中断1请求(INT1)为边沿触发方式或电平触发方式的控制位。
前一方式IT1=1,后一方式IT1=0。
当8031复位后,TCON被清0。
5、外部中断电路负脉冲作为中断请求信号时,为了保证中断的唯一性,必须加上消除开关抖动的电路或者去抖动延时程序,保证每次只产生单脉冲,构成边沿触发方式外部中断电路。
外部中断实验一、实验目的1. 掌握51单片机外部中断的应用。
2. 掌握中断函数的写法。
3. 掌握XL400实验板的使用。
二、实验内容1. 用外部中断改变流水灯的方式。
2. 用外部中断0测量负跳变信号的累计数,同时在八位LED数码管上显示出来。
三、实验步骤说明参考实验指导书第一部分实验工具简介中,XL400实验板的使用。
着重掌握外部中断0和外部中断1,本此实验使用外部中断0。
外部中断0请求,由P3.2管脚输入,通过IT0位来决定是低电平有效还是下降沿有效。
一旦输入信号有效,即向CPU申请中断,并建立IE0中断标志。
以外部中断0为例,开放中断源采用以下语句:EA=1; //开放中断总允许位EX0=1; //开放外部中断0允许位IT0=1; //置外部中断为边沿(下边沿)触发方式中断函数结构如下:void int_0() interrupt 0 // interrupt 0表示该函数为中断类型号0的中断函数{}1. 用外部中断改变流水灯的方式。
中断前:实验板上P20~P27的8个显示灯全亮。
外部中断0:实验板上P20~P27的左右4个显示灯闪烁循环8次。
外部中断1:实验板上P20~P27的8个显示灯依次循环点亮。
中断的方式:用导线或者金属触碰AT89S52芯片P3.2管脚。
改变中断优先级和保护现场,观察运行结果2. 用外部中断0测量负跳变信号的累计数,同时在八位LED数码管上显示出来。
跳变信号由P3.0给出(提示:P3_0=1;延时;P3_0=0),跳变信号加之管脚P3.2。
实验时,可用导线或者导电金属将AT89S52芯片P3.0和P3.2管脚相连即可。
实验板XL400的8位数码管:0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff为0,1,2,3,4,5,6,7,8,9,关显示,数码管码表。
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe 为8位数码管位选码。
【CC2530⼊门教程-03】CC2530的中断系统及外部中断应⽤第3课 CC2530的中断系统及外部中断应⽤⼴东职业技术学院欧浩源⼀、中断相关的基础概念内核与外设之间的主要交互⽅式有两种:轮询和中断。
轮询的⽅式貌似公平,但实际⼯作效率很低,且不能及时响应紧急事件;中断系统使得内核具备了应对突发事件的能⼒。
在执⾏CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执⾏的程序,转⽽去执⾏另外⼀段特殊程序来处理出现的紧急事务,处理结束后,CPU⾃动返回到原来暂停的程序中去继续执⾏。
这种程序在执⾏过程中由于外界的原因⽽被中间打断的情况,称为中断。
两个重要的概念:<1> 中断服务函数:内核响应中断后执⾏的相应处理程序。
<2>中断向量:中断服务程序的⼊⼝地址。
每个中断源都对应⼀个固定的⼊⼝地址。
当内核响应中断请求时,就会暂停当前的程序执⾏,然后跳转到该⼊⼝地址执⾏代码。
⼆、CC2530的中断系统CC2530具有18个中断源,每个中断源都由各⾃的⼀系列特殊功能寄存器来进⾏控制。
可以编程设置相关特殊功能寄存器,设置18个中断源的优先级以及使能中断申请响应等。
我们常⽤的中断源有下⾯⼏个:三、CC2530的中断处理函数编写⽅法中断服务函数与⼀般⾃定义函数不同,有特定的书写格式:<1> 在每⼀个中断服务函数之前,都要加上⼀句起始语句:#pragma vector = <中断向量><中断向量>表⽰接下来要写的中断服务函数是为那个中断源服务的,该语句有两种写法:#pragma vector = 0x7B或者 #pragma vector = P1INT_VECTOR前者是中断向量的⼊⼝地址,后者是头⽂件“ioCC2530.h”中的宏定义。
<2> _ _interrupt关键字表⽰该函数是⼀个中断服务函数,<函数名称>可以⾃定义,函数体不能带有参数,也不能有返回值。
51单片机一般有两个外部中断输入端,并允许外部中断源以低电平或负边沿两种触发方式输入中断请求信号。
本例就是利用一只按钮,在按下时产生的负边沿触发外部中断。
1 硬件设计将一只按钮接在外部中断输入0(12脚),八支发光二极管分别接在P0.0~P0.7,其电路如下图所示。
⒉软件设计通过按下按钮SW触发外部中断,从而改变发光二极管D1~D8的亮、灭,当第一次按下按钮时,只有D1发光二极管亮;第二次按下按钮时,只有D2发光二极管亮;第三次按下按钮时,只有D3发光二极管亮;……第八次按下按钮时,只有D8发光二极管亮;第九次按下按钮时,D1~D8发光二极管全亮;第十次按下按钮时,D1~D8发光二极管全都不亮;第十一次按下按钮时,只有D1发光二极管亮;按钮SW触发外部中断,从而控制D1~D8亮灭的详细C51程序如下。
/***************外部中断****************/#include <reg51.h>unsigned char count=0; //外部中断计数unsigned char F0=0;main(){F0=0;IE=0X81;//打开外部中断0和总中断使能或者(EX0=1;EA=1)IT0=1; //标志位清零,开中断 ,边沿激活(或者TCON|=0X01)while(1){while(F0==0);switch(count%10){case(0): P0=0XFF;break;case(1): P0=0XFE;break;case(2): P0=0XFD;break;case(3): P0=0XFB;break;case(4): P0=0XF7;break;case(5): P0=0XEF;break;case(6): P0=0XDF;break;case(7): P0=0XBF;break;case(8): P0=0X7F;break; case(9): P0=0X00;break; }F0=0;}}void int_int0() interrupt 0 //外部中断{count++;F0=1;}。
下面是赠送的几篇网络励志文章需要的便宜可以好好阅读下,不需要的朋友可以下载后编辑删除!!谢谢!!出路出路,走出去才有路“出路出路,走出去才有路。
”这是我妈常说的一句话,每当我面临困难及有畏难情绪的时候,我妈就用这句话来鼓励我。
一定有很多人想说:“这还在北京混个什么劲儿啊!”但他每天都乐呵呵的,就算把快递送错了也乐呵呵的。
某天,他突然递给我一堆其他公司的快递单跟我说:“我开了家快递公司,你看得上我就用我家的吧。
”我有点惊愕,有一种“哎呦喂,张老板好,今天还能三蹦子顺我吗”的感慨。
之后我却很少见他来,我以为是他孩子出生了休假去了。
再然后,我就只能见到单子见不到他了。
某天,我问起他们公司的快递员,小伙子说老板去上海了,在上海开了家新公司。
我很杞人忧天地问他:“那上海的市场不激烈吗?新快递怎么驻足啊!”小伙子嘿嘿一笑说:“我们老板肯定有办法呗!他都过去好几个月了,据说干得很不错呢!”“那老婆孩子呢?孩子不是刚生还很小吗?”“过去了,一起去上海了!”那个瞬间,我回头看了一眼办公室里坐着的各种愁眉苦脸的同事,并且举起手机黑屏幕照了一下我自己的脸,一股“人生已经如此的艰难,有些事情就不要拆穿”的气息冉冉升起。
并不是说都跳槽出去开公司才厉害,在公司瞪着眼睛看屏幕就是没发展,我是想说,只有勇气才能让自己作出改变。
《拒绝平庸》里有一句话:很多时候我们为什么嫉妒别人的成功?正是因为知道做成一件事不容易又不愿意去做,然后又对自己的懒惰和无能产生愤怒,只能靠嫉妒和诋毁来平衡。
其实走出去不一定非要走到什么地方去,而是更强调改变自己不满意的现状。
有人问我那你常说要坚持,天天跑出去怎么坚持?其实要坚持的是一种信仰,而不是一个地方,如果你觉得一个地方让你活得特别难受,工作得特别憋屈,除了吐槽和压抑没别的想法,那就要考虑走出去。
就像歌词里说的:“梦想失败了,那就换一个梦想。
”不能说外面都是大好前程,但肯定你会认识新的人,有新的机会,甚至改头换面重新做人。
单片机外部中断详解及程序单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。
比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。
在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。
如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。
但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。
因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。
实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。
下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。
电路结构和接线不变,仅把程序改为下面的形式。
#include ;unsigned int t=500; //定义一个全局变量t,并设定初始值为500次//===========延时子函数,在8MHz晶振时约1ms=============void delay_ms(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<1140;j++);}}//============主函数==================================void main( void ){DDRB = 0xFF; //设置端口B为输出方向PORTB = 0xFF; //设置端口B的输出为全高电平DDRD = 0x00; //设置端口D为输入方向PORTD = 0xFF; //设定端口D为内部上拉方式,无信号输入时处于高电平状态MCUCR = 0x0A; //设定INT0、INT1为下降沿触发GICR = 0xC0; //使能INT0、INT1中断SREG = 0x80; //使能总中断while(1){PORTB = 0x55; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个msPORTB = 0xAA; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个ms}}//============中断函数(外部0)==========================#pragma vector = INT0_vect__interrupt void INT0_Server(void){t = 100; //设定t的值为100次}//============中断函数(外部1)==========================#pragma vector = INT1_vect__interrupt void INT1_Server(void){t = 500; //设定t的值为500次}把上述程序进行编译并下载到单片机中,可以看到结果与第二个示例中的完全一致。
软件中断、硬件中断、外部中断、内部中断2010-01-30 16:35:05| 分类:电子爱好者|字号订阅8086/8088把中断分为内部中断和外部中断两大类。
为了支持多任务和虚拟存储器等功能,80386把外部中断称为“中断”,把内部中断称为“异常”。
与8086/8088一样,80386通常在两条指令之间响应中断或异常。
80386最多处理256种中断或异常。
1.中断对80386而言,中断是由异步的外部事件引起的。
外部事件及中断响应与正执行的指令没有关系。
通常,中断用于指示I/O设备的一次操作已完成。
与8086/8088一样,80386有两根引脚INTR和NMI接受外部中断请求信号。
INTR接受可屏蔽中断请求。
NMI接受不可屏蔽中断请求。
在80386中,标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。
外部硬件在通过INTR发出中断请求信号的同时,还要向处理器给出一个8位的中断向量。
处理器在响应可屏蔽中断请求时,读取这个由外部硬件给出的中断向量号。
处理器对这个中断向量号并没有规定。
但在具体的微机系统中,系统必须通过软件和硬件的配合设置,使得给出的这个中断向量号不仅与外部中断源对应,而且要避免中断向量号使用冲突情况的出现。
可编程中断控制器芯片8259A可配合80386工作,能够根据设置向处理器提供上述中断向量号,还能处理中断请求的优先级。
每个8259A芯片可以支持8路中断请求信号,如果使用9个8259A芯片(一个主片,8个从片),就可使80386在单个引脚INTR上接受多达64个中断源的中断请求信号。
处理器不屏蔽来自NMI的中断请求。
处理器在响应NMI中断时,不从外部硬件接收中断向量号。
与8086/8088一样,在80386中,不可屏蔽中断所对应的中断向量号固定为2。
为了不可屏蔽中断的嵌套,每当接受一个NMI中断,处理器就在内部屏蔽了再次响应NMI,这一屏蔽过程直到执行中断返回指令IRET后才结束。