Запись чисел больше 255 и преобразование их в 10й вид.

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
Severrr
Встал на лапы
Сообщения: 124
Зарегистрирован: Ср ноя 26, 2014 08:42:24
Откуда: г. Уфа

Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение Severrr »

Я недавно начал изучать программирование на ассемблере для PIC.
Даже спаял для этого дела простой JDM, потом экстра пик.
Дрыгать ногами научился, с прерываниями разобрался, циклами задержек и т.п.
Но не догоняю, как инкрементировать счетчик в двоичном виде до числа более 255. Знаний не хватает из-за нехватки времени на изучение без помощи.
Понимаю, что для этого нужно от 2-х байт и более. Пусть будет 2 байта к примеру мне нужен счетчик до 10 000.

Затем содержимое этих регистров нужно преобразовать в десятичный вид для отображения на 4-х разрядном семисегментном индикаторе.
Как я думаю, двоичное число нужно раскидать по регистрам десятки тысяч, тысячи, сотни, десятки и единицы. Но как это сделать не могу найти.
Найти код asm разжованый, чтобы можно было понять суть процесса записи большого числа в двоичном виде и преобразования его в десятичный.

Для знающих людей это очень простой вопрос. Наверняка у кого-то это есть в качестве блока программы (макроса), который просто втыкается во время написанию очередной прошивки для очередного девайса.

В общем, товарищи, если есть такой код разжеваный, в котором можно разобраться новичку, если не жалко, скиньте пожалуйста.
Если у вас что-то не получается, надо притвориться, что вы умеете это делать. Если дурить себе голову достаточно долго, то когда-нибудь у вас начнет получаться, и тогда можно забыть, что вы притворялись. /Юрий Мороз
Реклама
Реклама
Аватара пользователя
Severrr
Встал на лапы
Сообщения: 124
Зарегистрирован: Ср ноя 26, 2014 08:42:24
Откуда: г. Уфа

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение Severrr »

Спасибо за ссылку, кое-что начало проясняться.

Но там не особо разжевано.
Вопрос такой:
Мне нужно записать число, к примеру 557, в регистры bin1 и bin2.
Как объединить эти 2 регистра в 16 бит?

допустим я указал в шапке эти регистры

bin1 equ 0dh;
bin2 equ 0ch;

Дальше мне нужно записать в них 557.
Какой код будет?
Если у вас что-то не получается, надо притвориться, что вы умеете это делать. Если дурить себе голову достаточно долго, то когда-нибудь у вас начнет получаться, и тогда можно забыть, что вы притворялись. /Юрий Мороз
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение uldemir »

Если пишешь на ассемблере, то никак - просто резервируй две ячейки памяти.
Severrr писал(а):Дальше мне нужно записать в них 557.

Код: Выделить всё

movlw  low 557
movwf  bin2
movlw  high 557
movwf  bin1    ; просто обычно принято младший байт расмещать в младшем адресе, но не принципиально
; теперь инкремент
incf      bin2, f  ; увеличиваем младший байт
btfsc    status, c  ; если не произошло переполнение, то следующую операцию пропускаем
incf      bin1, f   ; если младший переполнился, то и старший
disclaimer: в приведённом коде могут быть ошибки, так как не проверялось, но идея, надеюсь понятна.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Severrr
Встал на лапы
Сообщения: 124
Зарегистрирован: Ср ноя 26, 2014 08:42:24
Откуда: г. Уфа

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение Severrr »

uldemir писал(а): не проверялось, но идея, надеюсь понятна.
а low и high - это что такое?
Если у вас что-то не получается, надо притвориться, что вы умеете это делать. Если дурить себе голову достаточно долго, то когда-нибудь у вас начнет получаться, и тогда можно забыть, что вы притворялись. /Юрий Мороз
Реклама
Аватара пользователя
Severrr
Встал на лапы
Сообщения: 124
Зарегистрирован: Ср ноя 26, 2014 08:42:24
Откуда: г. Уфа

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение Severrr »

Псмотрел инкремментирование на калькуляторе в бинарном виде, опираясь на предоставленный код и вкурил сразу. Идея на самом деле стала ясной и понятной. Огромное спасибо uldemir!
Последний раз редактировалось AlekseyEnergo Сб дек 27, 2014 20:53:35, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Предупрежден!
Если у вас что-то не получается, надо притвориться, что вы умеете это делать. Если дурить себе голову достаточно долго, то когда-нибудь у вас начнет получаться, и тогда можно забыть, что вы притворялись. /Юрий Мороз
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение dosikus »

uldemir писал(а):

Код: Выделить всё

movlw  low 557
movwf  bin2
movlw  high 557
movwf  bin1    ; просто обычно принято младший байт расмещать в младшем адресе, но не принципиально
disclaimer: в приведённом коде могут быть ошибки, так как не проверялось, но идея, надеюсь понятна.
Это не просто ошибки это вопиющий бред .
Максимальное значения для 8ми бит ?
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение uldemir »

low и high директивы выделяющие из числа младший и старший байт. Можно самому написать

Код: Выделить всё

movlw 2
movwf bin1
movlw 45
movwf bin2
Но это не наглядно. Не понятно откуда взялись эти числа.

Можно писать по-иному:

Код: Выделить всё

movlw 557 >> 8 ; число сдвигаем вправо на 8 позиций (или делим на 256)
...
movlw 557 & 0xff ; маской выбираем только младшие 8 бит
...
Но все эти вычисления выполняются только на этапе компиляции и код генерят абсолютно одинаковый.
dosikus писал(а):Это не просто ошибки это вопиющий бред .
Пруф? Возможно, я не правильно назвал эти функции - недавно сменил MPLAB c 8-го на Х и не умею быстро сделать пустой проект для проверки. Возможно надо писать low(557) и high(557), но суть от этого не меняется.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение dosikus »

uldemir , не прибавляй минусов к своей карме ламера.
Это не функции а команды ассемблера - это раз , максимально в ячейку памяти влезет число 255( 0xFF) -это два...
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение uldemir »

Можешь мне добавить к карме ламера своих минусов. Возможно, я немного ошибаюсь в терминологии, что считать директивами, что функциями итп. Но суть не меняется - речь как раз и идёт о том как работать с числами больше 255, т.е. как их раскидать по двум байтам.

И в чем ошибка? Неужели число high(557) больше чем 255?
Вот листинг из первого попавшегося проекта:

Код: Выделить всё

0157   3040           00606         MOVLW   LOW(CHAR3IMG)
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0158   008D           00607         MOVWF   EEADRL
0159   300F           00608         MOVLW   HIGH(CHAR3IMG)
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
015A   008F           00609         MOVWF   EEADRH
......

0F40                  01702 CHAR3IMG:
....
Errors   :     0
Warnings :     0 reported,     0 suppressed
Messages :   172 reported,     0 suppressed

Как видите, сообщений об ошибке нет.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение ploop »

Это не функции а команды ассемблера
Всю жизнь были директивами препроцессора.
максимально в ячейку памяти влезет число 255( 0xFF) -это два
У пиков всего одна ячейка памяти? :shock:
Аватара пользователя
Severrr
Встал на лапы
Сообщения: 124
Зарегистрирован: Ср ноя 26, 2014 08:42:24
Откуда: г. Уфа

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение Severrr »

Ну главное я понял, а о назначении старшего и младшего байтов можно разобраться и самому. Про low и High я догадался, не смотря на неверное написание кода. Кстати нашел и то как переводить двоичный код в двоично-десятичный. Так, что ответ uldemir оказался полезным в любом случае.

Поправлюсь. Написание кода скорее всего наоборот верное. Проверить нет пока возможности.
Последний раз редактировалось AlekseyEnergo Пн дек 29, 2014 16:29:45, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал.
Если у вас что-то не получается, надо притвориться, что вы умеете это делать. Если дурить себе голову достаточно долго, то когда-нибудь у вас начнет получаться, и тогда можно забыть, что вы притворялись. /Юрий Мороз
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15573
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение BOB51 »

На данную тему существует целая куча юзерс гвиде от микрошипа, огромное количество приложений по двоичной/двоично - десятичной математике и море вариантов преобразоваий. Притом, что все варианты будут верными...
Просто нужно выбрать наиболее оптимальный для конкретного случая (обусловленно системой команд, временем исполнения и наличным ресурсом ОЗУ)
8)
С ассемблером могу помочь - но только под конкретную схему и/или задачку с конкретной схемкой - остальное есть "перемалывание в ступе" предположений... :beer:

Ну и dosiKUS как всегда "КУСЬ!" 8)
Аватара пользователя
Severrr
Встал на лапы
Сообщения: 124
Зарегистрирован: Ср ноя 26, 2014 08:42:24
Откуда: г. Уфа

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение Severrr »

BOB51 писал(а): Притом, что все варианты будут верными...
Просто нужно выбрать наиболее оптимальный для конкретного случая (обусловленно системой команд, временем исполнения и наличным ресурсом ОЗУ)
Есть варианты с циклами вычитаний из исходного бинарного числа для вычисления тысяч, сотен и тд. Но в этом случае длительность выполнения команд зависит от самого исходного числа. Есть ли код, длительность выполнения которого не зависит от этого числа?
Если у вас что-то не получается, надо притвориться, что вы умеете это делать. Если дурить себе голову достаточно долго, то когда-нибудь у вас начнет получаться, и тогда можно забыть, что вы притворялись. /Юрий Мороз
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение uldemir »

Есть (там дальше и сама ссылка) в 526-й аппноте от микрочипа. Там, кстати, есть и многие другие примеры операций с 8-ми и 16-ти битными числами. Принцип прост: в БКД логике производится умножение на 2 по маске аргумента.
Аватара пользователя
Severrr
Встал на лапы
Сообщения: 124
Зарегистрирован: Ср ноя 26, 2014 08:42:24
Откуда: г. Уфа

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение Severrr »

uldemir писал(а): умножение на 2 по маске аргумента.
Как раз этот код Eddy71 в первом же ответе скинул. Только я пока въехать в этот принцип до конца не могу. Разбираюсь потихоньку.
Спасибо всем огромное. Вы сократили мне время на поиски истины в разы. Еще один кирпичик почти освоен.
Если у вас что-то не получается, надо притвориться, что вы умеете это делать. Если дурить себе голову достаточно долго, то когда-нибудь у вас начнет получаться, и тогда можно забыть, что вы притворялись. /Юрий Мороз
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение uldemir »

Тот код все приводят и иногда даётся ссылка на источник. Но нигде не написан принцип работы. В своё время удалось найти по ключевому слову "метод левого сдвига". Ну это если хочется разобраться. А если использовать, то лучше использовать готовую подпрограмму - там уже все такты вылизаны и что-нибудь оптимальнее придумать сложно.
E71

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение E71 »

Присоединюсь к совету использовать вылизаные библиотеки. Вот тут просто клад из них. Из разных областей полезности.

http://www.piclist.com/techref/microchip/routines.htm
Аватара пользователя
Severrr
Встал на лапы
Сообщения: 124
Зарегистрирован: Ср ноя 26, 2014 08:42:24
Откуда: г. Уфа

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение Severrr »

Eddy71 писал(а):Вот тут просто клад из них
Офигенная ссылка! Коды с пояснениями и искать нужный код очень просто - красота!
Одно из самых дорогих вещей в жизни - это время. Спасибо всем на форуме, что Вы его находите чтобы помочь другим! :))
Если у вас что-то не получается, надо притвориться, что вы умеете это делать. Если дурить себе голову достаточно долго, то когда-нибудь у вас начнет получаться, и тогда можно забыть, что вы притворялись. /Юрий Мороз
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Запись чисел больше 255 и преобразование их в 10й вид.

Сообщение Albert_V »

Извиняюсь, если эти библиотеки - "повтор".
Вложения
Match.rar
(86.7 КБ) 172 скачивания
С Уважением, Альберт (Albert_V).
Ответить

Вернуться в «PIC»