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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Gef79
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср дек 15, 2010 16:49:44

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

Сообщение Gef79 »

Добрый день всем!
Вообщем стоит задача:
Преобразовать 10 число в двоичное и вывести это число в порт!
Ребят очень нужно!
s64
Потрогал лапой паяльник
Сообщения: 321
Зарегистрирован: Пн окт 18, 2010 21:18:21

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

Сообщение s64 »

Не совсем понятно ПРЕОБРАЗОВАТЬ, если это про МК, так в нем числа и так в двоичном виде, это ваша среда разработки показывает вам числа в удобном формате.
Аватара пользователя
Финский
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб авг 28, 2010 13:29:43
Откуда: Докучаевск, Донецк
Контактная информация:

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

Сообщение Финский »

PORTx = num;
или
ldi R16, num
out PORTx, R16

где num - число от 0 до 255
[color=#800000]Техноманьяк и IT-шаман. Танцы с бубном на дому.[/color]
Gef79
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср дек 15, 2010 16:49:44

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

Сообщение Gef79 »

есть допустим число 12345 в десятичьном виде, его нужно преобразовать в бинарный вид и вывести по одному порту, тоесть последовательный вывод! Я так понял, что как то нужно сформировать массив и записать туда преобразование, а потом вывести этот массив побитно! Желательно на С, так как в асме не силён!
s64
Потрогал лапой паяльник
Сообщения: 321
Зарегистрирован: Пн окт 18, 2010 21:18:21

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

Сообщение s64 »

если исходить из того, что число Unsigned int, то
PORTx = num;// младший байт
PORTx = num >> 8;// старший байт

где num - число от 0 до 0xffff
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

По одному биту в одну ногу вывести чтоле?
Если да то (третья нога порта B в данном случае. контроллер AVR)

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

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

а ваще телепаты в отпуске ) ни какой контроллер, ни какой компилятор, ни какие задержки нихрена не написано
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

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

Сообщение SmarTrunk »

Ни какая разрядность десятичного и двоичного чисел, ни какой порт (хотя, теперь ясно, что какой-то последовательный (?) ).
Gef79
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср дек 15, 2010 16:49:44

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

Сообщение Gef79 »

Сорри! Контроллер мега8, компилятор CodeVision, в двоичном 24 разряда, задержка между битами 50 мкс
Допустим вывод через портС.1
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

см выше я пример написал, или поменять порт и ногу самостоятельно никак?
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

Если кодвижн можно ваще проще сделать

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

while (myNum)
{
     PORTC.1 = myNum&0x01;
     myNum>>=1;
     delay_ms(50); // тут пауза которой собственно задаем длительность каждого импульса
}
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

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

myNum
.
.
.
myNum>>=1;

Это ж двоичное. А надо десятичное. Может ошибаюсь?
Docendo discimus
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

pyzhman писал(а):Это ж двоичное. А надо десятичное. Может ошибаюсь?

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

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

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

В таком случае можно будет работать с числами до 32 бит.
Gef79
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср дек 15, 2010 16:49:44

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

Сообщение Gef79 »

Спасибо за ответы! Блин потёк аквариум, залил таймер, занимался ремонтом! Завтра опробую и отпишусь.
Gef79
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср дек 15, 2010 16:49:44

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

Сообщение Gef79 »

вывести получилось, только надо что бы вывод был младшим байтом вперёд?
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»