Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
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
Сообщений: 165
Сказал спасибо: 36
Сказали Спасибо 55 раз(а) в 24 сообщении(ях)
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.RU
 
Аватар для avp94
 
Регистрация: 26.01.2007
Сообщений: 3,123
Сказал спасибо: 61
Сказали Спасибо 1,154 раз(а) в 625 сообщении(ях)
avp94 на пути к лучшему
По умолчанию Re: Отправка числа 0 (ноль) по уарту

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

Закладки

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

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

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

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


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot