Проблемы с новичками PIC18 IO-Port с XC8

Я много лет работаю с AVR и начинаю свой первый проект PIC с PIC18F46K42. Использование фактического MPLAB v5.15 с компилятором XC8 v2.05 (установлен на стандарт C99). (регистрация на форуме микрочипов не работает несколько дней...)

И теперь у меня есть основные проблемы, чтобы получить простой доступ к порту ввода-вывода:

Первая настройка RC6 в качестве выхода:

TRISC = 0b10111111; 

Теперь пытаемся прочитать IO-Port RC6:

uint8_t LEDstate = PORTCbits_t.RC6; // auto completition of PORTC.. command by xc8

=> Ошибка компиляции: неожиданное имя типа 'PORTCbits_t': ожидаемое выражение

Команда "PORTCbits.RC6 без "_t", которая публикуется во многих учебниках, вообще не распознается компилятором.

А потом пытаемся записать в IO-Port RC6:

LATCbits_t.LATC6 = 0; // auto completition of LATC.. command by xc8

=> Ошибка компиляции: ожидаемый идентификатор или '('

Команда "LATCbits.LATC6 без "_t", которая также публикуется во многих учебниках, также вообще не распознается компилятором.

Чтение руководства по xc8 и таблицы данных не очень помогает... Я думаю, что я упустил что-то основное с этой IDE / компилятором. Может в настройках...

Любые идеи или предложения документации очень ценятся!!

Огромное спасибо!!


person BEsmart    schedule 24.04.2019    source источник


Ответы (3)


Возможно, вы захотите использовать MCC (конфигуратор кода MPLAB). Это облегчит использование периферийных устройств — даже простого ввода-вывода.

Это также упрощает отслеживание ваших ресурсов.

Вы можете создать псевдонимы для контактов, и тогда MCC предоставит вам чистые макросы, такие как:

#define LEDState_SetHigh()            do { LATCbits.LATC6 = 1; } while(0)
person daShier    schedule 17.05.2019

..._t неверно, это определение типа. Взгляните на заголовок части (pic18lf46k42.h), строка 46579. Фактическая структура порта, определенная в следующей строке, называется PORTCbits. Чтобы это имя было распознано, вам нужно #include <xc.h> в вашем исходнике и убедиться, что в проекте MPLAB установлена ​​правильная часть.

Я использую это обозначение все время, и оно всегда работает, учитывая, что булавка существует и выполняются два вышеуказанных условия. Пример:

https://github.com/felis/stirrer/blob/f-desk/board_control/code/stirrer/bsp.h#L58

person Oleg Mazurov    schedule 24.04.2019

Как упомянул Олег, ..._t неверно. Измените строку на приведенную ниже, и она скомпилируется без проблем.

uint8_t LEDstate = PORTCbits.RC6; // auto completition of PORTC.. command by xc8

Я только что попробовал следующий код с вашим чипом, и он скомпилировался без проблем.

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <stdint.h>

int main(int argc, char** argv) {
    uint8_t LEDstate = PORTCbits.RC6; // auto completition of PORTC.. command by xc8
    return (EXIT_SUCCESS);
}
person Steven Daglish    schedule 26.09.2019