Gracias solapower... ¡menuda vista! No es ese el problema (la errata la he metido al copiar el código en el post).
En cualquier caso ya lo tengo resuelto; parece que el problema era la forma de indicar los config con | en lugar de &.
El código que sí funciona es:
NO2_SENSOR_TRIS = 1;
voltage = 0;
OpenADC(ADC_FOSC_64 & ADC_RIGHT_JUST & ADC_2_TAD,
ADC_CH1 & ADC_INT_OFF & ADC_REF_VREFPLUS_VREFMINUS,
ADC_TRIG_CCP2,
0b11111101);
SetChanADC(ADC_CH1);
for(i=0;i<16;i++){
ConvertADC(); // Start conversion
while( BusyADC() ); // Wait for ADC conversion
voltage += (unsigned int) ReadADC();
}
voltage = (voltage/16*2.04)/1024; // convert ADC count into voltage
sprintf(USB_Buffer,(const far rom char*) "%d.%03u\n\r", (int)voltage , ((int) (((voltage)-(int)voltage) * 1000)) );
putUSBUSART(USB_Buffer,8);