[AVR单片机] ATMEGA8外部中断1问题

[复制链接]
1260|6
 楼主| 190008417 发表于 2015-10-16 17:43 | 显示全部楼层 |阅读模式
请各位大侠帮我看看这个中断程序,在ATMEGA8里无法进入中断!程序如下:

#include <iom8v.h>  
#include<macros.h>

  void delay_nus(unsigned int us)
{
   unsigned int i;
  i = us/2;
  i--;
  asm("nop"); asm("nop");
    for(;i!=0;i--)      
    {
          asm("nop");     asm("nop");    asm("nop");
                  asm("nop");     asm("nop");    asm("nop");
                  asm("nop");     asm("nop");    asm("nop");     
    }
   
}



void delay_nms(unsigned int t)
{  
    for(;t>0;t--)      
          delay_nus(1100);
         
}
void  main(void)  
{  
    DDRD &= ~(1 << DDD3);    //PD3外部中断1口设置为输入  
    PORTD |= (1 << PORTD3);  //PD3上拉电阻使能   
    DDRC=0xff;    //设置PC口为输出
        PORTC=0X00;   //设置PC口输出为低电平   
       
    MCUCR |= (1 << ISC11);//INT1 下降沿触发  
        MCUCR&=~(1 << ISC10);
    GICR |= (1 << INT1); //INT1 中断使能  
    SREG|=BIT(7); //使能全局中断   
  
    while(1)  
          ;
  
  
  
}  
  
//外部中断1服务程序  
#pragma interrupt_handler exint1_isr:0x02
void exint1_isr(void)
{  
   SREG&=~BIT(7);   
    PORTC^= 0xff;  //PC口接LED指示灯
   delay_nms(150);
   SREG|=BIT(7);
}
专注于嵌入式 发表于 2015-10-16 18:00 | 显示全部楼层
你那个延迟函数写的真不咋地
 楼主| 190008417 发表于 2015-10-17 13:16 | 显示全部楼层
专注于嵌入式 发表于 2015-10-16 18:00
你那个延迟函数写的真不咋地

那个延迟函数没有问题,我在其他程序中能正常使用。请帮忙看看为什么不能进入中断1,
专注于嵌入式 发表于 2015-10-18 14:29 | 显示全部楼层
程序写的不对呗。你那个要么中断没打开,或者打开的时候,。在运行过程中被关掉了,或者没有有效的触发源
 楼主| 190008417 发表于 2015-10-18 16:25 | 显示全部楼层
专注于嵌入式 发表于 2015-10-18 14:29
程序写的不对呗。你那个要么中断没打开,或者打开的时候,。在运行过程中被关掉了,或者没有有效的触发源 ...

我的触发源是,开关通过10K电阻接5V电源上,开关和电阻连接端直接接PD3(atmega8的中断1),开关的另一端直接接地。每按一次开关,PD3的引脚电平变化一次,用示波器测试波形正常。
元方义城 发表于 2015-10-19 09:29 | 显示全部楼层
#pragma interrupt_handler exint1_isr:3
void exint1_isr(void)
{  
   SREG&=~BIT(7);   
    PORTC^= 0xff;  //PC口接LED指示灯
   delay_nms(150);
   SREG|=BIT(7);
}
0x02应是中断向量吧,直接写3就可以了。中断里一般是不要用延时函数,你的程序是想将LED按一下按钮就亮灭吧,将中断里关闭总中断和打开总中断的全关掉试试
 楼主| 190008417 发表于 2015-10-19 16:25 | 显示全部楼层
本帖最后由 190008417 于 2015-10-19 17:24 编辑
元方义城 发表于 2015-10-19 09:29
#pragma interrupt_handler exint1_isr:3
void exint1_isr(void)
{  

非常感谢,按你的操作方法,问题已经解决了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部