中断的原理和使用心得

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中断的原理和使用心得(一)

又是很长时间没有写东西了,感觉时间长不写人都变懒了。其实,说实话:不是我不写,我也在总结,单片机以前学过一次,都是这看一点,那看一点,没有系统的学习。现在工作闲的发慌,总感觉在浪费青春,才想起自己还有个爱好。就想把单片机系统的学一遍。所以,我现在也是一边学习、一边总结,可以说我也是个十足的菜鸟,还不如你呢!

很多单片机初学者都会对中断、定时/计数器、串口有些恐惧。原因有:

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引脚有底电平中断才会执行,没有中断不会执行。

先写到着,实在不知道这样写,会不会把人搞晕。。。。

我写的这些只是简单的应用,先不用去考虑什么中断标志位什么的东西,因为那些动作是由硬件自动处理的,等到定时器,串口需要软件处理时,再详细说吧!

TH0是计时器的高八位,Tl0是第八位;

举个简单的例子,在十进制里面98你想分别放大TH0,Tl0中则为

TH0=98/10;Tl0=98%10;这样TH0=9;Tl0=8;

同理,若想把一个数的高八和第八位分开,八位正好是256

所以出现上面的TH0=(65535-50000)/256;Tl0=(65535-50000)%256;

至于为什么会出现65535,这是因为这个是2^16-1,因为是从0开始算的,就像10个数,是从0到9,不是1到10;

以上是计数器的一种形式,溢出(就是到了65535之后就会重新开始)。这样的话,-50000,就是说计数50000次。

相关文档
最新文档