roboforum.ru

Технический форум по робототехнике.


Преобразования 16 bit to 5 digit ASCII

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение Duhas » 16 июл 2013, 10:50

у меня студент написал HEX2ASCII для N байтного числа ) ассемблером занимался меньше семестра.. притом с оптимизацией через подобие десятичной коррекции
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение dccharacter » 16 июл 2013, 11:20

А, я ж забыл. Я вообще ленивый, я ж только sprintf-ами пользуюсь :-)))
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение Duhas » 16 июл 2013, 11:23

скоро чтоб крутить шаговик понадобится пара ядер и пара гигагерц ))
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение arm-17 » 17 июл 2013, 00:20

Прошел дебагером в AVR4 не доходя курсором до rcall bin16_ascii число в r16 - 0xE1 (245) все правильно. После прерывания INT1 Back:;(отнять) 0x36 (54),а мне надо 244((((

Добавлено спустя 11 минут 37 секунд:
Я так понял этот код перевода в двоично-десятичное, а мне надо перевод в ASKII.
Аватара пользователя
arm-17
 
Сообщения: 46
Зарегистрирован: 15 июл 2013, 15:15
Откуда: г.Москва
прог. языки: ASM

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение Dmitry__ » 17 июл 2013, 01:04

Еще не бросил? :)
Дебагер - штука хорошая для смотрения как работает чужая программа, т.к. обычно, что-либо понять в чужой программе по исходникам трудно.
Жмем пошаговую отладку "f11".
Установка стека - нужная вещь.
Дальше настройка портов, нахненадо для понимания (потом закомментируем, а лучше сделаем jmp на нужную нам функцию).
Дальше идет настройка прерываний и разрешение прерываний. Вот это потом отключим, чтоб прога не дергалась в ненужные места.

Ща, пожру - продолжим, не пишите ничего... :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение arm-17 » 17 июл 2013, 01:15

Да я азы программирования знаю. Может ближе к делу. )))
Аватара пользователя
arm-17
 
Сообщения: 46
Зарегистрирован: 15 июл 2013, 15:15
Откуда: г.Москва
прог. языки: ASM

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение dccharacter » 17 июл 2013, 01:19

Цыц! Ты тут не один :-)
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение arm-17 » 17 июл 2013, 01:50

:)

Добавлено спустя 27 минут 5 секунд:
dccharacter не выдержал,а я еще жду:)
Аватара пользователя
arm-17
 
Сообщения: 46
Зарегистрирован: 15 июл 2013, 15:15
Откуда: г.Москва
прог. языки: ASM

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение Dmitry__ » 17 июл 2013, 02:20

arm-17 писал(а):Да я азы программирования знаю. Может ближе к делу. )))

Ща доедем, я в онлайне разбираюсь с твоей программой, т.е. не смотрел ее до этого :)

Продолжим:
Доехали до Inf и rjmp Inf, приплыли, хрень, выходим из дебагера :)

Смотрим прогу, видим какой-то Forward:;(ПРИБАВИТь), что как бэ намекает, ок после настройки стека добавляем: rjmp Forward, компилим, запускаем дебагер.
4 раза f11 и мы уже на месте.
Видим "inc temp", ставим курсор на temp и появляется подсказка, что это r16.
На моем скриншоте регистры уже видны при дебаженье, если нет то в view/register.
Кликаем на r16 и записываем туда 23, жмем f11, регистр прибавляет единицу как и положено.
Тут задаем себе вопрос: "если я знаю азы программирования, почему я не могу сам проверить" :)
доезжаем до rcall bin16_ascii.
Жмем f11, еще раз, пипец, еще f11, пипец, еще f11, пипец, разрыв шаблона, ладно жмем дальше, все зациклилось на _bcd4, вручную будет долго, ладно, ставим точку останова после "brcs _bcd4", жмем run (f5), остановились на breakpoint,
какой-то "push temp", какой-то "pop temp". Ладно добираемся до ret, он хоть есть. Опс, вывалились на какой-то "reti ;выход из обработчика", хм, глюк? делаем reset, жмем run ( у нас стоит точка останова в нужном месте). Медленно жмем f11, какой-то "push temp", какой-то "pop temp". Опять reti. Чозанах?
Ага, "Forward:" оказался куском прерывания, и bin16_ascii тож в прерывании вызывается. Ой, они же меняют кучу регистров, а я их нигде не сохранял при вызове прерывания, бедная основная программа, она и не знает, что регистры искажаются в прерывании как хотят :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение arm-17 » 17 июл 2013, 02:26

Да точно искажаются. может push temp1
temp2
temp3 ПОМОЖЕТ?
Аватара пользователя
arm-17
 
Сообщения: 46
Зарегистрирован: 15 июл 2013, 15:15
Откуда: г.Москва
прог. языки: ASM

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение Dmitry__ » 17 июл 2013, 02:57

Так у тебя в bin16_ascii используется куча регистров:R17, R16, R20, R18, R19, R17, R16 и она вызывается в прерывании, соотв. все эти регистры искажаются в основной прогр.
Пока у тебя основная программа использует только temp1, но это бред так размазывать регистры в прерывании. В прерывании должно быть только обработка кнопок, событий, после чего выставить флаг, который проверит основная программа и запустит этот bin16_ascii.
Тут как бы понятно, надо переделать, но сам bin16_ascii смешной какой-то до ужаса, можно разобраться конечно, но не стоит. Лучше скопипастить из ссылки выше
http://electroclub.fatal.ru/RusAVR/Doc/Examples/BINBCD/BINBCDapp2.htm
и прогнать его в дебагере. Вручную заводить числа, прогнать и сравнить результат с калькулятором. Если все ок, то сложить этот алгоритм себе в копилку и больше не возвращаться к этому вопросу.
По поводу двоичнодесятичного и ascii кода. Двоичнодесятичный код - это цифры от 0 до 9 в 2-х тетрадах байта, т.е. один байт = 99. Чтоб это превратить в ascii, надо к ascii коду "0" (0x30) прибавить нужную тетраду и все. Т.е. Берем младшую тетраду байта, обнуляем старшие 4 бита байта, прибавляем "0" отсылаем на индикатор, берем старшую тетраду свапаем ее в младшую тетраду, обнуляем старшие 4 бита байта, прибавляем "0", otsylaem na indikator.
Не совсем понятна задача, но если кроме счетчика ничего не будет, то можно вообще крутить счетчик в ascii коде.
Inc будет: прибавить единицу к младшему разряду, если младший разряд меньше или = "9" (в ascii коде), то выход, иначе: младший разряд = "0" и прибавляем единицу к след. разряду. Если текущий разряд меньше или = "9", то выход, и.т.д.
Но этот способ ущербный, т.к. когда программа начнет разрастаться это будет жуткий расход ресурсов.
Но, так пишут программы, вот тут я срал кирпичами по этому поводу :)
http://roboforum.ru/forum2/topic10252.html
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение Angel71 » 17 июл 2013, 03:49

хех, а ведь давно уже можно было и с си немного освоиться, сделать и забыть про этот простенький конвертер. в варианте для ленивых, просто позаимствовать код.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение Dmitry__ » 17 июл 2013, 04:04

Говорилось уже, в 2313 всего 1к слов программы. Вот сейчас с отключенными всеми функциями программа занимает 8%. Да и не добрались мы еще до самого алгоритма. Выпиливаем общие ошибки.
Доверять библиотекам и не знать двоичной системы счисления - это как минимум нельзя себя называть программистом :wink:
Ну уж точно embedded программистом, а вы знаете алгоритм десятичной коррекции? А вы себя называете программистом? :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение Angel71 » 17 июл 2013, 04:43

да, но не упоминалось, что нельзя взять другой чип. про daa и das, пардон это неудачная шутка.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Преобразования 16 bit to 5 digit ASCII

Сообщение Dmitry__ » 17 июл 2013, 04:59

Не поверишь, я так и думал, что ты так ответишь :D

Добавлено спустя 1 минуту 34 секунды:
Angel71 писал(а):про daa и das, пардон это неудачная шутка.

Не понял, про что это?
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14