- 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采样结构寄存器 和 付给的变量值才能一样。我的问题是如何能避免这个延时?
|