各位大虾,帮我解决一下小疑问吧?谢谢啦! 我今天发现定时器中断一个小问题,当定时器中断时间到时,进入中断,然后运行中断程序,此时我在中断程序里面放置了全局数组 string1[num] (之所以说是全局数组,是因为我在main函数的最后while(1)死循环里面也要用它)。以我以前的了解,进入中断程序,只会运行一次中断程序,然后再返回到 main中的 while(1)死循环里面,可现在的问题是我觉得进入中断程序后运行了好几次中断程序,不知道为什么?
或许这样讲,大家看文字不如看代码,我把我的程序简单贴上来,大家帮我分析一下吧,谢谢啦……
interrupt void TINT0_ISR(void) // CPU-Timer 0
{
DINT;
CpuTimer0Regs.TCR.bit.TIF=1;//clear 中断标志
StopCpuTimer0();
number2++; //此为全局变量,在main函数中同样可以调用
string1[number2]='a';//给当前数组第number2中赋值'a'
if(number2>=100)
{
number2=0;
}
ReloadCpuTimer0();
StartCpuTimer0();
PieCtrlRegs.PIEACK.bit.ACK1 = 1;
EINT;
}
下面是main函数的while(1)死循环里面的函数
while(1)
{
number2++; //此为全局变量,在main函数中同样可以调用
string1[number2]='b';//给当前数组第number2中赋值'a'
if(number2>=100)
{
number2=0;
}
}
我初步设计思路是,按照中断含义,数组string1的内容是 b...bab...bab..b 就是说每次b和b之间只会出现一次a,而b会出现多次,因为等待定时器的同时while(1)或许执行很多次,而中断程序只能执行一次。 可是实际的结果不是这样,实际的结果,a也会连续出现好几次,即类似于b..ba..ab..b,这是为什么呢?
请高手指点,谢谢啦!!