Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CVAVR 1.24.6 Ошибка
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Stepanich
CVAVR 1.24.6
При попытке записать бит или проделать какую-либо операцию с отдельным битом портов F или G возникает ошибка «left side of ‘.’ requires struct/union».
Пример: PORTG.2=1 – ошибка,
PORTF.0=~PORTF.0 – ошибка.
Пробовал реализовывать последнюю операцию при помощи асм. вставки – возникает ошибка ассемблирования; с портами А-Е проблем не возникает.
При указании компилятору использовать порт F для ЖКИ также возникает ошибка ассемблирования.
Режим совместимости с MEGA 103 не включен.
В чём дело?
Спасибо.
Igor26
Цитата(Stepanich @ Jun 19 2005, 23:44)
CVAVR 1.24.6
При попытке записать бит или проделать какую-либо операцию с отдельным битом портов F или G возникает ошибка «left side of ‘.’ requires struct/union».
Пример: PORTG.2=1 – ошибка,
PORTF.0=~PORTF.0 – ошибка.
Пробовал реализовывать последнюю операцию при помощи асм. вставки – возникает ошибка ассемблирования; с портами А-Е проблем не возникает.
При указании компилятору использовать порт F для ЖКИ также возникает ошибка ассемблирования.
Режим совместимости с MEGA 103 не включен.
В чём дело?
Спасибо.
*

К этим портам нужно обращаться как к ячейкам памяти. Я делаю так:

PORTG=PING&0xfe;
#asm("nop")
PORTG=PING|0x01;
#asm("nop")

В этом примере формирую отрицательный импульс.
ANT
Цитата(Stepanich @ Jun 19 2005, 23:44)
CVAVR 1.24.6
При попытке записать бит или проделать какую-либо операцию с отдельным битом портов F или G возникает ошибка «left side of ‘.’ requires struct/union».
Пример: PORTG.2=1 – ошибка,
PORTF.0=~PORTF.0 – ошибка.
Пробовал реализовывать последнюю операцию при помощи асм. вставки – возникает ошибка ассемблирования; с портами А-Е проблем не возникает.
При указании компилятору использовать порт F для ЖКИ также возникает ошибка ассемблирования.
Режим совместимости с MEGA 103 не включен.
В чём дело?
Спасибо.
*

В хелпе CVAVR написано:
It is important to note that bit selector access to I/O registers located in internal SRAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can’t be used for SRAM access.
Т.е. прямые битовые операции не поддерживаются для портов F и G.
Управление светодиодом, не трогая остальных бит регистра, можно сделать так:

#define LED_RED_OUT PORTG // Red LED output PORTG PIN0

LED_RED_OUT = (LED_RED_OUT & ~0x01) | (led_red_flag ? 0x00 : 0x01);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.