#include<util/delay.h>
#include<avr/interrupt.h>
int main(void)
{
unsigned char temp;
DDRC=0b11111111;//设置PD口为输出
temp=0xfe;
DDRD=DDRD|(~(_BV(PD0)));//设置PD0为输入
PORTD=0xff;//设置PD0内部上拉电阻有效
EICRA=0x02;//设置外部中断0为下降沿有效
EIMSK=0x01;//开外部中断0
sei();//开总中断
PORTC=temp;
while(1)
{
_delay_ms(500);
temp=temp<<1;
if(temp==0x00)
{
PORTC=temp;
_delay_ms(500);
temp=0xff;
}
PORTC=temp;
}
}
SIGNAL(SIG_INTERRUPT0)
{
_delay_ms(10);
unsigned char num;
num=0x7f;
PORTC=num;
while(PINC!=0x00)
{
_delay_ms(1000);
num=num>>1;
PORTC=num;
}
}
proteus仿真时为什么会先进一次中断啊 |