[AVR单片机] avr单片机主函数加了中断初始化,不进while,求解

[复制链接]
1579|3
 楼主| 282045368 发表于 2015-1-7 10:04 | 显示全部楼层 |阅读模式
avr单片机的主函数中增加了初始化中断的程序,主函数就不进入while(1)下面了程序。去掉初始化中断就执行了。
#include <mega64.h>
#include <delay.h>

void PortInitial(void)
{
    DDRC = 0xff;    //PC口作为led灯,低电平亮
    PORTC = 0x55;  //初始化部分灯亮
    DDRD &= 0xf0;  //PC0-4口设置初始化输入
    PORTD |= 0x0f;  //PC0-4上拉
        
}
void DeviceInitial(void)
{
    #asm("cli");    //关闭总中断
    #asm("nop");    //延时
    EIFR = 0x00;   //清除中断状态位
    EIMSK = 0x00;  //关闭中断
    EICRA = (1<<ISC11)|(0<<ISC10)|(0<<ISC01)|(0<<ISC00);      //INT0设置低电平触发,INT1设置下降沿触发
    EIMSK = 0xff; //使能中断
    #asm("sei"); //使能总中断
    #asm("nop");   
   
}

void main()
{
    PortInitial();
    DeviceInitial();  //中断初始化,如果增加了,就进不去while,不增加可以进入?????
    #asm("nop");

    while(1)
    {
     PORTC = 0X00; //led0-7点亮
     }
}
interrupt [EXT_INT0] void led0ctrl (void)     //外部中断1,低电平触发
{   volatile int i = 8;
    volatile int ledstaus = 0xfe;      
    delay_ms(10);
    while(!(PIND&0x01))                 //PD0口按下未释放时,程序在里面执行流水灯程序
    {
        PORTC =ledstaus;
        ledstaus = ledstaus<<1;
        ledstaus +=1;
        delay_ms(50);
        i--;
        if(!i)
        { ledstaus = 0xfe;   i=8;}
    }
    EIFR = 0x00;            //清除中断状态位
}
JY-DX-JY 发表于 2015-1-7 10:06 | 显示全部楼层
可能死在中断了。
ningling_21 发表于 2015-1-7 10:43 | 显示全部楼层
仿真一下看看去了哪里
hillslb 发表于 2015-1-8 12:24 | 显示全部楼层
死在中断while里了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

19

帖子

0

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