Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Dymo_Im
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 120
1

Не выполняется код за циклом for

20.11.2014, 15:24. Просмотров 2100. Ответов 4
Метки нет (Все метки)

Здравствуйте.
Вывожу код кнопок подключенных к PORTA c 4 по 7. Код выводится исправно.
Столкнулся с непонятной проблемой.
При использовании цикла for (пробывал while), код написанный после цикла не выполняется.
PORT4 скидывает в 0 и все. Если поставить установку бита до цикла - бит устанавливается в 1.
Код
...
#define SITBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))

unsykned char kod_key = 0;

int main(void)
{
//       76543210
DDRD = 0b11111111;
PORTD= 0b00010000;

//       76543210
DDRA = 0b00001111;
PORTA= 0b00000000;

lcdInit();
lcdClear();

while(1)
{
CLEARBIT(PORTD,4);//КОМАНДА ВЫПОЛНЯЕТСЯ
_delay_ms(2500);
//      SITBIT(PORTD,4);//КОМАНДА ВЫПОЛНЯЕТСЯ
for ( unsykned char iii = 0; iii < 4; iii++ )
{
lcdClear();
lcdGotoXY(0, 0);
kod_key = PINA>>4;
char *myStr = utoa_cycle_sub(kod_key, buffer);//Получаем преобразованную строку
lcdPuts(myStr);
_delay_ms(250);
}
//      SITBIT(PORTD,4);//КОМАНДА НЕ ВЫПОЛНЯЕТСЯ
}
}
проект [35.8 Кб]
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2014, 15:24
Ответы с готовыми решениями:

Элементарная задача с Циклом. Почему код выполняется именно 8 раз?
Добрый день, сижу целый день и не могу понять почему именно так, можно расписать по полочкам...

Пытаюсь переписать код с циклом for, в код с циклом while, но не совсем получается
Возникло пару вопросов: #include &lt;iostream&gt; using namespace std; int main () { for (int i...

Код не выполняется в одном месте, но выполняется в другом
Вот код процедуры: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)...

Переделать код содержащий в себе цикл с параметром, в код с циклом с ПРЕДУСЛОВИЕМ (while do)
Program Sum_Del; Var N, I, Sum_Max, Sum, K, Ch : Integer; Begin Write('Введите число N: '); ...

Исправить код с циклом for
Сразу скажу, что в программировании новичек, поэтому если что-то не то ляпну - грязью прошу не...

4
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
20.11.2014, 15:28 2
char *myStr = utoa_cycle_sub(kod_key, buffer);
Память-то под строку отведите! Указатель - это ещё не сама память.

Код
char myStr[100];  //или сколько там ожидается по максимуму
...
myStr = utoa...(...);
P.S. И объявлять переменные внутри цикла - что за волюнтаризм! ;-)
0
propitt_omt
0 / 0 / 0
Регистрация: 21.08.2014
Сообщений: 64
20.11.2014, 16:24 3
оптимизатор поработал. Он-то увидел последовательное исполнение SITBIT и CLEARBIT, решил, что железо так быстро переключить состояние порта всё равно не сможет, так зачем же тратить память...
А перед циклом срабатывают, потому что после CLEARBIT у тебя задержка.
Сам решай, что тебе нужно, либо задержку после SITBIT втыкай, либо оптимизацию отключай.
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
20.11.2014, 16:36 4
OtyxPM, с указателем на вид всё Ok (myStr будет указывать на какой-то символ в buffer).
Объявлять переменную в цикле - вполне разумно: чем меньше зона видимости переменной - тем лучше, чай, не Паскаль.

propytt_omt, "не верю". Сырцов либ AVR под рукой нет, но PORTD явно должен быть volatile.

Гипотезы:
1. тупо зависает где-то внутри цикла (например, из-за мусора в buffer)
2. всё работает, просто вы не успеваете заметить срабатывание, т.к. сразу после него попадаем на начало цикла while(1), и отрабатывает CLEARBIT. Правда попробуйте задержку после SITBIT, как propytt_omt советует.

P.S. Вы пропустили букву "ё" в слове "пробывал" ;-)
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
20.11.2014, 16:48 5
Цитата Сообщение от oomomstir
myStr будет указывать на какой-то символ в buffer
А, там ещё какой-то код есть, кроме приведённого в первом посте.
В архив с исходником не посмотрел :-)
0
20.11.2014, 16:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2014, 16:48

Разобрать код с циклом
Ребят, помогите разобраться с кусочком кода. А точнее непонятно как программа выходит из цикла...

Исправить код программы с циклом
Народ, я зашел в тупик. Немного кода наковырял, но с условием цикла запутался, возможно есть и...

Нужно создать код с циклом FOR
Всем привет! Есть код, который создает рандомные цифры. Всего рандомных цифр 2(123,321). Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru