Страница 1 из 1

Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 00:36:10
Gef79
Добрый день всем!
Вообщем стоит задача:
Преобразовать 10 число в двоичное и вывести это число в порт!
Ребят очень нужно!

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 01:03:23
s64
Не совсем понятно ПРЕОБРАЗОВАТЬ, если это про МК, так в нем числа и так в двоичном виде, это ваша среда разработки показывает вам числа в удобном формате.

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 01:05:33
Финский
PORTx = num;
или
ldi R16, num
out PORTx, R16

где num - число от 0 до 255

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 01:14:17
Gef79
есть допустим число 12345 в десятичьном виде, его нужно преобразовать в бинарный вид и вывести по одному порту, тоесть последовательный вывод! Я так понял, что как то нужно сформировать массив и записать туда преобразование, а потом вывести этот массив побитно! Желательно на С, так как в асме не силён!

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 01:23:10
s64
если исходить из того, что число Unsigned int, то
PORTx = num;// младший байт
PORTx = num >> 8;// старший байт

где num - число от 0 до 0xffff

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 01:29:58
BCluster
По одному биту в одну ногу вывести чтоле?
Если да то (третья нога порта B в данном случае. контроллер AVR)

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

while (myNum)
{
     if (myNum&0x01)
          PORTB |= (1<<3);
     else
          PORTB &= ~(1<<3);
     myNum>>=1;
     delay_ms(100); // тут пауза которой собственно задаем длительность каждого импульса
}

а ваще телепаты в отпуске ) ни какой контроллер, ни какой компилятор, ни какие задержки нихрена не написано

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 01:32:15
SmarTrunk
Ни какая разрядность десятичного и двоичного чисел, ни какой порт (хотя, теперь ясно, что какой-то последовательный (?) ).

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 01:39:55
Gef79
Сорри! Контроллер мега8, компилятор CodeVision, в двоичном 24 разряда, задержка между битами 50 мкс
Допустим вывод через портС.1

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 12:11:18
BCluster
см выше я пример написал, или поменять порт и ногу самостоятельно никак?

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 12:41:51
BCluster
Если кодвижн можно ваще проще сделать

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

while (myNum)
{
     PORTC.1 = myNum&0x01;
     myNum>>=1;
     delay_ms(50); // тут пауза которой собственно задаем длительность каждого импульса
}

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 14:14:47
pyzhman

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

myNum
.
.
.
myNum>>=1;

Это ж двоичное. А надо десятичное. Может ошибаюсь?

Re: Преобразование чисел! Хелп!

Добавлено: Сб янв 07, 2012 14:57:05
BCluster
pyzhman писал(а):Это ж двоичное. А надо десятичное. Может ошибаюсь?

Что-то в последнее время часто вижу такие реплики. Любое число в МК в итоге будет двоичным.
В компиляторе по дефолту используются десятичные числа. Я не знаю даже как сформулировать то что я хочу сказать, но попробую объяснить...

Есть десятичное число 201 скажем. В бинарном это будет 11001001.
Сдвиг (>>) это бинарная операция. Также как и побитовое И (&). То есть если к десятичному числу применить бинарную операцию компилятор будет с ним работать как с бинарным уже.
Задача в чем стоит. Вывести вот это число - 201 в ногу порта. последовательно.
Следовательно что мы делаем.
Берем последний бит числа - 342&1. В бинарном виде это будет 11001001 & 00000001. (((ТУТ надо ввести корректировку в мой код, для чисел больше байта могут быть проблемы)))
В результате получим "1". Выводим эту единичку в ногу порта.
Далее делаем сдвиг нашего числа вправо на 1 разряд. В результате получим 1100100
И далее все по новой пока не пройдем все число.

Теперь насчет корректировки.
PORTC.1 = myNum&0x01;
заменить на
PORTC.1 = myNum&0x01UL;

В таком случае можно будет работать с числами до 32 бит.

Re: Преобразование чисел! Хелп!

Добавлено: Вс янв 08, 2012 01:11:56
Gef79
Спасибо за ответы! Блин потёк аквариум, залил таймер, занимался ремонтом! Завтра опробую и отпишусь.

Re: Преобразование чисел! Хелп!

Добавлено: Вс янв 08, 2012 14:12:30
Gef79
вывести получилось, только надо что бы вывод был младшим байтом вперёд?