|
本人在EWAVR中写了段测试程序,但关于延时过程中的中断问题有些不解:
如果没有延时程序,测试板,灯近似一直亮。
加入延时程序,可以看见灯运行的过程。
问题是延时过程中会不会产生中断,为什么会出现上述情况.
中断调用子函数都完成了,标志位应该清除了,为何还会出现这个情况
?#include
unsigned int flag;
/*在T0的CTC模式中比较和溢出都会产生中断
为了便于观察,这里加入定时延时函数 */
void delay(void)
{
unsigned char x,y;
x=255;
y=255;
while(x--)
{
while(y--);
}
}
void timer0_init(void)
{
//CTC mode ,TOS/32,compare equ reverse
TCCR0=(1<
//SET TOP=1000,000/(2*32*100)=156.25
OCR0=0x9c;
}
#pragma vector = TIMER0_COMP_vect
__interrupt void time0_isr1(void){
flag++;
// asm("CLI");
}
/*#pragma vector = TIMER0_OVF_vect
__interrupt void time0_isr2(void){
flag++;
asm("CLI");
}*/
unsigned char k;
void main(void)
{
DDRD=0xff;
PORTD=0x0f;
asm("nop");//同步,一个时钟
PORTD=0xf0;
asm("sei");
TIMSK=(1<
k=1;
while(1)
{
if(((flag%3)==0))
{
k<<=1;
PORTD =k;
if(k==0) k=1;
}
delay();
// asm("sei");
}
}
|
|