Страница 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
Это ж двоичное. А надо десятичное. Может ошибаюсь?
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
вывести получилось, только надо что бы вывод был младшим байтом вперёд?