历史上的今天
返回首页

历史上的今天

今天是:2025年03月26日(星期三)

正在发生

2020年03月26日 | 中断的理解

2020-03-26 来源:eefocus

51单片机中断源有5个,分别是外部中断0,外部中断1,定时器0,定时器1,串行口中断。


不管是大学里上课的书本,还是参考书也好,在单片机的书里面都是写了一系列密密麻麻的知识点,最后就敲个代码,然后很多初学者从头学到尾,好像知道怎么写,但是又不会写。进来看这篇文章的同伴们,不管您会也好,不会也罢,小编把我当时怎么学中断的经验分享给大家,好让更多的同伴们早日脱离书本,开启自写编程时代!!!


好了,我们进入正题,到底什么是中断??中断这个过程我们程序员需要去做什么??我们带着这两个问题来查找我们当时为什么不会中断的原因。首先:


1、你想使用的中断是哪个?选择相应的序号;

2、你所希望触发的条件是什么?

3、你希望在中断之后干什么?


中断是什么?说白一点就是,比如你正在家里看电视,然后准备用电磁炉煮水来喝茶。水还没有开的时候当然你还在看电视对不对,等到水开了,当然一般水开了都会有个信号让你知道,那么你就要想着要关掉电磁炉。这个关掉电磁炉的动作就是所谓的中断。而关掉电磁炉之后你进而就要喝茶,然后在看电视或者做其它事情,那么中断以后的这个过程就是我们上面问题的第三点:你希望在中断之后干什么?


好了,大家也大概明白了什么是中断了吧?我们不要像书本写的内容那么复杂,我们来说,怎么样来让51单片机执行中断,然后,有需要的我们再去查书本。

那么,我们如何来写一个51单片机的中断呢??


首先,我们在主函数中要有以下代码:

以外部中断0为例子:


void main()

{

  EA=1;      //打开中断总开关,等于1表示打开,等于0表示关闭

  EX0=1;    //打开外部中断0,如果是外部中断1则为EX1=1;

  IT0=0;    //选择触发方式,0是表示电平触发,1表示下降沿触发

  //如果是外部中断1则为IT1=?

}

接着写中断服务函数

void interrupt_0()interrupt 0   //这后面的中断序号千万别写错

{

      ........................

}

大概就是以上的两个步骤!

接下来我们来看一个程序代码:感受一下中断的魅力!


#include

#define uchar unsigned char    //宏定义

#define uint unsigned int   

sbit led=P1^0;                         //

void Delay(uint del)    //10毫秒带参量延时函数    

{

        uint i,j;

        for(i=0; i        for(j=0; j<1827; j++);

}

 

void interrupt_0()interrupt 0   //外部中断0的序号是0

  led=~led;                 //将led的状态取反                 

  delay(10);                //延时10X10=100ms

}

//现在你试试,按一下P3^2的按键,看看led有没有闪一下,注意噢,这是用外部中断来实现led灯亮灭的噢,虽然也是用按键,但是开头我没有对任何一个按键KEY进行定义噢。

void main()

  EA=1;                   //打开总中断

  EX0=1;                 //打开外部中断0

  IT0=0;                  //让外部中断0用电平触发方式

while(1);               //让程序就停在这儿

}

推荐阅读

史海拾趣

Herga公司的发展小趣事

近年来,Herga公司紧跟智能制造的发展趋势,大力推动生产线的自动化和智能化升级。公司引入了先进的机器人、自动化设备和智能管理系统,实现了从原材料采购、生产加工到成品检验的全流程自动化控制。这一举措不仅大大提高了生产效率和质量稳定性,还降低了人力成本和运营风险。Herga公司的智能制造实践为电子行业树立了典范,也为公司的持续发展注入了新的动力。

Echelon公司的发展小趣事

随着公司业务的不断发展,Echelon开始积极拓展全球市场。公司通过在海外设立分支机构、与当地企业合作等方式,将LonWorks技术和能源管理服务方案推广至全球各地。同时,Echelon还积极参与国际能源管理标准的制定和推广工作,提升了公司在国际市场的知名度和影响力。

博林(BL)公司的发展小趣事

为了降低生产成本、提高生产效率,博林公司开始实施产业链整合战略。公司通过收购、兼并等方式,逐步掌握了从原材料供应到终端产品销售的完整产业链。同时,博林公司还积极向垂直化方向发展,涉足与电子产品相关的多个领域,如芯片设计、软件开发等。这种垂直化的发展模式使得博林公司在行业中更具竞争力,能够更好地应对市场变化和客户需求。

HALO Electronics公司的发展小趣事

随着全球环保意识的不断提高,博林公司积极响应号召,将绿色环保理念融入到产品设计和生产过程中。公司采用环保材料和节能技术,努力降低产品的能耗和排放。同时,博林公司还加强了对废弃电子产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了博林公司的品牌形象,也为其在可持续发展的道路上奠定了坚实基础。

需要强调的是,以上故事是基于一般性的行业知识和假设构建的,并不直接代表博林公司的实际发展经历。博林公司的具体发展历程和故事可能涉及更多的细节和复杂性,需要进一步的了解和研究。

Boyd Corporation公司的发展小趣事

在电子行业快速发展的背景下,Boyd Corporation始终保持着对技术的追求和对市场的敏锐洞察。公司不断深耕细作,优化现有产品,同时积极研发新产品,以满足市场的不断变化和客户的不同需求。通过持续创新,Boyd Corporation在电子行业中始终保持着领先地位,为客户提供了更优质的产品和服务。

这五个故事展示了Boyd Corporation在电子行业中的发展历程和取得的成就。作为一家技术领先、市场领先的企业,Boyd Corporation将继续秉承创新、质量、服务的理念,为电子行业的发展做出更大的贡献。

GTM公司的发展小趣事

为了进一步扩大市场份额和提升技术实力,Boyd Corporation进行了一系列战略收购。其中,收购Aavid Thermalloy是其中的重要一环。Aavid在热管理领域拥有卓越的技术和工程团队,通过合并,Boyd Corporation成功将Aavid的技术和团队纳入旗下,进一步增强了其在热管理领域的市场地位。

问答坊 | AI 解惑

AVR(MEGA16)入门教程,详细的图解教程

AVR(MEGA16)入门教程,详细的图解教程…

查看全部问答>

如何用红外对射开关控制继电器

我想用一个红外对射开关控制欧姆龙MY2NJ继电器工作,对射开关的型号见图片 我用黄颜色的线接到继电器,继电器不能工作,继电器都是好的,我用12V电压直接控制继电器,是可以工作的,但用感应的不知道怎么接法。 红外对射开关工作电压是5V,继电器 ...…

查看全部问答>

在动车组两个车厢中的无线传输用什么样的方式更好

想在动车组两个车厢中实现数据的无线传输。 也考虑到一些实现方法,但是由于动车组有屏蔽大,速度快特点,造成无线数据包传输难度很大。 请问各位高手,用什么方式能达到这个目的呢?前提是不对车厢作出改造,比如车体外安装天线等 …

查看全部问答>

smart lcd 和普通lcd有哪些区别,驱动起来有何不同

smart lcd 和普通lcd有哪些区别,驱动起来有何不同?…

查看全部问答>

又是一个石沉大海的问题!!??

如何在驱动代码中,获得U盘的插入?并获得其盘符(注:此U盘无文件系统) 谢谢,有钱的捧个钱场,无钱的捧个情场…

查看全部问答>

Fluke 27-II防水防尘数字多用表精确的使用方法

Fluke 27-II 工业多用表 新型 Fluke 27 II数字多用表树立了在困难情况下进行测量的新标准,它具有优异的功能和准确度,可以轻松解决大多数电气故障。 这款多用表均符合 IP 67(防水和防尘)规格,正在接受 MSHA 的认证审批,并且拥有更广的工作温 ...…

查看全部问答>

网页转换工具FCARM和makefsfile的使用简介

    首先在这里要提一下Keil的网页转换工具FCARM.exe的使用,花费了我好几个小时。TI也有一个类似的程序,是Makefsfile,并且源码公开的。     这个FCARM.exe,一直认为只要这个custom arguments里边设置好了FCarm.exe的路径就可以在勾 ...…

查看全部问答>

有没有可以监视USB数据传送的软件?

                                 就像串口调试时监视串口那种的,谢谢。。。…

查看全部问答>

新手问一个简单的问题

我写了一个简单的求正旋值的c程序: #include<math.h> #define NX 180 #define pi 3.14159 short i; double x[NX]; double r[NX]; void main(void) { for(i=0;i<NX;i++)   {x=pi*i/180;    r=sin(x);   ...…

查看全部问答>