您的位置 首页 编程

关于单片机中止详解

什么是中断?就是打断当前要做的事,转而去执行别的事情。比如小七我现在正在电脑前写帖子,突然老妈叫我帮她下楼拿点东西,于是我就收到了

什么是中止?便是打断当时要做的事,转而去履行其他作业。比方小七我现在正在电脑前写帖子,忽然老妈叫我帮她下楼拿点东西,所以我就收到了老妈给我的一个中止(能够叫做外部中止),当我去拿东西时,忽然尿急(内部中止,尿袋快要撑爆了),这又是一个中止,!咱们把引起中止的作业叫做中止源(如老妈给我的使命,以及我的尿意。。。外部引起的叫外部中止,内部引起的叫内部中止),发生中止后就要去向理它,这称为中止的呼应。

因为尿急这个内部中止的优先级比老妈给我的外部中止还要高,尿急了,我总得先去撒尿吧?所以我就先去履行撒尿这个句子(小七:怎样我觉得这个比方很别扭呢?!)。当我撒完尿后(仍是觉得很别扭。。。)我会回来来帮老妈拿东西(高优先级的中止处理完后回来履行优先级较低的中止),拿完东西了我再回到电脑前持续写帖子(悉数中止处理完后持续接手中止前的作业)。这个就叫做中止的回来。这么浅显的比方,咱们对中止的概念应该都理解了吧,那么在单片机里边,中止有什么用呢?

当单片机正在履行程序的时分,忽然某个按键按下了(发生外部中止),单片机就有必要得去向理那个按键(中止的呼应),看看是发生了什么事,按键处理完后持续回来履行程序(中止的回来)。

相同,单片机正在履行程序的时分,内部的定时器溢出(定时器后面会独自讲到),或许检测到单片机的电压低于正常值等等(单片机内部发生的中止叫内部中止),单片机就得去向理这些作业,然后再回来来。

在单片机里边,中止是有特别的功用寄存器操控的,单片机里边一共有两个中止,一个是中止0,一个是中止1 ,和两个定时器T0,T1,定时器便是你翻开它后,它会自动数数,当数到你给它限制的值时,它就会溢出,发生中止让CPU处理(就像一个桶,你翻开水龙头后,水越来越多,当到达你需求的水位时,就会发生中止叫你去向理它)。这些咱们先不深入了解他是什么东西,咱们只需知道中止是用下面这几个关键词操控的就行了:

IT0声明外部中止0的类型,IT0=1是边缘触发,0是电平触发
边缘触发便是当检测到外部电平发生变化,即由低变高,或许由高变低时,就会发生一个中止
电平触发便是检测到高电平或许低电平时,发生中止

IE0 外部边缘触发发生中止后,它的值会变1,当CPU呼应后,会自动变为0

IT1和IT0相同的意义
IE1 和IT0相同的意义

EX0外部中止0操控器,EX0=1是答应外部中止,0是制止外部中止,也便是不理睬外部中止
ET0这个是定时器中止操控器,ET1=1是答应定时器发生中止,0是制止
EX1,ET1的意义跟上面的都相同。
EA总中止操控器,1是答应有中止发生,0是制止一切中止,就算天打雷劈也不理睬

别的,还有一个中止优先级的操控器,便是操控是去帮妈妈拿东西的优先级高仍是去撒尿的优先级高。

PX0 外部中止0的优先级操控,假设表里都发生了中止,1便是优先处理外部中止,0便是优先处理内部中止

PT0 定时器0优先级操控器,1便是优先相应定时器0

PT1 定时器1优先级操控器,1便是优先相应定时器1

别的还有串口的RI,TI,PS等咱们先不学习了,否则大伙该乱了
(世人:其实咱们早已杂乱了。。。一头雾水!)

还有个概念,便是中止恳求的吊销,也便是说,发生中止后,会发生一个中止恳求,为1,当CPU处理完中止后,有必要铲除这个恳求,否则CPU又会以为这个中止没有处理又跑去向理它……

关于两个定时器发生的中止,当CPU呼应后,会自动铲除TF0,TF1这两个定制器中止恳求,处理完后就跳出来,回到本来的当地持续履行。

关于外部中止INT0,INT1,假如中止类型是边缘触发,单片时机自动铲除中止恳求IE0,IE1
若是电平触发,假如有一个电平,使中止发生后,这个电平依然还保持着,那么这个电平还会触发中止,这样CPU就死在中止的石榴裙下出不来了。。。

(世人:说了那么多,没比如你说个J8)

比如来啦!用外部中止来操控一个LED的亮灭。对了,外部中止并不是单片机的每个引脚都能发生,标有INT0或INT1的才行,咱们看看11F02E的引脚图

中止的引脚是INT0:P3^2和 INT1:P3^3,咱们用边缘触发(由高电平变成低电平时,就会触发)的中止方法来操控LED,

当咱们没按下按键的时分,因为上拉电阻(不明白的问百度姐姐哦~)的原因,P3^2是高电平,当咱们按下按键后,P3^2的电平就会变低,这个从高变低的进程就会发生一个中止(边缘触发),CPU会第一时间来相应这个中止,看看是谁看帖不回贴,看完帖子不评分,然后依据小七写的中止处理程序去向理他!

O(∩_∩)O 。

程序怎样写呢?

#include
sbit led=P1^7; //界说LED
void zhongduan() interrupt 0 using 1 //声明中止处理函数,由所以外部中止,所以 interrupt X 里X的值是 0
{
led=!led; //CPU呼应中止后会跑来这儿履行(让led的状况取反)
}
void main() //主函数,程序履行的起点
{
EA=1; //答应CPU呼应一切中止
IT0=1; //设外部中止0的呼应形式为边缘触发
EX0=1; //答应中止0发生中止
while(1); //CPU不断在这儿死循环,中止发生后放下作业去呼应中止,处理完后然后再回来来持续死循环
}

按下按键,CPU会跑去中止处理函数履行,履行完中止处理后回来原处持续履行

(世人:这个中止跟咱们前面学习的按键有什么差异么?)

当然有差异啦!尽管都是操控LED,可是按键是当CPU履行到按键检测如 if(key==0) 句子后,才去改动LED的状况,假如没有履行到,那么即便你按下按键单片机也不会呼应的,也便是CPU自动去问按键有没有被按下。而中止呢,便是不管CPU在干嘛,只需触发中止后,CPU就会放下手中的活,第一时间赶回来处理,也便是按键被按下后自动告知CPU。。。就像windows体系的ctrl+alt+del组合键,你一按下这个组合键,不管体系在做什么,都会弹出使命管理器。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/255080.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部