几种单片机的中断函数写法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
几种单片机的中断函数写法
写单片机程序,中断是免不了的。
我比较喜欢用C写单片机程序,简单而且可读性高,当然程序效率没有汇编的高。
目前写过51单片机跟AVR单片机的C程序,最近在看MSP430的书。
用C写不同的单片机程序其实都是大同小异,因此能对不熟悉的单片机也能很快上手写程序。
不过中断函数的写法,各个编译器往往都会有些差别。
最早写的C程序是51单片机的,用的编译器自然是大名鼎鼎的keil c了。
Keil的功能还是非常强劲的,不仅能编译,还有软件仿真调试与硬件调试的功能。
由于条件简陋,没用过什么仿真器,一直都是靠软件仿真调试程序的。
Keil 中的中断函数一般格式如下:void 函数名() interrupt n using n
{
…….
}
其中函数名可以任意取,关键字interrupt用来指明这是一个中断服务函数,后面的n 表示中断号,关键字using加后面的n表示使用哪一组寄存器。
后然接触到AVR的单片机,该单片机开发环境一般用ICC或者是GCC。
由于ICC是商用软件,而GCC是免费的,因此我一般用GCC来写AVR的C程序。
现在版本的GCC for AVR有了一些改进,对于中断函数支持两种关键字ISR与SIGNAL,其格式如下:ISR(vect)
{
………
}
与
SIGNAL(vect)
{
……..
}
其中的vect就是中断向量名,根据不同的型号的AVR单片机的不同的中断源都会有相对应的中断向量名,比如外部中断0对于ISR格式的中断向量名为INT0_vect,对SIGNAL则为SIG_INTERRUPT0。
最近在看TI的MSP430系列单片机的资料,看到该单片机采用C430写的中断服务函数有点像前两种的综合,其格式如下:
interrupt [vect] void 函数名(void)
{
…….
}
其中vect也是中断向量名,函数名可以任取。
比较这几种中断函数写法,本人更倾向于AVR的GCC的写法。
首先对于中断函数来说即不能有输入参数又没有返回值,没必要再给它加个“void 函数名(void)”的形式的函数。
而且光看中断向量名一般都能知道是哪个中断源产生,再写个中断函数名作解释似乎有点重复。
对于keil c用中断向量号的形式来表示中断源,感觉有点麻烦,记住中断源的中断号比记中
断向量要难多了。
不过可能标准51的中断缘比较少,而且keil应该出来的比较早,所以才会采用这种方式。