打印
[AVR单片机]

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

[复制链接]
1333|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

粉丝