本帖最后由 刘前辈 于 2011-8-26 11:07 编辑
#include <iom48.h>
#include <inavr.h>
unsigned int count;
unsigned long sum;
unsigned long error;
unsigned char flag;
#pragma vector = TIMER1_COMPA_vect
__interrupt void my_interrupt_routine(void) //定时中断
{
count++; //count = 251~260
if(count > 260)
{
count = 251;
}
flag = 1;
}
void tmr1_ini() ////定时中断初始化
{
TCNT1 = 0x00;
OCR1A = 80;
TIMSK1 = 0x02;
TCCR1A = 0x00;
TCCR1B = 0x09;
}
void main(void)
{
count = 251;
sum = 0;
error = 0;
tmr1_ini();
__enable_interrupt();
while(sum < 100000)
{
if(flag > 0)
{
sum++;
flag = 0;
}
if(count > 250||CY) //count = 251~260
{
__delay_cycles(2); //按理一定执行这句话
}
else
{
error++; //但实际上有一定的机率会执行这句话
}
}
while(1) //下断点,看error的数值
{
__delay_cycles(2);
__delay_cycles(2);
__delay_cycles(2);
}
}
加一个进位测试 || CY 就完了,管它什么中断不中断。
再说了,如果是多人共同完成的软件,你怎么知道别人会在中断里处理count ? 你如果随便把中断关了,别人怎么办?!
、、 |