本帖最后由 any_014 于 2015-4-25 11:49 编辑
做个双积分ADC,对被测信号进行20ms固定时间积分,然后切换到基准信号通道,测量反向积分时间。
固定时间积分用的是T0定时器,测量方向积分时间用的也是T0定时器。
现在是在切换到基准信号通道前将TL0,TH0清零,切换到保基准信号通道后立刻置位TR0,然后等待INT1中断,在INT1中断里将等待信号复位。
用示波器测量波形如下图,下坡是20Ms固定积分,现在将被测信号与基准信号正好相反,理论上上坡也是20ms,测量显示是掠夺与20ms.
但串口发过来的数,我算了下,才17ms左右。
- void main()
- {
- Init();
- while(1)
- {
- RUNLED = 0;
- TIMERFLAG = 1;
- TL0 = T20MS;
- TH0 = T20MS >> 8;
- P1 &= 0xf0; //Çл»µ½±»²âµçѹÐźÅͨµÀ
- P1 |= 0x02;
- TR0 = 1; //¶¨Ê±Æ÷T0 20msÑÓʱ
- while(TIMERFLAG);
- RUNLED = 1;
- INT1FLAG = 0;
- TL0 = 0;
- TH0 = 0;
- P1 &= 0xf0; //Çл»µ½»ù×¼µçѹÐźÅͨµÀ
- P1 |= 0x07;
- TR0 = 1;
- while(!INT1FLAG);
- SendData(temp1);
- SendData(temp2);
- ADC_Process(temp1, temp2);
- }
- }
- void tm0_isr() interrupt 1 using 2
- {
- TR0 = 0;
- TIMERFLAG = 0;
- }
- void exint1() interrupt 2
- {
- TR0 = 0;
- temp1 = TH0;
- temp2 = TL0;
- INT1FLAG = 1;
- }
|