写单片机程序,中止是免不了的。我比较喜爱用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应该出来的比较早,所以才会选用这种方法。