原创 AVR(Mega8)的study:4、外部中断

2008-3-10 20:56 3192 3 3 分类: MCU/ 嵌入式

点击下载MEGA8有两个外部中断,可以设置中断条件。应用程序如下:


/********************************************


interrp.h


***********************************************/


#ifndef _interrp_
#define _interrp_



void Interrp_int0_init(void);
void Interrp_int0_stop(void);


void Interrp_int1_stop(void);
void Interrp_int1_init(void);


#endif


/*****************************************************


interrp.c


************************************************/


#include <iom8v.h>
#include "interrp.h"



void Interrp_int0_init(void)
{
SREG=0X80;//全局中断开。
GICR|=(1<<INT0);//中断使能;
MCUCR=0X00;//0X00低电平中断;0x01:电平变化中断;
//0x02:下降沿;0x03:上升沿;
}


void Interrp_int1_init(void)
{
SREG=0X80;//全局中断开。
GICR|=(1<<INT1);//中断使能;
MCUCR=0X08;//0X00低电平中断;0x04:电平变化中断;
//0x08:下降沿;0x0c:上升沿;
}


void Interrp_int0_stop(void)
{
GICR&=~(1<<INT0);//中断使能;
}


void Interrp_int1_stop(void)
{
GICR&=~(1<<INT1);//中断使能;
}


/******************************************


main.c


*********************************************/


#include <iom8v.h>
#include "mytype.h"
#include "interrp.h"
#include "uart.h"



#pragma interrupt_handler Interrp_int_0:2
#pragma interrupt_handler Interrp_int_1:3


void Interrp_int_0(void)//外部中断0中断函数。
{uint16 i="0xffff";
Prints("Interrp0...",1);
Interrp_int0_stop();//停止外部中断0.
while(i--);
Interrp_int0_init();//开启外部中断0.
}


void Interrp_int_1(void)//外部中断1中断函数。
{uint16 i="0xffff";
Prints("Interrp1...",1);
Interrp_int1_stop();//停止外部中断1.
while(i--);
Interrp_int1_init();//开启外部中断1.
}


void main(void)
{
Uart_init();//串口初始化。
Interrp_int0_init();//外部中断0开启。
while(1);
}


工程如下:


点击下载

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条