Я обнаружил несколько странных вещей (но, признаюсь, ни один из них не мог быть источником).
Как только вы установите биты LATA, LDR немедленно изменит значение val? Конечно нет, но это вопрос нс, нас или мс? ... Я не вижу никаких задержек для времени установления LDR.
Вы всегда спите, поэтому, вероятно, требуется установить ADON = 1 (проверьте DS). Тем не менее, проверьте DS устройства на предмет того, сколько времени AD нужно, чтобы его внутренние устройства были готовы и готовы после установки ADON = 1. По этому вопросу, как только ADON = 1, вы не должны и не должны устанавливать его заново в следующих двух приобретениях.
То же самое и с форматом результата. Установите его один раз и сделайте это до того, как GO = 1. Не переустанавливайте каждую конверсию.
Если вы используете только 8-битные результаты, почему unsigned int? (Между прочим, int довольно опасен в микроконтроллерах. Используйте short и символы и всегда указывайте явно).
Почему тогда назначение var1ADRESH color_xxx? когда биты LATD в конечном итоге получают = 0?
Ваш If else работает только на последней ветке. Я полагаю, вы намеревались создать if {} else if {} else if ... *. 1005 *