然后说一下中断的使用,要使用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调试了一下
上一篇:AVR单片机按键处理与按键防抖动程序
下一篇:ATmega128 流水灯的两种实现方法(基于AVR GCC)
推荐阅读最新更新时间:2024-03-16 14:43