小弟初学单片机,有谁可以给我讲讲中断吗?

2019-07-15 23:43发布

小弟才开始入手单片机 最近学到了中断 可是对中断我只知道中断是怎么一个概念 其它的东西都一无所知 在这里请教各位了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
dongyumin
1楼-- · 2019-07-17 19:34
中断就是“你在睡觉,突然电话响了,你醒了接了个电话,然后又睡了”。简单明了的概念解释。“睡觉”---MCU跑程序,“电话响”事件---中断触发,“接电话”---响应中断服务,“又睡了”恢复断点继续执行。

看不懂代码,只要你懂C语言语法,看不懂代码是不应该的,不懂的只是程序逻辑。我的方法,硬着头皮看,一便有一遍的收获,然后试着理解后自己敲一遍。
ベ箬☆絕
2楼-- · 2019-07-18 00:47
 精彩回答 2  元偷偷看……
爱我别走
3楼-- · 2019-07-18 03:23
本帖最后由 爱我别走 于 2013-7-15 22:19 编辑

你好,我来用自己的话给你理一理,希望可以帮到你!
1.中断的理解
    中断(interrupt),从字面上理解就是被中断,被打断的意思。比如,你正在写作业,突然有人敲门,你就要停止做作业,把作业的位置做个标记,然后去给开门,之后你根据做好的标记,继续写作业。程序也是这样,正常情况下,cpu顺序执行main函数里面的代码,从第一条代码到执行到最后一条代码,然后又返回到第一条代码往下执行,这样一直循环。突然cup接到中断请求(有人敲门),cpu就暂停当前执行的代码(停止做作业),做现场保护(把作业做标记),然后去执行中断代码(开门),执行完中断代码后,返回继续从被中断处往下执行正常代码(开完门继续做作业)。

2.单片机的中断源
  中断源就是可以打断cup正常做事的东西。单片机有5个中断源,外部中断0(INT0),定时器0(Timer0),外部中断1(INT1),定时器1(Timer1),串口中断。
外部中断(INT0和INT1):简单理解就是通过外部输入来触发中断。
定时器中断(TImer0和Timer0):简单理解就是通过定时器,定时触发中断。
串口中断 :简单理解就是当接收到外部数据时触发中断。


3.怎样使用中断(以外部中断0为例)。
单片机有两个外部中断引脚,P3.2(对应INT0)和P3.3(对应INT1)。当这两个引脚出现低电平,或者下降沿时,就可以就触发单片机外部中断。
第一步,中断配置
/************************************************************
  函数名   : INT0_Config
  功能       :配置单片机与中断相关的硬件,让单片机能够正常检测中断和执行中断代码。
  输入参数:
  输出参数 :
************************************************************/
void INT0_Config(void)
{
    IT0=1;//中断触发方式,IT0=0,低电平触发,INT0=1下降沿触发(下降沿就是由高电平向低电平的跳变);
    EX0=1;//外部中断0的中断开关,每个中断源都有自己的中断开关。
    EA=1;//打开总中断,如果总中断不打开,就是其他中断开关被打开,单片机也不能执行中断。
}


第二步,中断服务,也就是cpu被中断后所要做的事。
/************************************************************
  函数名   : Isr_INT0
  功能       :中断服务
  输入参数:
  输出参数 :
************************************************************/

void Isr_INT0() interrupt 0  //这里的interrupt表明这个函数是中断函数,后面的标号表示是哪一个中断源产生的中断。(INT0)为0,  
                                          //Timer0为1,INT1为2,Timer3,串口中断为4。
{
     // Add your code here
}


第三部 主函数
/************************************************************
  函数名   : main
  功能       :主函数
  输入参数:
  输出参数 :
************************************************************/

void main()
{
  INT0_Config();//调用这个函数来配置外部中断
   while(1)
   {
      //Add your code here
     //CPU一直在这里循环的执行代码,一旦发生中断,就停下来去执行中断函数Isr_INT0() interrupt 0,执行完成后,返回从断点处继续往下执行原
     来的 代码。
    }
}

dongyumin
4楼-- · 2019-07-18 03:28
ベ箬☆絕 发表于 2013-7-15 09:07
看不懂的就是为什么要那样写 只有死啃了我

死啃也是学习的过程,能力提高了会形成自己的思路的。不要着急。
Micheal_wang
5楼-- · 2019-07-18 07:59
中断和查询是两种操作方式,中断是按优先级响应执行的。。。
ベ箬☆絕
6楼-- · 2019-07-18 08:11
dongyumin 发表于 2013-7-15 10:33
死啃也是学习的过程,能力提高了会形成自己的思路的。不要着急。

也许是我心急了 嘿嘿

一周热门 更多>