PIC18 IO-Port проблемы с Noobie с XC8 - PullRequest
0 голосов
/ 24 апреля 2019

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

И теперь у меня возникают основные проблемы с получением простого доступа к IO-порту:

Первая настройка RC6as Output:

TRISC = 0b10111111; 

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

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

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

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

И затем при попытке записи в IO-порт RC6:

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

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

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

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

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

Большое спасибо !!

Ответы [ 2 ]

1 голос
/ 24 апреля 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

0 голосов
/ 18 мая 2019

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

Это также облегчает отслеживание ваших ресурсов.

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

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