先上图
这是手册开篇对中断的描述
首先,明确一下,它是为使CPU具有对外界紧急事件的处理能力设置的
也就是说,MCU内部也有一些事件可引起中断,而且绝大部分中断都发生在MCU内
比如MCU中的定时器中断就是因为TF(Timer Flag)置位引起的
对于CPU来说,定时器计满就是紧急事件
当紧急事件发生时也就是TF=1时CPU就会放下手中的‘活’,转而去执行定时器计满后该干的事情
你可以去写一些代码告知CPU定时器中断发生后应该去干什么
如
[mw_shl_code=c,true]void ser1() interrupt 1//中断函数
{
TL0 = 0xAB;
TH0 = 0x2F;
TF0=0;
LED_DOT++;
if(LED_DOT==50)
{
LED_DOT=0;
LED_NUM++;
}
}[/mw_shl_code]
这是我上篇帖子的附件中定时器的中断代码
乍一看与函数无异
但仔细一看你就会发现他有一个函数所没有的关键字
interrupt(中断)
这个关键字告诉了CPU这是谁的中断程序
因为相对于CPU来说外部中断有很多
需要进行区分
那么此时一张表格就是必须的了
这张表格说明了标号1为定时器0的中断号
也就是说当你在函数后加interrupt 1时,这个函数就是定时器0的中断程序
当定时器0溢出时,CPU就会过来执行它
如手册上所说
然而,CPU外部有许多中断
并且,CPU无法控制中断发生的时间
也就是说,对于CPU来说中断是随机的
那么,如果同时发生了两个或以上中断怎么办?
为此引入了一个优先级的概念
当你的标号越小时,你的优先级越高
对于上表来说,外部中断0的优先级最高
其次是定时器0
以此类推
但是,有些时候在不同场合会有一些不同的要求
比如我想让定时器0的优先级高于外部中断0
那么为了便于这种想法的实现,引入了两个寄存器
IP,IPH
再附上一张如何更改优先级的图示
|