#include<util/delay.h>
#include<avr/interrupt.h>
int main(void)
{
unsigned char temp;
DDRC=0b11111111;//設(shè)置PD口為輸出
temp=0xfe;
DDRD=DDRD|(~(_BV(PD0)));//設(shè)置PD0為輸入
PORTD=0xff;//設(shè)置PD0內(nèi)部上拉電阻有效
EICRA=0x02;//設(shè)置外部中斷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仿真時(shí)會先進(jìn)一次中斷,然后執(zhí)行主程序
|