Esta bien la suposicion, pero esta mal aplicado.
Por que read_adc() es una funcion bloqueante. es decir espera hasta que exista un valor, lo cual estarias ese tiempo de espera dentro de la interrupcion.
No se si CCS provee otra alternativa a esto. O directamente tener que modificar los registros.
Ademas tenes que al cambiar el canal, tenes que esperar un tiempo para que la tension del capacitor de S/H este al nivel de la señal nueva, lo cual en una interrupcion significaria poner una demora dentro. Y es algo malo poner una demora en una interrupcion.
Pensando en esto podrias crear un codigo que tenga esas consideraciones.
Creo que lo mas correcto seria usar un timer para dar los valores a realizar. Y directamente no usas la interrupcion de A/D
El timer que tenga un tiempo que sea = Tiempo de conversion o tiempo para que se acomode la señal con el cambio de canal ( el que sea mayor )
De esa forma podes en la interrupcion del timer:
Mirar el flag de interrupcion de ADC ( te va a permitir saber si es la primera ves que entra (flag = 0) o no (flag = 1) )
Si es la primera ves que entra inicias la conversion y salis ( ya que en la configuracion habras puesto que era el canal 0 )
Si es la segunda ves tomas el dato, borras el flag, y cambias de canal, y salis
Es decir una entrada para tomar el dato y cambiar de canal, y otra entrada para iniciar la conversion.
Creo que seria lo mas factible para hacer un barrido sin usar demoras o loops infinitos ( funciones bloqueantes ). AL menos es lo unico que se me ocurrio en el momento
PD: No se si es posible una ves iniciada la conversion el cambiar de canal, si es asi por cada entrada al timer podes hacer las 2 cosas.
Te digo por que cuando inicia la conversion, deberia de aislarse con el valor de entrada. Por lo tanto seria valido hacerlo, pero yo no se como se maneja internamente el PIC, por eso propuse lo anterior, sino directamente cuando entra de nuevo, inicias la conversion y cambias de canal en el mismo momento.