学习51单片机C语言编程,学到中断卡住了,什么时候用哪种中断呢?怎么使用?中断是干吗的,看中断程序看不懂

学习51单片机C语言编程,学到中断卡住了,什么时候用哪种中断呢?怎么使用?中断是干吗的,看中断程序看不懂,第1张

先使能总中断,然后要实现什么功能就使能什么中断,比如需要通过软件进行精确的定时或延时,这时就用定时器中断,又如要在程序中完成串行口通信,这时用串行口中断。使用方法你可以看看书。至于中断是干吗的:中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。通俗 点就是说:比如当你的程序运行到某处时你需要让程序在此延时一段时间(当然你可以写延时函数,这里只是举例)那么你就可以写一个定时器中断,让程序运行到这里停止原来的事而进入你的定时器中断中,当定时器延时完成后,程序又会自动跳回这里继续向下执行。下面连接有一些学习单片机的视频,看看书,再看看视屏,很快就掌握了http://www.youku.com/playlist_show/id_18512367.html

结构很规矩,这个程序。

首先单片机上电复位,运行死循环前面的程序(,你这里就是init_timer() // 应该叫初始化定时器,才合适,让定时器按照你需要的定时长度工作,或叫产生中断 )

接下来单片机主程序就是一直在死循环了。我们的主要任务一般在这里处理。

中断,就是在处理一些特殊任务,比如按键,或定时处理的程序,或外部一个不知道什么时间发生的任务,或通信任务等等。你在主循环的时候,无论在什么时候,中断请求来了(可以理解为需要处理比较紧急任务,优先处理的任务),就会暂停主循环,进入对应中断服务程序。运行完,在回主循环的暂停地方,继续执行死循环的任务。

定时器中断,就是每过一定时间,运行一下中断服务程序。常用来计时和产生脉冲信号。

初始化定时器,就是给定时器的寄存器,设置工作模式,时钟源,溢出的计数值。设置好了,定时器就能根据每个时钟源的频率,进行计数,直至溢出,然后产生一个中断请求。如果不饿能自动加载计数初值的定时器,在中断处理函数(服务函数)必须手动加载初值。

将按键接到P3.2(INT0)或P3.3(INT1)

main(){

 EA=1 //EA总中断控制,EA=0关,EA=1开

 EX0=1//INT0中断控制。0关1开,按键接P3.2用这个

 EX1=1//INT1中断控制。0关1开,按键接P3.3用这个

  //默认情况下,直接使EX0=1或EX1=1来打开中断,INT0、INT1中断是电平触发的

 while(1){

    //主程序写这里 

 }

}

/** 外部中断0服务程序,按下接P3.2的开关k=0下面程序被执行 **/

int0()interrupt 0

{

  //程序代码写这里面 

}

 /** 外部中断1服务程序,按下接P3.3的开关k=0下面程序被执行 **/

int1()interrupt 2

  //程序代码写这里面 

}

注意,上面的中断程序,如果执行完后,按键k还没有放开,则中断程序会再次被执行。为了防止这种情况发生,有以下几种处理办法以:

(1)可以在中断程序中进行判断,只有放开了按钮k=1了中断函数才返回。

(2)可以在进入中断后关闭中断,让EX0或EX1=0。然后在主程序中,需要的时候再开起。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12088653.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存