中断的理解

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<reg51.h>
#define uchar unsigned char    //宏定义
#define uint unsigned int   
sbit led=P1^0;                         //
void Delay(uint del)    //10毫秒带参量延时函数    
{
        uint i,j;
        for(i=0; i<del; 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);               //让程序就停在这儿
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值