unsigned int Irq_Work2()
{unsigned short nVal1=0;
unsigned short nVal2=0;
IR_ON();
delay_us(1);
// HW_ON();
//ADC set
PM2 |=0x40;
ADM0 = 0x36; //adc work in High speed 1 mode, conversion time 8.25uS;
ADCE = 1;
ADPC0 &= ~RF_ADC;
ADS = INCH_6;
ADIF = 0;
ADCS = 1;
delay_us(1);
while (!ADIF);
delay_us(1);
nVal1 = ADCR;
ADCS = 0; //Stop ADC
ADCE = 0; //Stop ADC V
HW_ON();
//ADM0 = 0x36; //adc work in High speed 1 mode, conversion time 8.25uS;
ADCE = 1;
// ADPC0 &= ~RF_ADC;
// ADS = INCH_6;
delay_us(1);
ADIF = 0;
ADCS = 1;
while (!ADIF);
delay_us(1);
nVal2 = ADCR;
ADM0 &= ~0x81;
ADCS = 0;
ADCE = 0;
HW_OFF();
IR_OFF();
if(nVal1 >= nVal2)
{
nVal2 = nVal1 - nVal2;
return nVal2;
}
else
{
return 0;
}
}
在做红外ID采样用的芯片是 NEC的 78F0746自带ADC遇到的问题是在ADC采样寄存器 和付给变量的值不相等。详细说明如下:
电路是红外 发送和接收 然后做AD采样 首先的工作是 红外不开启 TM_SDA给出高电平AD采样 记录一个采样值 然后开启红外发送管 在记录一个采样值 得出一个差值 来进行判断 现在遇到的问题是 在进行第一步采用的时候 AD采样转换结果这个寄存器 的值 和 付给变量的值不相等。
就是 ADCR 和nVal1这个值 结果不一样。尝试的结果是 在 TM_SDA给出高电平后 要延时 100uS左右AD采样结构寄存器 和 付给的变量值才能一样。我的问题是如何能避免这个延时? |