首先说一下中止的长处:中止函数只在中止触发源触发的时分才会履行,其他时刻不履行. 假如不运用中止并且假如要根据某个端口的改变而作相应的函数操作,就有必要不断地查询端口的信号,而中止不必,只需端口一有改变,就会体系就会主动进入中止函数, 我觉得这便是中止的意图,也是长处.
然后说一下中止的运用,要运用AVR的外部中止,要先进行中止初始设置(触发电平上升沿和下降沿的设定),然后开大局中止,这样在触发中止管脚的时分就会进入中止处理函数.不管导致引脚电平改变的原因是来自单片机内部仍是外部,只需引脚上的电平发生了改变都能够触发该引脚上的电平改变中止.
AVR单片机,其硬件体系不支持主动完成中止嵌套的处理。假如在体系规划中,有必要运用中止嵌套处理,则需要由用户编写相应的程序,经过软件设置来完成中止嵌套的功用。
假如在初始化中开了总中止 那么AVR在进去中止处理函数后会主动把总中止给关了中止出来后就会重新开中止 所以假如不必在中止里边嵌套另一个中止 就不必在中止服务程序里边开总中止使能。。。
AVR单片机的中止优先级只在一起触发中止时优先级高的中止先进行处理,而关于51单片机中初级其他中止不能打断高档其他中止,在AVR单片机中初级其他中止却能够打断高档其他中止,这是很不相同的,下面用一个例子来阐明一下:
//T0溢出中止服务程序
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
}
//T2溢出中止服务程序
#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)
{
}
关于以上两个时刻溢出中止函数我在中止程序里边都用了SEI();因为开了总中止,那么在中止履行过程中,只需有其他中止触发,体系同样会进入其他的中止处理函数.
用JTAG调试了一下