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

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

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

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

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

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

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

 
Опции темы
Непрочитано 30.08.2010, 14:08  
Zemlyanov
Гражданин KAZUS.RU
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию Как сделать преобразование данных?

В МК по UART поступают данные в таком формате (пример)- 52 , 102, 61, 54, 51, 57, ….. они же в ANSII формате 4, f, a, 6, 3, 9, ….. Так вот из этого мне нужно получить значения 4f (79) a6(166) 39(57) . Как это можно быстро преобразовать? Это же после обработки данных нужно будет сделать в обратной последовательности.
P.S. На С для AVR
Реклама:
Zemlyanov вне форума  
Непрочитано 30.08.2010, 14:44  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,961
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Преобразование данных. Как сделать?

2 lvadia - прочтите вопрос топикстартера еще раз, pls

По теме. Такая передача от компа к МК нехороша тем, что нет синхронизации. Допустим, что в последовательности 4, f, a, 6, 3, 9 первый байт куда-то пропал (рассчитывать всегда надо на то, что - если гадость может случиться - она случится). Тогда вы получите 0xFA, 0x63 и ... а с последним вообще непонятно.

Я бы применил что-то типа функции
Код:
char tetrada(B:char)
{
  if (B ‹=9) return(B-'0');
   else return(B-'A'+10);
}
Ну это упрощенно, без проверок и т.д. Ну и что-то типа

Код:
rez = tetrada(getchar())‹‹4 | terada(getchar());
Но с протоколом передачи надо что-то придумывать.
__________________
[ жизнь приятна и красива, если выпить литр пива ]

Последний раз редактировалось nml; 30.08.2010 в 14:47.
nml вне форума  
Сказали "Спасибо" nml
Zemlyanov (30.08.2010)
Непрочитано 30.08.2010, 14:46  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Преобразование данных. Как сделать?

Код:
uint8_t Hex2Bin(uint8_t nibble)
{
    return ((nibble -'0') - (nibble ›= 'a')*('a'-('9'+1))) & 0x0F;
}

int main(void)
{
uint8_t result;

result = Hex2Bin('4')‹‹4 | Hex2Bin('f');
}
Если компилятор не IAR, то будет достаточно быстро.
Код:
+0000002D:   3681        CPI     R24,0x61         Compare with immediate
+0000002E:   F010        BRCS    PC+0x03          Branch if carry set
+0000002F:   E297        LDI     R25,0x27         Load immediate
+00000030:   C001        RJMP    PC+0x0002        Relative jump
+00000031:   E090        LDI     R25,0x00         Load immediate
+00000032:   1B89        SUB     R24,R25          Subtract without carry
+00000033:   708F        ANDI    R24,0x0F         Logical AND with immediate
+00000034:   E090        LDI     R25,0x00         Load immediate
+00000035:   9508        RET                      Subroutine return
Это листинг Hex2Bin
Как обратно преобразовать надеюсь разберетесь самостоятельно.
kison вне форума  
Сказали "Спасибо" kison
Zemlyanov (30.08.2010)
Непрочитано 30.08.2010, 14:59  
Zemlyanov
Гражданин KAZUS.RU
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию Re: Преобразование данных. Как сделать?

Сейчас попробую.
Zemlyanov вне форума  
Непрочитано 30.08.2010, 15:06  
Zemlyanov
Гражданин KAZUS.RU
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию Re: Преобразование данных. Как сделать?

Сообщение от kison Посмотреть сообщение
Если компилятор не IAR, то будет достаточно быстро.
Не понял,я думал что на IAR наоборот получается самый оптимальный код.
Я пишу СodeVision. Может на оборот, если компилятор IAR то получится достаточно быстро?

Последний раз редактировалось Zemlyanov; 30.08.2010 в 15:08.
Zemlyanov вне форума  
Непрочитано 30.08.2010, 15:08  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Преобразование данных. Как сделать?

Сообщение от Zemlyanov Посмотреть сообщение
я думал что есть готовые функции для данного преобразования.
Есть - scanf. Но Вы же хотите быстро. И не на 1,5кБ функцию. Или и такая сойдет?
kison вне форума  
Непрочитано 30.08.2010, 15:18  
Zemlyanov
Гражданин KAZUS.RU
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию Re: Преобразование данных. Как сделать?

Сообщение от kison Посмотреть сообщение
Есть - scanf. Но Вы же хотите быстро. И не на 1,5кБ функцию. Или и такая сойдет?
Угу,хочу.На 1,5 кб не пойдет.
Zemlyanov вне форума  
Непрочитано 30.08.2010, 15:20  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Как сделать преобразование данных?

Сообщение от Zemlyanov Посмотреть сообщение
Может на оборот, если компилятор IAR то получится достаточно быстро
Ну в моем варианте исходника IAR умножает Тут где то тема была, я там IAR сравнил с GCC по качеству кода. И момент с умножением меня ввел в ступор. Там умножение на 0 или на 1 возможно, причем умножается константа. GCC это оптимизировал в загрузку результата сразу, а IAR честно перемножил По остальным тестам типа работы с плавучими переменными IAR тоже выглядел бледно.
CV в той теме немного тоже потестирован.
Вот почитайте - https://kazus.ru/forums/showthread.php?t=13936
Хотя этот финт с умножением проверял видимо в другой ветке. Искать лень.
kison вне форума  
Непрочитано 30.08.2010, 15:38  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,961
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Как сделать преобразование данных?

Сообщение от lvadia Посмотреть сообщение
в чём я был не прав nml ?
Код:
Используйте логическое И с 0F и сдвиг в сторону старших разрядов
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Непрочитано 30.08.2010, 16:00  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Как сделать преобразование данных?

Сообщение от lvadia Посмотреть сообщение
Почему?....это класика............
Потому что ASCII символ '4' и 0x04 не одно и то же.
И потому что 0x0A-0x04 != 'A'-'4'.
kison вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Публикации и заметки, посвящёные ДР Николы Теслы - 10 июля! Все на праздник! hacker7 Отвлекитесь, эмбеддеры! 14 15.04.2011 23:59
RS 232 >AVR>Ethernet.Как лучше сделать? Zemlyanov Микроконтроллеры, АЦП, память и т.д 33 11.03.2010 01:21
Беспроводная передача данных? maxNTF Автоматика и аппаратура связи 6 29.12.2009 12:20
Как сделать силовой выпрямитель Zorg1 Источники питания и свет 5 05.11.2009 23:26


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


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