• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

帮我看看为什么不好用.中断不了啊!

#pragma interrupt_handler INT0_ISR:2
#pragma interrupt_handler INT1_ISR:3
#include
#include

#define SET_LED PORTB|=BIT(0);
#define CLR_LED PORTB&=~BIT(0);

#define KEY0 PD2
#define KEY1 PD3
volatile int k=0;

//======================================================================
/*延时函数*/
void delay_ms(unsigned char i)
{
    unsigned char a, b;
    for (a = 1; a < i; a++)
    {
    for (b = 1; b; b++)
        {
   ;  
}
    }
}
//======================================================================
// 函    数: LED0_shanshuo_1s()
// 实现功能: LED0 1s闪烁
//======================================================================
void LED0_shanshuo_1s(void)
{
DDRB |= BIT(0);
while(1)
{
delay_ms(1000);
SET_LED;
delay_ms(1000);
CLR_LED;
}
}
//======================================================================
// 函    数: LED0_shanshuo_02s()
// 实现功能: LED0 0.2s闪烁
//======================================================================
void LED0_shanshuo_02s(void)
{
DDRB |= BIT(0);
while(1)
{
delay_ms(200);
SET_LED;
delay_ms(200);
CLR_LED;
}
}

//INT0
void INT0_ISR(void)
{
    if((GIFR&0x40)==0x40)
    {
  //LED0_shanshuo_1s();
  k=1;
}
}
//INT1
void INT1_ISR(void)
{
    if((GIFR&0x80)==0x80)
    {
  //LED0_shanshuo_02s();
  k=2;
}
}

//======================================================================
// 函    数: void main(void)
// 实现功能: 外部中断
//======================================================================
void main()
{  
    int temp;
DDRD &= ~(BIT(KEY0) | BIT(KEY1)); // 设置PD2、PD3口为输入口
PORTD |= BIT(KEY0) | BIT(KEY1); // 设置PD2、PD3口为上拉电阻

DDRB |= BIT(0); // 设置PB0为输出口
DDRB=0XFF;

MCUCR |= BIT(ISC01) | BIT(ISC11); // 下降沿触发
GICR = BIT(INT0) | BIT(INT1); // 允许外部中断INT0、INT1
SREG |= 0X80; //使能全局中断
//SEI();
LED0_shanshuo_1s();

while(1)
{
if(k!=0)
{
switch(k)
{
case 1:

LED0_shanshuo_1s();
break;
case 2:

LED0_shanshuo_02s();
break;
default:
break;
}
}
}
}
全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法