您的位置 首页 汽车

AVR单片机入门教程之三—中止

首先说一下中断的优点:中断函数只在中断触发源触发的时候才会执行,其他时间不执行如果不使用中断而且如果要根据某个端口的变化而作相应

首先说一下中止的长处:中止函数只在中止触发源触发的时分才会履行,其他时刻不履行. 假如不运用中止并且假如要根据某个端口的改变而作相应的函数操作,就有必要不断地查询端口的信号,而中止不必,只需端口一有改变,就会体系就会主动进入中止函数, 我觉得这便是中止的意图,也是长处.

然后说一下中止的运用,要运用AVR的外部中止,要先进行中止初始设置(触发电平上升沿和下降沿的设定),然后开大局中止,这样在触发中止管脚的时分就会进入中止处理函数.不管导致引脚电平改变的原因是来自单片机内部仍是外部,只需引脚上的电平发生了改变都能够触发该引脚上的电平改变中止.

AVR单片机,其硬件体系不支持主动完成中止嵌套的处理。假如在体系规划中,有必要运用中止嵌套处理,则需要由用户编写相应的程序,经过软件设置来完成中止嵌套的功用。

假如在初始化中开了总中止 那么AVR在进去中止处理函数后会主动把总中止给关了中止出来后就会重新开中止 所以假如不必在中止里边嵌套另一个中止 就不必在中止服务程序里边开总中止使能。。。

AVR单片机的中止优先级只在一起触发中止时优先级高的中止先进行处理,而关于51单片机中初级其他中止不能打断高档其他中止,在AVR单片机中初级其他中止却能够打断高档其他中止,这是很不相同的,下面用一个例子来阐明一下:

//T0溢出中止服务程序
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TCNT0 = 0xB4;
SEI();
dlygd(0,0);
dlygd(0,0);
}

//T2溢出中止服务程序
#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)
{
TCNT2 = 0xA0;
SEI();
saomiao();
}

关于以上两个时刻溢出中止函数我在中止程序里边都用了SEI();因为开了总中止,那么在中止履行过程中,只需有其他中止触发,体系同样会进入其他的中止处理函数.

用JTAG调试了一下 发现只需TCNT0一溢出 就触发TIMER0的中止 在中止的过程中只需TCNT2一溢出 就触发了TIMER2的中止 这姿态等级高的中止打断低的中止是没什么问题啊 但是在TCNT0再次溢出时 仍是会触发TIMER0的中止 这就很奇怪了 莫非中止等级低的中止能够中止等级高的中止吗??? 这就对了 在AVR单片机中,初级其他中止是能够打断高档其他中止的,只需总中止开着.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/261213.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部