我在学习AVRMCU的时候为什么下面的程序使用sei();后程序就reset,删除sei();就正常,我的用的平台是:winavr+avr studio4.0 #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define uchar unsigned char #define SET_LED PORTD&=0XEF //PD4 接发光管 #define CLR_LED PORTD|=0X10 static uchar g_bCount=0; //中断计数器 static uchar g_bDirection=0; //T/C0 中断例程 SIGNAL(SIG_OVERFLOW0) { // 产生中断周期 T = 256 * 1024 / 4MHz if(++g_bCount >14) //中断15 次约一秒 { if(g_bDirection) //反向LED 控制脚
SET_LED,g_bDirection=0; else CLR_LED,g_bDirection=1; g_bCount=0; } } int main(void) { SP = 0x2ff; DDRD=0X10; PORTD=0X10; TCNT0=0; // T/C0 开始值 TCCR0=5; // 预分频 ck/1024 ,计数允许 TIMSK=_BV(TOIE0); sei(); //加上这句程序就跑飞了. for(; ;) { PORTB = 0x1; PORTB = 0x0; } return 0; } 请问这是为什么呢? |