本帖最后由 any_014 于 2015-7-18 16:34 编辑
定时器中断里,如果timer_flag == 1,则是由外部中断里置位的,是正常的双积分引起的中断。
如果timer_flag == 0,则是由于定时器溢出中断引起的,定时器溢出中断后强制进行对外部信号定时积分,从而引发下一次正常的定时器中断。
void tm0_isr() interrupt 1 using 2
{
TR0 = 0;
TH0 = TL0 = 0;
if(timer_flag)
{
P1 &= 0xf0;
P1 |= 0x07;
timer_flag = 0;
EX1 = 1;
}
else
{
P1 &= 0xf0;
P1 |= 0x02;
EX1 = 0;
TR0 = 1;
}
TR0 = 1;
RUNLED = 1;
adc2dac_flag++;
|