/*AVR单片机外部中断INT0示例程序晶振为1 MHz
INT0最好接一个4.7K的上拉电阻,按键对地有效
没有使用延时/通信语句,所以使用内部/外部时钟都可以
每按动INT0按键一次,PD3的电平就翻转一次
本例子没有考虑太多的按键防抖动功能*/
#include <mega48.h>
interrupt [2] void INT0_isr(void) //INT0的中断向量是2,请参考M48数据手册的48页
{
PORTD.3=~PORTD.3; //电平取反
EIFR|=1; //清除INT0中断触发标记,防止按键抖动
}
void main(void)
{
PORTD.2=1;
DDRD.2=0; //设置INT0端口为输入,上拉电阻有效
PORTD.3=0;
DDRD.3 =1; //设置PD3输出低电平,准备驱动蜂鸣器
EIMSK|=1; //打开INT0中断
EICRA|=3; //INT0上升沿触发
#asm("sei") //插入汇编语句,打开全局中断
while (1) //循环,等待中断
{
#asm("nop") //空操作的汇编代码,等待中断发生
};
}