本帖最后由 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++;
|