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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 28.01.2021, 21:01  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: CodevisionAVR си

Не получается никак и не можете разобраться что есть куда? Тогда забейте и возьмите стандартные функции преобразования atoi и itoa, входящие в заголовочник stdlib.h
Реклама:
NewWriter вне форума  
Сказали "Спасибо" NewWriter
ForcePoint (30.01.2021)
Непрочитано 28.01.2021, 21:48  
Виктор_М
Прописка
 
Регистрация: 07.01.2010
Сообщений: 104
Сказал спасибо: 60
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Виктор_М на пути к лучшему
По умолчанию Re: CodevisionAVR си

Заменил char a, b, c, d;
на int a, b, c, d;
Заработало! Вопрос снят.
Всем спасибо!
Виктор_М вне форума  
Непрочитано 28.01.2021, 21:50  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,727
Сказал спасибо: 2,417
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: CodevisionAVR си

напишите в программе ADC_temp=5; и проверьте,получается ли d=5. То есть алгоритм преобразования. Затем число 37,например. И так далее для всех разрядов.
baiderin вне форума  
Непрочитано 28.01.2021, 22:11  
Виктор_М
Прописка
 
Регистрация: 07.01.2010
Сообщений: 104
Сказал спасибо: 60
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Виктор_М на пути к лучшему
По умолчанию Re: CodevisionAVR си

Сообщение от baiderin Посмотреть сообщение
напишите в программе ADC_temp=5; и проверьте,получается ли d=5. То есть алгоритм преобразования. Затем число 37,например. И так далее для всех разрядов.
У меня проблема была именно в:
a = 0x30; b = 0x37; c = 0x36; d = 0x35;
ADC = (a & 0x0F) * 1000 + (b & 0x0F) * 100 + (c & 0x0F) * 10 + (d & 0x0F);
a, b, c, d были заданы как char.
Заменил на int.
А в программе по преобразованию в десятичное - проблем нет.
Виктор_М вне форума  
Непрочитано 28.01.2021, 23:03  
DmitriyVDN
Гражданин KAZUS.RU
 
Регистрация: 10.06.2010
Сообщений: 586
Сказал спасибо: 222
Сказали Спасибо 232 раз(а) в 152 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: CodevisionAVR си

Сообщение от Виктор_М Посмотреть сообщение
ADC = (a & 0x0F) * 1000 + (b & 0x0F) * 100 + (c & 0x0F) * 10 + (d & 0x0F);
a, b, c, d были заданы как char.
Заменил на int.
зачем? все что нужно было сделать указать размерность констант unsigned integer
Код:
ADC = (a & 0x0F) * 1000U + (b & 0x0F) * 100U + (c & 0x0F) * 10U + (d & 0x0F);
и да, это есть в мануале на ваш компилятор раздел 4.6
Нажмите на изображение для увеличения
Название: test.jpg
Просмотров: 0
Размер:	64.0 Кб
ID:	160305
ЗЫ из-за проблем протеза при отображении регистров быстрого доступа, переменные принудительно адресованы в ОЗУ общего назначения на результат это не влияет.

Последний раз редактировалось DmitriyVDN; 29.01.2021 в 00:46.
DmitriyVDN на форуме  
Сказали "Спасибо" DmitriyVDN
Виктор_М (29.01.2021)
Непрочитано 29.01.2021, 18:29  
Виктор_М
Прописка
 
Регистрация: 07.01.2010
Сообщений: 104
Сказал спасибо: 60
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Виктор_М на пути к лучшему
По умолчанию Re: CodevisionAVR си

Сообщение от DmitriyVDN Посмотреть сообщение
зачем? все что нужно было сделать указать размерность констант unsigned integer
Код:
ADC = (a & 0x0F) * 1000U + (b & 0x0F) * 100U + (c & 0x0F) * 10U + (d & 0x0F);
и да, это есть в мануале на ваш компилятор раздел 4.6
Вложение 160305
ЗЫ из-за проблем протеза при отображении регистров быстрого доступа, переменные принудительно адресованы в ОЗУ общего назначения на результат это не влияет.
Спасибо огромнейшее, но я если честно не совсем понял.
То есть компилятор не будет правильно считать в случае если переменная a типа char
Код:
int ADC;
ADC = a * 100;
если a сделать типа int то всё будет корректно работать.
Правильно?
Виктор_М вне форума  
Непрочитано 29.01.2021, 19:59  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,727
Сказал спасибо: 2,417
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: CodevisionAVR си

Будет переполнение и старшая часть отбросится. При умножении на 100 и 1000.
baiderin вне форума  
Сказали "Спасибо" baiderin
Виктор_М (29.01.2021)
Непрочитано 29.01.2021, 21:42  
DmitriyVDN
Гражданин KAZUS.RU
 
Регистрация: 10.06.2010
Сообщений: 586
Сказал спасибо: 222
Сказали Спасибо 232 раз(а) в 152 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: CodevisionAVR си

Сообщение от Виктор_М Посмотреть сообщение
То есть компилятор не будет правильно считать в случае если переменная a типа char
Код:
int ADC;
ADC = a * 100;
если a сделать типа int то всё будет корректно работать.
Правильно?
именно в такой записи без разницы какой будет тип у а , результат будет int тк ADC у вас int.
но в длинной записи при сложении нескольких выражений, для каждого выражения создается временная переменная размерностью членов выражения
У вас "a" (тип char) * 1000 ( тип int) результат будет int.
"a" (тип char) * 100 и 10 (тип char) результат будет char , старший бит буде отброшен,
но если вы принудительно укажите размерность или для выражения, или просто для константы 100U или 10U результат уже будет int .

грабли можно обойти изменив настройки компилятора , поставив птицы в эти пункты
Миниатюры:
Нажмите на изображение для увеличения
Название: компиль.jpg
Просмотров: 0
Размер:	180.0 Кб
ID:	160331  
DmitriyVDN на форуме  
Сказали "Спасибо" DmitriyVDN
Виктор_М (30.01.2021)
Непрочитано 30.01.2021, 00:08  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,792
Сказал спасибо: 2,912
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: CodevisionAVR си

А потом все эти "%" и "/" будут вставлены в обработчик прерывания и... курсант Виктор_М попробует поднять эту халабуду в воздух.
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Эти 2 пользователя(ей) сказали Спасибо ForcePoint за это сообщение:
j-Roger (30.01.2021), Виктор_М (30.01.2021)
Непрочитано 30.01.2021, 06:29  
Виктор_М
Прописка
 
Регистрация: 07.01.2010
Сообщений: 104
Сказал спасибо: 60
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Виктор_М на пути к лучшему
По умолчанию Re: CodevisionAVR си

Сообщение от ForcePoint Посмотреть сообщение
А потом все эти "%" и "/" будут вставлены в обработчик прерывания и... курсант Виктор_М попробует поднять эту халабуду в воздух.
Есть поднять в воздух халабуду!

Последний раз редактировалось Виктор_М; 30.01.2021 в 06:32.
Виктор_М вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на CodeVisionAVR не работает правильно до конца Orgrimys AVR 9 23.01.2018 23:53
CodeVisionAVR ошибка подключаемой библиотеки AssemblerRu Микроконтроллеры, АЦП, память и т.д 1 25.02.2017 20:44
Помогите собрать исходники в проект CodeVisionAVR Dimitrij Микроконтроллеры, АЦП, память и т.д 4 28.12.2011 03:40
Расчет восхода/захода солнца в CodeVisionAVR C Compiler IOPA4 Микроконтроллеры, АЦП, память и т.д 4 15.02.2009 20:47
Библиотеки для CodeVisionAVR dimonbest Proteus, KiCAD и другие ECAD 2 17.05.2007 00:00


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


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