if() отказывается сравнивать значения

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

if() отказывается сравнивать значения

Сообщение КАШАК »

Доброго времени суток :)

Значит так, есть программа для Mega88, она получает данные по UART с ПК через преобразователь на FT232. В зависимости от полученных данных должны выполняться определенные действия. Выглядит это так:

Код: Выделить всё

volatile unsigned char rx_buff[4];

ISR(USART_RX_vect)
{
	rx_buff[rx_count] = UDR0;

	if( ++rx_count > 3 )
	{
		rx_count = 0;
		rx_ready = 1;
	}
}
//и где-то в программе
if( rx_buff[0] == 0xFA){...}
Вот этот самый if() и не хочет работать. Ему абсолютно все равно, какие данные приходят по UART. Если 0хFA заменить на число, то ничего не меняется. Данные приходят верно, делал отправку обратно на ПК. На других МК это отлично работает. В чем может быть проблема?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Реклама
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: if() отказывается сравнивать значения

Сообщение Сериг »

if( ++rx_count > 3 )
{
rx_count = 0;
rx_ready = 1;
}простите,а где точка с запятой?;
Пробовали ставить задержку?
Хорошо бы было увидеть всю программу,по отрывку сложно судить,может вы в самом конце напортачили или еще чего..
Компилятор то хоть какой? Я полагаю CVAVR?
Реклама
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Какая еще точка с запятой? Там ее не должно быть :) Компилятор WinAvr, пишу в Eclipse (проверял и в AVR Studio, но никакого эффекта). Кроме этого сейчас есть еще:

Код: Выделить всё

	while(1)
	{
		if( rx_ready == 1 ) // Если пакет принят
		{

			// Если пришла команда
			if( rx_buff[0] == 0xFA) // НЕ ВЫПОЛНЯЕТСЯ ДЛЯ ЛЮБЫХ ЧИСЕЛ
			{
                             uart_putchar(0x03); 
                             rx_ready = 0;
                        }

		}
	}
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: if() отказывается сравнивать значения

Сообщение Сериг »

Все,тогда прошу прощения! :)
Сваливаю :)))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: if() отказывается сравнивать значения

Сообщение ibiza11 »

а можно поинтересоваться, какой символ Вы отправляете в терминал с кодом 0xFA?
как объявлены rx_count и rx_ready?
Ставим плюсы: )
Реклама
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Это цифра 250. Пробовал вместо 0xFA писать 250 и кучу других цифр, реакции никакой. rx_count - int, rx_ready - unsigned char. Вообще по алгоритму мы посылаем в МК 4 числа, он на них смотрит, и выполняет команды. Сколько до этого работал с UART никаких проблем не было, а тут бред какой-то. Правда с Mega88 работаю первый раз.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Реклама
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: if() отказывается сравнивать значения

Сообщение Сериг »

250-это число,а не цифра :)))
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: if() отказывается сравнивать значения

Сообщение ChipKiller »

Вот этот самый if() и не хочет работать.
... ну раз не работает - напишите

Код: Выделить всё

if( rx_buff[0] != 0xFA)
и посмотрите на результат :)
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: if() отказывается сравнивать значения

Сообщение ibiza11 »

попробуйте вместо 0хFA поставить 0x32 и отправить 250 в терминал :) удивитесь результату)))
потом посмотрите таблицу ASCII.
Ставим плюсы: )
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: if() отказывается сравнивать значения

Сообщение shads »

КАШАК писал(а):Данные приходят верно, делал отправку обратно на ПК.
Попробуйте отправлять назад на ПК значение rx_buff[0] прямо перед этой строчкой:

Код: Выделить всё

if( rx_buff[0] == 0xFA){...}
Увидите, что у вас там в реальности в момент проверки (терминал переключите в отображение шестнадцатеричных данных)...
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

ibiza11 писал(а):попробуйте вместо 0хFA поставить 0x32 и отправить 250 в терминал :) удивитесь результату)))
потом посмотрите таблицу ASCII.
Блин, точно, как это я про нее забыл :) Просто дали устройство со словами "все работает, надо только немного изменить", а я включаю и у меня нифига не работает :) Спасибо :)
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

shads писал(а):
КАШАК писал(а): Увидите, что у вас там в реальности в момент проверки (терминал переключите в отображение шестнадцатеричных данных)...
А кто-нибудь не будет так любезен, кинуть в меня (или ссылку дать) - какая программа под Винду так может? А то у меня Гипертерминал виндовый - всегда хватало. А тут ТАКОЕ! :o
Аж интересно стало потыркать...
Вообще-то ясно, что тут число 250 - это 3 символа. Но гнать нечто непечатное - хочется иметь возможность.
Последний раз редактировалось SergeBS Вс апр 14, 2013 20:03:35, всего редактировалось 1 раз.
Человек - это звучит гордо, а обезьяна - объективно...
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Вот он Плюс я себе сам написал программку с меньшим числом наворотов :)
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: if() отказывается сравнивать значения

Сообщение oleg110592 »

тут вроде свежее: https://sites.google.com/site/terminalbpp/
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

По горячим следам, так сказать.
Беру эти terminal (еще раз :beer: ). Отправляю \232 (ш) - печатает ш, а справа - F8 - 248 - 1111 1000 (hex dec bin).
Не понимаю :(
С я, ю,э - пишет 255, 254, 253 (десятичное). А с \250 - 183. Отображает верно, а коды-то врет.
Да, еще хохма - версия одинаковая, разная длина. Но более длинную (КАШАКа) упорно брандмауэр хочет остановить.
Человек - это звучит гордо, а обезьяна - объективно...
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

А у меня отключен бранмауэр, безполезнейшая вещь 8)
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

Да начхать на брандмауэр. Вырубил не полностью. Когда высовывается - просто забываю добить, а потом искать лень.
Интересней с враньем кодов - это я такой "счастливый" и что-то не так делаю по незнанию, или у кого-то еще так же?
WinXP, COM5 на Moschip PCI-мультяхе. Ткнул бы и в COM1, но переходку DB25-DB9 искать лень, да и разницы не будет.
Человек - это звучит гордо, а обезьяна - объективно...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: if() отказывается сравнивать значения

Сообщение oleg110592 »

In macros you can use all characters from keyboard and any ASCII char if
you use $xx or #xxx. Where $xx is hex and #xxx dec format of ascii code.
$FA отправит 0xFA, #xxx не пробовал
Нажмите кнопку About - версия одинаковая, разница есть в годах и файл создан 16.01.2013
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Моя версия тоже врет в кодах :dont_know:
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: if() отказывается сравнивать значения

Сообщение oleg110592 »

вроде не врет
Terminals.png
(94.33 КБ) 368 скачиваний
Ответить

Вернуться в «Разные вопросы по МК»