реклама на сайте
подробности

 
 
> Не могу выйти из цикла, ATmega16; Компилятор: ICCV7 for AVR
Aneg
сообщение Dec 23 2010, 13:01
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 19-12-09
Пользователь №: 54 346



Компилятор: ICCV7 for AVR, http://www.imagecraft.com/
Целевой камень: ATmega16


ADCSR |= BIT(6); //запуск АЦП

while (ADIF != 1){ //ожидание установки флага ADIF завершения АЦП
}

UDR = 0x03; //контрольная отправка в СОМ порт


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Xenia
сообщение Dec 23 2010, 13:10
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



ADIF - это номер бита, а не регистр. Проверять надо регистр ADCSRA на наличие этого флага. Вот так:
while (!(ADCSRA & (1<<ADIF))) {}

Здесь, сдвигом единички влево, из номера бита получается маска. Потом с помощью операции "&", бит ADIF вырезается из значения регистра статуса ADCSRA. Результат сравнения инвертируем операцией "!".

P.S. На ICCV7 я не работаю, поэтому для уточнения рекомендации смотрите сами, как определен ADIF в хидере: номер бита он или маска.
На моем любимом IAR'е sm.gif это выглядит много изящней и нагляднее:
while( !ADCSRA_ADIF) {}
Рекомендую.
Go to the top of the page
 
+Quote Post
Aneg
сообщение Dec 23 2010, 14:07
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 19-12-09
Пользователь №: 54 346



Спасибо заработало!
Я вчера тоже проинсталил IAR, но не нашел там генератор начального кода (Application Builder). Слыхал что у IAR это реализовано в отдельной программе. Подскажите как она называется?

Сообщение отредактировал IgorKossak - Dec 23 2010, 14:52
Причина редактирования: Лишнее цитирование
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 04:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016