Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Отправка числа 0 (ноль) по уарту

Непрочитано 11.02.2011, 11:21  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Отправка числа 0 (ноль) по уарту

при отправке чисел размерностью int и разделению их на char появляется, что старший байт = 0 (т.е. число 0x00AB надо отправить как 0x0 и 0xAB). на сколько я понимаю 0х0 по уарту не передается?
как лучше поступить в такой ситуации?
Реклама:
code-by вне форума  
Непрочитано 11.02.2011, 11:23  
zms2003
Частый гость
 
Регистрация: 26.03.2008
Сообщений: 43
Сказал спасибо: 7
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
zms2003 на пути к лучшему
По умолчанию Re: отправка числа 0 (ноль) по уарту

почему? передается.....
zms2003 вне форума  
Непрочитано 11.02.2011, 11:29  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Re: отправка числа 0 (ноль) по уарту

да, отправляет (проверил в терминале на ПК). тогда может у меня ошибка в приеме на другом МК...
code-by вне форума  
Непрочитано 11.02.2011, 13:49  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Re: отправка числа 0 (ноль) по уарту

может проблема в приеме:

char getchar(void)
{
return UDR0;
}

main()
{
char s;
s=getchar();
if (s!='')
{ ... }
}
?

т.е. может при приеме 0 (0x0) получаем s='' ?
code-by вне форума  
Непрочитано 11.02.2011, 14:34  
skrynia
Прописка
 
Аватар для skrynia
 
Регистрация: 07.03.2009
Адрес: MN
Сообщений: 168
Сказал спасибо: 6
Сказали Спасибо 31 раз(а) в 21 сообщении(ях)
skrynia на пути к лучшему
По умолчанию Re: отправка числа 0 (ноль) по уарту

Сообщение от code-by Посмотреть сообщение
(т.е. число 0x00AB надо отправить как 0x0 и 0xAB).
Почему 0x0? Собираетесь передавать полубайт? 0x00AB - это 0x00 (старший байт) и 0xAB (младший байт), хотя при присвоении какой-нибудь переменной компилятору будет всё-равно, 0x0 или 0x00.
__________________
  • Квадрат - это тоже прямоугольник, только более квадратный и не такой вытянутый
  • Двуугольник - это треугольник, только поломанный
  • Одноугольника не видел
skrynia вне форума  
Непрочитано 11.02.2011, 14:38  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Re: отправка числа 0 (ноль) по уарту

А как еще отправить 0x00AB если не разделить на 2 char?

В качестве решения сделал битовую переменную которой присваивается 1 когда срабатывает прерывание по приему. В main() проверка чему равна эта переменная.
code-by вне форума  
Непрочитано 12.02.2011, 08:01  
zms2003
Частый гость
 
Регистрация: 26.03.2008
Сообщений: 43
Сказал спасибо: 7
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
zms2003 на пути к лучшему
По умолчанию Re: отправка числа 0 (ноль) по уарту

т.е. может при приеме 0 (0x0) получаем s='' ?[/QUOTE]

ИМХО не очень корректно... Как вариант, при передаче все значения переводить в строку...
Типа 0x00AB перевести в 30 30 3А 3В и на входе парсить.
А такая проверка как у Вас ИМХО вернет пустую строку если принимается непечатный символ (например с кодом меньше 0х09)...
У меня были такие грабли...
Попробуйте принять значение 0x0404 например...

Последний раз редактировалось zms2003; 12.02.2011 в 08:05.
zms2003 вне форума  
Непрочитано 12.02.2011, 09:38  
MisterDi
Почётный гражданин KAZUS.RUN
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Отправка числа 0 (ноль) по уарту

Код:
s=getchar();
Сообщение от code-by Посмотреть сообщение
может при приеме 0 (0x0) получаем s=''
если мне не изменяет склероз и хелп ССS-a, то getchar() ЖДЕТ приема символа
Цитата:
This function waits for a character to come in over the RS232 RCV pin and returns the character
Поэтому пробуйте проверять бит готовности даных в приемнике.

Из того же источника
Код:
if (s!='')
- это операция инверсии битов в переменной
попробуйте так:
Код:
if (!(s==''))
кроме того, мне кажется не корректным сравнивать СИМВОЛ, с пустой СТРОКОЙ.
__________________
misterdi<@>i.ua

Последний раз редактировалось MisterDi; 12.02.2011 в 09:42.
MisterDi вне форума  
Непрочитано 12.02.2011, 11:41  
sersne
Прописка
 
Регистрация: 09.11.2009
Сообщений: 193
Сказал спасибо: 47
Сказали Спасибо 58 раз(а) в 26 сообщении(ях)
sersne на пути к лучшему
По умолчанию Re: Отправка числа 0 (ноль) по уарту

Сообщение от code-by Посмотреть сообщение
char getchar(void)
{
return UDR0;
}

main()
{
char s;
s=getchar();
if (s!='')
{ ... }
}
?
code-by, функция main() обычно служит для задания начальных установок после включения/перезагрузки микроконтроллера и выполняется только один раз.

разумнее код будет выглядеть так:



char getchar(void)
{
char s;

s = UDR0;
if (!(s='')) // это если верить написанному ранее
{ ... }

}


или так:


char getchar(void)
{
return UDR0;
}

main()
{
char s;

while()
{
s=getchar();
if (s!='')
{ ... }

delay_ms(100);

}
}

или воспользоваться прерыванием. CodeWisardAvr позволяет это сделать (если проект сделан под CV).

Последний раз редактировалось sersne; 12.02.2011 в 13:43.
sersne вне форума  
Непрочитано 12.02.2011, 11:52  
avp94
Почётный гражданин KAZUS.RUN
 
Аватар для avp94
 
Регистрация: 26.01.2007
Сообщений: 3,116
Сказал спасибо: 61
Сказали Спасибо 1,151 раз(а) в 623 сообщении(ях)
avp94 на пути к лучшему
По умолчанию Re: Отправка числа 0 (ноль) по уарту

Сообщение от code-by Посмотреть сообщение
да, отправляет (проверил в терминале на ПК). тогда может у меня ошибка в приеме на другом МК...
Программа приема может воспринимать 0 как конец строки, поэтому, если позволяет время, делать так:
Сообщение от zms2003 Посмотреть сообщение
Типа 0x00AB перевести в 30 30 3А 3В и на входе парсить.
avp94 вне форума  
 

Метки
avr, mega, uart
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 13:31.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.