Код Hi tech c adc не работает должным образом

Я новичок в использовании микроконтроллеров PIC и работаю над проектом, который включает считывание аналогового значения. Я использую PIC16F877A. Я нашел код для использования ADC, опубликованный ниже, однако, когда я пытаюсь его скомпилировать, я получаю сообщение об ошибке Error [192] C:\Users\Owner\Documents\Pic Projects\Analog\Main.c; 20.1 неопределенный идентификатор "GO_nDONE". Вот мой код

#include<htc.h>
#include<pic.h>
#define _XTAL_FREQ 20000000

__CONFIG(UNPROTECT & PWRTDIS & WDTDIS & HS & LVPDIS);

void InitADC(void)
{
    ADCON1  = 0x80;
    TRISA   = 0x2f;
    TRISE   = 0x07;
    ADCON0  = 0x81;
}

unsigned int GetADCValue(unsigned char Channel)
{
    ADCON0 &= 0xc7;
    ADCON0 |= (Channel<<3);
    __delay_ms(10);
    GO_nDONE = 1;
    while(GO_nDONE);
    return ((ADRESH<<8)+ADRESL);
}

void main()
{

}
Для какого PIC вы его компилируете? Биты регистра называются по-разному на разных устройствах. В HTC вам обычно нужно ссылаться на них как на структуру типа REGISTERXbits.BITY, в отличие от C18.
Я использую PIC16F877A.
Беглый взгляд на 16f877a.h из каталога «include» XC8 показывает, что ADCON0bits.GO_nDONE верен.
это дает ошибку [192] C:\Users\Owner\Documents\Pic Projects\Analog\Main.c; 20.1 неопределенный идентификатор "ADCON0bits" Ошибка [196] C:\Users\Owner\Documents\Pic Projects\Analog\Main.c; 20.21 требуется структура/объединение Ошибка [196] C:\Users\Owner\Documents\Pic Projects\Analog\Main.c; 21.26 требуется структура/объединение

Ответы (1)

В разных версиях компилятора HiTech C выводы/порты PIC определяются по-разному. Затем, когда Microchip поглотила HiTech C, некоторые из них были снова изменены.

Если вы посмотрите в свой файл pic.h, вы увидите, на какой файл определений ссылается PIC16F877A. Затем просмотрите этот файл, чтобы найти сопоставление #define...

Например, в PICC 9.50 он определяется как ADGO. В версии 9.83 он определяется как ADGO и GODONE. Я также видел ссылки на GO_DONE и GO_nDONE.

Вы можете просто попробовать их и найти, какой из них работает. Однако я предлагаю вам найти файл, чтобы вы могли увидеть и другие сопоставления контактов/портов/регистров.

Удачи!

«Разные способы» заключались в том, что имена портов и выводов в заголовочных файлах были сгенерированы сценарием из файлов данных, которые мы получили прямо от Microchip, и иногда эти файлы менялись. Теперь у нас меньше барьеров в общении с создателями этих файлов данных, и ситуация также стабилизировалась.
@mlp Спасибо! Я не говорил, что HiTech или Microchip сделали что-то не так; эти типы проблем кажутся довольно распространенными повсюду! (Только недавно я нашел два противоречащих друг другу фрагмента кода в библиотеках CMSIS ARM) :)
Точно так же я не обижался, а просто пытался пролить свет на изменяющиеся определения. Такого рода вещи становятся все более вероятными по мере того, как растет разделение между разработчиками компиляторов, документаторами чипов и разработчиками микросхем в континууме от одной высокоталантливой головы до отдельных корпоративных единиц .
@mlp Мне нравится эта фраза: «изнутри одной талантливой головы в отдельные корпоративные образования» :)