Stepanich 0 19 июня, 2005 Опубликовано 19 июня, 2005 · Жалоба CVAVR 1.24.6 При попытке записать бит или проделать какую-либо операцию с отдельным битом портов F или G возникает ошибка «left side of ‘.’ requires struct/union». Пример: PORTG.2=1 – ошибка, PORTF.0=~PORTF.0 – ошибка. Пробовал реализовывать последнюю операцию при помощи асм. вставки – возникает ошибка ассемблирования; с портами А-Е проблем не возникает. При указании компилятору использовать порт F для ЖКИ также возникает ошибка ассемблирования. Режим совместимости с MEGA 103 не включен. В чём дело? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor26 0 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба CVAVR 1.24.6 При попытке записать бит или проделать какую-либо операцию с отдельным битом портов F или G возникает ошибка «left side of ‘.’ requires struct/union». Пример: PORTG.2=1 – ошибка, PORTF.0=~PORTF.0 – ошибка. Пробовал реализовывать последнюю операцию при помощи асм. вставки – возникает ошибка ассемблирования; с портами А-Е проблем не возникает. При указании компилятору использовать порт F для ЖКИ также возникает ошибка ассемблирования. Режим совместимости с MEGA 103 не включен. В чём дело? Спасибо. <{POST_SNAPBACK}> К этим портам нужно обращаться как к ячейкам памяти. Я делаю так: PORTG=PING&0xfe; #asm("nop") PORTG=PING|0x01; #asm("nop") В этом примере формирую отрицательный импульс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ANT 0 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба CVAVR 1.24.6 При попытке записать бит или проделать какую-либо операцию с отдельным битом портов F или G возникает ошибка «left side of ‘.’ requires struct/union». Пример: PORTG.2=1 – ошибка, PORTF.0=~PORTF.0 – ошибка. Пробовал реализовывать последнюю операцию при помощи асм. вставки – возникает ошибка ассемблирования; с портами А-Е проблем не возникает. При указании компилятору использовать порт F для ЖКИ также возникает ошибка ассемблирования. Режим совместимости с MEGA 103 не включен. В чём дело? Спасибо. <{POST_SNAPBACK}> В хелпе 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться