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