首页 > 代码库 > 关于系统跑进中断的说法

关于系统跑进中断的说法

随着对单片机的运用于了解,常常听别人说你得程序要一直跑入中断中,是不是有些奇怪?我一直觉得中断是一个触发事件,一直觉得是中断打断了程序。按理来说两种说法都对,但是在理解的角度上,其实第一种说法更加容易接受。怎么叫容易接受呢?它在逻辑上给出了一种顺序和主次关系,这样当你以后在设计一个程序的时候逻辑就会清晰一些。

首先让我们来了解一下中断的构成: 中断是单片机内的一组寄存器,当我们规定了它的结构和运行规则之后,单片机就会自动产生中断,中断产生后就会向某个寄存器里面溢出一个高电平。此时单片机会“丢弃”原先正在执行的main程序跑到这个寄存器里去执行和产看中断系统中的命令。跑到中断的说法由此而来。

事实上单片机的程序执行也是单线程的,那么中断命令是如何执行的呢?

根据单片机检测中断的机制(单片机在每个机器周期检查中断源口线,检测到它的中断请求标志时,向cpu请求中断),我可以将该外部中断的模式(即是电平触发还是边沿触发)设置好。之后只要在中断里执行一些命令就可以了。
这样,每当单片机检测到中断条件,程序就自动跑进这个中断里执行我的命令。

这样是不是很有趣呢?那么在编程的时候我如何让程序认出这是一个中断呢?事实上在函数声明时包括interrupt,将把所声明的函数定义为一个中断服务程序。另外,可以用using定义此中断服务程序所使用的寄存器组。

因此中断的声明形式为:函数类型 函数名 interrupt n using n。

除此之外,单片机还自带有外部中断。单片机外部中断的触发:电平触发和边沿触发。
电平触发: 单片机在每个机器周期检查中断源口线,检测到它的中断请求标志时,向cpu请求中断。
边沿触发: 单片机在上一个机器周期检测到中断源为高电平,下一个机器周期检测到为低电平,就会产生中断。

外部中断和内部中断的使用方法是一致的,只不过内部中断产生信号的是内部寄存器,而外部中断产生信号的是外电路。

即便keil编译器比较苛刻,我们仍然无需再main函数的开头申明这个中断,怎么样中断是不是很神奇的一个东西啊?