中断的原理和使用心得(一)
时间:11-25
来源:互联网
点击:
又是很长时间没有写东西了,感觉时间长不写人都变懒了。其实,说实话:不是我不写,我也在总结,单片机以前学过一次,都是这看一点,那看一点,没有系统的学习。现在工作闲的发慌,总感觉在浪费青春,才想起自己还有个爱好。就想把单片机系统的学一遍。所以,我现在也是一边学习、一边总结,可以说我也是个十足的菜鸟,还不如你呢!
很多单片机初学者都会对中断、定时/计数器、串口有些恐惧。原因有:
1.没学之前被老鸟吓。到,很多学单片机的新手问单片机难不难,就会有些老鸟故意吓唬说中断、定时器很难等等。
2.很多新手听说难学,在编程时会极力避免使用中断、定时器,以至于越不使用,越不会用,就越害怕使用。(其实我说的只是我自己遇到的一些,不必究其细节,目的只有一个,让你在学习单片机之前放下恐惧)
本节先说说中断的使用:
概念:中断是为了使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。(纯属抄袭,但就是这个理)
51单片机的中断有:外部中断INT0 、外部中断INT1 、定时器T0 、定时器T1 、
串行口中断TI 、RI 。
我就对其一一分析,可能分析的不到位,希望大家给予指点,因为我也是才学,也是自己总结的,不可能就正确。
1. 外部中断INT0 :对应单片机12引脚(P3^2口),只看名字就知道,处理外部事件的,因为它是外部中断。它是如何处理外部事件呢?我用生活中实际的例子对应单片机的中断操作说说,可能不是很恰当,但是,目的是说明问题。
例:你正在看书,突然手机铃响了,你放下书去接电话。(这个例子都被一些出书的列举的不爱用了,但我不只是就看书,电话铃响了,接电话就完了)
#include
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0;
void delay(uint z);
void main()
{
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=1;//下降沿触发
while(1)
{
}
void exter0() interrupt 0
{
d1=0;
}
我用例子对应程序来分析:
EA=1;就是你开着手机,如果你都不开手机哪肯定不会影响到你看书了。
EX0=1;如果你手机是双卡单待,相当于你SIM1卡开着。(即待机)
IT0=1;是下降沿触发,就相当短信提醒,短信响一下就停了,然后你就会去看短 信来处理短信内容,短信内容就相当于你中断要做的事情。
void exter0() interrupt 0
{
d1=0;
} //点亮小灯程序,这就是中断内容,就相当于你看短信。
每一句分析完了,我用例子写个程序,更直白点:
#include
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0; //前面的就没必要说了吧!
void main()
{
打开手机;
打开手机SIM1卡:
短信提醒设为铃声,电话设为静音;(注,电话设为静音,意思是忽略电话的影响)
while(1)
{
你一直在看书;
}
void exter0() interrupt 0 短信处理程序
{
查看短信;
}
中断INT1:就不说了,就是手机SIM1卡和SIM2卡的区别。
外部中断INT0 不是对应着12引脚吗:1。你打开中断,2,设置触发方式。剩下的事就是等待外部中断的,只要12引脚有任何动静,CPU都会根据情况去处理的。
举例说明这句话:1.如果你设置下降沿触发,则12引脚有个高电平到低电平的跳变,则中断就会被执行。2.如果设置低电平触发,则12引脚有底电平中断才会执行,没有中断不会执行。
先写到着,实在不知道这样写,会不会把人搞晕。。。。
我写的这些只是简单的应用,先不用去考虑什么中断标志位什么的东西,因为那些动作是由硬件自动处理的,等到定时器,串口需要软件处理时,再详细说吧!
很多单片机初学者都会对中断、定时/计数器、串口有些恐惧。原因有:
1.没学之前被老鸟吓。到,很多学单片机的新手问单片机难不难,就会有些老鸟故意吓唬说中断、定时器很难等等。
本节先说说中断的使用:
概念:中断是为了使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。(纯属抄袭,但就是这个理)
51单片机的中断有:外部中断INT0
串行口中断TI
我就对其一一分析,可能分析的不到位,希望大家给予指点,因为我也是才学,也是自己总结的,不可能就正确。
1. 外部中断INT0
例:你正在看书,突然手机铃响了,你放下书去接电话。(这个例子都被一些出书的列举的不爱用了,但我不只是就看书,电话铃响了,接电话就完了)
#include
#define
#define
sbit
void
void
{
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=1;//下降沿触发
while(1)
{
}
void
{
d1=0;
}
我用例子对应程序来分析:
EA=1;就是你开着手机,如果你都不开手机哪肯定不会影响到你看书了。
EX0=1;如果你手机是双卡单待,相当于你SIM1卡开着。(即待机)
IT0=1;是下降沿触发,就相当短信提醒,短信响一下就停了,然后你就会去看短 信来处理短信内容,短信内容就相当于你中断要做的事情。
void
{
d1=0;
} //点亮小灯程序,这就是中断内容,就相当于你看短信。
每一句分析完了,我用例子写个程序,更直白点:
#include
#define
#define
sbit
void
{
打开手机;
打开手机SIM1卡:
短信提醒设为铃声,电话设为静音;(注,电话设为静音,意思是忽略电话的影响)
while(1)
{
你一直在看书;
}
void
{
查看短信;
}
中断INT1:就不说了,就是手机SIM1卡和SIM2卡的区别。
外部中断INT0 不是对应着12引脚吗:1。你打开中断,2,设置触发方式。剩下的事就是等待外部中断的,只要12引脚有任何动静,CPU都会根据情况去处理的。
举例说明这句话:1.如果你设置下降沿触发,则12引脚有个高电平到低电平的跳变,则中断就会被执行。2.如果设置低电平触发,则12引脚有底电平中断才会执行,没有中断不会执行。
先写到着,实在不知道这样写,会不会把人搞晕。。。。
我写的这些只是简单的应用,先不用去考虑什么中断标志位什么的东西,因为那些动作是由硬件自动处理的,等到定时器,串口需要软件处理时,再详细说吧!
中断原理使用心 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)